我有以下代码:
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出现了编译错误。
非常感谢。
答案 0 :(得分:0)
您的funcs
变量实际上是调用func1
,func2
和func3
的结果列表。这些是函数定义。您需要告诉编译器将它们视为函数值,如下所示:
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
。
因此,您编写它的方式foo
是List(foo _)
,因此String
没有意义。
另一方面,在我的代码段中,f
是一个函数,String
将调用它。