需要隐含的特质或类才能存在?

时间:2013-09-28 01:13:32

标签: scala

所以我发现自己的代码有这样的东西:

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的对象。你能否以这样的方式定义类A隐式助手[A]必须存在..

我认为这会奏效,但是有更惯用的方法吗?谢谢

特质A [T&lt; A:Helper] {

}

B类延伸A [B] {

}

对象B {   在这里定义隐式助手.. }

1 个答案:

答案 0 :(得分:0)

如果我正确地理解了你的问题,那么你总是希望在使用A时可以使用帮助器,而有时候(对于第一个例子中提到的含义),那么如何:< / p>

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

这确实解决了目的。