你能让一个函数接受两种不同的数据类型吗?

时间:2015-09-06 12:10:47

标签: dart overloading

我有一个应该接受两种不同数据类型作为输入的函数:

vec3 add(vec3 vec){
  this.x += vec.x;
  this.y += vec.y;
  this.z += vec.z;

  return this;
}
vec3 add(num scalar){
  this.x += scalar;
  this.y += scalar;
  this.z += scalar;

  return this;
}

但这会返回错误:

  

名称'add'已定义

有没有办法在Dart中完成这项工作? 我知道类型是可选的,但我想知道是否有办法。

3 个答案:

答案 0 :(得分:1)

Dart不允许函数/方法重载。您可以为方法使用不同的名称,也可以使用可选或命名的可选参数,以便能够使用具有不同参数集的方法。

答案 1 :(得分:1)

不像C ++或Java,在Dart中你不能做方法重载。但您可以使用命名的可选参数,如下面的文字:

vec3 add({num scalar, vec3 vec}) {
  if (vec3 != null) {
    this.x += vec.x;
    this.y += vec.y;
    this.z += vec.z;
  } else if (scalar != null) {
    this.x += scalar;
    this.y += scalar;
    this.z += scalar;
  }
  return this;
}

答案 2 :(得分:1)

尝试这种方式:

class TypeA {
  int a = 0;
}

class TypeB {
  int b = 1;
}

class TypeC {
  int c = 2;
}

func(var multiType) {
  if (multiType is TypeA) {
    var v = multiType;
    print(v.a);
  } else if (multiType is TypeB) {
    var v = multiType;
    print(v.b);
  } else if (multiType is TypeC) {
    var v = multiType;
    print(v.c);
  }
}

void main() {
  //Send Any Type (TypeA, TypeB, TypeC)
  func(TypeC());
}