yur*_*ura 15 generics scala abstract-type
有两种可能的方式来表达类型的抽象.
abstract class Buffer {
type T
val element: T
}
Run Code Online (Sandbox Code Playgroud)
而是泛型,例如
abstract class Buffer[T] {
val element: T
}
Run Code Online (Sandbox Code Playgroud)
我理解在不同环境中使用不同方法的可用性的好处.但我很感兴趣的是将Abstract Type版本转换为Generic版本是绝对不可能的.
PS Code代码段是受欢迎的.
Mor*_*itz 10
抽象类型可以绑定到路径依赖类型,这是类型参数无法实现的.因此,您可以实现具有具体内部类的抽象类型:
trait A { type T }
class B extends A { class T }
Run Code Online (Sandbox Code Playgroud)
或者将它显式绑定到类范围内的路径依赖类型:
class C { type T = this.type }
class D { object Q; type T = Q.type }
Run Code Online (Sandbox Code Playgroud)
另一个区别:只有类型参数可以用作自我类型,
abstract class Buffer[T] { self: T =>
val element: T
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |