gpt4 book ai didi

scala - 函数数组?

转载 作者:行者123 更新时间:2023-12-02 01:08:55 25 4
gpt4 key购买 nike

如何在 Scala 中创建函数数组,以便可以循环它们并调用它们来执行计算?

def f1(x: Int, y: Int): Int = x + y

def f2(x: Int, y: Int): Int = x - y

def f3(x: Int, y: Int): Int = x * y

def test() {
val someValues1 = List(1, 2)
val someValues2 = List(3, 4)
val fnList = Array(f1,f2,f3)

for (f <- fnList; a <- someValues1; b <- someValues2) {
val result = f(a, b)
println("Result=" + result)
}
}

最佳答案

在你的问题中,你说你想要一个函数数组。但整个代码片段中没有一个函数!

根据名称 f1f2f3,我猜测您认为这些是函数。但它们不是:def 关键字用于声明方法,而不是函数。这两者根本不同!

因此,如果您想使用函数数组,只需将 f1f2f3 实际上设置为 函数而不是方法:

val f1: (Int, Int) => Int = _ + _
val f2: (Int, Int) => Int = _ - _
val f3: (Int, Int) => Int = _ * _

另一种方法是实际阅读错误消息,它会准确告诉您问题是什么以及如何解决它:

error: missing arguments for method f1 in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
val fnList = Array(f1,f2,f3)
^

因此,如果您只需执行错误消息告诉您的操作,即使用 _ 运算符将方法转换为函数,一切都会正常工作:

val fnList = Array(f1 _, f2 _, f3 _)

您收到错误消息的原因很简单,因为 Scala 允许您在方法调用中省略括号。因此,f1 只是表示“在没有参数列表的情况下调用 f1”,这是一个错误,因为 f1 需要两个参数。

在某些情况下,当参数可能不能是任何函数时,Scala 将执行自动为您从方法到函数的转换。因此,第三种选择是通过将其声明为函数数组,让 Scala 清楚地知道您确实拥有一个函数数组,这是令人痛苦的:

val fnList: Array[(Int, Int) => Int] = Array(f1, f2, f3) // or
val fnList = Array[(Int, Int) => Int](f1, f2, f3)

现在 Scala 知道 fnList 是一个函数数组,它不再尝试调用 f1,而是将其转换为功能。

关于scala - 函数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8550356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com