2011-06-08 82 views
-1

嗨,我有以下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. 

任何一個可以幫助我解決這個問題?

+0

不是說它有所作爲,但IBM devel示例類是Functor,而不是Function。你希望能夠直接調用抽象類嗎?只需明確地遵循IBM devel示例,即可獲得您可以從中學習的合理輸出。祝你好運! – virtualeyes 2011-06-08 09:21:56

回答

4

似乎對我來說足夠清楚。

要運行Groovy腳本,解釋器必須找到一些直接可執行的代碼。

很明顯,您的腳本並非如此,確實可以完美加載,但無法執行,因爲它沒有語句,只有抽象類的聲明

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來運行腳本。