En règle générale, vous avez besoin à peu près jamais l'opérateur ternaire dans Ruby. La raison pour laquelle vous en avez besoin en C est parce que dans C if
est une déclaration, donc si vous voulez retourner une valeur, avez pour utiliser l'opérateur ternaire, qui est une expression.
Dans Ruby, tout est une expression, il sont aucune déclaration, ce qui rend l'opérateur ternaire à peu près inutile. Vous pouvez toujours remplacer
cond ? then_branch : else_branch
avec
if cond then then_branch else else_branch end
Ainsi, dans votre exemple:
object.method ? a.action : nil
est équivalent à
if object.method then a.action end
qui, comme le souligne Campbell @ Greg est en à son tour équivalent à la fin if
forme modificateur
a.action if object.method
En outre, étant donné que les opérateurs booléens en Ruby pas seulement revenir true
ou false
, mais la valeur de la dernière expression évaluée, vous pouvez les utiliser pour le flux de contrôle. Ceci est un idiome importé de Perl, et ressemblerait à ceci:
object.method and a.action
Cela dépend du contexte, mais il est parfois plus élégant de lire un si/alors/début du bloc avec une seule ligne dans le corps que quelque chose de plus dense/laconique. –