pm3
December 18, 2009, 7:40pm
1
Scopro oggi che mentre ==, <=, < e compagnia sono dei metodi (questo lo
sapevo), != invece non lo è. Ossia:
$ irb
1.send(“==”, 2)
=> false
1.send(“==”, 1)
=> true
1.send(“!=”, 1)
NoMethodError: undefined method !=' for 1:Fixnum from (irb):3:in
send’
from (irb):3
Cercando su RDoc Documentation del metodo != non c’è proprio
traccia e neppure di !. Questo vuol dire che != viene trasformato
dall’interprete nella negazione del risultato del metodo == ?
Il tutto è nato da una tabellina di operatori da applicare a coppie di
valori. Senza != mi tocca fare un caso speciale per trattarlo, ma non è
un problema. Ho più che altro la curiosità di sapere come funziona != e
perché non è implementato allo stesso modo degli altri metodi di
comparazione.
C’è qualche esperto che mi possa illuminare?
Grazie!
Paolo
pm3
December 20, 2009, 9:43am
2
Guardando il changelog, sembrano cose relativamente recenti:
Mon Feb 4 14:51:19 2008 Nobuyoshi N. [email protected]
parse.y (rb_enc_symname2_p): support “!”, “!=” and “!~”.
[ruby-dev:33592]
Mon Dec 10 01:35:06 2007 Yukihiro M. [email protected]
parse.y (expr): redefinable not (!) operator.
parse.y (arg): ditto.
object.c (rb_obj_not): new method “!”.
object.c (rb_obj_not_equal): new method “!=”.
object.c (rb_obj_not_match): new method “!~”.
Che versione di Ruby hai? Se scarichi i sorgenti, e fai cosi`:
find . -type f -print0 | xargs -0 -e fgrep -nH -e ‘“!=”’
Cosa trovi?
Strano, comunque, sarei interessato a sapere come funzionava prima…
–
David N. Welton
http://www.welton.it/davidw/
http://www.dedasys.com/
Sent from Padua, Veneto, Italy
pm3
December 20, 2009, 11:33am
3
Leggendo la tua risposta ho googlato ancora un po’ con delle keyword
diverse da quelle che avevo usato prima di postare la mia domanda ed ho
trovato Use not equal(!=) operator as a Symbol - Ruby - Ruby-Forum
!= è diventato un metodo a partire dalla 1.9. Fino alla 1.8 l’interprete
applicava il metodo == e ne negava il valore.
Grazie
Paolo
David W. wrote:
Guardando il changelog, sembrano cose relativamente recenti:
Mon Feb 4 14:51:19 2008 Nobuyoshi N. [email protected]
parse.y (rb_enc_symname2_p): support “!”, “!=” and “!~”.
[ruby-dev:33592]
Mon Dec 10 01:35:06 2007 Yukihiro M. [email protected]
parse.y (expr): redefinable not (!) operator.
parse.y (arg): ditto.
object.c (rb_obj_not): new method “!”.
object.c (rb_obj_not_equal): new method “!=”.
object.c (rb_obj_not_match): new method “!~”.
Che versione di Ruby hai? Se scarichi i sorgenti, e fai cosi`:
find . -type f -print0 | xargs -0 -e fgrep -nH -e ‘“!=”’
Cosa trovi?
Strano, comunque, sarei interessato a sapere come funzionava prima…
–
David N. Welton
David N. Welton
http://www.dedasys.com/
Sent from Padua, Veneto, Italy