如何指定函数参数的默认值?

时间:2013-03-11 09:21:41

标签: dart

此函数应使用给定的函数transform转换列表的每个元素:

void _doSomething(List<Something> numbers, [transform(Something element)]) {...}

由于我不希望在transform不应该执行任何操作时跳过此方法,因此我想为此transform方法提供默认值:

void _doSomething(List<Something> numbers, 
                  [transform(Something element) = (v) => v]) {...}

不幸的是,编辑告诉我

  

预期的预期常数

是否有一些解决方法或根本不可能(或根本不应该这样做)?

2 个答案:

答案 0 :(得分:1)

您可以将默认功能定义为私有方法:

_defaultTransform(Something v) => v;
void _doSomething(List<Something> numbers, 
                  [transform(Something element) = _defaultTransform]) {...}

或者检查这样的论点:

void _doSomething(List<Something> numbers, [transform(Something element)]) {
  if (!?transform) transform = (v) => v;
  ...
}

或者像Ladicek建议:

void _doSomething(List<Something> numbers, [transform(Something element)]) {
  if (transform == null) transform = (v) => v;
  ...
}

答案 1 :(得分:1)

如果要初始化也是类的字段的Function参数,我建议:

class MyClass{
  Function myFunc;
  MyClass({this.myFunc = _myDefaultFunc}){...}
  static _myDefaultFunc(){...}
}

或更合适的是:

typedef SpecialFunction = ReturnType Function(
                              FirstParameterType firstParameter, 
                              SecondParameterType secondParameter);

class MyClass{
  SpecialFunction myFunc;
  MyClass({this.myFunc = _myDefaultFunc}){...}
  static ReturnType _myDefaultFunc(FirstParameterType firstParameter, 
                                   SecondParameterType secondParameter){...}
}