1

所以我发现自己的代码是这样的:

trait Helper[T] { def canMakeA:T }

trait A

class Example extends A{
}

object Example {
  implicit val myHelper extends Helper[Example] 
}

关键是当某些东西正在使用特征 A(它是扩展类)时,我总是需要一个 Helper[A] 对象。这很简单,可以在接收函数或类中声明:

class Runner[T<:A:Helper] {   //T <: A and Helper[T] implicitly exists
... implicitly[Helper[T]] ...
}

但是,我想知道我是否可以首先将特征 A(以及它的各种后代类)绑定到此要求。就像是:

trait A:Helper {  //INCORRECT - EXAMPLE ONLY

}
class Runner[T<:A] {    //not necessary to use A:Helper, already implied as defined in A
    ... implicitly[Helper[T]] ...
    }

Scala 能做到这一点吗?谢谢!

好的,只是为了澄清一下,我只是说明 A 类和 Helper[A] 必须始终存在,因为我需要隐式对象来构建 A 类的对象。你能以隐式 Helper 的方式定义 A 类吗? [A] 必须存在..

我想这会起作用,但有没有更惯用的方法?谢谢

特征 A[T<:A:Helper] {

}

B 类扩展 A[B]{

}

object B{ 在这里定义隐式 Helper.. }

4

1 回答 1

0

如果我正确理解您的问题,您总是希望在工作时有一个可用的助手,A而不是有时(如第一个示例中提到的那样),那么如何:

trait A extends Helper[A]{
   def canMakeA:A = //
}

这确实解决了目的。

于 2013-09-28T05:06:15.493 回答