我试图在我的 MacRuby 项目中使用外部 Obj-C 类,但我不知道如何导入它。具体来说,我想在 MacRuby 0.5 项目中使用 ObjectiveResource(因为 ActiveResource 还不起作用)。
我已经了解了 MacRuby 中的“框架”命令,但它似乎只适用于实际框架。
问题:我应该在哪里安装目标资源目录?如何在我的 ruby 代码中提取这些类?
谢谢你的帮助!
我试图在我的 MacRuby 项目中使用外部 Obj-C 类,但我不知道如何导入它。具体来说,我想在 MacRuby 0.5 项目中使用 ObjectiveResource(因为 ActiveResource 还不起作用)。
我已经了解了 MacRuby 中的“框架”命令,但它似乎只适用于实际框架。
问题:我应该在哪里安装目标资源目录?如何在我的 ruby 代码中提取这些类?
谢谢你的帮助!
您可以使用 ClassName.new 直接访问该类。
如果你的项目中有一个名为 Utilities 的类,并且它有一个名为 greeting: 的方法,你可以这样称呼它。
util = Utilities.new
puts util.greeting("Good morning")
不需要要求或框架声明。是不是非常简单。我在 MacRuby 上观看Peepcode截屏视频时发现了这一点。
此外,如果您有兴趣从 Objective-c 调用 Ruby 代码,这里是 MacRuby 邮件列表的摘录:
初始化 MacRuby 运行时后,您可以从 Ruby 访问所有 Objective-C 对象。例如,如果你有一个名为 Foo 的 Objective-C 类,你可以做 `Foo.new' 等等。
另一种可能性是通过使用将您的 Objective-C 对象传递给 Ruby 方法[NSObject performRubySelector:]
。
红宝石:
class Foo
def test(o)
o.something
end
end
对象:
MyObject *o = [MyObject new]; // where o responds to -something
MacRuby *runtime = [MacRuby sharedRuntime];
id foo_obj = [runtime evaluateString:@"new Foo"];
[foo_obj performRubySelector:@selector(test:) withArguments: o, NULL];
在此处查看整个 API:http: //www.macruby.org/trac/browser/MacRuby/trunk/include/ruby/objc.h
主题: http: //lists.macosforge.org/pipermail/macruby-devel/2010-April/004715.html
(编辑)也就是说,也许最简单的方法是为您的 ruby 文件添加一个头文件,其中包含您的方法等价物。
假设你有这个 ruby 类:
class Foo
def bar(moo)
"a string like #{moo}"
end
end
所以等效的头文件将是这样的:
@interface Foo : NSObject
- (NSString *)bar:(NSString *)moo
@end
现在,只是#import
标题,并在您的 Obj-C 代码中使用您的 ruby 类作为标准 Obj-C 类:
NSString *aString;
Foo *myFoo;
aString = [myFoo bar:@"me"];
这可能看起来很奇怪,但它确实有效。本质上,这个想法是让编译器闭上嘴,让它编译你的代码,而不抱怨缺少方法。然后,在运行时,它会正常工作(我想这要归功于 Obj-C 本身的动态特性)。顺便说一句,为了模仿 ruby 的无类型行为,id 是你在头文件中编写方法签名的朋友。
你看过这个创建 ObjC 包的例子吗?