2010-09-18 197 views
9

如果方法和變量都具有相同的名稱,它將使用該變量。方法和變量名稱相同

hello = "hello from variable" 

def hello 
    "hello from method" 
end 

puts hello 

是否有可能以某種方式使用該方法而不更改名稱?

+3

爲什麼要這樣做? – 2010-09-18 11:50:06

+9

@Henrik:我想更好地瞭解ruby – 2010-09-18 12:08:46

+2

松本幸弘(Ruby的創造者)在一本名爲「Ruby In A Null Shell」的書中提到了這件事(在許多其他偉大的事情中)。由O'Reilly出版)。這本書非常適合回答你提出的問題的深度。 – Zabba 2010-09-19 05:43:15

回答

12

試試這個:

puts hello() 
+0

沒錯,但請詳細說明爲什麼使用圓括號表示這項工作 – Zabba 2010-09-19 05:46:52

+2

因爲您明確調用方法。更好的是,你知道,首先使用不同的名字... – 2010-09-20 00:26:35

1
puts self.hello 

順便說一句,我同意與Henrik P. Hessel的。 這是一段非常可怕的代碼。

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 
+1

謝謝你,這正是給我的麻煩。 – 2013-12-11 16:42:11

相關問題