在这个时髦的代码中有什么问题?

时间:2011-06-08 09:00:05

标签: groovy

您好我有以下Groovy代码:

package fp;
abstract class Function
{
        public static Closure map = { action, list -> return list.collect(action) }

}

此代码取自Groovy IBM developer works系列。此代码的文件名与类名称Function相同(即使在Groovy的情况下不需要)。当我尝试将此代码运行为:

groovy Function.groovy 

当我跑步时,我得到以下错误:

Caught: groovy.lang.GroovyRuntimeException: This script or class could not be run.
It should either: 
- have a main method, 
- be a JUnit test, TestNG test or extend GroovyTestCase, 
- or implement the Runnable interface.

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

对我来说似乎很清楚。

要运行Groovy脚本,解释器必须在其中找到一些可直接执行的代码。

显然不是你的脚本的情况,它确实加载完美,但不能执行,因为它没有语句,只有抽象类的声明

答案 1 :(得分:2)

确实源文件只包含类定义。如果要将其作为Groovy脚本运行,则必须添加一些将调用Function.map方法的代码。

// File: Functor.groovy
package fp

abstract class Functor {
    static Closure map = { action, list -> return list.collect(action) }
}

def twelveTimes = { x -> return 12 * x }
def twelveTimesAll = Functor.map.curry(twelveTimes)
def table = twelveTimesAll([1, 2, 3, 4])
println "table: ${table}"

现在您可以执行$ groovy Functor.groovy来运行脚本。