我一直在使用 MacRuby,并注意到它如何扩展 Ruby 以能够处理 Objective-C 的 Smalltalk 类方法(或消息)签名。乍一看,我认为它看起来很像 Ruby 2.0 的新关键字参数,但进一步检查表明它们以根本不同的方式工作。
我的第一个线索是在阅读GitHub 上的 MacRuby 方法规范时。
it "can have multiple arguments with the same name" do
def @o.doSomething(x, withObject:y, withObject:z); x + y + z; end
@o.should have_method(:'doSomething:withObject:withObject:')
@o.should_not have_method(:'doSomething')
end
据我所知,Ruby 2.0 不允许这种行为,因为该withObject:
部分将用作参数的唯一标识符,因此不能有两个同名。
这是一个无法解决的问题吗?MacRuby 会因此而被迫继续使用 Ruby 1.9 吗?