在Scala解释器中测试内容通常很方便。但是,我遇到的一个问题是我必须重构使用隐式转换的代码,因为定义一个与现有类相同名称的对象不会使它成为REPL中的伴随模块。因此,当我翻译回“真正的来源”时,我无法确信我的代码仍然有用。
有没有办法在REPL中定义伴侣?
可能是一些东西bigblock {
class A
object A {
implicit def strToA(s: String): A = // ...
}
}
这样
val v: A = "apple"
将编译。
答案 0 :(得分:11)
即将结束:
object ABlock {
class A
object A {
implicit def strToA(s: String): A = // ...
}
}
import ABlock._
或者,如果您将所有内容放在一行上,请执行以下操作:
class A; object A { implicit def strToA(s: String): A = // ... } }
......无论哪种方式,您仍然需要导入隐式转换,以便按照您的要求进行以下工作:
import ABlock.A.strToA // for the form with the enclosing object
import A.strToA // for the one-line form without an enclosing object
val v: A = "apple"
您需要这样做的原因是您在REPL中输入的每一行都包含在一个对象中,而后续的每一行都嵌套在前一个对象中。这样做是为了您可以执行以下操作而不会出现重新定义错误:
val a = 5
val a = "five"
(实际上,a
的第二个定义会影响第一个。)
答案 1 :(得分:2)
使用更新版本时,可以使用:paste 命令。