这个方法名称/局部变量混合会发生什么?

我在一些代码中发现了一个执行以下操作的方法:

def method1 method1 = [1, 2, 2, 3, 4, 5, 5] return method1.uniq! end 

ruby如何处理这个? 我知道这是错误的代码,但ruby如何知道如何处理’method1.uniq!’ ? 它应该使用方法还是局部变量?

谢谢

您可以在终端( irb )中打开ruby会话,输入问题中的代码,然后自己查看结果。

 Loading development environment (Rails 3.1.0) ruby-1.9.2-p290 :001 > def derp ruby-1.9.2-p290 :002?> derp = [1,2,3,3,3] ruby-1.9.2-p290 :003?> derp.uniq ruby-1.9.2-p290 :004?> end => nil ruby-1.9.2-p290 :005 > derp => [1, 2, 3] 

为了回答你的问题,ruby知道方法derp与其范围derp的局部变量之间的derp

如果你defined?(method1)它会告诉你有一个局部变量method1,如果你defined?(method1())它会说有一个方法method1

局部变量和方法之间语法的相似性意味着当您在对象中调用setter方法时,必须执行self.foo = 42