一个简单的周末。关于这实际上是什么的文档几乎没有,可能藏在语言规范中。应该很简单 - scala中的“细化”是什么?
这里有一些远非诱人的代码:
class Foo[T, A <: SomeType](
val io: Serializer[T, A] with Deserializer[T, A],
)
稍微强制编译器我收集io
是Serializer[T,A]
与Deserializer[T,A]
的细化。凉。什么时候可以在scala中使用?规则是什么?是with
的任何用途,实际上技术上是一种改进?
答案 0 :(得分:2)
不,这不是一个改进,它是一个没有细化的复合类型。有关详细信息,请参阅http://www.scala-lang.org/files/archive/spec/2.11/05-types.html#compound-types:
复合类型
T_1 with … with T_n { R }
表示在组件类型T_1
,...,T_n
和细化{ R }
中指定成员的对象。
答案 1 :(得分:1)
Serializer
是一个班级,Deserializer
是trait。使用构造Serializer[T, A] with Deserializer[T, A]
,您基本上创建了一个继承自Sericalizer
和Deserializer
的新类(没有正确的名称)。请注意,在Scala中,您可以从一个类和任意数量的特征继承。
由于这是继承工作,是的,这是一个改进。