curioso que nadie intentó una traducción más directa:
""
.getClass.getMethods.map(_.getName) // methods
.sorted // sort
.filter(_ matches "(?i).*index.*") // grep /index/i
Así, algunos pensamientos al azar.
La diferencia entre los "métodos" y los aros anteriores es llamativa, pero nunca nadie dijo que la reflexión era la fortaleza de Java.
Oculto algo sobre sorted
anterior: en realidad toma un parámetro implícito del tipo Ordering
. Si quisiera ordenar los métodos en lugar de sus nombres, tendría que proporcionarlos.
A grep
es en realidad una combinación de filter
y matches
. Se ha vuelto un poco más complejo debido a la decisión de Java de hacer coincidir cadenas enteras incluso cuando ^
y $
no están especificados. Creo que tendría algún sentido tener un método de grep
Regex
, que tuvo Traversable
como parámetros, pero ...
Por lo tanto, esto es lo que podríamos hacer al respecto:
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)
}
}
Y ahora esto es posible:
"".methods.sorted grep ("index", "i")
Creo que lo encontré "wow" .getClass.getMethods.toList.map (m => m.getName) .sort ((a, b) => (a compareTo b) <0) .filter (s = > s.matches ("index (. *)")) – skyde
Por curiosidad, ¿qué vas a hacer con esos nombres de método una vez que los tienes? Si es así para que sepa qué puede escribir a continuación en una configuración interactiva, Scala REPL tiene una buena terminación de pestañas. Echale un vistazo. –
¡Excelente consejo, Randall! Por alguna razón, nunca pensé en intentar ... – pdbartlett