2016-04-06 11 views
1

私は小さなDSLを作成しようとしますが、私は単純なものでも苦労しています。 次のスクリプトでエラーが表示されます。Groovyメソッドの命名規則または魔法?

def DEMON(String input) { 
    ['a': input] 
} 
DEMON 'Hello thingy' a 

何らかの理由で、パラメータの前後のカッコがオプションではなく、エラーが表示されます。 このスクリプトは正常に動作:

def dEMON(String input) { 
    ['a': input] 
} 
dEMON 'Hello thingy' a 

注:唯一の違いは、小文字の最初の文字です。 ここで何が起こっているのですか?なぜスクリプトは(コンパイルされた)解釈されるのですか?私が従わなければならないメソッド/クラス命名スキームのいくつかの種類はありますか?

更新:エラーメッセージ。私は、構文エラーを推測:

unexpected token: Hello thingy @ line 4, column 7. 
+0

を括弧を使用することができます私はおそらくとにかく答えを持っていますが、エラーについて尋ねたときに、エラーを投稿しません。 –

+0

@JB Nizet申し訳ありません、追加されました。 –

答えて

2

グルーヴィーな構文はいつか複雑で、コンパイラはそれが何をしなければならないかを選択するためにいくつかのルールを使用します。このルールの1つは単純です:単語が大文字で始まる場合、それはおそらくクラスです。

たとえば、f Stringはgroovyで有効な構文で、コンパイラはf(String.class)に変換します。

あなたは、グルーヴィーはあなたのDEMONがクラスが、メソッドではありません理解を助けるためにDEMON('Hello thingy', a)

+0

まあ、大丈夫です。したがって、コンパイラはDEMONを定義に基づくメソッドと判断できません。私は大文字の名前を保持することができるように、括弧を使用する必要はありませんように、定義を変更することはできますか? –

+1

私はそれが可能ではないと思います。それは意味解析または文脈が使用されない最初のAST段階である "解析"段階で失敗する。文法はこの構造を拒否します。 –