Ce qui ne l'opérateur % faire en Ruby dans N % 2?
if counter % 2 == 1
Je suis en train d'essayer de décoder cette ligne - c'est un Rails de projet et je suis à essayer de comprendre ce que le %
dans cette instruction si.
- Sent comme quelque chose à vérifier pour les valeurs de la contre.
- Une petite énigme pour vous: en C#, le test que vous donnez n'est pas fiable de vérifier si le compteur est impair. Personne ne savoir pourquoi? (Astuce: dans Ruby, quelle est la différence entre le reste et modulo de méthodes sur des objets numériques?)
- Aussi l'utilisation de la substitution de chaîne - ruby-doc.org/core/classes/String.html#M000770
- Quel est le problème avec
if counter.odd?
est la question la plus intéressante ici ... - est-ce que C# faire quelque chose de stupide comme return -1 pour le négatif impair de valeurs de compteur?
- codegoeshere.blogspot.com/2008/09/...
Vous devez vous connecter pour publier un commentaire.
%
est le modulo de l'opérateur. Le résultat decounter % 2
est le reste de lacounter /2
.n % 2
est souvent un bon moyen de déterminer si un certain nombren
est pair ou impair. Sin % 2 == 0
, le nombre est pair (car aucun reste signifie que le nombre est divisible par 2); sin % 2 == 1
, le nombre est impair.En réponse à la question "Quel est le symbole % faire ou dire en Ruby?" Il est:
1) Le modulo opérateur binaire (comme il a été mentionné)
2) L'alternative délimiteur de chaîne de jeton
3) Le format de la chaîne de l'opérateur (raccourci pour Kernel::sprintf)
C'est l'opérateur modulo. Il donne le reste quand le compteur est divisé par 2.
Indépendamment de la façon dont il fonctionne, l'opérateur modulo est probablement pas le meilleur code pour la fin (même si on ne nous donne pas beaucoup de contexte). Comme Jörg mentionné dans un commentaire, l'expression
if counter.odd?
est probablement l'intention, et est plus lisible.Si c'est afficher le code et utilisé pour déterminer (par exemple) de la ligne alternant les couleurs, vous pouvez être en mesure de le faire sans le contre tout en utilisant le haut-Rails helper
cycle()
. Par exemple, vous pouvez utilisercycle('odd','even')
comme un nom de classe pour une ligne de tableau, éliminant le compteur et les environs si/alors logique.Une autre pensée: si c'est dans un
each
bloc, vous pouvez être en mesure d'utiliser each_with_index et éliminer le superflu variable compteur.Mon refactoring de 0,02$.
Également garder à l'esprit que, Ruby à la définition de l'modulo (
%
) opérateur diffère de celle de C et Java. En Ruby,-7%3
est2
. En C et en Java, le résultat est-1
à la place. En Ruby, le signe du résultat (pour%
opérateur) est toujours le même que le signe de la deuxième opérande.Son l'opérateur modulo.
http://en.wikipedia.org/wiki/Modulo_operation
C'est l'opérateur modulo, ce qui est une façon élégante de dire que c'est le reste de l'opérateur.
Donc, si vous divise un nombre par deux, et le reste entier de ce nombre est l'un, alors vous savez le nombre est impair. Votre exemple des chèques pour les nombres impairs.
Souvent, c'est pour mettre en évidence un nombre impair de lignes avec une couleur de fond différente, le rendant plus facile à lire de longues listes de données.
C'est une question très simple.
%
est le modulo en chair et en osif counter % 2 == 1
résultats detrue
pour chaque nombre impair etfalse
pour chaque nombre pair.Si vous êtes en train d'apprendre ruby, tu dois apprendre à utiliser
irb
, là, vous pouvez essayer des choses et peut-être répondre à la question vous-même.essayez d'entrer
dans votre
irb
de la cisr de la console et de voir le résultat, ce qu'il devrait être clair que%
n'.Et vous devriez vraiment prendre un regard sur les rails de la documentation de l'api (1.9, 1.8.7, 1.8.7), vous y auriez trouvé la réponse à deux votre question % (Fixnum) avec un autre lien pour une description détaillée de divmod (Numérique):
De donner quelques façons de le dire:
Strictement parlant, si
a % b = c
,c
est l'unique constante telle quea == c (mod b)
et0 <= c < b
Où
x == y (mod m)
iffx - y = km
pour certains constantek
.C'est l'équivalent pour le reste. Par certains bien connus théorème, nous avons que
a = bk + c
pour certains constantek
, oùc
est le reste, ce qui nous donnea - c = bk
, ce qui implique, bien entendu,a == c (mod b)
.(Est-il un moyen d'utiliser le LaTeX sur Stackoverflow?)