2011-09-17 10 views
4

groovyでクロージャの継承はどのように機能しますか?知っておくべき特別なことはありますか?私のアプリケーションは、プラグインコントローラを拡張することです。プラグインコントローラは、アップデートが必要な場合は一人で離れる必要があります。groovyクロージャの継承

答えて

7

閉鎖継承はそれほど意味がありません(とにかくそれらを使用する傾向があります)。実際にはクロージャはClosureクラスのインスタンスです。 Closureのサブクラスを作成した場合、それをサブクラス化できますが、そうではありません。たとえば、コントローラでは、アクションをインラインインスタンスとして定義します。

def list = { 
... 
} 

これら

は、私たちが list()を呼び出すことができるという点で、メソッドのように扱われているが、 call()Closureクラスのインスタンスメソッドであるため、それは、 list.call()のためだけ糖衣構文です。

Grails 2.0では、コントローラのアクションを作成するための方法として、メソッドを使用する方法がありますが、クロージャは下位互換性のためにサポートされています。この切り替えの主な理由の1つは、オーバーロードとオーバーライドをサポートすることです。インラインクロージャでは不可能です(少なくとも実用的ではありません)。基本クラスインスタンスと同じ名前のサブクラスでクロージャインスタンスを定義できますが、StackOverflowError

+0

バートになるので、super.list()を呼び出すことはできません。返信とサポートに感謝します。私はまだSpring Security UIのプラグインと他のものを統合していますし、あなたの答えとさまざまなオプションを消化しているので、あなたの方法で質問を発射しようとするかもしれません。それを楽しみにしていますが、私は現在Grails 2が "私のため"ではないと仮定しています。金融取引を含むウェブサイトの公開/堅牢性の必要性や、 2.0で動作しませんか?)。私は本当にそれがわかりません - ただの大まかな仮定 - まだグラエルの学習曲線を上っているので、どんなコメント/アドバイスも歓迎します。 – Ray

+0

2.0はかなり安定しています.2.0最終的に修正された未解決の問題をチェックアウトしてください。しかし、あなたは良い点を作っています - プラグインの中にはまだ更新されていないものがあります。ほとんどがうまくいくはずで、テストで問題が発見されます。 –