Demande sa classe à n'importe quoi. Il répondra.Ask anything for its class. It will answer.
Au numéro précédent, tout appel était un message à un receveur. Restait une question : qui peut recevoir un message ? La réponse de Ruby est radicale — tout. Le nombre 42, la chaîne vide, nil, true : aucun n'est une « valeur primitive » à part. Tous répondent à .class, donc tous sont des objets. Sans exception.Last issue, every call was a message to a receiver. One question remained: who can receive a message? Ruby's answer is radical — everything. The number 42, the empty string, nil, true: none is a separate 'primitive value'. They all answer .class, so they are all objects. No exceptions.
42.class # => Integer 3.14.class # => Float "hi".class # => String :sym.class # => Symbol nil.class # => NilClass true.class # => TrueClass (1..5).class # => Range # pas une seule exception : tout répond à .class
Là où d'autres langages ont des primitives qui ne sont pas des objets, Ruby n'en a aucune. nil lui-même a une classe — donc nil est un objet.Where other languages have primitives that aren't objects, Ruby has none. nil itself has a class — so nil is an object.
« À quel objet est-ce que je parle ? » — et la réponse n'a plus d'exception. Si une chose existe en Ruby, c'est un objet : elle a une classe, elle répond à des messages, on peut la ranger dans une variable et la passer en argument. Y compris les choses qu'ailleurs on croit « à part »."Which object am I talking to?" — and the answer no longer has exceptions. If a thing exists in Ruby, it's an object: it has a class, it responds to messages, you can store it in a variable and pass it as an argument. Including the things you'd think are 'special' elsewhere.
Le № 1 a posé : tout appel est un message à un receveur. Ce numéro ferme la boucle : il n'existe rien qui ne soit pas un receveur valide. Les deux ensemble forment le socle — une seule règle, zéro cas particulier — sur lequel tiennent les blocs, les mixins et la méta.Issue № 1 established: every call is a message to a receiver. This issue closes the loop: there is nothing that isn't a valid receiver. Together they form the bedrock — one rule, zero special cases — on which blocks, mixins and metaprogramming stand.