代码之家  ›  专栏  ›  技术社区  ›  Aaron Novstrup

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

  •  4
  • Aaron Novstrup  · 技术社区  · 15 年前

    没有 使其成为REPL中的伴随模块。因此,当我翻译回“真正的源代码”时,我不能确信我的代码仍然可以工作。

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

    以至于

    val v: A = "apple"
    

    将编译。

    2 回复  |  直到 15 年前
        1
  •  11
  •   Randall Schulz    15 年前

    很接近:

    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 这里是第一个。)

        2
  •  2
  •   srparish    14 年前

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

    推荐文章