Je me demande pourquoi rubis donner et code>,
ou code> moins prême que
&& code>,
|| code> et attribuer l'opérateur ? Y a-t-il une raison? P>
5 Réponses :
Être capable de contrôler la préséance de vos opérateurs est parfois utile, surtout si vous êtes préoccupé par la lisibilité - une parenthèse supplémentaire dans des états conditionnels peut parfois obscurcir la logique réelle. P>
Pour être franc, cependant, je pense que la raison pour laquelle Ruby a le niveau de priorité de l'opérateur booléen qu'il découle principalement du fait que Matz était un programmeur Perl avant d'écrire Ruby et a emprunté une grande partie de la syntaxe de base et des opérateurs de celui-ci. langue. p>
HMM, qui explique pourquoi Ruby est si immature et en même temps tellement gonflé. Toujours difficile à envelopper la tête autour de ça ..
Ils ont une grande préconcience de manière à ce que les opérandes ne soient pas enveloppés entre parenthèses, comme c'est parfois le cas avec && code> et
|| p >
Je crois que l'idée est spécifiquement de les obtenir en dessous des opérateurs d'affectation, vous pouvez donc écrire des tests de logique avec des missions mais sans parens. P>
Je suppose que c'est un report direct de Perl. Les opérateurs Par exemple, dans Perl, nous souhaitons ici que et assurez-vous que le Un exemple en rubis où vous pourriez utiliser si vous avez utilisé ou code> et
et code> ont été ajoutés plus tard dans Perl 5 pour des situations spécifiques ont été souhaitées que la priorité était souhaitée.
|| code> avait une priorité inférieure, afin que nous puissions écrire: p>
|| code> n'allait pas gobbler partie de l'action. Perl 5 introduit
ou code>, une nouvelle version de
|| code> qui a une priorité faible, pour exactement ce but. P>
ou code> mais pas
|| code>: p>
|| code>, il serait être une erreur de syntaxe. p> p>
Y a-t-il un nom pour l'idiome de do_something ou mourir? Est-ce qu'il est utilisé dans Ruby?
Je ne sais aucun nom pour cela, mais c'est assez courant dans Ruby.
Perl se penche fortement sur mourir, alors que Ruby utilise la levée. L'avantage d'une exception est que vous pouvez le sauver.
Bien que techniquement, vous puissiez sauver d'une matrice, les gens ne se dérangent généralement pas à moins que ce soit vraiment important. C'est trop d'une nuisance.
La différence est la priorité. vous devriez faire: p> pour obtenir le même effet. Si vous faites: p> Le résultat de l'expression serait toujours 0, mais une valeur serait nulle. P> p> || code>,
&& code> a une priorité supérieure à celle
= code>, mais
et code>,
ou code> ont inférieur. Donc, alors que vous pouvez faire: