私が絶えずスカラに踏み込んだ問題の1つはラムダ式です。例えば_(アンダースコア)を使用している場合、「拡張関数のパラメータタイプが見つかりません」?
JarBuilder.findContainingJar(clazz).foreach {userJars = userJars + _ }
は私のようなエラー与える:
missing parameter type for expanded function ((x$1) => userJars.$plus(x$1))
をしかし、私は自分自身の拡張を行う場合:
JarBuilder.findContainingJar(clazz).foreach {x => userJars = userJars + x }
は、それが正常に動作します。
これはScalaのバグですか?あるいは、私はひどく間違ったことをしていますか?
を検討する必要があります達成しようとしているかを考えると
は '_'あなたはそれがある意味どう思うかという意味ではありません。その文脈では*特別なシンボルです:*他の単純な識別子はうまく動作するはずです*。この魔法のおかげで、「Some(4).foreach(_ +:List())」は「うまくいく」。参照するには、 'Some(4).map(_ + 1)'と 'Some(4).map(x => x + 1)'を比較してください。うまくいけば、これは重複している(そしてそのように閉じられている)、またはSLSから引き出す素敵な答えがあるでしょう:) –
http://stackoverflow.com/questions/7695270/underscore-in-list-filter(good)、http ://stackoverflow.com/questions/4422016/scala-underscore-minimal-function、http://stackoverflow.com/questions/6593277/concise-notation-for-single-arg-anonymous-function-avoiding-underscore-not - –
(実際には、 '_'が*別の方法で*魔法ではない* *文脈があるかどうか疑問に思う*) –