0
メソッド定義内のby-nameパラメータを検出しようとしています。私のアプローチはthis question'sByNameParam
の解決策に基づいています。リフレクションが名前のパラメータで不適切に一致しています
反復引数の場合、by-nameパラメータはTypeRef
に一致し、逆も同様です。例については、下のコードを参照してください。
これは意図した動作ではないと仮定します。問題が終了しましたか、Definitions
モジュールに問題がありますか?
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のバージョン:2.11.4(OpenJDKの64ビットサーバーVMはJava 1.8.0_65)
これは修正されました。ありがとう! –