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. javascript closureなぜvarが未定義になるのですか
- 4. 'closure'型のオブジェクトはサブセット化できないのはなぜですか?
- 5. Grails/Springのトランザクション動作がこの場合にはうまくいかないのはなぜですか?
- 6. なぜ "web.xml"ファイルが役に立たないのですか<taglib>
- 7. Grailsがキャッシュを無効にするのはなぜですか?
- 8. いくつかのデータでmgcvのbamが遅いのはなぜですか?
- 9. Grails - 404ファイルが見つかりません - なぜですか?
- 10. $ _POSTにいくつかの値がないのはなぜですか?
- 11. JSONがPHPから正しく返されないのはなぜですか?
- 12. grailsはquartzジョブからtaglibを呼び出します
- 13. GrailsはGSPの外でtaglibを使用します
- 14. GrailsのConfig.groovy:grails.views.default.codec - なぜbase64ですか?
- 15. Grailsの@TransactionalサービスでdomainObject.discard()が動作しないのはなぜですか?
- 16. なぜFacebookのバッチAPIリクエストがいつかnullを返すのですか?
- 17. Find Closureの引数に2つのアンパサンドが必要なのはなぜですか?
- 18. GrailsのcookieService.getはいつもnullを返しますか?
- 19. いくつかのPythonサブモジュールをインポートできないのはなぜですか?
- 20. なぜ、返された約束を返すのではなく、新しい約束を返すのですか?
- 21. いくつかのレーキタスクが欠落しているのはなぜですか?
- 22. Python - いくつかのテストケースが失敗するのはなぜですか?
- 23. Rails - なぜ1つはうまくいくのですか?
- 24. なぜMySqlがPMではなくAMで時刻を返すのですか?
- 25. TortoiseHgはデフォルトでいくつかのリビジョンを隠すのはなぜですか?
- 26. web.xml内のTagLibタグが見つからないエラー
- 27. なぜggternはいくつかの点をプロットしないのですか?
- 28. 私のtf_gradientsが返されないのはなぜですか?
- 29. 出力が値を返さないのはなぜですか?
- 30. SignalProducerがシグナルを返さないのはなぜですか?
これは、 'Closure'型のプロパティで、すぐに割り当てられるクロージャを取得します。 – cfrick
はい、ドキュメントの例では暗黙的に 'org.codehaus.groovy.grails.web.util.StreamCharBuffer'しか返されないので、なぜClosureを返すのか分かりません – iberck