Scala - 案例序列

时间:2012-10-02 10:39:00

标签: scala

我刚刚将案例序列作为部分函数阅读,语法有点奇怪。

例如

def test: Int => Int = {
  case 1 => 2
  case 2 => 3
  case _ => 0
}    

我希望test没有参数,并会返回Int => Int类型的函数

但是经过一些测试后,它似乎需要一个int作为参数并返回一个int,所以我把它重写为......

def test1(i: Int): Int =
  i match {
    case 1 => 2
    case 2 => 3
    case _ => 0
  }

testtest1是否相等?

3 个答案:

答案 0 :(得分:6)

他们并不平等。 test是一种返回Function1[Int,Int]的方法,而test1是一种获取Int并返回Int的方法。这与模式匹配表达式完全无关。

答案 1 :(得分:5)

以前的代码确实返回Int =>类型的函数。中间体

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) Client VM, Java 1.6.0_25).
Type in expressions to have them evaluated.
Type :help for more information.

scala> :paste
// Entering paste mode (ctrl-D to finish)

def test: Int => Int = {
case 1 => 2
case 2 => 3
case _ => 0
}

// Exiting paste mode, now interpreting.

test: Int => Int

scala> test
res0: Int => Int = <function1>

scala> test.apply(1)
res1: Int = 2

也许令人困惑的是,可以直接调用apply:

scala> test(1)
res2: Int = 2

答案 2 :(得分:0)

test是“Int =&gt; Int”类型的函数 test1是一种在内部使用部分函数(匹配表达式)的方法。 所以他们不平等。

如果要检查类型,请使用REPL:

:type test
Int => Int

:type test1 _
Int => Int