8

次のコントローラーを使用します。

package test

class TestController {
    static defaultAction = "test"

    def test() {
        render "test"
    }
}

なぜのようなものの代わりにでtest定義されているのですか?キーワードは、スクリプト内のクロージャまたは関数にのみ使用されていませんか(つまり、Groovyクラスでは使用されていません)?def test() {void test() {def

4

2 に答える 2

16

renderはvoidであるため、この場合、testアクションはである可能性がvoidありますが、モデルマップを返す場合、アクションはvoid以外である必要があります。

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

一部のアクションは値を返すことができ、一部は返さないため、defすべてのバリアントをサポートするには、一般的な構文を返す必要があります。

于 2012-02-12T06:59:19.893 に答える
6

バートの答えは正しいですが、私が抱えていた本当の問題は、私が何であるかを誤解したことdefです。JavaScriptのようではなく、Javavarのように考えることができます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";
于 2012-02-12T07:25:12.800 に答える