为什么Scala的特征从右到左执行?

时间:2013-07-12 17:22:27

标签: scala

例如,这个:

val queue = new BasicIntQueue with Doubling with Incrementing with Filtering
queue.put(1)
println(queue.get())

将打印:

Filtering
Incrementing
Doubling
put
4

至于我,如果按照我编写的操作顺序从左到右执行它会更具可读性。

4 个答案:

答案 0 :(得分:7)

因为它遵循与继承相同的模式。想象一下你有这样的事情:

class BasicIntQueue 
class Doubling extends BasicIntQueue
class Incrementing extends Doubling
class Filtering extends Incrementing

val queue = new Filtering

您将获得与您所见相同的结果:首先执行Filtering,然后传递到Incrementing,然后传递到Doubling,最后传递到BasicIntQueue

答案 1 :(得分:6)

不要想'执行',因为它不是......想'分层':如果你在右边添加另一个with XYZ,你就在顶部添加了另一层。

答案 2 :(得分:3)

事实更为复杂,请参阅Language Reference“5.1.2班级线性化”(第56页)或Jim McBeath的解释

答案 3 :(得分:0)

解决多重继承的钻石问题