我在一些代码中发现了一个执行以下操作的方法:
def method1
method1 = [1, 2, 2, 3, 4, 5, 5]
return method1.uniq!
end
ruby如何处理这个问题?我知道这是不好的代码,但红宝石如何知道如何处理'method1.uniq!' ?它应该使用方法还是局部变量?
由于
答案 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
。