[RUBY] Il y a deux interprétations de a = b = c dans VBScript

Quel est le code Ruby équivalent au code suivant écrit en VBScript?

a = b = c

répondre

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

Il y a deux interprétations de a = b = c dans VBScript
ABC129 Commentaire A, B, C
Python a + = b et a = a + b sont différents
Explication ABC127 A, B, C (python)
ABC128 Commentaire A, B, C (python)
Explication ABC126 A, B, C (python)
Extension de Python par C ou C ++ (lorsqu'il y a plusieurs arguments, lors du passage d'une liste du côté Python)
[Explication AtCoder] Contrôlez les problèmes A, B, C d'ABC182 avec Python!
[Explication AtCoder] Contrôle ABC184 Problèmes A, B, C avec Python!
Résoudre ABC175 A, B, C avec Python
[Explication AtCoder] Contrôlez les problèmes A, B, (C), D de ABC165 avec Python!
[Explication AtCoder] Contrôlez les problèmes A, B, C, D d'ABC183 avec Python!
[Explication AtCoder] Contrôlez les problèmes A, B, C, D d'ABC181 avec Python!
Dérivation de la certitude de l'effet dans le test A / B