ASTではRBMessageNodeを見ています。そのノードが標準と異なる優先度であるかどうかを確認したいと思います。気付いたstartWithParenthesisとstopWithParenthesisは、私が期待した結果を生むようには見えません。括弧の付いたメッセージの優先順位とその確認方法は?
aNode startWithParenthesis ifTrue: [ ... do whatever ... ].
これを行う方法はありますか?
ASTではRBMessageNodeを見ています。そのノードが標準と異なる優先度であるかどうかを確認したいと思います。気付いたstartWithParenthesisとstopWithParenthesisは、私が期待した結果を生むようには見えません。括弧の付いたメッセージの優先順位とその確認方法は?
aNode startWithParenthesis ifTrue: [ ... do whatever ... ].
これを行う方法はありますか?
何ここで興味深いのは、元の状態の間の等価
とパーサがSmalltalkの構文に準拠する必要があるものとは異なる優先順位のノードを検出しています
このような一致を見つけたら、他の意味を伝える第2のセレクタを追加するとよいでしょう。
負のテスト:
subvertsPrecedence
^self needsParenthesis
ポジティブテスト:この場合には、これらはテストのための方法は、我々は二つの選択肢があることを考えると
hasStandardPrecedence
^self needsParenthesis not
を私たちはその1をimplemente必要があります私たちの意図をよりよく表します。それ他との明確な関係にするために
hasStandardPrecedence
^self subvertsPrecedence not
:我々はそれらのうちの2つを実装することにした場合、それは
正のテストとしての第2の再で書か方が良いです。
needsParanthesis
セレクタは、この目的のために使用することができレアンドロの提案を1として:
aNode needsParenthesis ifFalse: [ ... do something ... ].
グッドキャッチ!
'start/stopWithoutParentheses'を意味しますか? –
あなたが探しているのは、 '#needsParenthesis'です。ノードが' true'であればそれに応じて応答します。( 'true'または' false'ではありません)包囲ノード(または親ノード)よりも優先順位が高い。 –
作品...回答を追加しました! – unmircea