質問

別の質問の解決策を見つけようとしている間( [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を定義しようとすると、適切な暗黙の関数が見つからないという素敵なメッセージが表示されて失敗します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top