首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将参数传递给高阶函数

将参数传递给高阶函数
EN

Stack Overflow用户
提问于 2021-08-03 17:02:26
回答 3查看 130关注 0票数 1

如何在高阶函数中传递函数的不同参数。下面是我的代码。

代码语言:javascript
复制
val sum = (a: Int, b:Int) => a + b
    
val x = 7
val y = 9
    
def sq (x: Int, y: Int, f: (Int, Int)=> Int): Int = {
  x + y * f(a,b)
}
    
println(sq(x,y,sum(2,3)))

这不起作用,并抛出一个错误,'a' is not defined

EN

回答 3

Stack Overflow用户

发布于 2021-08-03 17:17:38

sq的参数列表看起来没问题。对sq的调用不正确,函数将在传入之前进行计算。假设它通过了编译器,当然它不是。

传入一个函数并不意味着它的参数会随之而来。传入函数意味着调用者可能不知道要使用什么参数,甚至不知道是否应该调用该函数。sq函数在调用它时必须提供参数。A和b的含义超出了sum的定义。sq可以提供x和y作为sum的参数。

票数 2
EN

Stack Overflow用户

发布于 2021-08-04 11:21:42

作为对@Nathan answer的补充。下面的例子很有意义:

代码语言:javascript
复制
val sum = (a: Int, b:Int) => a + b
   
    
def sq (x: Int, y: Int, f: (Int, Int)=> Int): Int = {
  x + y * f(x, y)
}

val x = 7
val y = 9
    
println(sq(x,y,sum))

这将在您的sg函数中进行计算,如:7 + 9 * sum(7, 8)

我希望这是有意义的。

票数 2
EN

Stack Overflow用户

发布于 2021-08-04 12:17:59

除了@Nathan Hughes回答之外,如果您想在每次调用时向sum函数传递不同的参数,则需要更改您的sq方法,如下所示

代码语言:javascript
复制
def sq (x: Int, y: Int, f: (Int, Int)=> Int): (Int, Int)=> Int = {
  x + y * f(_: Int, _:Int)
}

如果期望来自sq方法的int返回来自‘`sq’的(Int, Int) => Int类型的部分应用函数,则将其他参数传递给该函数,例如,

代码语言:javascript
复制
sq(10, 20, sum)(1, 2) // 1st approach

//2nd approach would be
//You can hold the function in another variable and call that function with other arguments
val partialSum = sq(10,20, sum)
partialSum(1, 2)

你会得到你想要的结果。

或者,如果您仍然希望sq方法返回Int,则可以像这样定义sq方法

代码语言:javascript
复制
def sq (x: Int, y: Int, f: (Int, Int)=> Int)(a:Int, b:Int):Int = {
   x + y * f(a, b)
}

scala> sq(10,20, sum)(1,2)
res2: Int = 70
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68640114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档