2013-07-12 50 views
5

例如,此:为什么斯卡拉的特质从右向左执行?

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

会打印:

Filtering 
Incrementing 
Doubling 
put 
4 

至于我,它会如果从左至右执行更具可读性,在为了我写操作。

+2

的解释,我并不十分熟悉斯卡拉,但我猜只是怎么说代码被解析。所以它是'(((带有增量的新的BasicIntQueue)带有递增)',并且像这样的表达式被评估为最内层。 – millimoose

+0

是的,请参阅[this](http://stackoverflow.com/questions/7230808/inheriting-a-trait-twice) –

回答

6

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

0

解决钻石多重吸入问题

6

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

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

val queue = new Filtering 

你会得到相同的结果,当您看到:Filtering最先被执行,然后传递给Incrementing,然后Doubling终于BasicIntQueue