web-dev-qa-db-fra.com

Pas d'opérateur d'incrémentation (++) en Ruby?

Duplicate possible:
Pourquoi Ruby ne supporte-t-il pas i ++ ou i— pour Fixnum?

Pourquoi n'y a-t-il pas d'opérateur d'incrémentation dans Ruby?

par exemple.

i++
++i

Est-ce que l'opérateur ++ est utilisé pour autre chose? Existe-t-il une raison réelle ?

202
Skizit

Ruby n'a pas d'opérateur pré/post incrémentation/décrémentation. Par exemple, x++ ou x-- ne pourra pas être analysé. Plus important encore, ++x ou --x ne fera rien! En fait, ils se comportent comme plusieurs opérateurs de préfixe unaires: -x == ---x == -----x == ...... Pour incrémenter un nombre, écrivez simplement x += 1.

Tiré de "Ce que les nouveaux venus sur Ruby devraient savoir" ( archive , miroir )

Cela explique mieux que je ne pourrais jamais.

EDIT: et le motif de l'auteur de la langue lui-même ( source ):

  1. ++ et - ne sont pas des opérateurs réservés en Ruby.
  2. Les opérateurs d'incrémentation/décrémentation de C sont en fait des affectations masquées. Ils affectent des variables, pas des objets. Vous ne pouvez pas effectuer d’affectation via une méthode. Ruby utilise plutôt l'opérateur + =/- =.
  3. le moi ne peut pas être une cible d'affectation. De plus, la modification de la valeur du nombre entier 1 peut entraîner une confusion grave tout au long du programme.
232
Dave

D'un posté par Matz :

(1) ++ et - ne sont pas des opérateurs réservés en Ruby.

(2) Les opérateurs d'incrémentation/décrémentation de C sont en fait des affectations masquées. Ils affectent des variables, pas des objets. Vous ne pouvez pas effectuer d’affectation via une méthode. Ruby utilise plutôt l'opérateur + =/- =.

(3) le soi ne peut pas être une cible de mission. De plus, la modification de la valeur du nombre entier 1 peut entraîner une confusion grave tout au long du programme.

                      matz.
25
mikej

Je ne pense pas que cette notation soit disponible car, contrairement à PHP ou C, tout ce qui se trouve dans Ruby est un objet.

Bien sûr, vous pouvez utiliser $var=0; $var++ en PHP, mais c'est parce que c'est une variable et non un objet. Par conséquent, $var = new stdClass(); $var++ générera probablement une erreur.

Je ne suis pas un programmeurRuby ou RoR, je suis donc sûr que quelqu'un peut vérifier ce qui précède ou le corriger s'il est inexact.

3
Martin Bean