Ich versuche, By-Name-Parameter in einer Methodendefinition zu erkennen. Mein Ansatz basiert auf this question'sByNameParam
Lösung.Reflection stimmt nicht korrekt mit Parametern von Name überein
Leider stimmen die Namensparameter bei wiederholten Argumenten mit TypeRef
s überein, und umgekehrt. Im folgenden Code finden Sie ein Beispiel.
Ich nehme an, dass dies nicht das beabsichtigte Verhalten ist. Ist der Fehler an meinem Ende oder gibt es ein Problem mit dem Definitions
Modul?
import scala.reflect.runtime.universe._
class X { def x(i: => Int, other: Int*) = i * 2 }
val typeSignature = typeOf[X].member(TermName("x")).typeSignature
val paramTypes = typeSignature match {
case MethodType(params, _) => params map { _.typeSignature }
}
val repeatedParamDefinition = definitions.RepeatedParamClass
val byNameDefinition = definitions.ByNameParamClass
// prints "Got repeatedParamDefinition" twice
paramTypes map { signature =>
signature match {
case TypeRef(_, repeatedParamDefinition, args) =>
println("Got repeatedParamDefinition")
args
case TypeRef(_, byNameDefinition, args) =>
println("Got byNameDefinition")
args
}
}
// Prints "Got byNameDefinition" twice
paramTypes map { signature =>
signature match {
case TypeRef(_, byNameDefinition, args) =>
println("Got byNameDefinition")
args
case TypeRef(_, repeatedParamDefinition, args) =>
println("Got repeatedParamDefinition")
args
}
}
Scala Version: 2.11.4 (OpenJDK 64-Bit Server VM, Java 1.8.0_65)
Dies wurde behoben. Vielen Dank! –