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

时间:2011-11-17 20:42:48

标签: ruby

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

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

ruby​​如何处理这个问题?我知道这是不好的代码,但红宝石如何知道如何处理'method1.uniq!' ?它应该使用方法还是局部变量?

由于

2 个答案:

答案 0 :(得分:2)

您可以在终端(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内的局部变量之间的区别。

答案 1 :(得分:0)

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

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