Scala 没有可用于-但隐式参数的类标记
使用scala 2.12.4,我无法让这段代码正常工作,因为它说 [错误]…/src/main/scala/effect.scala:32:11:没有可用于 [错误]效果(效应定义) [错误]^ [错误]发现一个错误 [错误](编译:编译增量)编译失败 这是(简化的)代码。我需要class标记的原因是在代码后面进行过滤(installEffect)Scala 没有可用于-但隐式参数的类标记,scala,generics,type-erasure,classtag,Scala,Generics,Type Erasure,Classtag,使用scala 2.12.4,我无法让这段代码正常工作,因为它说 [错误]…/src/main/scala/effect.scala:32:11:没有可用于 [错误]效果(效应定义) [错误]^ [错误]发现一个错误 [错误](编译:编译增量)编译失败 这是(简化的)代码。我需要class标记的原因是在代码后面进行过滤(installEffect) 很糟糕?我绕不开那个演员你有以下方法: def translate[A <: EffectBearing[A]](effectDefiniti
很糟糕?我绕不开那个演员你有以下方法:
def translate[A <: EffectBearing[A]](effectDefinition: EffectDefinition[A]): Effect[A] =
Effect(effectDefinition)
def translate[A您有以下方法:
def translate[A <: EffectBearing[A]](effectDefinition: EffectDefinition[A]): Effect[A] =
Effect(effectDefinition)
def翻译[A谢谢,添加一个绑定到translate的ClassTag会使整个过程编译。但是我不明白为什么。你能给我指一些资源来解释这一点吗?基本上,translate
方法中的代码在运行时不知道A
的类,它在编译时只知道A
的类型。通过添加>类标记
绑定在A
上,您要求编译器在运行时为您的程序提供一个类标记
。编译器将在它知道具体类的位置生成一个类标记
,并隐式地将其传递给您的所有方法,以便您的程序可以在需要时访问该具体类很明显,当转换类型定义“EffectDefinition”时,它也可以工作到一个带有隐式类标记的类中。无论如何,我应该读入该类并将答案标记为已接受。谢谢,添加一个绑定到translate的类标记会使整个过程编译。但我不明白为什么。你能给我指一些资源来解释这一点吗?基本上,translate
方法中的代码不知道运行时A
的类,它在编译时只知道A
的类型。通过添加绑定在A
上的ClassTag
,您要求编译器在运行时为您的程序提供ClassTag
。编译器将在知道具体类的点生成ClassTag
,并将其传递给imp合法地通过您的所有方法,以便您的程序可以在需要时访问具体的类。有趣的是,当将类型定义“EffectDefinition”转换为具有隐式类标记的类时,它也可以工作。无论如何,我应该读懂这一点,并将答案标记为已接受
def translate[A <: EffectBearing[A]](effectDefinition: EffectDefinition[A]): Effect[A] =
Effect(effectDefinition)