Grailsの中核となるいくつかのタグライブラリがクロージャを返すのはなぜですか?例えば、createLink
(see source)?メリットやユースケースは何ですか?GrailsのいくつかのtaglibがClosureを返すのはなぜですか?
0
A
答えて
3
実際に見ているのは、がClosure
と定義されていて、実行時にClosure
が返されるというわけではありません。クロージャ自体が実行され、StreamCharBuffer
の実際の作成を担当する実装を委任します。 のソースを見て、本当に何が起こっているか見てみましょう:
Closure createLink = { attrs ->
return doCreateLink(attrs instanceof Map ? (Map) attrs : Collections.emptyMap())
}
を我々はそれがdoCreateLink
に作業を委任しますタイプClosure
のcreateLink
という変数を持っている上に、あなたが見ることができるように。そのクラスを含むクラス内の保護されたメソッドです。
protected String doCreateLink(Map attrs) {
... // actual implementation cut out of this example
return useJsessionId ? res.encodeURL(generatedLink) : generatedLink
}
あなたがこれを見ることができるように、実際の作業は(うまくキャストされ、まあ、String
)StreamCharBuffer
を生成するために行われているところです。
なぜ、これをやりますか? 1つの使用可能なケースは、メソッドdoCreateLink
が正式な定義のクロージャcreateLink
よりはるかに厳密です。メソッドの代わりにClosure
を使用すると、createLink
への呼び出しは、以前の用途にほとんどまたはまったく影響を与えずに、機能強化や追加が行われるため、時間の経過とともにわずかに変更される可能性があります。
これは、あなたが見ているものと、おそらく理由について少し説明するのに役立ちます。
関連する問題
- 1. testing grails taglib
- 2. Grails taglib for bootstrap
- 3. なぜ "web.xml"ファイルが役に立たないのですか<taglib>
- 4. いくつかのデータでmgcvのbamが遅いのはなぜですか?
- 5. Grails - 404ファイルが見つかりません - なぜですか?
- 6. $ _POSTにいくつかの値がないのはなぜですか?
- 7. JSONがPHPから正しく返されないのはなぜですか?
- 8. Grailsがキャッシュを無効にするのはなぜですか?
- 9. Find Closureの引数に2つのアンパサンドが必要なのはなぜですか?
- 10. なぜFacebookのバッチAPIリクエストがいつかnullを返すのですか?
- 11. Grailsの@TransactionalサービスでdomainObject.discard()が動作しないのはなぜですか?
- 12. GrailsのcookieService.getはいつもnullを返しますか?
- 13. grailsはquartzジョブからtaglibを呼び出します
- 14. GrailsはGSPの外でtaglibを使用します
- 15. GrailsのConfig.groovy:grails.views.default.codec - なぜbase64ですか?
- 16. いくつかのレーキタスクが欠落しているのはなぜですか?
- 17. なぜMySqlがPMではなくAMで時刻を返すのですか?
- 18. Rails - なぜ1つはうまくいくのですか?
- 19. Python - いくつかのテストケースが失敗するのはなぜですか?
- 20. web.xml内のTagLibタグが見つからないエラー
- 21. TortoiseHgはデフォルトでいくつかのリビジョンを隠すのはなぜですか?
- 22. なぜggternはいくつかの点をプロットしないのですか?
- 23. show 0001が "0001"を返さないのはなぜですか?
- 24. CUPSがデフォルトプリンタを返さないのはなぜですか?
- 25. SignalProducerがシグナルを返さないのはなぜですか?
- 26. なぜstd :: count(_if)がsize_tではなくiterator :: difference_typeを返すのですか?
- 27. なぜsizeof( 'c')が1ではなく4を返すのですか?
- 28. 返品後にEclipseがいつもエラーを出すのはなぜですか?
- 29. asp.net webAPIがいつもtext/htmlを返すのはなぜですか?
- 30. テクスチャが正しく繰り返されないのはなぜですか?
これは、 'Closure'型のプロパティで、すぐに割り当てられるクロージャを取得します。 – cfrick
はい、ドキュメントの例では暗黙的に 'org.codehaus.groovy.grails.web.util.StreamCharBuffer'しか返されないので、なぜClosureを返すのか分かりません – iberck