2013-07-12 47 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