長い間、暗黙的なクラスを避けようとしましたが、最近はそのクラスに落ちました。現時点では、私の関数aFunc2
の戻り型が、aFunc1
のパラメータと同じように、その暗黙の形式に変換できない理由を理解できません。暗黙のクラスを関数の結果の型として使用する方法
object SO extends App {
implicit class Experiment[K, V](tpl: (K, V))(implicit o: Ordering[K], f: Fractional[V]) {
def foo(): String = "Bar"
}
// Works
println((12, 23.1).foo())
// Works
def aFunc1[K, V](e: Experiment[K, V]): String = e.toString
println(aFunc1((12, 23.1)))
// does not - why ?
def aFunc2[K, V](e: Experiment[K, V]): Experiment[K, V] = (12, 23.1)
}
EDIT 1:実際には、これはタイプで行うので、私は例を少し拡張できなければならない:
object SO extends App {
implicit class Experiment[K, V](tpl: (K, V))(implicit o: Ordering[K], f: Fractional[V]) {
def foo(): (K, V) = (tpl._1, tpl._2)
}
// Works
println((12, 23.1).foo())
// Works
def aFunc1[K, V](e: Experiment[K, V]): String = e.toString
println(aFunc1((12, 23.1)))
// still does not but K and V should actually match - i guess
def aFunc2[K, V](e: Experiment[K, V]): Experiment[K, V] = e.foo()
}
がエラー:
Error:(19, 66) type mismatch;
found : (K, V)
required: scratch.SO.Experiment[K,V]
def aFunc2[K, V](e: Experiment[K, V]): Experiment[K, V] = e.foo()
はい、それはタイプに関連しているので、私は少し質問を延長しました。 – KIC
@KICアップデートを追加しましたか?私は現時点でスカラ流通の準備が整っていないので、私はここで盲目に飛んでいることを認めなければならない。 –
素晴らしい作品 - thx! – KIC