Conversione Ruby to_s a Binary (Operatore Splat nell'argomento)
-
12-12-2019 - |
Domanda
Se eseguo il seguente codice, le prime due linee ritornano ciò che mi aspetto.Il terzo, tuttavia, restituisce una rappresentazione binaria di 2.
2.to_s # => "2"
2.to_s * 2 # => "22"
2.to_s *2 # => "10"
.
So che il passaggio in 2 quando chiamando to_s
convertirà la mia output in binary, ma perché to_s
ignorando il *
nel terzo caso?Sto eseguendo rubino 1.9.2 se questo fa differenza.
Soluzione
Destra, come Namida già menzionata, Ruby interpreta
2.to_s *2
.
AS
2.to_s(*2)
.
Mentre le parentesi nelle chiamate del metodo sono facoltative in Ruby.Asterisk qui è il cosiddetto Splat Operator .
. L'unica domanda sconcertante Ecco perché *2
Valuta a 2
.Quando lo si utilizza al di fuori di una chiamata di metodo, l'operatore Splat costringe tutto in un array, in modo che
a = *2
.
risulterebbe con a
[2]
.In una chiamata al metodo, l'operatore Splat sta facendo il contrario: disimballa qualsiasi cosa come una serie di argomenti del metodo.Passalo un tre matrice membro, risulterà come tre argomenti del metodo.Passalo un valore scalare, sarà solo inoltrato come un singolo parametro.Quindi,
2.to_s *2
.
è essenzialmente lo stesso di
2.to_s(2)
. Altri suggerimenti
Nella terza linea stai chiamando il metodo to_s
con "Splat" di 2, che valuta 2 (in una chiamata di metodo) e quindi restituisce numero in una base diversa .