Flutter 如何将函数内联指定给Dart中的值?

Flutter 如何将函数内联指定给Dart中的值?,flutter,dart,Flutter,Dart,我喜欢将函数的返回值赋给一个变量,但是是内联的。以下是您在不使用内联方式的情况下如何执行此操作 bool isValid() { if(a == b) return true; if(a == c) return true; return false; } bool result = isValid(); 我想要的是 bool result = () { if(a == b) return true; if(a == c) return true;

我喜欢将函数的返回值赋给一个变量,但是是内联的。以下是您在不使用内联方式的情况下如何执行此操作

bool isValid() {
    if(a == b) return true;
    if(a == c) return true;
    return false;
}

bool result = isValid();
我想要的是

bool result = () {
    if(a == b) return true;
    if(a == c) return true;
    return false;
}
但是,它会显示错误

无法将参数类型“Null Function()”分配给参数类型“bool”


如何实现这一点?

您正在定义一个lambda表达式。这与Javascript、Typescript或许多其他语言中的工作方式相同

bool result = () {
    if(a == b) return true;
    if(a == c) return true;
    return false;
}
此代码定义类型为
()->bool
(不接受任何参数并返回bool)的匿名函数。而
结果
变量的实际类型是bool,因此编译被中断(
()->bool
bool
是不匹配的类型)

要使其正确,只需调用函数即可获得结果

bool result = () {
    if(a == b) return true;
    if(a == c) return true;
    return false;
}();
现在定义一个匿名函数(lambda),然后调用它,结果是bool。类型是匹配的,没有错误

定义函数并立即调用它是一种相当罕见的行为。它在Javascript中用于使用闭包(某种私有变量)为变量创建单独的作用域。我建议您将代码移动到某种类别,或将
a、b、c
参数直接传递到函数:

bool isValid(a, b, c) {
    /* Your code */
}

这种方式更通用,可以重复使用。立即调用lambda通常是糟糕设计的标志。

出于兴趣,为什么需要将其内联?当然,仅仅创建一个函数来处理逻辑就可以了?