2010-09-18 22 views
9

Hem yöntem hem de değişken aynı ada sahipse, değişkeni kullanır.Yöntem ve değişken adı aynı

hello = "hello from variable" 

def hello 
    "hello from method" 
end 

puts hello 

o adını değiştirmeden yerine yöntemi kullanmak nedense mümkün mü?

+3

Neden kimse bunu yapmalı? –

+9

@Henrik: Ruby'yi daha iyi tanımak istiyorum –

+2

Yukihiro Matsumoto'nun (Ruby'nin yaratıcısı) “Ruby In A Nutshell” adlı kitabında geçen bu çok şey (diğer birçok harika şey arasında); O'Reilly tarafından yayınlanan). Kitap, tam olarak sorduğunuz soruların derinliğini cevaplamak için harika. – Zabba

cevap

12

bu deneyin: Bu arada

puts hello() 
+0

Doğru, ancak lütfen parantezleri kullanmanın neden bu işe yaradığını açıklayın: – Zabba

+2

Açıkça bir yöntemi çağırıyorsunuz. Sadece daha iyi, bilirsin, ilk etapta farklı isimler kullan ... –

1
puts self.hello 

, ben Henrik P. Hessel katılıyorum. Bu çok korkunç bir kod parçasıdır.

5

Bu daha fazla bir yorum olduğunu cevap, ancak bir atama yöntemi kullanıyorsanız, yerel değişkenler ve yöntemler arasında ayrım yapmak çok önemlidir.

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

Bunun için teşekkürler, bu bana sorun veriyordu. –