2013-07-05 23 views
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> 

我不明白爲什麼佔位符(不建議型)的應用程序的功能是創造前綴額外的無用爭論一個新的咖喱功能的行爲。無法理解佔位_ Scala的功能應用

我期待編譯器錯誤或至少是一個警告。

回答

3

我想這是由於uniform access principle:在REPL val是一個對象的字段,而不是局部變量。並且所有不是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 _ 
         ^

即使我可以解釋爲什麼是這樣工作的,我仍然認爲這種行爲可以被認爲是一個錯誤。

+0

@ om-nom-nom:謝謝你的改進,但不僅是'public'字段是getter。 – senia

+0

是的,我概括了一下 –