2011-06-06 22 views
5

¡Hola a todos! Me preguntaba cómo funcionan los métodos en Ruby que no se llaman con la sintaxis ClassName.method_name. Algunos de la parte superior de mi cabeza son puts, print, gets, chomp. Estos métodos se pueden invocar sin usar el operador de punto. ¿Por qué es esto? ¿De dónde vienen? ¿Y cómo puedo ver la lista completa de tales métodos?¿Métodos de Ruby sin clase?

Respuesta

8

Todos los métodos en Kernel estarán disponibles para todos los objetos de la clase Object o cualquier clase derivada de Object. Puede usar Kernel.instance_methods para listarlos.

+0

muchas gracias :) – Kvass

+1

No exactamente correcto, ya que estarán disponibles para los objetos cuyas clases subclases 'Obejct'. Las instancias de clases basadas en 'BasicObject' no tendrán métodos' Kernel'. –

+1

@ Marc-André: ¡Gracias! Corregido –

1

Vienen del módulo Kernel que se incluye automáticamente para cada clase. Esos

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

Even short: 'Class.new.included_modules'. :-) –

+0

@chris: absolutamente :) – xinit

+2

Lo sentimos, pero "automáticamente incluido" puede ser engañoso, y no es del todo correcto ... Es engañoso porque suena como si la acción de incluir 'Kernel' fuera hecha por Ruby, pero es simplemente porque las nuevas clases tienen 'Object' como ancestro, y' Object' incluye 'Kernel'. Incluya cualquier otro módulo en 'Objeto' y obtendrá el mismo efecto; no hay nada especial sobre 'Kernel'. No es del todo correcto porque las clases subclasificadas de 'BasicObject' no tendrán' Kernel' incluido. –

Cuestiones relacionadas