给你一个最小的例子:
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中一样,两种方式都可以很好地工作。
答案 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
之前发出,否则当编译器尝试初始化后者时,前者将被初始化。