¿La función de poner de ruby es un método de un objeto?

7

Estoy tratando de entender cómo la función puts encaja en la postura de Ruby "Todo es un objeto".

¿ puts es el método de una clase / objeto de alguna manera oculto? ¿O es un método de flotación libre, sin objeto subyacente?

    
pregunta gyin 30.05.2012 - 12:51

1 respuesta

13
  

Estoy tratando de entender cómo la función puts encaja en la postura de Ruby "Todo es un objeto".

En primer lugar, puts no es una función. El único propósito es tener un efecto secundario (imprimir algo en la consola), mientras que las funciones no pueden tener efectos secundarios ... esa es la definición de "función", después de todo.

Ruby no tiene funciones. Sólo tiene métodos. Por lo tanto, puts es un método.

  

¿Es puts el método de una clase / objeto de alguna manera oculto?

No, es solo un método de instancia aburrido de una clase antigua aburrida . (Bueno, un viejo y aburrido método de instancia de una antigua mezcla aburrida , en realidad, pero una mezcla es solo una clase que se abstrae sobre su superclase .)

Kernel se mezcla en Object , que es la superclase (predeterminada) de todos los objetos (módulo BasicObject , por supuesto), por lo tanto, Kernel es una superclase común (o "supermixin", si prefiero) de (casi) todos los objetos en Ruby.

  

¿O es un método de flotación libre, sin objeto subyacente?

No hay tal cosa. Un método siempre está asociado con un objeto (el receptor del mensaje), eso es lo que lo convierte en un "método". (Al menos en el lenguaje OO. En los idiomas orientados a ADT, la palabra "método" significa algo ligeramente diferente.)

Por cierto, la opción más fácil es siempre preguntarle a la misma Ruby:

method(:puts).owner
# => Kernel
    
respondido por el Jörg W Mittag 30.05.2012 - 13:19

Lea otras preguntas en las etiquetas