2015-09-06 68 views
2

我已经得到了应该接受两个不同势的数据类型作为输入的功能:你可以让一个函数接受两种不同的数据类型吗?

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; 
} 

但这返回一个错误:

The name 'add' is already defined

有没有一种方法,使在飞镖这项工作? 我知道类型是可选的,但我想知道是否有办法。

回答

1

达特不允许功能/方法重载。您可以为方法使用不同的名称,也可以使用可选或命名的可选参数来使用具有不同参数集的方法。

+1

感谢您的快速回答,我知道did'n它被称为方法重载,所以这是真正的帮助:) – Goudgeld1

+0

,我不会以任何方式使用可选参数 - 为两个函数使用不同的名称(推荐 - 他们做不同的事情)或(/和也)开启参数类型'vec3 add(other)=>(other是num)? addScalar(other):addVector(other);'。如果一个对象必须实现两个不同的接口,这两个有一个'add'方法后者可以是必要的(但是这通常超载太多的标志!) – lrn

1

不大可能C++或Java中,达特你不能做方法重载。但你可以使用一个名为像波纹管可选参数:

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; 
} 
+0

这并不提供答案的问题。要批评或要求作者澄清,请在其帖子下方留言。 – Loxx

+0

问题听起来像“你能让一个函数接受两种不同的数据类型吗?”。所以我可以和我一起展示它。 – kelegorm

相关问题