4

たとえば、Aという名前のクラスがある場合、Pythonと同じように、オブジェクトを呼び出し可能にすることはできますか?例えば ​​:


def myObject = new A()
myObject()

そしてそれはいくつかのオブジェクトメソッドを呼び出すでしょう。できますか?

4

1 に答える 1

6

Groovy では、クロージャのみがデフォルトで呼び出し可能です。たとえば、クラスはそのままでは呼び出し可能ではありません。必要に応じて、タイプのExpandoMetaClassに call メソッドを動的に追加して、そのタイプのすべてのインスタンスをcallableにすることができます。

ヒント: GroovyConsoleを使用してすべてのコード サンプルを試すことができます。

Groovy では、クロージャはデフォルトで呼び出し可能です。

// A closure
def doSomething = { println 'do something'}
doSomething()

// A closure with arguments
def sum = {x, y -> x + y}
sum(5,3)
sum.call(5,3)

// Currying
def sum5 = sum.curry(5)
sum5(3)

特定の型のすべてのインスタンスを呼び出し可能にするには、call メソッドをそのメタ クラスに動的に追加します。

MyObject.metaClass.call = { prinlnt 'I was called' }
def myObject = new MyObject()
myObject()

特定のインスタンスのみを呼び出し可能にする場合は、呼び出しメソッドをそのメタ クラスに動的に追加できます。

def myObject = new MyObject()
myObject.metaClass.call = { println 'Called up on' }
myObject()
于 2009-07-28T20:33:03.760 に答える