EclipseのScala-IDEでScalaを学習しています。第9章:抽象化の制御、第1部:Scalaでのプログラミングのコード複製を減らしながら、私は本のコードを書いています(下記参照)。私が不要な空白行を削除し始めたとき、奇妙なことが起こりました。 filterFiles()
メソッドの空白行を削除する前のコード全体を以下に示します。Scala-IDEまたはScalaの不適切な構文のあいまいさ
これはうまくいきます!しかし、filterFiles()
方法から空白行を削除した後、この方法は、次のようになります。
private def filterFiles(path: String, pattern: String, matcher: (String, String) => Boolean) = {
val files = (new java.io.File(path)) listFiles
for(file <- files if matcher(file.getName, pattern)) yield file
}
そしてIDEは私の体の両方の行にエラーが発生します。最初の行の誤差は言う:
ambiguous reference to overloaded definition, both method listFiles in class File of type (x$1: java.io.FileFilter)Array[java.io.File] and method listFiles in class File of type
(x$1: java.io.FilenameFilter)Array[java.io.File] match argument types (Null)
2行目にエラーが言う:
illegal start of simple expression
、今もこの教えtest()
方法でprintArray()
へのすべての3つの呼び出し:
type mismatch; found : Unit required: Array[?]
どういう意味ですか?コードの配置がコードフローを壊す可能性がある場合、ScalaはPythonのように振舞うはずではありません...だから、filterFiles()
メソッドの最初の行と2行目の空白行を削除すると、このような重大なエラーが発生します。どこかのバグですか、それともScalaのルールに直接従っていますか?注:行間に;
を追加すると、すべてがソートされます。セミコロンの推論バグですか?
これは、整列または空白に頼っていないという点でPythonと異なります。例えば、各ステートメントの最後にセミコロンを追加することができます。 – Philippe
ええ、それは間違いなく覚えておくべきことです。 – noncom