如果方法和变量都具有相同的名称,它将使用变量。
hello = "hello from variable"
def hello
"hello from method"
end
puts hello
是否有可能以某种方式使用该方法而不更改名称?
答案 0 :(得分:18)
局部变量和方法之间的模糊性仅出现在没有参数列表的无接收器消息发送中。因此,解决方案显而易见:提供接收器或参数列表:
self.hello
hello()
另见
答案 1 :(得分:13)
试试这个:
puts hello()
答案 2 :(得分:5)
这更多的是评论而非答案,但如果您使用的是分配方法,则区分局部变量和方法至关重要。
class TrafficLight
attr_accessor :color
def progress_color
case color
when :orange
#Don't do this!
color = :red
when :green
#Do this instead!
self.color = :orange
else
raise NotImplementedError, "What should be done if color is already :red? Check with the domain expert, and build a unit test"
end
end
end
traffic_light = TrafficLight.new
traffic_light.color = :green
traffic_light.progress_color
traffic_light.color # Now orange
traffic_light.progress_color
traffic_light.color # Still orange
答案 3 :(得分:1)
puts self.hello
顺便说一句,我同意Henrik P. Hessel的观点。 这是一段非常可怕的代码。