La funzione put di ruby è un metodo di un oggetto?

7

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?

    
posta gyin 30.05.2012 - 12:51
fonte

1 risposta

13

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
    
risposta data 30.05.2012 - 13:19
fonte

Leggi altre domande sui tag