1
を働いていない私は私のDemo.groovyファイルに次のコードスニペットを持ってGroovyのクロージャDELEGATE_ONLYとDELEGATE_FIRST戦略が
class Person {
String name
}
def name='no name'
def p = new Person(name:'Igor')
def cl = { name.toUpperCase() }
cl.resolveStrategy = Closure.DELEGATE_ONLY
cl.delegate = p
println cl()
閉鎖戦略http://groovy-lang.org/closures.html
にGroovyのドキュメントによると、私は次の出力
を期待IGOR
ただし、コードが印刷されているようです。
いいえ
解決戦略がDELEGATE_ONLYに設定されているため、IGORではなくNAMEをgroovyで印刷するのはなぜですか?
こんにちは、「受信者オブジェクトを明示的に設定せずにプロパティにアクセスする」ということを教えてください。私はプロパティ名のレシーバオブジェクトをどこに設定していますか? –
@RameshKP申し訳ありませんができません。これは私の解釈とテストの結果で簡単でした。クロージャの定義時に 'name'が定義されていなかった場合、期待通りに機能しました。しかし、このサイトには多くのGroovyエキスパートがいますので、これが解決されることを願っています。 –
実際にあなたは正しいです:)実際にdef nameはクロージャの定義を下げるべきです。 –