3 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個贊
Gilad和Jason(重新命名)給出的原因都是避免過載的很好理由。吉拉德(Gilad)的原因集中在為什么重載通常是有問題的,而杰森(Jason)的原因集中在為什么在其他Scala功能中它是有問題的。
在Jason的列表中,我要補(bǔ)充一點(diǎn),重載與類型推斷的交互作用很差??紤]:
val x = ...
foo(x)
推斷類型的x更改可能會更改foo調(diào)用哪個方法。該值的x需求不會改變,只是推斷類型的x,這可能發(fā)生的各種原因。
由于給出的所有原因(還有更多我確定會忘記的原因),我認(rèn)為應(yīng)盡量少使用方法重載。

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個贊
我認(rèn)為建議不是特別針對scala的,而是針對OO的(到目前為止,我知道scala應(yīng)該是OO和功能之間的最佳選擇)。
覆蓋是好的,它是多態(tài)性的核心,并且是OO設(shè)計(jì)的核心。
另一方面,過載更成問題。使用方法重載很難辨別哪個方法將被真正調(diào)用,并且確實(shí)經(jīng)常引起混淆。也很少有理由說明為什么確實(shí)需要重載。大多數(shù)時候,可以用另一種方法解決問題,我同意超載是一種氣味。
這里的一篇文章很好地解釋了“超載是混亂的根源”的含義,我認(rèn)為這是不鼓勵這樣做的主要原因。它適用于Java,但我認(rèn)為它也適用于Scala。
添加回答
舉報