假设有一个名为“delegatedFoo()”的功能委托方法需要作为参数传递给方法(即,scala 的函数指针版本),如下所示:
addMyDelegatedMethod(delegatedFoo)
假设(为简洁起见),该行编译/执行得很好。现在将其更改为:
addMyDelegateOverrideMethod("uh-o", delegatedFoo)
此行将引发编译器异常:myClass 类中的方法 delegatedFoo 缺少参数
问:如何在多参数方法调用中传递委托(引用)?(这甚至可以在 Scala 中完成吗?)
编辑:更准确地说,签名如下:
def delegatedFoo(str: String): String = { return "OK" }
def addMyDelegatedMethod(delegate: (String) => (String))
def addMyDelegateOverrideMethod(foo: String, delegate: (String) => (String))
更新:在查看 Paolo 的答案并进行更多实验之后,尽我所能告诉问题(错误?)在涉及重载签名时会出现。(我没有费心把它扔到我上面的例子中,因为它没有被使用——但只是把它放在那里似乎让我的编译器头疼):
scala> object MyControl {
def doDele(strA: String, strB: String, delegate: String => String) { delegate(strA) }
def doDele(strA: String, count: Int, delegate: String => String) { delegate(strA) }
}
defined module MyControl
scala> def myFn(s: String): String = { println(s); s }
myFn: (s: String)String
scala> MyControl.doDele("hello", "bye", myFn)
<console>:10: error: missing arguments for method myFn;
follow this method with `_' if you want to treat it as a partially applied function
MyControl.doDele("hello", "bye", myFn)
MyControl 定义了一组重载方法...注释掉重载方法(或更改其名称),编译器会很好地处理它...:\