Quel est le code Ruby équivalent au code suivant écrit en VBScript?
a = b = c
Selon le contexte dans lequel le code est écrit, il peut s'agir de l'un des deux suivants.
a = (b == c)
(a == b) == c
VBScript gère à la fois l'affectation et la comparaison avec un seul opérateur =
.
De plus, dans VBScript, les affectations sont des instructions et non des expressions.
Par conséquent, les personnes qui ont appris des langues avec des opérateurs d'affectation et de comparaison séparés peuvent rencontrer un comportement inattendu lors de l'utilisation de VBScript.
Dans de nombreux langages, dans une plus ou moins grande mesure, les frontières entre les expressions et les instructions sont ambiguës, ce qui vous permet d'écrire des instructions dans des contextes où des expressions sont susceptibles d'être requises. Strictement parlant, est que la fonctionnalité fournie comme une déclaration dans une langue est fournie comme une expression dans une autre. Ruby est un bon exemple car la plupart des instructions fournies dans d'autres langages sont des expressions.
#si est une expression, pas une déclaration
a = (if hoge == fuga then 1 else 0)
#Même la définition de la méthode devient une expression
a = (def hoge; end)
La spécification Ruby selon laquelle même si et les définitions de méthode deviennent des expressions est différente pour les programmeurs Java. Certains peuvent prétendre qu'il est excessif de les formuler.
Cependant, nous acceptons ce qui a été fait à partir d'une phrase il y a longtemps et la traitons comme une formule sans aucune gêne. Telle est la mission.
Le code ci-dessous peut être exécuté comme preuve que l'affectation est traitée comme une expression. Si l'affectation est une instruction, le résultat ne peut pas être affecté à un.
a = b = c
Cependant, dans VBScript, les affectations sont des instructions, pas des expressions. Les deux = of ʻa = b = c` ne peuvent pas être affectés.
Par conséquent, le code Ruby équivalent à ʻa = b = c de VBScript est ʻa = (b == c) ʻou
(a == b) == c`.
Il y a deux possibilités.
Quand est-il interprété comme le premier et quand est-il interprété comme le second?
Encore une fois, je me souviens de la spécification selon laquelle les affectations sont des déclarations plutôt que des expressions. Le premier est une expression, tandis que le second est une phrase. En d'autres termes, le contexte dans lequel ce code est écrit dépend de si l'instruction est requise ou si l'expression est requise.
'Le contexte dans lequel l'expression est requise
Call Func(a = b = c)
While a = b = c
'Le contexte dans lequel la déclaration est requise
a = b = c
Recommended Posts