if counter % 2 == 1
Sto provando a decodificare questa linea - si tratta di un progetto Rails e sto cercando di capire cosa fa il %
in questa istruzione if.Che cosa significa l'operatore% fare in Ruby in N 2%?
risposta
%
è l'operatore modulo. Il risultato della counter % 2
è il resto della counter/2
.
n % 2
è spesso un buon metodo per determinare se il numero n
è pari o dispari. Se n % 2 == 0
, il numero è pari (perché senza resto significa che il numero è divisibile per 2); se n % 2 == 1
, il numero è dispari.
Si * certo * riguardo a quest'ultima richiesta? Questo è vero in Ruby ma non in altre lingue! –
@Eric cosa non è vero? Non ho detto che è l'unico modo migliore per determinare se un numero è pari o dispari ... –
Quello che intendevo era che il test n% 2 == 1 * in realtà non determina se un numero è dispari * in molti le lingue. Ad esempio in C# determina se un numero è * sia positivo che dispari *, che è diverso. –
sua l'operatore modulo.
Questo è l'operatore modulo. Esso fornisce il resto quando il contatore è diviso per 2.
For example:
3 % 2 == 1
2 % 2 == 0
È l'operatore modulo, che è un modo elegante per dire che è l'operatore resto.
Quindi se hai diviso un numero per due, e il resto intero di quel numero è uno, allora sai che il numero era dispari. Il tuo esempio controlla i numeri dispari.
Spesso questo viene fatto per evidenziare righe di numeri dispari con un colore di sfondo diverso, rendendo più facile leggere grandi elenchi di dati.
Per dare alcuni modi per dirlo:
- Modulo operatore
- operatore Resto
- residuo modulare
rigor di termini, se a % b = c
, c
è la costante unico modo che
a == c (mod b)
e 0 <= c < b
Dove x == y (mod m)
iff x - y = km
per alcuni costante k
.
Ciò equivale al resto. Secondo alcuni noti teoremi, abbiamo lo a = bk + c
per alcuni costanti , dove c
è il resto, che ci dà a - c = bk
, che ovviamente implica a == c (mod b)
.
(C'è un modo per utilizzare LaTeX su StackOverflow?)
Questa è una domanda molto semplice. %
è il modulo opereator if counter % 2 == 1
risultati per true
per ogni numero dispari e per false
per ogni numero pari.
Se stai imparando rubino si dovrebbe imparare a utilizzare irb
, lì si può provare le cose e forse rispondere alla domanda se stessi.
tenta di immettere
100.times{|i| puts "#{i} % 2 == 1 #=> #{i % 2 == 1}"}
nella vostra console irb
IRB e vedere l'uscita, quello che dovrebbe essere chiaro che cosa %
fa.
E si dovrebbe davvero dare un'occhiata alla documentazione rotaie api (1.9, 1.8.7, 1.8.7), non ci si sarebbe trovato la risposta a due tua domanda % (Fixnum) con un ulteriore collegamento ad una descrizione dettagliata del divmod (Numeric):
Restituisce una matrice contenente il quoziente e il modulo ottenuto dividendo num per unNumero. > Se q, r = x.divmod (y), quindi
q = floor(float(x)/float(y)) x = q*y + r
Il quoziente viene arrotondato verso -infinito, come mostrato nella seguente tabella:
a | b | a.divmod(b) | a/b | a.modulo(b) | a.remainder(b) ------+-----+---------------+---------+-------------+--------------- 13 | 4 | 3, 1 | 3 | 1 | 1 ------+-----+---------------+---------+-------------+--------------- 13 | -4 | -4, -3 | -3 | -3 | 1 ------+-----+---------------+---------+-------------+--------------- -13 | 4 | -4, 3 | -4 | 3 | -1 ------+-----+---------------+---------+-------------+--------------- -13 | -4 | 3, -1 | 3 | -1 | -1 ------+-----+---------------+---------+-------------+--------------- 11.5 | 4 | 2, 3.5 | 2.875 | 3.5 | 3.5 ------+-----+---------------+---------+-------------+--------------- 11.5 | -4 | -3, -0.5 | -2.875 | -0.5 | 3.5 ------+-----+---------------+---------+-------------+--------------- -11.5 | 4 | -3, 0.5 | -2.875 | 0.5 | -3.5 ------+-----+---------------+---------+-------------+--------------- -11.5 | -4 | 2 -3.5 | 2.875 | -3.5 | -3.5
Esempi
11.divmod(3) #=> [3, 2] 11.divmod(-3) #=> [-4, -1] 11.divmod(3.5) #=> [3, 0.5] (-11).divmod(3.5) #=> [-4, 3.0] (11.5).divmod(3.5) #=> [3, 1.0]
Indipendentemente da come funziona, l'operatore modulo non è probabilmente il miglior codice per lo scopo (anche se non viene fornito un contesto molto ampio). Come ha detto Jörg in un commento, l'espressione if counter.odd?
è probabilmente l'intento ed è più leggibile.
Se si tratta di codice di visualizzazione e utilizzato per determinare (ad esempio) colori di riga alternati, è possibile che si possa fare a meno del contatore utilizzando l'helper Rails incorporato cycle()
. Ad esempio, è possibile utilizzare cycle('odd','even')
come nome di classe per una riga della tabella, eliminando il contatore e la logica if/then circostante.
Un altro pensiero: se questo è all'interno di un blocco each
, potresti essere in grado di utilizzare each_with_index ed eliminare la variabile contatore estraneo.
Il mio refactoring $ 0,02.
Inoltre, tenere presente che la definizione di Ruby dell'operatore modulo (%
) differisce da quella di C e Java. In Ruby, -7%3
è 2
. In C e Java, il risultato è -1
. In Ruby, il segno del risultato (per l'operatore %
) è sempre uguale al segno del secondo operando.
In risposta alla domanda "Che cosa fa o significa il simbolo% in Ruby?" È:
1) L'operatore binario modulo (come è stato detto)
17 % 10 #=> 7
2) La stringa alternativa delimitatore di token
%Q{hello world} #=> "hello world"
%Q(hello world) #=> "hello world"
%Q[hello world] #=> "hello world"
%Q!hello world! #=> "hello world"
# i.e. choose your own bracket pair
%q(hello world) #=> 'hello world'
%x(pwd) #=> `pwd`
%r(.*) #=> /.*/
3) L'operatore formato stringa (abbreviazione per Kernel :: sprintf)
"05d" % 123 #=> "00123"
+1 per essere l'unico a menzionare l'operatore di formato stringa. Questa era la particolare risposta che stavo cercando. – nocash
- 1. Cosa significa $/in Ruby?
- 2. Che cosa significa * (stella) in Ruby?
- 3. Cosa significa || = significa in Ruby?
- 4. Cosa significa @@ in Ruby?
- 5. Che cosa significa "<< -" in Ruby?
- 6. Che cosa significa? V = 2 in css?
- 7. Cosa significa "?" fare in C++?
- 8. In Mathematica, che cosa significa @@@?
- 9. Che cosa significa "var app = app || {};" fare?
- 10. Cosa significa questo in linguaggio Ruby?
- 11. Che cosa significa un intervallo di 2 ..- 1 significa? (Ruby koans about_arrays.rb)
- 12. Cosa significa & in & 2 in PHP?
- 13. Che cosa significa "git checkout -." fare?
- 14. Che cosa significa il comando "nodo". fare?
- 15. Cosa significa array * string in Ruby?
- 16. Che cosa significa: nella sintassi Ruby?
- 17. Cosa significa 1 (mod N)?
- 18. Che cosa significa questo? operatore in C++ fare?
- 19. Discussioni native in Ruby 1.9.1, che cosa significa per me?
- 20. Cosa significa sia gli operatori * che (*) in ruby?
- 21. Cosa significa << fare in Python?
- 22. Ruby: cosa significa $ 1?
- 23. In Ruby, cosa significa esattamente tLABEL?
- 24. In Ruby on Rails, cosa significa "risorsa"?
- 25. Cosa significa classmethod fare in questo codice?
- 26. Cosa significa '__getnewargs__' fare in questo codice
- 27. Cosa significa il carattere "$" in Ruby?
- 28. Che cosa significa matrice ** 2 in python/numpy?
- 29. Che cosa significa "[questo]" significa in C++
- 30. Che cosa significa "1;" significa in Perl?
odora qualcosa per verificare la presenza di valori dispari del contatore. –
Un piccolo puzzle per te: in C#, il test che fai non * controlla * in modo affidabile se il contatore è dispari. Qualcuno capisce perché?(Suggerimento: in Ruby, qual è la differenza tra il resto e i metodi modulo sui numeri?) –
Utilizza anche per sostituzioni di stringhe - http://ruby-doc.org/core/classes/String.html#M000770 –