2012-04-03 1 views
6

私はスカラ座に新しいですし、次のコードを理解しようとしているが、私は「1 +」のポイント(B)のように考えるであるかを理解していない(1 +)はどのように関数になりますか?

scala> def w42(f: Int => Int) = f(42) //(A) 
w42: (f: Int => Int)Int 

scala> w42 (1 +)  //(B) 
res120: Int = 43 

(ビギニングScalaの本の中の例から派生します)点(A)でw42の定義を満たす関数(Int 1パラメータを取り、Intを返す)?

答えがある文書を説明したり、私に指摘してもらえますか?

答えて

11

シンプルです。 Scalaの1 + 2は、1.+(2)を超える構文砂糖です。

final class Int extends AnyVal { 
    def +(x: Int): Int = //... 
    //... 
} 

それが機能したかのようにあなたが1 +を使用することができる理由です:これはIntIntを受け入れる+という名前のメソッドを有することを意味します。以下、予期しない方法の命名と例:

scala> def s42(f: String => String) = f("42") 
s42: (f: String => String)String 

scala> s42("abc".concat) 
res0: String = abc42 

ところで厳密に言えば、イータ展開も機能する方法を変換することに関与しています。

+4

有用なヒント:「1 +」は「1 + _」が「x => 1 + x」を意味することを意味します – sschaef

+0

おかげさまで、 – lastrinh1296773

+0

有用なヒントのAntorasありがとう – lastrinh1296773

関連する問題