2015-09-06 106 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

相關問題