0
我試圖檢測方法定義中的名稱參數。我的方法是基於this question'sByNameParam
解決方案。反射不正確地匹配名字參數
不幸的是,名稱參數與重複參數的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
}
}
斯卡拉版本:2.11.4(OpenJDK的64位服務器VM,爪哇1.8.0_65)
這固定了它。謝謝! –