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 のオブジェクトを構築するために暗黙的なオブジェクトが必要なため、クラス A と Helper[A] が常に存在しなければならないことを単に述べているだけです。暗黙的なヘルパーが[A] 存在する必要があります..

これでうまくいくと思いますが、もっと慣用的な方法はありますか?ありがとうございました

trait A[T<:A:Helper] {

}

クラス B は A[B]{ を拡張します

}

オブジェクト B{ ここで暗黙のヘルパーを定義.. }

4

1 に答える 1