采取以下控制器:
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 类中)吗?
render
是无效的,所以在这种情况下,test
动作可能是void
,但在您返回模型映射的情况下,动作必须是非无效的:
def create() {
[personInstance: new Person(params)]
}
由于有些动作可以返回一个值而有些则不能,所以通用语法必须返回def
以支持所有变体。
Burt 的回答是正确的,但我遇到的真正问题是我误解了def
它的含义。var
你可以把它想象成Java 中的样子,而不是像JavaScript 中的那样Object
。
我认为使用def
就像做(JavaScript)
var test = function() {
alert("test");
}
而实际上它就像(Java)
public Object test() {
return someObject;
}
它不是一种不同的函数/闭包,它就像一个返回类型——<code>def 可以应用于任何对象(Groovy 没有数据原语,所以任何值也是一个对象,这与 Java 不同)。
它帮助我的 Java 大脑思考
def bar = "foo";
作为
Object bar = "foo";