Sto cercando di capire come la funzione puts
si adatta alla posizione di "Tutto è un oggetto" di Ruby.
Is puts
è il metodo di una classe / oggetto in qualche modo nascosto? O è un metodo fluttuante, senza oggetto sottostante?
I'm trying to understand how the
puts
function fits in Ruby's "Everything is an object" stance.
Primo, puts
non è una funzione. È scopo esclusivo avere un effetto collaterale (stampando qualcosa sulla console), mentre le funzioni non possono avere effetti collaterali ... questa è la definizione di "funzione", dopotutto.
Ruby non ha funzioni. Ha solo metodi. Pertanto, puts
è un metodo.
Is
puts
is the method of a somehow hidden class/object?
No, è solo un noioso metodo di vecchia istanza di una noiosa vecchia classe . (Beh, un metodo noioso di vecchia istanza di un vecchio mixin noioso , in realtà, ma a mixin è solo una classe che riassume la sua superclasse .)
Kernel
è mescolato in Object
, che è la superclasse (predefinita) di tutti gli oggetti (modulo BasicObject
, ovviamente), quindi, Kernel
è una superclasse comune (o "supermixin", se tu preferisce) di (quasi) tutti gli oggetti in Ruby.
Or is it a free-floating method, with no underlying object?
Non esiste una cosa del genere. Un metodo è sempre associato a un oggetto (il destinatario del messaggio), questo è ciò che lo rende un "metodo". (Almeno nel linguaggio OO. Nelle lingue orientate verso ADT, la parola "metodo" significa qualcosa di leggermente diverso.)
A proposito, l'opzione più semplice è sempre chiedere semplicemente a Ruby:
method(:puts).owner
# => Kernel
Leggi altre domande sui tag ruby