2
Welcome to Scala version 2.10.2
Type in expressions to have them evaluated.
Type :help for more information.

scala> val fn = (x:Int) => x+1
fn: Int => Int = <function1>

scala> val fn1 = fn _
fn1: () => Int => Int = <function0>

scala> val fn2 = fn1 _
fn2: () => () => Int => Int = <function0>

関数へのプレースホルダー (推奨される型なし) の適用が、接頭辞付きの追加の void 引数を持つ新しいカリー化された関数を作成する理由がわかりません。

コンパイラ エラーまたは少なくとも警告が発生することを予期していました。

4

1 に答える 1

3

私はそれが均一アクセスの原則によるものだと思います.REPLvalでは、オブジェクトのフィールドであり、ローカル変数ではありません。また、すべてのprivate[this]フィールドは getter メソッドではありません。

したがって、コードは次のようになります。

def fn() = (x:Int) => x+1
val fn1 = fn _ // () => fn()

ローカル変数で期待どおりに機能します。

scala> {
     |   val fn = (x:Int) => x+1
     |   val fn1 = fn _
     | }
<console>:10: error: _ must follow method; cannot follow Int => Int
                val fn1 = fn _
                          ^

なぜこのように動作するのかを説明することはできますが、それでもこの動作はエラーと見なすことができると思います.

于 2013-07-05T08:42:49.313 に答える