【问题标题】:Why does Grails require that I use `def` instead of `void` in a controller?为什么 Grails 要求我在控制器中使用 `def` 而不是 `void`?
【发布时间】:2012-03-04 01:06:25
【问题描述】:

采取以下控制器:

package test

class TestController {
    static defaultAction = "test"

    def test() {
        render "test"
    }
}

为什么test 定义为def test() { 而不是void test() {def 关键字不是仅用于脚本中的闭包或函数(即不在 Groovy 类中)吗?

【问题讨论】:

    标签: grails groovy grails-controller


    【解决方案1】:

    render 是无效的,所以在这种情况下,test 操作可能是 void,但在您返回模型映射的情况下,操作必须是非无效的:

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

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

    【讨论】:

      【解决方案2】:

      Burt 的回答是正确的,但我遇到的真正问题是我误解了 def 是什么。与其像 JavaScript 中的 var,不如把它想象成 Java 中的 Object

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

      var test = function() {
          alert("test");
      }

      而实际上它就像 (Java)

      public Object test() {
          return someObject;
      }

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

      这有助于我的 Java 大脑思考

      def bar = "foo";
      

      作为

      Object bar = "foo";
      

      【讨论】:

        猜你喜欢
        • 2017-03-27
        • 2010-10-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        • 2011-05-01
        • 2013-06-05
        • 2013-02-08
        • 1970-01-01
        相关资源
        最近更新 更多