【问题标题】:Code works in shell but not as a script - MissingPropertyException代码在 shell 中工作,但不能作为脚本工作 - MissingPropertyException
【发布时间】:2013-10-29 21:37:00
【问题描述】:

我正在学习 Groovy,遇到了这种奇怪的行为。在groovysh 中执行以下代码没有问题,但将其保存为“foo.groovy”并通过groovy foo.groovy 运行它会导致第3 行中的MissingPropertyException: No such property: a for class: foo:

def a(n) { n*n }
def x(m) { m(2) }
x(a)

将a 更改为闭包a = { n -> n*n } 会使这个错误消失,但我想在更复杂的实际用例中避免这种情况。我还发现 this question 处理相同的问题类内,但使用 this.& 的解决方案不适用,因为我的方法不在类内,并且即将到来从 python 背景我想保持这种方式。

我做错了什么?这种行为记录在哪里?

【问题讨论】:

    标签: groovy higher-order-functions


    【解决方案1】:

    看起来像groovysh 商店:

    def a(n) { n*n }
    

    作为 MethodClosure 到名为 a 的绑定变量中

    这不会在 groovysh 之外发生,正如您所见,您需要将 a 定义为闭包:

    def a = { n -> n*n }
    def x( m ) { m( 2 ) }
    x(a)
    

    或者使用方法引用运算符&:

    def a(n) { n*n }
    def x(m) { m(2) }
    x( this.&a )
    

    【讨论】:

      猜你喜欢
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 2011-05-11
      • 2016-03-10
      • 2017-06-05
      • 2022-01-12
      • 2018-05-17
      相关资源
      最近更新 更多