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

Def vs. val, functional syntax not working in Scala.js?

举个最简单的例子:

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

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

现在,这里有两种可能性:

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

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

succeeded

但是当我使用更实用的语法时:

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

我明白了

TypeError: this.determineSomething is null

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

我想你想要的是这样的:

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

  val someThing: String = determineSomething("test")   

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

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