curry函数中的模式匹配:匹配哪个参数

时间:2014-04-17 02:57:42

标签: scala currying

对于curry函数中的模式匹配,为什么它尝试匹配后面的参数而不是第一个参数。例如,如下所示,它试图匹配第二个参数,结果是" a",但为什么不" b"哪个匹配第一个参数?

   def curr3(n:String):String=>String={
     case "a"=>"a"
     case "b"=>"b"
   }
   println(curr3("b")("a"))

1 个答案:

答案 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"
  }