Versuchen, meinen Kopf um die verschiedenen Verwendungen der _
zu wickeln. Im Moment habe ich mit diesem Beispiel bin zu kämpfen:Scala Verwendung von Unterstrich als Objekt Platzhalter
object Chapter9 extends App {
FileMatcher.filesEnding(".scala").foreach(println)
}
object FileMatcher {
private def filesHere = (new java.io.File(".")).listFiles
private def filesMatching(matcher: String => Boolean) = {
for (file <- filesHere; if matcher(file.getName))
yield file
}
def filesEnding(query: String) =
filesMatching(_.endsWith(query))
def filesContaining(query: String) =
filesMatching(_.contains(query))
def filesRegex(query: String) =
filesMatching(_.matches(query))
}
So klar wollen wir abstrahieren die gemeinsame Arbeit von looping/Filterung /, wobei für die unterschiedlichen Arten von Matcher, macht Sinn, es in einer Hilfsfunktion zu setzen.
Ich werde auf dem _.endsWith
Teil aufgehängt. Nach meinem Verständnis wird dieser Unterstrich (der erste und einzige im Methodenkörper verwendete) durch den ersten Parameter ausgefüllt, der in diesem Fall query
ist. Ich habe versucht, diese Theorie zu testen, indem ich Folgendes mache:
Aber das Programm druckt nichts. Was ist _
hier? Wie weiß Scala, welches Objekt nach einer endsWith
Methode zu suchen ist?
Es sieht aus wie aus der Ausgabe des Programms, dass irgendwie file
wird für diesen Unterstrich ausgefüllt, aber habe keine Ahnung, wie. Vielleicht bleibt der Unterstrich ein „Platzhalter“, bis es im Inneren filesMatching
‚s Körper verwendet wird und von diesem Punkt die nächste einschließende Umfang ist die for
und der erste„Parameter is
file`?
http://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-andunderscore-in-scala –
http://stackoverflow.com/questions/1025181/hidden-features -of-scala/1083523 # 1083523 –
Ich kann nicht sagen, ob nach unten abstimmen soll, weil die Frage nicht viel Sinn ergibt, oder ob es ein möglicher Punkt der Verwirrung für neue Benutzer ist. Es gibt viele von ihnen. –