1
我想将函数作为参数传递,但该函数有多个参数(其中之一是函数)。scala - 传递函数将另一个函数作为参数
这里是我想在一个基本的Python的例子做:
def first(string1, string2, func):
func(string1, string2, third)
def second(string1, string2, func):
func(string1, string2)
def third(string1, string):
# operations go here
first("one", "two", second)
我在这斯卡拉尝试是以下几点:
def first(string1: String, string2: String, func: (Any, Any, Any) => Unit) = {
func(string1, string2, func)
}
def second(string1: String, string2: String, func: (Any, Any) => Unit) = {
func(string1, string2)
}
def third(string1: String, string2: String) = {
// operations
}
def main(args: Array[String]): Unit = {
first("one", "two", second)
}
我得到一个错误试图通过second
转换为first
,参数数量不足。是否有可能以与Python示例相同的风格实现此功能?
编辑:
我试图与first("one", "two", second _)
更换我的主要方法的机构,它给了我一个类型不匹配错误
类型不匹配;发现:(字符串,字符串,(任意,任意,任意)=>单元)=>所需的单位:(任意,任意,任意)=> 单位
任何想法是怎么回事?
所以实际的程序我会做有7个函数使用另一个函数作为参数,它们都嵌套在我的示例代码的样式中。我猜想保持Python程序的风格在Scala中并不实际? – kevin
@kevin - 是的,传递嵌套的回调会很快变得丑陋。如果你想做一些异步操作,你可以看看期货。否则为理解和宏可以用来扁平你的代码的语法结构。 – Lee
我继续接受你的回答,因为它解决了我的问题。是否有任何示例可以指示我使用宏来帮助? – kevin