为了存在而需要隐含的特质或类?

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

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]] ...
    }

斯卡拉莫名其妙地能够吗? 谢谢!

好吧,为了澄清,我只是简单地指出A类和Helper [A]必须始终存在,因为我需要隐式对象来构建类A的对象。您能否以这样的方式定义类A,即隐式帮助器[A]必须存在..

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

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

}

B类延伸A [B] {

}

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


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

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

这确实解决了这个问题。

链接地址: http://www.djcxy.com/p/82695.html

上一篇: Trait or Class that requires an implicit in order to exist?

下一篇: Scala package objects with trait providing type/value aliases