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
  }

test等しいtest1ですか?

4

3 に答える 3

6

それらは等しくありません。testはを返すメソッドでありFunction1[Int,Int]test1はを取り、Intを返すメソッドです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 に答える