结构类型是其中之一"哇,很酷!" Scala的功能.但是,对于每个例子,我都可以想到它们可能会有什么帮助,隐式转换和动态混合组合通常看起来更好.它们的一些常见用途和/或何时适当的建议?
Dan*_*ral 13
除了提供相同方法但不相关的类的罕见情况,也没有实现公共接口(例如,close()方法 - Source,对于一个,不扩展Closeable),我发现结构类型与它们的存在没有用限制.但是,如果它们更灵活,我可以写出这样的东西:
def add[T: { def +(x: T): T }](a: T, b: T) = a + b
Run Code Online (Sandbox Code Playgroud)
这将整齐地处理数字类型.每当我认为结构类型可能对我有所帮助时,我会碰到那个特定的墙.
编辑
然而,我自己找不到结构类型,但编译器使用它来处理匿名类.例如:
implicit def toTimes(count: Int) = new {
def times(block: => Unit) = 1 to count foreach { _ => block }
}
5 times { println("This uses structural types!") }
Run Code Online (Sandbox Code Playgroud)
由(隐式)产生的对象toTimes(5)是类型{ def times(block: => Unit) },即结构类型.
我不知道Scala是否为每个匿名类做了 - 也许确实如此.唉,这就是为什么pimp我的库这么慢的原因之一,因为结构类型使用反射来调用方法.不应该使用匿名类,而应该使用真正的类来避免pimp my library中的性能问题.
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |