我刚刚将案例序列作为部分函数阅读,语法有点奇怪。
例如
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
}
test
和test1
是否相等?
答案 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