2015-03-31 33 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