gpt4 book ai didi

flutter - 如何将内联函数分配给 Dart 中的值?

转载 作者:IT王子 更新时间:2023-10-29 07:09:02 27 4
gpt4 key购买 nike

我喜欢将函数的返回值赋值给一个变量,但是是内联的。以下是非内联方式。

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;
}

但是它显示错误

The argument type 'Null Function()' can't be assigned to the parameter type 'bool'

我如何实现这一目标?

最佳答案

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

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

这段代码定义了一个类型为 () -> bool 的匿名函数(不接受任何参数并返回 bool)。而 result 变量的实际类型是 bool 所以编译被破坏了(() -> boolbool 是不匹配的类型) .

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

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

现在您定义了一个匿名函数 (lambda),然后调用它,因此结果为 bool。类型匹配,没有错误。

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

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

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

关于flutter - 如何将内联函数分配给 Dart 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57377328/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com