在 scala 中基于鸭子类型定义泛型类型?
in scala define generic type based on duck typing?
我知道我可以在 generics
中定义 duck typing 如下
trait MyTrait[A <: {def someMethod(key: String): String}]
但是我不想在我的 trait
定义中指定整个 string
。
我怎样才能把它分成两份(我希望我能拥有的东西):
type A = B <: {def someMethod(key: String): String}
trait MyTrait[A]
你可以这样做:
type B = { def someMethod(key: String): String }
trait MyTrait[A <: B]
事实上,一些 Scala 风格指南建议在结构类型超过 50 个字符时进行这种细分。 Here's one from the Scala docs:
Structural types should be declared on a single line if they are less than 50 characters in length. Otherwise, they should be split across multiple lines and (usually) assigned to their own type alias
您不能将类型绑定 A <: B
本身分配给类型别名,因为它不是类型,而是对 MyTrait
的泛型参数的约束。您可以阅读有关类型边界的更多信息 here。
我知道我可以在 generics
中定义 duck typing 如下
trait MyTrait[A <: {def someMethod(key: String): String}]
但是我不想在我的 trait
定义中指定整个 string
。
我怎样才能把它分成两份(我希望我能拥有的东西):
type A = B <: {def someMethod(key: String): String}
trait MyTrait[A]
你可以这样做:
type B = { def someMethod(key: String): String }
trait MyTrait[A <: B]
事实上,一些 Scala 风格指南建议在结构类型超过 50 个字符时进行这种细分。 Here's one from the Scala docs:
Structural types should be declared on a single line if they are less than 50 characters in length. Otherwise, they should be split across multiple lines and (usually) assigned to their own type alias
您不能将类型绑定 A <: B
本身分配给类型别名,因为它不是类型,而是对 MyTrait
的泛型参数的约束。您可以阅读有关类型边界的更多信息 here。