【问题标题】:Use spread operator for function arguments [duplicate]对函数参数使用扩展运算符 [重复]
【发布时间】:2020-10-13 15:19:10
【问题描述】:

因此,从 Dart 2.3 开始,可以选择将展开运算符用于列表 (...)。

我试图将它用于函数参数。这是我的具体用例:

String s = 'en_US';

Locale(...s.split('_'));             // here i get the error

我也试过了:

Locale(...(s.split('_')));           // also error

有没有办法让它工作? 因为

Locale(s.split('_')[0], s.split('_')[1]);

真的不好看。

【问题讨论】:

    标签: dart


    【解决方案1】:

    不,它不起作用。扩展运算符在异构序列中工作,其中引入多少元素对程序正确性无关紧要。这意味着集合文字,而不是参数列表。

    最简单的方法是只使用一个辅助变量:

    var splits = s.split('_');
    ... Locale(splits[0], splits[1]) ...
    

    【讨论】:

      【解决方案2】:

      您尝试做的不是有效的 dart 语法,您可能会想到 JS。

      如果Locale 是一个函数并且您不想手动传递每个参数,您可以使用Function 类的apply 函数。这允许您使用作为List 传递的参数动态调用函数。

      Function.apply(Locale, s.split('_'));
      

      但是,如果它是构造函数,则必须创建一个静态工厂构造函数,然后可以将其传递给 apply 函数。

      如果在您的环境中可用,则可能有更简单的反射方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-12
        • 2020-04-13
        • 2020-11-20
        • 1970-01-01
        • 2019-09-04
        • 1970-01-01
        • 2019-10-10
        相关资源
        最近更新 更多