【问题标题】:What is the difference between methods being called inside ananynomous methods and methods directly assigned to properties在匿名方法中调用的方法和直接分配给属性的方法有什么区别
【发布时间】:2020-07-01 13:29:06
【问题描述】:

谁能解释一下我以两种方式调用方法 doSomeAction 之间的区别。

doSomeAction() {
        ...
}
 

   
  GestureDetector() {
    onTap: () {
      doSomeAction();
    }
  }

  GestureDetector() {
    onTap: doSomeAction;
  }

【问题讨论】:

    标签: flutter


    【解决方案1】:

    唯一的区别是你有一个额外的间接。

    这里,当点击发生时,会调用一个函数,它只会调用你的函数:

    onTap: () { doSomeAction(); }
    

    虽然这个版本直接调用你的函数。中间没有空重定向:

    onTap: doSomeAction;
    

    如果您的方法签名不匹配并且您必须对其进行处理,您只需要第一个版本。如果您已经有一个具有所需确切签名的方法,并且您只想直接调用它,那么您可以像在版本 #2 中一样传递它。在这种情况下,版本 #1 只是很多不必要的额外字符。

    【讨论】:

    • 如果我使用 onTap 会发生什么:doSomeAction()
    • 您很可能会遇到编译错误。那是无效的。只有当你的方法返回另一个方法时它才有效。
    • stackoverflow.com/questions/59497620/…。您能否查看该链接并查看(彼得哈达德的)回复。他说要立即处决……你能解释一下他想说什么吗
    • 他想说“onTap”需要一个函数引用。稍后要调用的函数的名称。函数的名称不带 (),因为如果添加 () if 将实际调用函数而不是传递它的引用。
    【解决方案2】:

    两者在功能上相似。

    但是,主要区别在于,如果将操作包装在匿名函数中,则可以有多个操作。例如:

      GestureDetector() {
        onTap: () {
          // Action 1
          // Action 2
          // Action 3 and so on
        }
      }
    

    另一方面,如果您直接分配它,它将允许您执行单个操作

    希望对你有所帮助。

    【讨论】:

      【解决方案3】:

      当您编写onTap: doSomeAction 时,您实际上并没有调用它——您只是说按下按钮时将调用doSomeAction 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多