0

我一直在使用 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 吗?

4

1 回答 1

1

关键字参数和交错参数之间的主要区别正如您所猜测的那样;关键字不是方法名称的一部分(Objective-C 中的选择器)。

具体来说,您不能重新排序或删除 Objective-C 方法选择器的某些部分,因为这将命名不同的方法。

这也是为什么每当有人将 Objective-C 方法描述为在每个参数之前都有关键字时,我们 Obj-C 灰胡子的人就会感到毛骨悚然。

您可能会发现与此特定问题相关的问题和答案。布拉德考克斯——Objective-C 的发明者之一——回答了。

于 2013-08-19T22:28:23.523 回答