問題タブ [f-bounded-polymorphism]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
133 参照

scala - Scala: f-bounded ポリモーフィック トレイトの混合を制限するトレイト

私は持っている:

Felineクラスを拡張するような特性はPet、次のように簡単に追加できます。

Petしかし、次のような自己型と混合する型を導入する場合:

エラーが発生します:

型引数 [T] はトレイト Pet の型パラメーター境界 [T <: Pet[T]] に準拠していません

私の理解では、これは自己型チェックインPetCareInfoが型A with Bを個別に調べ、そのため制限に失敗するためです。(これがバグなのか機能なのかはわかりません)

代わりに存在型を使用できます。

そしてそれはちょっとうまくいくでしょう。2 つの質問:

  1. 混在制限線で存在型を直接定義することはできません。私は得る:

; 期待されていましたが、「forSome」が見つかりました。

これを回避する方法はありますか?

  1. 実際には、PetCareInfoforSome制限+Pet独自の制限は、私が持つことができないことを意味します:

    class Cat extends Pet[Dog] with PetCareInfo[Cat]

しかし、これに依存しない方法があれば知りたいですPet

更新

質問 2 では、既存の型制限を次のように変更できます。

そして、それは問題を解決しているようです。Aただし、構造型が と同じになる保証はまだないTので、依然 に依存していPetます。:(

0 投票する
3 に答える
452 参照

scala - ジェネリック型が同じジェネリック型で動作する場合の Scala 型の不一致

Location のサブクラスの List を受け取るジェネリック ケース クラス Route があります。ただし、次のメソッドでは、への呼び出しで型の不一致が発生しますdistance expected: head.T, actual: T

基本的な抽象 Location クラスは次のとおりです。

head と h は両方とも同じリストから来てrouteいるので、なぜこれらが同じ型ではないのか理解できません。