在变量中调用Scala函数

时间:2017-09-03 15:16:20

标签: scala

我有以下代码:

def func1 : Mylass = ...
def func2 : Mylass = ...
def func3 : Mylass = ...

def function : List[MyClass] = {
   val funcs = List(func1, func2, func3)
   for {
       f <- funcs
       result = [??? What I shall put here ???]
   } yield result
}

for循环的目的是逐个调用存储在f内的函数。但是我不知道我将把它放在那里&#34;调用存储在变量f&#34;中的函数。

我试着说:

result = f()

但是我的IDE出现了编译错误。

非常感谢。

2 个答案:

答案 0 :(得分:0)

您的funcs变量实际上是调用func1func2func3的结果列表。这些是函数定义。您需要告诉编译器将它们视为函数值,如下所示:

  def func1 : String = ???
  def func2 : String = ???
  def func3 : String = ???

  def function : List[String] = {
    val funcs = List(func1 _, func2 _, func3 _)
    for {
      f <- funcs
      result = f()
    } yield result
  }

你可以yield f()

或者将函数定义更改为函数值:

  val func1 : () => String = ???
  val func2 : () => String = ???
  val func3 : () => String = ???

  def function : List[String] = {
    List(func1, func2, func3).map(_.apply())
  }

答案 1 :(得分:0)

你写的东西应该有效。 不确定您的问题究竟是什么,因为您既没有显示完整的代码示例,也没有显示您获得的实际错误消息。

编译:

[XamlCompilation (XamlCompilationOptions.Compile)]

更新啊,在阅读完其他答案后,我意识到您的代码出了什么问题:[assembly: XamlCompilation (XamlCompilationOptions.Compile)] 创建了一个def foo: String = ??? def bar: List[String] = for { f <- List(foo _) result = f() } yield result 列表(调用{{1}的结果在这种情况下(因为List(foo)声明没有括号),String是一个函数列表,返回foo。 因此,您编写它的方式fooList(foo _),因此String没有意义。 另一方面,在我的代码段中,f是一个函数,String将调用它。