3

私はこれを理解することができます:

scala> def f(i: Int) = "dude: " + i
f: (i: Int)java.lang.String

scala> f(3)
res30: java.lang.String = dude: 3

これは、intを受け取り、dude:+で渡されるintの形式の文字列を返す関数fを定義します。

これで、同じ関数を次のように指定できます。

val f: Int => String = x => "dude: " + x
scala> f(3)
res31: String = dude: 3
  • なぜ2つ必要なのですか=>
  • どういうString = x意味ですか?Scalaで何かを定義したいときは、そうするだろうと思いましたx:Stringか?
4

3 に答える 3

10

次のように解析する必要があります

val (f: Int => String) = (x => "dude: " + x)

したがって、fが型を持ち、パラメーターを受け取ってaを返す(Int => String)無名関数として定義されていることを指定します。Int(x)String

于 2013-01-20T23:07:17.510 に答える
6

少しだけ明確にするために。defステートメントは、関数ではなくメソッドを定義します。

さて、機能について。このように書くこともできました:

val f: (Int => String) = x => "dude: " + x

そして、「f は Int から String への関数です」と読むことができます。したがって、あなたの質問に答える=>と、型位置では型から型への関数を意味=>し、値位置ではパラメーターidentifierを取り、戻り値を意味しますexpression

さらに、型推論に依存することもできます。

val f = (x:Int) => "dude: " + x
于 2013-01-20T23:27:41.973 に答える
3

Lee と pedrofurla の両方が優れた回答をしました。また、メソッドを関数に変換したい場合 (パラメーターとして渡す、部分的に適用された関数として使用するなど)、魔法のアンダーバーを使用できることも追加します。

def foo(i: Int) = "dude: " + x
val bar = foo _  // now you have a function bar of type Int => String
于 2013-01-21T02:24:24.023 に答える