带括号的消息优先级以及如何检查它?

时间:2017-01-14 16:27:42

标签: pharo

在AST中,我正在查看RBMessageNode,并且我想检查该节点是否与标准不同。注意到startWithParenthesis和stopWithParenthesis但它们似乎没有产生我期望的结果。

aNode startWithParenthesis ifTrue: [ ... do whatever ... ].

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:2)

这里有趣的是原始条件之间的等价性

  • 检测优先级与标准
  • 不同的节点

和解析器需要符合Smalltalk语法的那个

  • 需要括号

作为一种好的做法,当人们发现这些巧合时,通过添加传达另一种含义的第二个选择器来明确这些巧合是很好的。鉴于在这种情况下这些是测试方法,我们有两个选择:

否定测试

subvertsPrecedence
  ^self needsParenthesis

积极测试

hasStandardPrecedence
  ^self needsParenthesis not

我们应该实现更好地表达我们意图的那个。如果我们决定实现其中的两个,那么最好将第二个重写为

积极测试

hasStandardPrecedence
  ^self subvertsPrecedence not

以便更清楚地了解与他人的关系。

答案 1 :(得分:1)

根据Leandro的建议,needsParanthesis选择器可用于此目的:

aNode needsParenthesis ifFalse: [ ... do something ... ].

好抓!