我正在編寫一個執行爲Script
的DSL;它有各種不同的語法位。例如,對於需要關閉的「foo」關鍵字,我有一個FooSyntax
類,並用「該語法的一個實例評估閉包」。這很好,例如Groovy腳本如何與propertyMissing交互?
bar = thing {} // make a thing
baz = foo {
mykeyword bar
}
將名爲bar的東西傳遞給調用FooSyntax#mykeyword
。
我想添加一些更好的錯誤消息,當有一個未知的變量引用。這表現爲MissingPropertyException
,所以我現在的方法是將propertyMissing
方法添加到FooSyntax
。這確實適用於缺少的變量。
不幸的是,它打破了上面的例子:bar
成爲一個缺少的屬性,而不是落入到綁定。爲什麼添加propertyMissing
導致Binding
不被諮詢? (這是否與Closure
的解決策略有關?)我該如何解決這個問題?
您可以在https://gist.github.com/1237768
你有你的代碼執行這個腳本,所以我可以試試看,看看我能看到什麼是錯的? –
我添加了一個鏈接到Gist可以玩。該腳本似乎掛在http://groovyconsole.appspot.com上,但在命令行罰款(我使用1.8.1)上運行。 –