如果方法和變量都具有相同的名稱,它將使用該變量。方法和變量名稱相同
hello = "hello from variable"
def hello
"hello from method"
end
puts hello
是否有可能以某種方式使用該方法而不更改名稱?
如果方法和變量都具有相同的名稱,它將使用該變量。方法和變量名稱相同
hello = "hello from variable"
def hello
"hello from method"
end
puts hello
是否有可能以某種方式使用該方法而不更改名稱?
試試這個:
puts hello()
沒錯,但請詳細說明爲什麼使用圓括號表示這項工作 – Zabba 2010-09-19 05:46:52
因爲您明確調用方法。更好的是,你知道,首先使用不同的名字... – 2010-09-20 00:26:35
puts self.hello
順便說一句,我同意與Henrik P. Hessel的。 這是一段非常可怕的代碼。
局部變量和方法之間的歧義僅出現在沒有參數列表的無接收者消息發送中。所以,解決的辦法是顯而易見的:要麼提供一個接收器或參數列表:
self.hello
hello()
參見
完美的答案。 – Zabba 2010-09-19 05:41:12
這是一個多一條評論答案,但區分局部變量和方法對於使用賦值方法至關重要。
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
謝謝你,這正是給我的麻煩。 – 2013-12-11 16:42:11
爲什麼要這樣做? – 2010-09-18 11:50:06
@Henrik:我想更好地瞭解ruby – 2010-09-18 12:08:46
松本幸弘(Ruby的創造者)在一本名爲「Ruby In A Null Shell」的書中提到了這件事(在許多其他偉大的事情中)。由O'Reilly出版)。這本書非常適合回答你提出的問題的深度。 – Zabba 2010-09-19 05:43:15