1
のGroovyのすべてで
は、偶数実行時に既存のクラス内の既存のメソッドをオーバーライドすることができますGroovyではGroovyのオーバーライド「または」を
assert 1.getClass() == Integer
オブジェクトである
Integer.metaClass.or = { right -> println "$delegate or $right" }
これまでのところ
1.or("hello") // prints: 1 or hello
1 | "hello" // prints: 1 or hello
とても良い|()
今、私たちはパイプを使用して任意の数に電話またはオペレータできます。何も起こらないのはなぜ
- :それでは、整数
2.or(3) // nothing happens 2 | 3 // nothing happens
でまたはに整数を試してみましょうこれは私の質問に私たちをリード?
- これは最適化のバグですか?
- どのようにしてどのタイプにしても機能させるには?
をちょうどそれだそれ、それは速かった、ありがとう! –
カテゴリを使用せずに、オーバーロードされたすべてのカスタムまたはカスタムをオーバーライドする方法を知っていますか? –
'or'メソッドは3つの場所で利用できるようです。 [Boolean](https://github.com/groovy/groovy-core/blob/master/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java#L10439)に1回、[Number](https ://github.com/groovy/groovy-core/blob/master/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java#L9405)、一度[BitSet](https://github.com/ groovy/groovy-core/blob/master/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java#L9472)を参照してください。 1つのメソッドでオーバーライドするには、3つの型付きクロージャのすべてを1つのメソッドに委譲する必要があります。 –