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

问将带有默认参数的函数传递给高阶函数
EN

Stack Overflow用户
提问于 2018-02-23 03:02:38
回答 1查看 776关注 0票数 2

这也许是一个非常基本的问题。我是斯卡拉的新手。在Scala中,我有一个函数,其第二个参数的参数值为默认值:

代码语言:javascript
复制
def fun(number : Int, defaultNumber : Int = 0): Int = {number + defaultNumber}

我希望有一个higherOrder函数,可以向它传递一个lowerOrder函数,例如上面的函数,其上面的第二个参数有一个默认值。第一次尝试如下:

代码语言:javascript
复制
def higherOrder(lowerOrder : (Int, Int) => Int, number: Int) =
        {lowerOrder(number)}

这显然产生了一个错误:

错误:未为方法应用足够的参数:(v1: Int,v2: Int)Int in Function2。未指定的值参数v2。

解决这个问题的一种方法是在higherOrder函数中获取默认值:

代码语言:javascript
复制
def higherOrder(lowerOrder : (Int, Int) => Int, number: Int, defaultNumber: Int = 0) =
        {lowerOrder(number, defaultNumber)}

但我不想这样做,因为我可能想传递不同的lowerOrder函数,这些函数的第二个参数具有不同的默认值,而且我可能不知道将默认值传递给higherOrder函数的默认值是什么。有什么解决办法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-02-23 03:16:15

定义低阶函数的特征。

代码语言:javascript
复制
trait Fun {
    def apply(number : Int, defaultNumber : Int = 0): Int
}

为低阶函数创建lambda函数。现在,您可以使用函数字面符号来定义一个有趣的内容(请注意,您需要使用-Xexperimental启动REPL才能使这一步骤生效)

代码语言:javascript
复制
val fun: Fun = { (number : Int, defaultNumber : Int) => number + defaultNumber }

现在,您可以在高阶函数中使用这个lambda函数。

代码语言:javascript
复制
def higherOrder(lowerOrder : Fun, number: Int) =
        {lowerOrder(number)}

现在调用高阶函数。

代码语言:javascript
复制
higherOrder(fun, 10)
> result: Int = 10
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48940461

复制
相关文章

相似问题

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