对于curry函数中的模式匹配,为什么它尝试匹配后面的参数而不是第一个参数。例如,如下所示,它试图匹配第二个参数,结果是" a",但为什么不" b"哪个匹配第一个参数?
def curr3(n:String):String=>String={
case "a"=>"a"
case "b"=>"b"
}
println(curr3("b")("a"))
答案 0 :(得分:2)
让我们逐步完成您的功能:
1.我们应用第一个参数" b"到curr3
然后返回一个带字符串的函数并给我们一个字符串:
val first:String => String = curr3("b")
相当于(基本上我们已经扔掉了第一个参数n
):
val first:String => String = {
case "a" => "a"
case "b" => "b"
}
2.我们将第二个参数应用于第一个并返回" a":
val second:String = first("a")
println(second) // prints a
所以第一个参数被采用但从未使用过。如果你想匹配第一个参数,你可以这样做:
def curr3(n: String): String => String = s => n match {
case "a" => "a"
case "b" => "b"
}
但现在我们只是丢掉了第二个参数s
。我认为你真的不需要一个curried函数(除非你想用第二个参数做一些事情)你可以做一些类似于第一个例子的简单的事情:
def curr3(n: String) = n match {
case "a" => "a"
case "b" => "b"
}