在这种情况下发生“正式参数名称预期”的原因是什么? [英] What cause of 'formal parameter name expected' occured in this case?
本文介绍了在这种情况下发生“正式参数名称预期”的原因是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我运行下面的代码,我得到一个错误,没有任何堆栈跟踪。
I run the code below and I got an error without any stack trace.
我的代码:
typedef Check<T>(T value, [onError(T value)]);
main () {
List<Check> checks = [
(str) => str != null,
(str) => !str.isEmpty
];
Check<String> doCheck = (String value, [onError(String)]) {
checks.forEach((Check check) {
if (?onError) {
check(value, onError);
} else {
check(value);
}
});
};
doCheck("10");
}
而且,我得到的错误。
file:///..()../sample.dart': Error: line 11 pos 12: formal parameter name expected
if (?onError) {
我想获得 onError
作为 doCheck
函数中的可选参数,并将此参数传递给检查
中的其他函数。
I want to get onError
as an optional parameter in doCheck
function, and pass this parameter to other functions in checks
.
我确认将可选参数转发给'one'函数...
I confirmed to forward an optional parameter to 'one' function...
这是对可选参数的限制吗? p>
Is this one of restrictions to optional parameters?
推荐答案
我会说这是一个错误(见 issue 8007 )。要解决此问题,您必须使用一个临时变量:
I would say it is a bug (see issue 8007). To work around it, you have to use a temporary variable :
typedef Check<T>(T value, [onError(T value)]);
main () {
List<Check> checks = [
(str) => str != null,
(str) => !str.isEmpty
];
Check<String> doCheck = (String value, [onError(String)]) {
final isOnErrorPresent = ?onError;
checks.forEach((Check check) {
if (isOnErrorPresent) {
check(value, onError);
} else {
check(value);
}
});
};
doCheck("10");
}
这篇关于在这种情况下发生“正式参数名称预期”的原因是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文