我有一种情况,我试图在单例类型上使用隐式解析。如果我在编译时知道单例类型,这将非常有效:
object Main {
type SS = String with Singleton
trait Entry[S <: SS] {
type out
val value: out
}
implicit val e1 = new Entry["S"] {
type out = Int
val value = 3
}
implicit val e2 = new Entry["T"] {
type out = String
val value = "ABC"
}
def resolve[X <: SS](s: X)(implicit x: Entry[X]): x.value.type = {
x.value
}
def main(args: Array[String]): Unit = {
resolve("S") //implicit found! No problem
}
}
但是,如果我在编译时不知道这种类型,那么我就会遇到问题。
def main(args: Array[String]): Unit = {
val string = StdIn.readLine()
resolve(string) //Can't find implicit because it doesn't know the singleton type at runtime.
}
无论如何我可以解决这个问题吗?也许某些方法采用 aString
并返回该字符串的单例类型?
def getSingletonType[T <: SS](string: String): T = ???
那么也许我可以做
def main(args: Array[String]): Unit = {
val string = StdIn.readLine()
resolve(getSingletonType(string))
}
或者这是不可能的?如果您在编译时知道所有信息,也许您只能做这种事情?