2

我试图在我的 MacRuby 项目中使用外部 Obj-C 类,但我不知道如何导入它。具体来说,我想在 MacRuby 0.5 项目中使用 ObjectiveResource(因为 ActiveResource 还不起作用)。

我已经了解了 MacRuby 中的“框架”命令,但它似乎只适用于实际框架。

问题:我应该在哪里安装目标资源目录?如何在我的 ruby​​ 代码中提取这些类?

谢谢你的帮助!

4

3 回答 3

4

您可以使用 ClassName.new 直接访问该类。

如果你的项目中有一个名为 Utilities 的类,并且它有一个名为 greeting: 的方法,你可以这样称呼它。

util = Utilities.new
puts util.greeting("Good morning")

不需要要求或框架声明。是不是非常简单。我在 MacRuby 上观看Peepcode截屏视频时发现了这一点。

于 2010-05-02T13:30:50.333 回答
3

此外,如果您有兴趣从 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 是你在头文件中编写方法签名的朋友。

于 2010-05-03T02:08:05.813 回答
0

你看过这个创建 ObjC 包的例子吗?

于 2010-03-17T14:04:38.653 回答