DSL で使用されているクロージャーからクロージャーを呼び出す方法を知りたいです。たとえば、RestBuilder
Grails のプラグインを見てみましょう。
次のようなブロックがいくつか並んでいると想像してください。
rest.post("http://my.domain/url") {
auth(username, password)
contentType "text/xml"
body someContent
}
...唯一の変更点はsomeContent
. 毎回auth
and contentType
andを呼び出すのが繰り返されます。body
だから私は次のようなことをしたいと思います:
def oauth = [clientId: 'c', clientSecret: 's']
def withAuth(Closure toWrap) {
Closure wrapped = { it ->
auth(oauth.clientId, oauth.clientSecret)
contentType "text/xml"
toWrap.call()
}
return wrapped
}
rest.post("http://my.domain/url") (withAuth {
body someContent
})
今、私はDSLで定義されているようにアクセスしたいと思っwrapped
ています。所有者、代理人などを設定してこれを行う方法はありますか?toWrap
auth
contentType
RestBuilder
(注: 上記の例では、URL + コンテンツを引数として受け取る関数を宣言し、関数rest.post
内で呼び出すことができることを理解しています。私の質問はより一般的です。言語を理解しようとしています。より広く適用できる機能的なテクニックです。)