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通常是糟糕设计的标志。出于兴趣,为什么需要将其内联?当然,仅仅创建一个函数来处理逻辑就可以了?