首页 > 解决方案 > 颤振((){})()中的多圆括号是什么意思?

问题描述

 (() {
                        if (done && !operate) {
                          return x;
                        } else if (operate)
                          return y;
                        else {
                          return z;
                        }

                      })(),

(() {} )() 是什么意思,我应该什么时候使用它?

标签: flutterdart

解决方案


这是分配给变量的函数:

var myFunc = () { ... };

你可以这样称呼它:

myFunc();

这是一个匿名函数:

() { ... }

可悲的是,它没有分配给变量并且没有名称。所以,这就是你如何调用这个函数:

(() { ... })() // Wrap the function in parenthesis and call it.

如何,我应该什么时候使用它?

如果你懒得做一个函数(或者不能决定一个好名字)并且你确定你只会使用它一次,你可以使用这个。

它可能看起来毫无用处,因为这里没有提供代码可重用性,但是在构建小部件时它会很有帮助。

考虑一个场景:

Widget1(
    child: Widget2(
        child: Widget3(
            child: 

假设,你想要一个 Widget3 的孩子,它依赖于一个可以有多个值的变量x 。

你可以这样做:

child: x == 0 ? WidgetA() : (x == 1? WidgetB() : (x == 3 ? WidgetC() : ...))

这很复杂。你可能不想这样做!

相反,您可能想要,

child: ((){
    switch(x) {
        case 0:
            return WidgetA();
        case 1:
            return WidgetB();
        case 2:
            return WidgetC();
        .....
    }
})()

这看起来更干净。当然,如果你想在其他地方重用这个函数,这根本不是一个好的选择,但如果你确定这是唯一的地方,那么你可以像这样创建一个匿名函数并就地调用它。


推荐阅读