Il problema dei diamanti è l'incapacità di decidere quale implementazione del metodo scegliere. Scala risolve questo definendo quale implementazione scegliere come parte delle specifiche della lingua ( leggi la parte su Scala in questo articolo di Wikipedia ).
Naturalmente, la definizione dello stesso ordine potrebbe anche essere utilizzata in ereditarietà multipla di classe, quindi perché preoccuparsi dei tratti?
La ragione per cui IMO è costruttori. I costruttori hanno diverse limitazioni che i metodi normali non hanno - possono essere chiamati solo una volta per oggetto, devono essere chiamati per ogni nuovo oggetto, e un costruttore di classi child deve chiamarlo come costruttore del genitore come prima istruzione (la maggior parte delle lingue fallo implicitamente per te se non hai bisogno di passare i parametri).
Se B e C ereditano A e D ereditano B e C, ed entrambi i costruttori di B e C chiamano il costruttore di A, allora il costruttore di D's chiamerà il costruttore di A due volte. Definire quali implementazioni scegliere come Scala ha fatto con i metodi non funzionerà qui perché entrambi i costruttori di B e C devono essere chiamati.
I tratti evitano questo problema poiché non hanno costruttori.