将现有的函数分配给一个val?

3

Scala首页上写道:

函数是一等公民。使用它们可以保证类型安全。可以在任何地方使用它们,将它们传递给任何东西。

但是我似乎无法像其他一等公民对象那样将函数存储在val中。

scala> def myFunction = { println("hello world") }
myMethod: Unit

scala> myFunction
hello world

scala> val myVal = myFunction
hello world
myVal: Unit = ()

scala> myVal

scala>

如何正确地完成这个任务?


你可以在这个问题中了解更多。 - Valy Dia
1个回答

9
所以,函数是第一类值,然而def创建的是方法而非函数。你可以通过将下划线_追加到方法名称来使用"eta扩展"将任何方法转化为函数:
scala> def myFunction = { println("hello world") }
myFunction: Unit

scala> myFunction _
res0: () => Unit = <function0>

scala> res0()
hello world

scala> val myVal = myFunction _
myVal: () => Unit = <function0>

scala> myVal
res2: () => Unit = <function0>

scala> myVal()
hello world

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接