使用 shapeless 在 scala 中获取参数化 class 的名称
Getting name of parameterized class in scala using shapeless
我想获取 class 的名称作为参数传递给使用 shapeless 的函数。我试过这个:
def sayMyName[T](t: T): String = Typeable[T].describe // error: class type required but T found
如果T
换成具体类型就没有问题。是否可以使用 shapeless 制作类似这样的作品?
您只需添加 Typeable
类型类作为您类型的上下文绑定 T
:
def sayMyName[T: Typeable](t: T): String = Typeable[T].describe
sayMyName("") //String
您也可以显式声明隐式参数:
def sayMyName[T](t: T)(implicit typeable: Typeable[T]): String = Typeable[T].describe
通过添加上下文绑定,您要求编译器等待解析 Typeable
typeclass 直到 sayMyName
用具体类型调用,而不是立即解析它(这是不可能的,因为此时 T 的真实类型还不知道)。
我想获取 class 的名称作为参数传递给使用 shapeless 的函数。我试过这个:
def sayMyName[T](t: T): String = Typeable[T].describe // error: class type required but T found
如果T
换成具体类型就没有问题。是否可以使用 shapeless 制作类似这样的作品?
您只需添加 Typeable
类型类作为您类型的上下文绑定 T
:
def sayMyName[T: Typeable](t: T): String = Typeable[T].describe
sayMyName("") //String
您也可以显式声明隐式参数:
def sayMyName[T](t: T)(implicit typeable: Typeable[T]): String = Typeable[T].describe
通过添加上下文绑定,您要求编译器等待解析 Typeable
typeclass 直到 sayMyName
用具体类型调用,而不是立即解析它(这是不可能的,因为此时 T 的真实类型还不知道)。