質問
別の質問の解決策を見つけようとしている間( [1] )発散する暗黙の拡張エラーに遭遇しました。これが何を意味するのかについての説明を探しています
ユースケースは次のとおりです: ジェネラコディセタグプレ
解決
-Xlog-implicits
引数を渡してscalaでこれを実行すると、より多くの情報が得られます:
scala.this.Prefed.conformsは、(T)=> Ordered [T]の有効な暗黙の値ではありません。理由は次のとおりです。
タイプの不一致:
見つかりました:<:<[T、T]
必須:(T)=>注文済み[T]
scala.this.predef.conformsは、(Ordered [T])=> Ordered [Ordered [T]]の有効な暗黙の値ではありません。理由:
タイプの不一致:
見つかりました:<:<[Ordered [T]、Ordered [T]]
必須:(Ordered [T])=> Ordered [Ordered [T]]
math.this.Ordering.orderedは、次の理由により、Ordering [T]の有効な暗黙の値ではありません。
型引数[T]は、メソッドorderedの型パラメーターの境界に準拠していません[A <:scala.math.Ordered [A]]
これはほとんど推測ですが、ある程度意味があるように思われます。さらに調査を試みます:
これは、ここで検討されている3つの暗黙的なものがあることを示唆しているようです。最終的に、
sorted
の署名では、Ordering[T]
タイプの何かを見つける必要があります。だからそれはあなたの陰関数ordering
を構築しようとしています。まず、conv
タイプの暗黙的なものを見つけることによって、(T) => Ordered[T]
を入力しようとしています。ここでは、Predefで検索しています。これは、間違ったツリーを吠えているようです。次に、(Ordered[T]) => Ordered[Ordered[T]]
はby
型の暗黙的なパラメーターを取り、Ordering[S]
はS
によってOrdered[T]
であるため、同じ場所でconv
の暗黙的なパラメーターを見つけようとします。したがって、ordering
を構築することはできません。次に、math.Orderingで
ordering
を使用しようとしますが、これも適合しません。しかし、これがやや紛らわしい「発散する暗黙の」メッセージを与えているものだと思います。問題は、それらが分岐しているということではなく、スコープ内に適切なものがないということですが、下がる2つのパスがあるという事実によって混乱しています。暗黙の順序付き関数なしでdef foo[T <% Ordered[T]](s : Seq[T]) = s.sorted
を定義しようとすると、適切な暗黙の関数が見つからないという素敵なメッセージが表示されて失敗します。