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

问题描述 投票:0回答:3

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

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

由于我不想在

transform
不执行任何操作时跳过此方法,因此我想为
transform
方法提供默认值,如下所示:

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

不幸的是,编辑告诉我

预期持续预期

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

dart
3个回答
17
投票

如果你想初始化一个函数参数,它也是你的类的一个字段,我建议:

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){...}
}

9
投票

将默认参数写在方括号内

[]

DummyFunctin(String var1, int Var2,[ String var3 = "hello", double var4 = 3.0, List<int> var5 = [2,4,5,6],] ){
// some calculation
// return something
}

DART 备忘单 适用于 JavaScript 或 TypeScript 开发人员


7
投票

您可以将默认函数定义为私有方法:

_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)]) {
 transform ??= (v) => v;
  ...
}
© www.soinside.com 2019 - 2024. All rights reserved.