在Scala中,如何将具有多个参数列表的函数作为参数传递?

在Scala中,如何将具有多个参数列表的函数作为参数传递?,scala,function,parameters,Scala,Function,Parameters,现在如何将此函数作为参数传递给另一个函数,即需要指示哪种参数类型 def multi_fun(i:Int, s:String)(d:Double) […] 这不起作用,甚至无法解析。就像这样: def fun_that_likes_multi_fun(mf:(Int, String)(Double) ⇒ Unit) […] 把multiFun想象成一个函数,它接受(Int,String),并返回类型为Double=>Unit的函数 Upd:关于隐式参数。似乎不可能按原样传递带有隐式参数的方法

现在如何将此函数作为参数传递给另一个函数,即需要指示哪种参数类型

def multi_fun(i:Int, s:String)(d:Double) […]
这不起作用,甚至无法解析。

就像这样:

def fun_that_likes_multi_fun(mf:(Int, String)(Double) ⇒ Unit) […]
multiFun
想象成一个函数,它接受
(Int,String)
,并返回类型为
Double=>Unit的函数

Upd:关于隐式参数。似乎不可能按原样传递带有隐式参数的方法。虽然我可以看到您的案例有很好的解决方法:

def multiFun(i:Int, s:String)(d:Double):Unit  = ???

def highOrderFun(mF:(Int, String) => Double => Unit) = ???

highOrderFun(multiFun)
这种语法
multiFun(,)()
只是围绕
multiFun
创建包装函数,该函数使用三个参数,其类型是从
multiFun
的参数推断出来的


UPD:针对@ackratos:

看来有。这主要是因为lambda函数和方法之间存在着一种差异

但由于上述函数被定义为方法,因此没有任何东西可以阻止我们将其变为通用函数:

def multiFun(i:Int, s:String)(implicit d:Double):Unit  = ???

def highOrderFun(mF:(Int, String, Double) => Unit) = ???

highOrderFun(multiFun(_, _)(_))

可以将具有隐式参数列表的函数引用为没有参数列表的函数。在这种情况下,缺少的隐式参数将被解析值替换:

def multiFun[T](i:T, s:String):Unit  = ???

def highOrderFun[T](mF:(T, String) => Unit) = ???

highOrderFun(multiFun[Int])
您提到的函数是一个curried函数。这意味着应用第一个参数列表的结果是另一个函数,它将第二个参数列表作为一个整体进行处理。
因此,它被表示为这样

函数不能有多个参数列表
multi_-fun
是一种方法,而不是一种功能。谢谢您的回答!但是,我如何传递带有隐式参数的函数,即def multi_-fun(I:Int,s:String)(隐式d:Double)[……]编译器说:“找不到参数d的隐式值”,即它认为我喜欢应用multi_-fun,而不是将其作为参数传递。我怎么能让Scala这么做?“multi_fun”也不起作用。谢谢你的回答和解决方法!这正是我正在使用的,我只是觉得它不“好”.;-)我认为在Scala这样一种非常精简的语言中,应该有一种立即传递带有隐式参数的函数的方法。如果multiFun和highOrderFun接受类型参数呢?@Aivan非常感谢您的更新。我的错是没有明确说明我的问题。实际上,我的highOrderFun接受两个参数列表,(content:T)(mf:(T:String)=>Unit multiFun仍然使用隐式参数我想要实现的是调用highOrderFun(1.0)(multiFun)而不指定multifunt的类型参数谢谢你的回答!但是我如何传递带有隐式参数的函数,例如def multiFun(I:Int,s:String)(隐式d:Double)[…]编译器说:找不到参数d的隐式值”,即它认为我喜欢应用multi_-fun,而不是将其作为参数传递。我如何告诉Scala这样做?“multi_-fun”也不起作用。你也可以这样做。只需确保在该点上隐式提供一个双精度值。例如
implicit val d:double=1.00
它似乎不是这样工作的:def multi_-fun(i:Int,s:String)(implicit d:double){}def-fun\u喜欢多精度(mf:(Int,String)=>double=>Unit){/*implicit*/val d1:Double=1.0 mf(1,“a”)(d1)}/*implicit val d2:Double=1.0*/fun_喜欢多个fun(多个fun),即使d2可用,它也不会编译(这不是我想要的,但实际使用情况如d1所示:multi_函数通常与隐式值一起使用,但对于这种特殊情况,需要将其传递给高阶函数)。请参见此处:
def multiFun(s:String)(implicit i:Int):Unit  = ???

def highOrderFun(context:Any)(mF:String => Unit)(implicit i:Int) = ???

implicit val param = 2
highOrderFun(1.0)(multiFun)  // param i:Int is resolved here
def fun_that_likes_multi_fun(mf:(Int, String)=>Double => Unit)={}