問題タブ [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.
scala - Scala: f-bounded ポリモーフィック トレイトの混合を制限するトレイト
私は持っている:
Feline
クラスを拡張するような特性はPet
、次のように簡単に追加できます。
Pet
しかし、次のような自己型と混合する型を導入する場合:
エラーが発生します:
型引数 [T] はトレイト Pet の型パラメーター境界 [T <: Pet[T]] に準拠していません
私の理解では、これは自己型チェックインPetCareInfo
が型A with B
を個別に調べ、そのため制限に失敗するためです。(これがバグなのか機能なのかはわかりません)
代わりに存在型を使用できます。
そしてそれはちょっとうまくいくでしょう。2 つの質問:
- 混在制限線で存在型を直接定義することはできません。私は得る:
; 期待されていましたが、「forSome」が見つかりました。
これを回避する方法はありますか?
実際には、
PetCareInfo
のforSome
制限+Pet
独自の制限は、私が持つことができないことを意味します:class Cat extends Pet[Dog] with PetCareInfo[Cat]
しかし、これに依存しない方法があれば知りたいですPet
。
更新:
質問 2 では、既存の型制限を次のように変更できます。
そして、それは問題を解決しているようです。A
ただし、構造型が と同じになる保証はまだないT
ので、依然 に依存していPet
ます。:(
scala - ジェネリック型が同じジェネリック型で動作する場合の Scala 型の不一致
Location のサブクラスの List を受け取るジェネリック ケース クラス Route があります。ただし、次のメソッドでは、への呼び出しで型の不一致が発生しますdistance
expected: head.T, actual: T
基本的な抽象 Location クラスは次のとおりです。
head と h は両方とも同じリストから来てroute
いるので、なぜこれらが同じ型ではないのか理解できません。