Seltsam, dass niemand eine direktere Übersetzung versucht hat:
""
.getClass.getMethods.map(_.getName) // methods
.sorted // sort
.filter(_ matches "(?i).*index.*") // grep /index/i
Also, ein paar zufällige Gedanken.
-
Der Unterschied zwischen "Methoden" und den obigen Reifen ist frappierend, aber niemand hat je behauptet, dass Reflexion die Stärke von Java ist.
-
Ich verheimliche etwas über sorted
oben: Sie nimmt einen impliziten Parameter des Typs Ordering
. Wenn ich die Methoden selbst und nicht ihre Namen sortieren wollte, müsste ich das selbst tun.
-
A grep
ist eigentlich eine Kombination aus filter
y matches
. Es ist etwas komplizierter, weil Java entschieden hat, ganze Zeichenketten abzugleichen, auch wenn ^
y $
sind nicht spezifiziert. Ich denke, es wäre sinnvoll, eine grep
Methode auf Regex
, die die Traversable
als Parameter, aber...
Wir könnten also Folgendes tun:
implicit def toMethods(obj: AnyRef) = new {
def methods = obj.getClass.getMethods.map(_.getName)
}
implicit def toGrep[T <% Traversable[String]](coll: T) = new {
def grep(pattern: String) = coll filter (pattern.r.findFirstIn(_) != None)
def grep(pattern: String, flags: String) = {
val regex = ("(?"+flags+")"+pattern).r
coll filter (regex.findFirstIn(_) != None)
}
}
Und jetzt ist dies möglich:
"".methods.sorted grep ("index", "i")
1 Stimmen
Ich glaube, ich habe es gefunden "wow".getClass.getMethods.toList.map(m => m.getName).sort((a, b) => (a compareTo b) < 0 ).filter( s => s.matches("index(.*)"))
6 Stimmen
Nur so aus Neugier: Was werden Sie mit diesen Methodennamen machen, wenn Sie sie einmal haben? Wenn es darum geht, dass Sie wissen, was Sie als nächstes in einer interaktiven Umgebung eingeben können, bietet die Scala REPL eine gute Tabulatorvervollständigung. Probieren Sie es aus.
0 Stimmen
Ausgezeichneter Tipp, Randall! Aus irgendeinem Grund habe ich noch nie daran gedacht, es zu versuchen...
0 Stimmen
Die Tabulatorvervollständigung findet keine Methoden aus Traits. Zum Beispiel, "
1.m<tab>
" deutet auf nichts hin, aber "1.max(2)
" funktioniert gut.