Flutter 颤振((){})中的多圆括号是什么意思?

Flutter 颤振((){})中的多圆括号是什么意思?,flutter,dart,Flutter,Dart,((){})是什么意思?我应该在什么时候使用它?这是一个分配给变量的函数: (() { if (done && !operate) { return x; } else if (operate) return y; else {

((){})是什么意思?我应该在什么时候使用它?这是一个分配给变量的函数:

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

                      })(),
你可以这样称呼它:

var myFunc = () { ... };
Widget1(
    child: Widget2(
        child: Widget3(
            child: 

这是一个匿名函数:

myFunc();
() { ... }
遗憾的是,它没有分配给变量,也没有名字。下面是调用此函数的方法:

myFunc();
() { ... }

我该怎么用,什么时候用

如果您懒得创建函数(或者无法确定一个好的名称),并且您确定只使用一次,那么您可以使用这个函数

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

考虑一个场景:

(() { ... })() // Wrap the function in parenthesis and call it.
假设您想要Widget3的一个子项,它依赖于一个可以有多个值的变量x

您可以这样做:

var myFunc = () { ... };
Widget1(
    child: Widget2(
        child: Widget3(
            child: 
这很复杂。你可能不想那样做

相反,你可能想要

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

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

这是一个分配给变量的函数:

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

                      })(),
你可以这样称呼它:

var myFunc = () { ... };
Widget1(
    child: Widget2(
        child: Widget3(
            child: 

这是一个匿名函数:

myFunc();
() { ... }
遗憾的是,它没有分配给变量,也没有名字。下面是调用此函数的方法:

myFunc();
() { ... }

我该怎么用,什么时候用

如果您懒得创建函数(或者无法确定一个好的名称),并且您确定只使用一次,那么您可以使用这个函数

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

考虑一个场景:

(() { ... })() // Wrap the function in parenthesis and call it.
假设您想要Widget3的一个子项,它依赖于一个可以有多个值的变量x

您可以这样做:

var myFunc = () { ... };
Widget1(
    child: Widget2(
        child: Widget3(
            child: 
这很复杂。你可能不想那样做

相反,你可能想要

child: x == 0 ? WidgetA() : (x == 1? WidgetB() : (x == 3 ? WidgetC() : ...))
这看起来更干净。当然,如果您想在其他地方重用此函数,那么这根本不是一个好的选择,但是如果您确定这是唯一的地方,那么您可以创建这样的匿名函数并就地调用它。

请参阅。在
((){})(
(){}
的情况下,创建一个匿名函数,该函数不带任何参数,并且有一个空的正文,它周围的一组括号用于分组,然后最后一个
()
调用它。请参阅。在
((){})(
(){}
的情况下,创建一个匿名函数,该函数不带任何参数,并且有一个空的正文,它周围的一组括号用于分组,然后最后一个
()
调用它。