Я изучаю Groovy и наткнулся на это любопытное поведение. Выполнение следующего кода в groovysh
работает без проблем, но сохранение его как foo.groovy и запуск через groovy foo.groovy
приводит к MissingPropertyException: No such property: a for class: foo
в строке 3:
def a(n) { n*n }
def x(m) { m(2) }
x(a)
Изменение a
на закрытие a = { n -> n*n }
устраняет эту ошибку, но я хотел бы избежать этого для моего реального варианта использования, который является более сложным. Я также нашел этот вопрос, который касается той же проблемы внутри класса, но решение с использованием this.&
неприменимо, так как мой метод не находится внутри класса и исходит из фона Python, и я хотел бы сохранить его таким образом.
Что я делаю неправильно? И где такое поведение задокументировано?