On 6/5/07, gabriele renzi [email protected] wrote:
cosa stampa
p ?%./(!!?*??&/?^+0.0:!!?().class
?
Oddio, svegliarsi alla mattina e trovarsi in mail certe cose è un po’
traumatico. Io direi Float, ora però provo a dargli una spiegazione
che è la cosa più complicata…
Questa accozzaglia di roba usa parecchio la notazione ?carattere per
prelevare il valore ascii del carattere che segue il punto di domanda,
per cui ?%, ?, ?^ e ?( sono in realtà numeri e quindi ?%./( … )
dovrebbe essere una banale divisione tipo numero./(numero), con
l’operatore usato a mò di metodo anziché nella sua forma tradizionale
numero / numero. Dentro alla parentesi c’è l’operatore ternario (expr
? b : c) che genera la sua bella confusione e la condizione di expr è
nella realtà il valore numerico ? con davanti !! che restituisce
quindi TRUE (possiamo pensare a !numero come la forma compatta di
!numero == TRUE # => FALSE, per cui il secondo ! nega il risultato
trasformandolo in TRUE). Pertanto diventa:
TRUE ? ?* / ?^ + 0.0 : !!?(
ovvero
TRUE ? numero / numero + 0.0 : !!numero
dal momento che TRUE è TRUE e non si scappa, viene ritornata la prima
condizione. A questo punto il tutto diventa:
numeroA / (numeroB / numeroC + 0.0)
Il risultato di numeroB / numeroC sommato a 0.0 restituisce un Float,
per forza di cose, allora il risultato di numeroA / numeroFloat è
comunque un Float.
Ma si sarà capito qualcosa?
non provate direttamente in irb che è disonesto 
Non ho provato proprio, non per niente non ho idea dei valori dei vari
?%, ?*, ?^ e ?
Almeno è giusto?