在这种情况下,出现了“预期正式参数名称”的原因是什么?

时间:2013-01-20 13:44:59

标签: dart

我运行下面的代码,我得到一个没有任何堆栈跟踪的错误。

我的代码:

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函数中的可选参数,并将此参数传递给checks中的其他函数。

我确认将一个可选参数转发给'one'函数......

这是对可选参数的限制吗?

1 个答案:

答案 0 :(得分:2)

我想说这是一个错误(见issue 8007)。要解决它,您必须使用临时变量:

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