是否可以在Scala解释器中定义伴随类/模块?

时间:2010-08-23 21:50:04

标签: scala

在Scala解释器中测试内容通常很方便。但是,我遇到的一个问题是我必须重构使用隐式转换的代码,因为定义一个与现有类相同名称的对象不会使它成为REPL中的伴随模块。因此,当我翻译回“真正的来源”时,我无法确信我的代码仍然有用。

有没有办法在REPL中定义伴侣?

可能是一些东西
bigblock {
   class A

   object A {
      implicit def strToA(s: String): A = // ... 
   }
}

这样

val v: A = "apple"

将编译。

2 个答案:

答案 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 命令。