問題タブ [structural-typing]
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 polymorphism の問題
次の型とメソッドが存在すると仮定します。
に渡される PartialFunction を作成できるようにしたいm
。
最初の試みは書くことです
これは で失敗しtype arguments [_$1] do not conform to trait X's type parameter bounds [A <: X[A]]
ます。X
したがって、の型パラメーターを制約する必要があるようです。
2 回目の試行:
これは falseであるm
ため、適用時に失敗します。PartialFunction[AnyRef{type A <: X[this.A]},Boolean] <: PartialFunction[X[_],Boolean]
部分関数の定義との適用の両方でコンパイラを実際に満足させるキャストを含まない方法はありますm
か?
haskell - Haskell に構造型付けのレコードがないのはなぜですか?
Haskell には構造型付けがあると説明されているのを聞いたことがあります。私が理解しているように、レコードは例外です。たとえば、 とは名目上フィールドが異なるだけであるにもかかわらず、foo
を何かの型で呼び出すことはできません。HRec2
HRec
HRec2
レコードを含むすべてに構造型付けを拡張することを拒否する理由はありますか?
レコードに対しても構造型付けを持つ静的型付け言語はありますか? これについて、静的に型付けされたすべての言語全般について読むことができる議論はありますか?
scala - 構造型の改良と型の等価性
Type.=:=
型の絞り込みに適用されたときの不可解な動作に出くわしました。検討:
Base
これが型の絞り込みのエイリアスであることを考えると、メンバーを追加してさらに絞り込むと、 でfoo
定義したのと同じ型が生成されると予想さfoo
れBase
ます。
言い換えれば、私はそれを期待し、完全に同等の型T1
を示します。T2
ほとんどの場合、scalac は同意しているようです。例として、 のインスタンスが期待されるT2
場所に のインスタンスを渡すことができます。T1
逆に:
証拠T1 =:= T2
を要求することもできますが、コンパイルも問題なく実行されます。
ただし、scala リフレクションを使用すると、まったく異なる結果が得られます。
typeOf[T1] =:= typeOf[T2]
それで、これはscalaリフレクションのバグですか(私はそう推測します)、それともfalseを返す根本的な理由(そうでなければ技術的)がありますか?
scala - isInstanceOfによるscalaの構造型のチェック
scala で構造型の等価性をチェックしているだけです。
foo
すぐに無名クラスと type からインスタンスを作成しますQ
。メソッド名で区別するつもりなので、構造的に別の型として扱ってほしい。
コードスニペット:
チェックは true を返します。
Q1:foo
が のインスタンスである理由が
わかりませんQ
。それはナンセンスです。型構造の意味が違うのではないですか?
Q2: では、構造型を確認する正式な方法は何ですか?
scala - Scala: パッケージ外の構造型を介してパッケージの可視メソッドにアクセスする
これは期待どおりに機能しません (run
外部からパッケージ private を呼び出そうとしているためServices
):
しかし、驚くべきことにこれはうまくいきます:
HelloPrinter はパッケージの可視性ルールのために構造型と一致しないため、コンパイラのバグであると言えます。コンパイルする必要はまったくありません。
次の例では、プログラムはコンパイルされますが、実行時例外 ( java.lang.NoSuchMethodException
)がスローされます。
これは私が見逃している言語機能またはルールですか、それとも合法的に Scala のバグですか?