为什么Grails要求我在控制器中使用'def'而不是'void'?

为什么Grails要求我在控制器中使用'def'而不是'void'?,grails,groovy,grails-controller,Grails,Groovy,Grails Controller,以以下控制器为例: package test class TestController { static defaultAction = "test" def test() { render "test" } } 为什么test是用def test(){定义的,而不是像void test(){这样的东西?def关键字不是只用于脚本中的闭包或函数(即不在Groovy类中)?渲染无效,因此在这种情况下,测试操作可以是无效,但在返回模型贴图的情况下,操作必须

以以下控制器为例:

package test

class TestController {
    static defaultAction = "test"

    def test() {
        render "test"
    }
}

为什么
test
是用
def test(){
定义的,而不是像
void test(){
这样的东西?
def
关键字不是只用于脚本中的闭包或函数(即不在Groovy类中)?

渲染
无效,因此在这种情况下,
测试
操作可以是
无效
,但在返回模型贴图的情况下,操作必须是非无效的:

def create() {
   [personInstance: new Person(params)]
}

由于有些操作可以返回值,而有些操作不能返回值,因此一般语法必须返回
def
,以支持所有变量。

Burt的答案是正确的,但我遇到的真正问题是我误解了
def
是什么。与JavaScript中的
var
不同,你可以将其想象为
对象爪哇

我认为使用
def
就像做(JavaScript)一样

而实际上它就像(Java)

它不是一种不同的函数/闭包,它就像一种返回类型-
def
可以应用于任何对象(Groovy没有数据原语,因此任何值也都是一个对象,这与Java不同)

它帮助我的Java大脑思考

def bar = "foo";
作为

public Object test() {
    return someObject;
}
def bar = "foo";
Object bar = "foo";