【发布时间】:2017-06-26 22:47:54
【问题描述】:
我有一个包foo,其中包含类FStream。 foo 的包对象定义了一些为FStream 提供扩展方法的隐式值类。我想将这些值类从包对象中移出并放入它们自己的单独文件中,但我也希望它们在我使用 FStream 时始终可用(或者最好是在我使用 foo 包中的任何内容时)。有可能做到这一点吗?我尝试将隐式值类放入其他对象,但我无法从对象扩展。尝试将它们放入类或特征中,但隐式值类只能在其他对象中定义。
foo/FStream.scala
package foo
class FStream {
def makeFoo(): Unit = ???
}
foo/package.scala
package foo
package object foo {
// I want to move these definitions into separate files:
implicit class SuperFoo(val stream: FStream) extends AnyVal {
def makeSuperFoo(): Unit = ???
}
implicit class HyperFoo(val stream: FStream) extends AnyVal {
def makeHyperFoo(): Unit = ???
}
}
bar/usage.scala
package bar
import foo._ // something nice and short that doesn't reference individual value classes
val x: FStream = ???
x.makeSuperFoo() // should work
x.makeHyperFoo() // should work
【问题讨论】:
标签: scala implicit-conversion scoping