在AST中,我正在查看RBMessageNode,并且我想检查该节点是否与标准不同。注意到startWithParenthesis和stopWithParenthesis但它们似乎没有产生我期望的结果。
aNode startWithParenthesis ifTrue: [ ... do whatever ... ].
有办法做到这一点吗?
答案 0 :(得分:2)
这里有趣的是原始条件之间的等价性
和解析器需要符合Smalltalk语法的那个
作为一种好的做法,当人们发现这些巧合时,通过添加传达另一种含义的第二个选择器来明确这些巧合是很好的。鉴于在这种情况下这些是测试方法,我们有两个选择:
否定测试:
subvertsPrecedence
^self needsParenthesis
积极测试:
hasStandardPrecedence
^self needsParenthesis not
我们应该实现更好地表达我们意图的那个。如果我们决定实现其中的两个,那么最好将第二个重写为
积极测试:
hasStandardPrecedence
^self subvertsPrecedence not
以便更清楚地了解与他人的关系。
答案 1 :(得分:1)
根据Leandro的建议,needsParanthesis
选择器可用于此目的:
aNode needsParenthesis ifFalse: [ ... do something ... ].
好抓!