使用案例 class 适用:类型 class A 的成员不在 T 的范围内
Using a case class apply: No member of type class A in scope for T
由于隐式转换,我在编译函数时遇到了问题。
我有以下基本情况 类:
sealed abstract class Expr0[T](implicit ev: VectorSpace0[T]) extends ID {...
case class Neg0[T](e: Expr0[T])(implicit ev: VectorSpace0[T]) extends Expr0[T] { ...
然后在一个对象中我有以下函数
def simplify[T](e: Expr0[T])(implicit ev: VectorSpace0[T]): Expr0[T] = {
def s(expr: Expr0[T])(implicit ev: VectorSpace0[T]): Result[Boolean, T] = expr match {
case Neg0(e) =>
val re = s(e)
val ne = Neg0.apply(re.e)
if (re.r) new TR(ne) else FR(ne)
上面的代码编译正确没有问题。现在我想创建一个函数来执行案例中的语句序列。所以我创建了以下辅助函数:
def C[T](f: Expr0[T] => Expr0[T], re: Result[Boolean, T])(implicit ev: VectorSpace0[T]) = {
val ne = f(re.e); if (re.r) new TR(ne) else FR(ne)
}
现在我尝试这样使用:
def simplify[T](e: Expr0[T])(implicit ev: VectorSpace0[T]): Expr0[T] = {
def s(expr: Expr0[T])(implicit ev: VectorSpace0[T]): Result[Boolean, T] = expr match {
case Neg0(e) =>
C(Neg0.apply, s(e))
我收到错误:
/src/main/scala/ann/unit/Expr0.scala:412: No member of type class ann.uinit.VectorSpace in scope for T
C(Neg0.apply, s(e))
^
我已经戳戳了几个小时,但没有运气。我认为这里的问题在于 C[T]
(第三个代码片段)的定义。也许我必须在第一个参数 f
的定义中添加一些内容,它是一个函数,以便正确确定隐含的 T
。
谁能告诉我如何纠正或进一步诊断这个问题?
TIA
相同类型和名称的嵌套隐式看起来有点乱。该消息可能具有误导性,也许 Neg0.apply 中的 eta 扩展是罪魁祸首,也许 C[T][=17 中的 T 缺少类型推断=].
我建议您先明确调用该调用,然后查看错误是否缩小:
C[T](Neg0[T](_), s(e))
由于隐式转换,我在编译函数时遇到了问题。 我有以下基本情况 类:
sealed abstract class Expr0[T](implicit ev: VectorSpace0[T]) extends ID {...
case class Neg0[T](e: Expr0[T])(implicit ev: VectorSpace0[T]) extends Expr0[T] { ...
然后在一个对象中我有以下函数
def simplify[T](e: Expr0[T])(implicit ev: VectorSpace0[T]): Expr0[T] = {
def s(expr: Expr0[T])(implicit ev: VectorSpace0[T]): Result[Boolean, T] = expr match {
case Neg0(e) =>
val re = s(e)
val ne = Neg0.apply(re.e)
if (re.r) new TR(ne) else FR(ne)
上面的代码编译正确没有问题。现在我想创建一个函数来执行案例中的语句序列。所以我创建了以下辅助函数:
def C[T](f: Expr0[T] => Expr0[T], re: Result[Boolean, T])(implicit ev: VectorSpace0[T]) = {
val ne = f(re.e); if (re.r) new TR(ne) else FR(ne)
}
现在我尝试这样使用:
def simplify[T](e: Expr0[T])(implicit ev: VectorSpace0[T]): Expr0[T] = {
def s(expr: Expr0[T])(implicit ev: VectorSpace0[T]): Result[Boolean, T] = expr match {
case Neg0(e) =>
C(Neg0.apply, s(e))
我收到错误:
/src/main/scala/ann/unit/Expr0.scala:412: No member of type class ann.uinit.VectorSpace in scope for T
C(Neg0.apply, s(e))
^
我已经戳戳了几个小时,但没有运气。我认为这里的问题在于 C[T]
(第三个代码片段)的定义。也许我必须在第一个参数 f
的定义中添加一些内容,它是一个函数,以便正确确定隐含的 T
。
谁能告诉我如何纠正或进一步诊断这个问题?
TIA
相同类型和名称的嵌套隐式看起来有点乱。该消息可能具有误导性,也许 Neg0.apply 中的 eta 扩展是罪魁祸首,也许 C[T][=17 中的 T 缺少类型推断=].
我建议您先明确调用该调用,然后查看错误是否缩小:
C[T](Neg0[T](_), s(e))