2011-06-23 6 views
2

プログラミング私は私のinitにこの行を挿入()私のブートストラップクラスのGrailsの - メソッドはグローバル使用可能にすると、メタクラス

Integer.metaClass.minutes = { 60000L * delegate } 

私は、ジョブ・クラス(クォーツプラグイン)から、それを使用することができませんでした。私はこのコード行をどこか別の場所に置いてそれをグローバルな変更にしますか?

また、Grailsのすべてのクラスで関数を使用できるようにするにはどうすればいいかと思いました。 グローバル関数のようです。 Objectメタクラスを拡張することはできますか?それとも良い方法がありますか?

+1

'def time = use(TimeCategory){10.minutes.toMilliseconds()}' ...これはあなたの質問に答えません;-) –

+0

非常にクールです。 useとTimeCategoryのことを説明できますか?それについてのベストレファレンス?コメント上の恐ろしい+1 – BuddyJoe

+1

@tyndall ['TimeCategory'](http://groovy.codehaus.org/api/org/codehaus/groovy/runtime/TimeCategory.html)はGroovy [' Category'](http: //groovy.codehaus.org/Groovy+Categories)。 'use'関数は一時的にクラスに機能を追加する方法と考えることができるので、' use(){...} 'ブロックの中ではカテゴリが有効であり、整数は時間ベースのプロパティで修飾されます。メソッドを 'metaClass'に追加するのと同様ですが、よりローカライズされています。 –

答えて

1

グローバルな変更を加えるために、このコードを別の場所に置いていますか?

使用私もGrailsの内のすべてのクラスの内部機能を利用できるようにするための最良の方法を思っていたDelegatingMetaClass

。グローバル関数のように。 Objectメタクラスを拡張することはできますか?それとも良い方法がありますか?

この関数をすべてのクラスのインスタンスメソッドにしたい場合は、それをObject(上記参照)のmetaClassに追加する必要があります。そうでない場合は、関数をクラスの静的メソッドとして追加するだけです。つまり、Javaで関数にグローバルにアクセスできるようにする方法と同じです。

+0

質問の第2部分では、私はいつも何かをするためのクイックダイアル機能を作成しようとしていました。 Ex。 GORMを使って私のシステムでFacebookIDに基づいてユーザーをすばやく掴むことができます。 FYI - 「Quickdial」はjQuery $やUnderscoreJS _のように奇妙な文字を使用したくないという単純なメソッド名です。 – BuddyJoe

+0

私はこれが働いたと思った。そのような運はありません。あなたはStringMetaClassの例のどこにクラスを置いていますか?私は記事の2番目の方法を使用しています。 src/groovyでは? – BuddyJoe

関連する問題