2016-11-07 10 views
0

こんにちは私は自分のコードを実行しようとしています。それは動作するはずだ、私はIDEが何の警告も出さないことを意味する。しかし、私がここに_はメソッドに従わなければなりません。 follow()=> Boolean

Error:(20, 40) _ must follow method; cannot follow() => Boolean 
     properties += new Property(propName, formula _) 

が、これは私が事何

class Property(val name: String, val func:() => Boolean) 

Propertyクラスです

def property(propName: String)(formula:() => Boolean) { 
     properties += new Property(propName, formula _) 
    } 

このエラーの原因となるコードの一部であり、このエラーを取得していますコンパイルされたときここに行方不明?

答えて

4

ここでアンダースコアは必要ありません。アンダースコアは、メソッドをη展開で関数に変換する場合にのみ必要です。 formulaは既にクラスが探しているタイプの() => Booleanの関数であるため、これは必要ありません。

def property(propName: String)(formula:() => Boolean) { 
    properties += new Property(propName, formula) 
} 
+0

私は 'defプロパティ(propName:String)(数式:=>ブール値)'にするとエラーにはなりません。 –

+0

'=> Boolean 'は' Function1 [Boolean] 'と完全に同じではありません。 '_'を離れると、エラーが発生することに気づくでしょう。これはScalaで '_'を使用しています(まだ別のものです。http://stackoverflow.com/a/8001065/1374461)。 –

3

警告と同様です。 _は、それを関数に変換するメソッドに従わなければなりません。 formulaはすでに関数です。だから、このように渡すことができます:

properties += new Property(propName, formula) 
関連する問題