Def与val,功能语法在Scala.js中不起作用?

时间:2017-05-13 14:35:40

标签: scala scala.js

给你一个最小的例子:

object Main extends JSApp
{
   val someThing: String = determineSomething("test")   

   def main(): Unit =
   {
       println(someThing)
   }
}

现在,有两种可能性:

private def determineSomething(s: String): String = "succeeded"

如果项目是这样执行的,那么我会得到一个日志条目

  

成功

但是当我使用功能更强大的语法时:

private val determineSomething: (s: String) => "succeeded"

我得到了

TypeError: this.determineSomething$1 is null

我很好奇为什么会发生这种情况,就像在(JVM)repl中一样,两种方式都可以很好地工作。

1 个答案:

答案 0 :(得分:5)

我认为你想要的是这样的:

object Main extends JSApp {
  private val determineSomething: String => String = (s: String) => "succeeded"

  val someThing: String = determineSomething("test")   

  def main(): Unit = {
    println(someThing)
  }
}

determineSomething的声明需要在声明something之前发出,否则当编译器尝试初始化后者时,前者将被初始化。