2

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

例如

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平等的吗?

4

3 回答 3

6

他们不相等。test是一个返回 a的方法Function1[Int,Int]test1是一个接受 anInt并返回一个的方法Int。这也与模式匹配表达式完全无关。

于 2012-10-02T10:55:13.530 回答
5

前面的代码确实返回了一个 Int => 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
于 2012-10-02T10:57:26.653 回答
0

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

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

:type test
Int => Int

:type test1 _
Int => Int
于 2012-10-02T11:01:33.213 回答