2017-01-14 6 views
1

ASTではRBMessageNodeを見ています。そのノードが標準と異なる優先度であるかどうかを確認したいと思います。気付いたstartWithParenthesisとstopWithParenthesisは、私が期待した結果を生むようには見えません。括弧の付いたメッセージの優先順位とその確認方法は?

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

これを行う方法はありますか?

+0

'start/stopWithoutParentheses'を意味しますか? –

+2

あなたが探しているのは、 '#needsParenthesis'です。ノードが' true'であればそれに応じて応答します。( 'true'または' false'ではありません)包囲ノード(または親ノード)よりも優先順位が高い。 –

+0

作品...回答を追加しました! – unmircea

答えて

2

何ここで興味深いのは、元の状態の間の等価

  • が標準

とパーサがSmalltalkの構文に準拠する必要があるものとは異なる優先順位のノードを検出しています

  • 括弧の必要性

このような一致を見つけたら、他の意味を伝える第2のセレクタを追加するとよいでしょう。

負のテスト

subvertsPrecedence 
    ^self needsParenthesis 

ポジティブテスト:この場合には、これらはテストのための方法は、我々は二つの選択肢があることを考えると

hasStandardPrecedence 
    ^self needsParenthesis not 

を私たちはその1をimplemente必要があります私たちの意図をよりよく表します。それ他との明確な関係にするために

hasStandardPrecedence 
    ^self subvertsPrecedence not 

:我々はそれらのうちの2つを実装することにした場合、それは

正のテストとしての第2の再で書か方が良いです。

1

needsParanthesisセレクタは、この目的のために使用することができレアンドロの提案を1として:

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

グッドキャッチ!

関連する問題