問題タブ [bounded-quantification]
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の「型引数が型パラメーターの境界に準拠していません」エラーを理解する
以下が機能しないのはなぜですか?
最初の試みではありませんHoo[B] with B <: Foo[B]
か?
2回目の試みでは、そうではありませんHoo[B] <: Foo[B]
か?
この問題を解決するために、次のようなライブラリがあります。
BYTEA と呼ばれる TEXT と一緒に新しい拡張メソッドを導入しようとしているので、次のように記述できます。
私の試み:
しかし、これは上記の小さなテスト ケースと同じ問題に遭遇します。
scala - タイプメンバーとして表現タイプを実装できません
別の質問に頭を悩ませている間、私は関連しているように見えるさまざまななぞなぞに出くわしました。これはそれらの1つです:
エラーは次のとおりです。
なんで?(セルフタイプ_:S =>
をに追加しようとしましSys
たが、問題ではありませんでした)
Rexの答えはFenced
オブジェクトを構築することを可能にしますが、タイププロジェクション()を使用するときに表現タイプの文字が失われるという問題を実際には解決しませんS#Peer
。私は、より厳しい制約を課す別のシナリオを考え出しました。これが中心的な問題だと思います。
scala - 型メンバーを連結 (射影) すると、Scala は関連する型を追跡できなくなります。
問題を歩き回っていて、型射影と抽象型に関する新しい奇妙な問題を発見しました。トランザクションを生成するシステムがあり、ブリッジしたいピア システムがあるとします。以下は私には良さそうです:
そして、直接システムを使用できます:
しかしpeer
、以下に示すように、どういうわけかトランザクションの方法に欠陥があります。
私は賢く、それを回避したかった:
...しかし、それも失敗し、何が問題なのかについての手がかりが得られます。
それはすべてdef peer: S#Peer#Tx
、問題を引き起こすか、(より可能性が高い?)型パラメーターとしてではなく型メンバーtype Peer <: Sys[Peer]
として使用すると問題になることを示唆しています。
scala - 型パラメーターの代わりに型メンバーを介した F-bounded 数量化?
型パラメーターを型メンバーに移動したいと思います。
これは機能する出発点です:
私を悩ませているのは、[S <: Sys[S]]
ライブラリ全体で型パラメーターを持ち歩いていることです。だから私が考えていたのはこれです:
これは失敗します...S#Tx
そして、S#Id
どういうわけか切り離されました:
それを機能させるトリックや変更はありますか?
編集:明確にするために、私は主にタイプを修正して機能させることを望んでS
いSys
ます。私の場合、パス依存型を使用すると多くの問題があります。pedrofuria と Owen の回答を反映した例を 1 つだけ挙げると、次のようになります。
def foo: Foo[s.type]
これがどこにも通じないという考えをあなたに与えるためにそれを作ってみてください.
scala - 再帰的に制限された型パラメーター(F境界)を型メンバーに変換するScala
どのように変換しますか:
タイプメンバーに?
つまり、私は次のようなものが欲しいです:
しかし、名前Aはすでに型の改良に使用されているため、問題が発生しています。この質問は似ています(そしてそこから生まれます):型パラメーターの代わりに型メンバーによるF有界量化?
scala - 再帰的 (f-bounded) 型への型射影は使用できません
ある f-bounded 型から別の型への射影を使用すると、理解できない型エラーが発生します。以前の質問に関連している可能性がありますが、よくわかりません。
セットアップは簡単です:
つまり、F
別の同様のシステムへの投影を含むシステムがあります。
わかりました、今私がする必要があるのは、与えられF
た を使用できるようにすることF#I
です。しかし、コンパイラは文句を言います:
では、これはなぜですか?そして、解決策はありますか?
実際には、何が起こっているのかを説明していない、この問題の変種のようです。
編集:たとえば、次のコンパイル:
ここでの問題は、そのくだらない型パラメーターI1
が API の数十のレベルにバブルアップすることです。そのため、2 番目の型パラメーターを回避する解決策を見つける必要があります。