私はユーザーの入力に依存する型クラスを作成しようとしています。Scalaの抽象型、変数、および型式
sealed trait H
case object Ha extends H
case object Hb extends H
と型クラス:我々はいくつかのケースオブジェクトを持っている想像し、私たちは持っていることを覚えて
variableComingFromMainArgs match {
case "a" => Foo.bar[Ha.type] _
case "b" => Foo.bar[Hb.type] _
}
:私は試合を使用して実用的なソリューションを見つけながら
trait Foo[A] {
def bar: String
}
object Foo {
def bar[A : Foo] = implicitly[Foo[A]].bar
implicit object FooA extends Foo[Ha.type] {
override def bar: String = "A"
}
implicit object FooB extends Foo[Hb.type] {
override def bar: String = "B"
}
}
Scalaの抽象型であるため、私のケースクラスを次のように変更することができます:
プログラムへのユーザーの入力に応じたときさて、私はこれがない何らかの理由で、しかし ヴァル変数のようなもの=ハ のprintln(Foo.bar [variable.T])
を行うことができます仕事とエラーが私のために非常に有用ではありません。
error: could not find implicit value for evidence parameter of type Foo[variable.T]
println(Foo.bar[variable.T])
任意のアイデアこれは、いない場合は克服できるのであれば、なぜですか?
ありがとうございました。
ええと、十分に..私が言及したようにパターンマッチングを使用することを除いて、これには何の問題もないと思います。ありがとう! – Crembo