据我所知,我可以在generics定义鸭子类型如下

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

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

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

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

trait MyTrait[A]

#1楼 票数:9 已采纳

你可以做:

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

事实上,当结构类型的字符数超过50个时,一些Scala样式指南会推荐这种细分。 这是Scala文档中的一个

如果结构类型的长度小于50个字符,则应在单行上声明。 否则,它们应该分成多行,并且(通常)分配给它们自己的类型别名

您不能将类型绑定A <: B本身分配给类型别名,因为它不是类型,而是对MyTrait的泛型参数的MyTrait 您可以在此处阅读有关类型边界的更多信息。

  ask by Jas translate from so

未解决问题?本站智能推荐:

1回复

Scala 中的方法调用反射会导致性能下降吗?

我有一个方法打算对数据IO做一些简单的统计,如下图。 def ioStatSink[T <: { def length: Int }](): Sink[T, Future[(Long, Long)]] = Sink.fold((0L, 0L))((acc, bytes) => (acc.
3回复

如何使用具有通用参数的结构类型?

我有两个案例类 我想定义一个结构类型,它将匹配这两个的伴随对象 这将编译正常,但当我尝试使用它这样 我会得到一个编译器错误 有没有办法实现这个? 如果我重新定义结构类型以具有A和R的具体类型,它将正确编译,但后来我失去了灵活性
2回复

Scala:F-有界多态性困境

假设存在以下类型和方法: trait X[A <: X[A]] case class C extends X[C] def m(x: PartialFunction[X[_], Boolean]) 我希望能够创建一个要传递给m的PartialFunction。 第一次尝试
2回复

C#中泛型类型的命名空间范围别名

我们有一个以下示例: 编译器说: 无法从用法推断出方法'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable,System.Func)'的类型参数。 尝试显式指定类型参数。 这是因为,
1回复

TypeScript 泛型:如何定义在结构上与其他类型 S 相同的类型 T

我有一个Step的概念,它需要类型A值作为输入并给出类型B的值。 现在我想编写两个步骤,所以我最终在class Step得到了这样的东西: 我想要实现的是以某种方式告诉类型系统我们可以将类型B传递给一个需要类型C的函数(结构类型应该检查C中的所有字段是否都存在于B ),以便该行return
1回复

Scala中的结构类型:在细化中使用抽象类型

说我有以下代码: 以上工作正常。 类Bar在第三方库中定义,并且有几个类似的类,每个类都有一个bar方法 我没有为每个这样的类编写func ,而是想使用泛型类型B定义func ,只要它具有正确签名的bar方法。 我尝试了以下但它给了我一个错误: 我得到的错误是:
1回复

Scala中的广义结构类型一致性

我对将特定类型符合更一般结构类型的问题感兴趣。 请考虑以下示例: 在每个不符合的情况下,对General方法的调用可以安全地解析为Specific的相应方法。 在这个问题中可以找到一个更有趣的实例: 这里,Customer的copy方法不符合Versionable的自我类型注
2回复

如何在Scala中实例化结构类型?

我正在尝试在Scala中创建结构类型以避免定义中间类。 本质上,我只想定义一个将在JSON字符串中编组/解组的结构。 例如,描述以下JSON 我有一个对应的结构类型: //structural type NumberRange = {val range: {val nu