2011-06-06 19 views
5

Herkese merhaba! Ruby'deki yöntemlerin, ClassName.method_name sözdizimi ile nasıl çağrılmadığını merak ediyordum. Başımın üst kısmındakiler puts, print, gets, chomp. Bu yöntemler nokta operatörü kullanılmadan çağrılabilir. Bu neden? Onlar nereden geliyor? Ve bu tür yöntemlerin tam listesini nasıl görebilirim?Sınıfsız Ruby yöntemleri?

cevap

8

Kernel'daki tüm yöntemler, Object sınıfının tüm nesnelerine veya Object'dan türetilen herhangi bir sınıf için kullanılabilir. Listelemek için Kernel.instance_methods'u kullanabilirsiniz.

+0

çok teşekkür ederim :) – Kvass

+1

Sınıf alt sınıfları "Obejct" olan nesneler için kullanılabilir oldukları için tam olarak doğru değil. 'BasicObject' temelli sınıf örnekleri' Kernel 'yöntemlerine sahip olmaz. –

+1

@ Marc-André: Teşekkürler! Düzeltildi. –

1

Her sınıf için otomatik olarak dahil edilen Kernel modülünden gelirler. Bu

irb(main):001:0> class Foo 
irb(main):002:1> end 
=> nil 
irb(main):003:0> Foo.included_modules 
=> [Kernel] 
+0

daha kısa: 'Class.new.included_modules'. :-) –

+0

@chris: kesinlikle :) – xinit

+2

Üzgünüz, ama "otomatik olarak dahil" yanıltıcı olabilir, ve tam olarak doğru değil ... Yanıltıcı çünkü "Kernel" dahil bir eylem gibi geliyor Ruby tarafından yapılır, ama sadece çünkü yeni sınıflar bir nesne olarak “Nesne” ye sahiptir ve “Nesne”, “Kernel” i içerir. Nesne 'de başka bir modül ekleyin ve aynı etkiyi elde edersiniz; Kernel hakkında özel bir şey yok. Oldukça doğru değil çünkü 'BasicObject' alt sınıfları 'Kernel' içermeyecektir. –