Извините за очевидный подход, но лучший способ должен был бы сделать:
for item in my_generator:
print item
Теперь Вы обнаружили, что генератор пуст при использовании его. Конечно, объект никогда не будет отображаться, если генератор будет пуст.
Это не может точно согласоваться с Вашим кодом, но это - то, для чего идиома генератора: итерация, поэтому возможно, Вы могли бы изменить свой подход немного или не использовать генераторы вообще.
При преобразовании метода в замыкание с использованием нотации . & вы опускаете параметры. f. & method (6) аналогичен вызову f.method (6), который вернет 16, поэтому в вашем примере вы передаете 16 в invokeClosure, а не закрытие. Это вызывает следующее исключение, поскольку класс Integer не имеет метода вызова:
Исключение выброшено: нет сигнатуры метода: java.lang.Integer.call ()
Ниже передается указатель метода для f.method в invokeClosure и будет тем, как вы обычно используете. &.
class Foo {
def method(def param) {
param + 10
}
}
def invokeClosure = {Closure closure ->
return closure.call(6) // can leave off .call
}
def f = new Foo()
invokeClosure f.&method
Как вы отметили, следующее будет работать:
invokeClosure {f.method(6)}
Это потому, что вы передаете замыкание, которое не принимает параметров, поэтому closure.call () работает в этом случае .