这也许是一个非常基本的问题。我是斯卡拉的新手。在Scala中,我有一个函数,其第二个参数的参数值为默认值:
def fun(number : Int, defaultNumber : Int = 0): Int = {number + defaultNumber}我希望有一个higherOrder函数,可以向它传递一个lowerOrder函数,例如上面的函数,其上面的第二个参数有一个默认值。第一次尝试如下:
def higherOrder(lowerOrder : (Int, Int) => Int, number: Int) =
{lowerOrder(number)}这显然产生了一个错误:
错误:未为方法应用足够的参数:(v1: Int,v2: Int)Int in Function2。未指定的值参数v2。
解决这个问题的一种方法是在higherOrder函数中获取默认值:
def higherOrder(lowerOrder : (Int, Int) => Int, number: Int, defaultNumber: Int = 0) =
{lowerOrder(number, defaultNumber)}但我不想这样做,因为我可能想传递不同的lowerOrder函数,这些函数的第二个参数具有不同的默认值,而且我可能不知道将默认值传递给higherOrder函数的默认值是什么。有什么解决办法吗?
发布于 2018-02-23 03:16:15
定义低阶函数的特征。
trait Fun {
def apply(number : Int, defaultNumber : Int = 0): Int
}为低阶函数创建lambda函数。现在,您可以使用函数字面符号来定义一个有趣的内容(请注意,您需要使用-Xexperimental启动REPL才能使这一步骤生效)
val fun: Fun = { (number : Int, defaultNumber : Int) => number + defaultNumber }现在,您可以在高阶函数中使用这个lambda函数。
def higherOrder(lowerOrder : Fun, number: Int) =
{lowerOrder(number)}现在调用高阶函数。
higherOrder(fun, 10)
> result: Int = 10https://stackoverflow.com/questions/48940461
复制相似问题