Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 没有可用于-但隐式参数的类标记_Scala_Generics_Type Erasure_Classtag - Fatal编程技术网

Scala 没有可用于-但隐式参数的类标记

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

使用scala 2.12.4,我无法让这段代码正常工作,因为它说

[错误]…/src/main/scala/effect.scala:32:11:没有可用于

[错误]效果(效应定义)

[错误]^

[错误]发现一个错误

[错误](编译:编译增量)编译失败

这是(简化的)代码。我需要class标记的原因是在代码后面进行过滤(installEffect)


很糟糕?我绕不开那个演员

你有以下方法:

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)