【问题标题】:in scala define generic type based on duck typing?在scala中定义基于鸭子类型的泛型类型?
【发布时间】:2015-03-31 12:22:29
【问题描述】:

我知道我可以在generics 中定义鸭子输入,如下所示

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

但是我不想在我的 trait 定义中指定整个大 string

我怎样才能把它分成两部分(我希望我能拥有的):

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

trait MyTrait[A]

【问题讨论】:

    标签: scala generics structural-typing


    【解决方案1】:

    你可以这样做:

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

    事实上,当结构类型超过 50 个字符时,一些 Scala 风格指南建议使用这种细分。 Here's one from the Scala docs:

    如果结构类型的长度少于 50 个字符,则应在一行中声明它们。否则,它们应该被拆分为多行并(通常)分配给它们自己的类型别名

    您不能将类型绑定A &lt;: B 本身分配给类型别名,因为它不是类型,而是对MyTrait 的泛型参数的约束。你可以阅读更多关于类型边界here

    【讨论】:

      猜你喜欢
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      相关资源
      最近更新 更多