Ruby'de meta programlamayı öğreniyorum ve metod_missing ve define_method ile eksik yöntemleri tanımlamaya çalışıyorum. Beklenmedik davranışlar alıyorum ve bunu açıklayabilir mi diye merak ediyorum. İşte benim sınıftır: ArtıkRuby: neden to_ary'yi çağırıyor?
class X
def method_missing(m, *args, &block)
puts "method #{m} not found. Defining it."
self.class.send :define_method, m do
puts "hi from method #{m}"
end
puts "defined method #{m}"
end
end
bu kod: neden Yakut çağırıyor: ben alamadım ne
method some_method not found. Defining it.
defined method some_method
hi from method some_method
method to_ary not found. Defining it.
defined method to_ary
#<X:0x007fcbc38e5030>
son parçasıdır:
x = X.new
x.some_method
puts
x.some_method
puts
puts x
çıkışını üretir Bir çağrıya to_ary koyar? Ruby neden nesneyi yazdırmak için bir diziye dönüştürmeyi denedi?
Etrafa Googled ve ettikbulundu bu ilgili bağlantılar:
- http://tenderlovemaking.com/2011/06/28/til-its-ok-to-return-nil-from-to_ary/
- http://yehudakatz.com/2010/01/02/the-craziest-fing-bug-ive-ever-seen/
Bunlar da method_missing ve to_ary Sorunlar hakkında konuşmak değil, spesifik olarak koyar to_ary çağırır neden .
Ayrıca bir to_s tanımladığımda, davranışın değişmediğinden de söz etmeliyim, ör.
def to_s
"I'm an instance of X"
end
"koyar x" çıkış
o zaman:method to_ary not found. Defining it.
defined method to_ary
I'm an instance of X
teşekkürler. Bence özünün "to_ary iç kullanım gerçekten Ruby belgelerinde iyi belgelenmemiş" olduğunu düşünüyorum. :) Ben sadece IO.puts belgelerini okudum, açık bir şekilde to_ary'den bahsetmiyorlar, bence bu daha açık olmalıydı. "Ruby Programlama Dili" kitabına işaret ettiğiniz için teşekkür ederiz. –