高阶Scala函数
我是Scala高阶函数的新手,对此我有点困惑。 据我所知,HOF可以将函数作为参数,如高阶Scala函数,scala,Scala,我是Scala高阶函数的新手,对此我有点困惑。 据我所知,HOF可以将函数作为参数,如 val c = (x:Int)=> x + 3 这里的意思是它接受一个Int类型的参数并返回Int 但我无法理解下面的代码,因为它将函数作为Int=>Int类型的参数,但这意味着它接受一个参数并返回Int,但在实现这一点时,它们发送了一个接受两个Int参数的函数 def calculate(f: Int => Int, a: Int, b: Int) = if (b != 0) f(
val c = (x:Int)=> x + 3
这里的意思是它接受一个Int类型的参数并返回Int
但我无法理解下面的代码,因为它将函数作为Int=>Int类型的参数,但这意味着它接受一个参数并返回Int,但在实现这一点时,它们发送了一个接受两个Int参数的函数
def calculate(f: Int => Int, a: Int, b: Int) =
if (b != 0) f(a, b) else throw Exception("Divide by 0")
def divide(a: Int, b: Int) = a / b
calculate(divide, 2, 0) // => Exception
calculate(divide, 4, 2) // => 2
有人能帮我理解这一点吗。
我很感激如果有人能分享一些代码链接,我可以了解更多关于霍夫
def divide(a: Int, b: Int): Int = a / b
divide
是一个函数(实际上是一个方法),它接受2Int
s并返回1Int
。也可以这样写
val divide = (a:Int, b:Int) => a/b
在这种情况下,它是一个实际的函数,但是方法和函数之间的差异不需要我们在这里关注
def calculate(f: (Int, Int) => Int, a: Int, b: Int): Int = ...
计算
取3个参数。第一个函数为f
,它接受2个Int
s并返回1个Int
。(请注意正确的签名。)
调用
calculate
,第一个参数为divide
。在calculate
codedivide
中,被引用(重命名)为f
,并被调用。所以f(a,b)
实际上是divide(77,7)
这甚至没有编译。val c=(x:Int)=>x+3
不是高阶函数。Thnx@jwvh用于解释,所以如果def calculate(f:Int=>Int,a:Int,b:Int)=
,我们可以发送任何只取一个整数并返回Int的函数,只有当我们有def calculate(f:(Int,Int)=>Int,a:Int,b:Int)
时,我们才能发送一个带有两个参数的函数。但是,我们不能在def calculate(f:Int=>Int,a:Int,b:Int)=
中发送带有两个参数的函数,因为它只接受带有一个参数的函数。我希望我理解正确。
calculate(divide, 77, 7)