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

是否可以在Scala解释器中定义伴随类/模块?,scala,Scala,在Scala解释器中进行测试通常很方便。然而,我遇到的一个问题是,我必须重新构造使用隐式转换的代码,因为定义一个与现有类同名的对象不会使它成为REPL中的伴随模块。因此,当我翻译回“真正的源代码”时,我不能确信我的代码仍能工作 有没有办法在REPL中定义同伴?也许是类似于 bigblock { class A object A { implicit def strToA(s: String): A = // ... } } 以致 val v: A = "app

在Scala解释器中进行测试通常很方便。然而,我遇到的一个问题是,我必须重新构造使用隐式转换的代码,因为定义一个与现有类同名的对象不会使它成为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的第二个定义与第一个定义相去甚远。)

对于较新的版本,可以使用:粘贴命令。

谢谢!对于记录,
import-ABlock.A.strToA
在您完成
import-ABlock.\u
(使用封闭对象)之后就不需要了。