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.

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top