为什么Jorge Ortiz建议避免方法重载?
3 回答
萧十郎
TA贡献1815条经验 获得超13个赞
Gilad和Jason(重新命名)给出的原因都是避免过载的很好理由。吉拉德(Gilad)的原因集中在为什么重载通常是有问题的,而杰森(Jason)的原因集中在为什么在其他Scala功能中它是有问题的。
在Jason的列表中,我要补充一点,重载与类型推断的交互作用很差。考虑:
val x = ...
foo(x)
推断类型的x更改可能会更改foo调用哪个方法。该值的x需求不会改变,只是推断类型的x,这可能发生的各种原因。
由于给出的所有原因(还有更多我确定会忘记的原因),我认为应尽量少使用方法重载。
猛跑小猪
TA贡献1858条经验 获得超8个赞
我认为建议不是特别针对scala的,而是针对OO的(到目前为止,我知道scala应该是OO和功能之间的最佳选择)。
覆盖是好的,它是多态性的核心,并且是OO设计的核心。
另一方面,过载更成问题。使用方法重载很难辨别哪个方法将被真正调用,并且确实经常引起混淆。也很少有理由说明为什么确实需要重载。大多数时候,可以用另一种方法解决问题,我同意超载是一种气味。
这里的一篇文章很好地解释了“超载是混乱的根源”的含义,我认为这是不鼓励这样做的主要原因。它适用于Java,但我认为它也适用于Scala。
添加回答
举报
0/150
提交
取消