在这种情况下发生“正式参数名称预期”的原因是什么? [英] What cause of 'formal parameter name expected' occured in this case?

查看:186
本文介绍了在这种情况下发生“正式参数名称预期”的原因是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆