假設我有一個集轉換爲字符串的,作爲一個Type類:獲得運行時類型拿起隱式證據
import scala.reflect.runtime.universe._
abstract class ToStringConverter[T] {
def convert(value: T): String
}
implicit object IntToStringConverter extends ToStringConverter[Int] {
def convert(value: Int) = value.toString
}
implicit object DoubleStringConverter extends ToStringConverter[Double] {
def convert(value: Double) = value.toString
}
和使用該類型的信息挑選合適的轉換器轉換方法:
def convert[T](v: T)(implicit ev: ToStringConverter[T]): String = ev.convert(v)
這工作得很好。如果我有具體類型提前,例如:
scala> convert[Double](12.2)
res0: String = 12.2
scala> convert[Int](12)
res1: String = 12
是否有可能使用上面的轉換方法和運行時類型,例如,類型't'在下面?
scala> val t = typeOf[Double]
t: reflect.runtime.universe.Type = Double
你的'convert'需要一個值作爲參數 - 你想用't'做什麼?如果你想調用'convert(t)',你可以很容易地提供'隱式對象RTUStringConverter extends ToStringConverter [runtime.universe.Type]'。 – Suma
convert方法當前需要一個類型參數,並且此類型用於通過隱式機制將正確的轉換器引入到範圍中。 有時我不知道類型提前,我只有一個代表它的類型,所以我應該更改簽名傳入Type實例,並手動獲取該類型的隱式轉換器? – gnf
你想以類似'val a:Any; convert [t](a)'的方式調用它? – Suma