Tom*_*nal 8 grails groovy grails-controller
拿以下控制器:
package test
class TestController {
static defaultAction = "test"
def test() {
render "test"
}
}Run Code Online (Sandbox Code Playgroud)
为什么test定义def test() {而不是像void test() {?是不是def只在一个脚本用于关闭或功能(即不是在Groovy类)的关键字?
Bur*_*ith 16
render是无效的,所以在这种情况下test动作可能是void,但是如果你返回一个模型图,那么动作必须是非空的:
def create() {
[personInstance: new Person(params)]
}
Run Code Online (Sandbox Code Playgroud)
由于某些操作可以返回值而某些操作不返回,因此一般语法必须返回def以支持所有变体.
伯特的回答是正确的,但我遇到的真正问题是我误解了def是什么.而不是像var在JavaScript中一样,你可以像Object在Java中一样思考它.
我认为使用def就像在做(JavaScript)
var test = function() {
alert("test");
}Run Code Online (Sandbox Code Playgroud)
而实际上它就像(Java)
public Object test() {
return someObject;
}Run Code Online (Sandbox Code Playgroud)
它不是一种不同的函数/闭包,它就像一个返回类型 - def可以应用于任何对象(Groovy没有数据原语,因此任何值也是一个对象,与Java不同).
它有助于我的Java大脑思考
def bar = "foo";
Run Code Online (Sandbox Code Playgroud)
如
Object bar = "foo";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2593 次 |
| 最近记录: |