我有一个方法setBuildQuery
,我希望它可以将函数x
作为参数接收。函数x
应将不确定数量的参数作为输入,并输出另一个函数y
。
函数y
将两个日期作为输入并输出一个字符串。
使用功能符号的示例
x = (one_f)(from_date, to_date) => string or
x = (one_f, two_f)(from_date, to_date) => string or
x = (one_f, two_f, ..., n_f)(from_date, to_date) => string
如何在Scala中对此建模(即,如何对一个函数说服这种类型的函数x?
我的应用程序的用户如何将该功能指定为val
?
我在想类似函数函数或高阶函数的东西。我在Scala中对它们不太熟悉。
答案 0 :(得分:1)
您不能有一个带有任意数量参数的函数。*最好的办法是带有一个Seq的函数:
def setBuildQuery(f: Seq[YourType] => (Date, Date) => String)
然后您可以定义一个可以接受的函数,如下所示:
val f: Seq[YourType] => (Date, Date) => String =
ls => (from, to) => ???
*您可以有一个采用任意数量参数的方法,但这在这里无济于事。
答案 1 :(得分:0)
有很多方法可以执行此操作,您可以使用“部分应用程序”来定义函数。
该函数只有在使用所有参数调用后才会执行
def x(head:String, tail:String*)(from:Date, to:Date): String = {
println(head) // it doesnt exec until from and to are provided
"result"
}
val y = x("string1", "string2") _
y(new Date, new Date)
或者您可以返回一个函数
def x(head:String, tail:String*): (Date,Date) => String = {
println(head) // it exec before from and to are provided
(from:Date, to:Date) => {
"result"
}
}
val y = x("string1", "string2")
y(new Date, new Date)