在 Scala 解释器中进行测试通常很方便。然而,我遇到的一个问题是,我必须重构使用隐式转换的代码,因为定义一个与现有类同名的对象does not使其成为 REPL 中的配套模块。因此,当我翻译回“真实源代码”时,我不能确信我的代码仍然可以工作。
有没有办法在 REPL 中定义同伴?也许类似于
bigblock {
class A
object A {
implicit def strToA(s: String): A = // ...
}
}
这样
val v: A = "apple"
将编译。
那很接近:
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
这里遮蔽了第一个。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)