1

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

我的代码:

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.

我确认将可选参数转发给“一个”函数......

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

4

1 回答 1

2

我会说这是一个错误(参见问题 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");
}
于 2013-01-20T14:19:18.573 回答