2015-03-31 32 views
5

我明白我可以在generics定義鴨子類型如下定義了基於鴨子打字的泛型類型?

trait MyTrait[A <: {def someMethod(key: String): String}] 

不過,我不希望在我的trait定義指定整個大string

我怎麼可以拆分這兩個(什麼,我希望我能有):

type A = B <: {def someMethod(key: String): String} 

trait MyTrait[A] 

回答

9

你可以這樣做:

type B = { def someMethod(key: String): String } 
trait MyTrait[A <: B] 

事實上,一些Scala的風格指南推薦這一故障當結構類型將超過50個字符時。 Here's one from the Scala docs

如果結構類型的長度小於50個字符,則應在一行上聲明結構類型。 (通常情況下)分配給自己的類型別名,否則,就應多行被分割和

您不能分配的約束A <: B本身的類型別名的類型,因爲它不是一個類型,但在約束通用參數MyTrait。你可以閱讀更多關於類型界限here