問題タブ [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.

0 投票する
2 に答える
192 参照

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か?

0 投票する
4 に答える
2770 参照

haskell - Haskell に構造型付けのレコードがないのはなぜですか?

Haskell には構造型付けがあると説明されているのを聞いたことがあります。私が理解しているように、レコードは例外です。たとえば、 とは名目上フィールドが異なるだけであるにもかかわらず、fooを何かの型で呼び出すことはできません。HRec2HRecHRec2

レコードを含むすべてに構造型付けを拡張することを拒否する理由はありますか?

レコードに対しても構造型付けを持つ静的型付け言語はありますか? これについて、静的に型付けされたすべての言語全般について読むことができる議論はありますか?

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

scala - 構造型の改良と型の等価性

Type.=:=型の絞り込みに適用されたときの不可解な動作に出くわしました。検討:

Baseこれが型の絞り込みのエイリアスであることを考えると、メンバーを追加してさらに絞り込むと、 でfoo定義したのと同じ型が生成されると予想さfooBaseます。

言い換えれば、私はそれを期待し、完全に同等の型T1を示します。T2

ほとんどの場合、scalac は同意しているようです。例として、 のインスタンスが期待されるT2場所に のインスタンスを渡すことができます。T1

逆に:

証拠T1 =:= T2を要求することもできますが、コンパイルも問題なく実行されます。

ただし、scala リフレクションを使用すると、まったく異なる結果が得られます。

typeOf[T1] =:= typeOf[T2]それで、これはscalaリフレクションのバグですか(私はそう推測します)、それともfalseを返す根本的な理由(そうでなければ技術的)がありますか?

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

scala - isInstanceOfによるscalaの構造型のチェック

scala で構造型の等価性をチェックしているだけです。

fooすぐに無名クラスと type からインスタンスを作成しますQ。メソッド名で区別するつもりなので、構造的に別の型として扱ってほしい。

コードスニペット:

チェックは true を返します。

Q1:fooが のインスタンスである理由が わかりませんQ。それはナンセンスです。型構造の意味が違うのではないですか?

Q2: では、構造型を確認する正式な方法は何ですか?

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

scala - Scala: パッケージ外の構造型を介してパッケージの可視メソッドにアクセスする

これは期待どおりに機能しません (run外部からパッケージ private を呼び出そうとしているためServices):

しかし、驚くべきことにこれはうまくいきます:

HelloPrinter はパッケージの可視性ルールのために構造型と一致しないため、コンパイラのバグであると言えます。コンパイルする必要はまったくありません。

次の例では、プログラムはコンパイルされますが、実行時例外 ( java.lang.NoSuchMethodException)がスローされます。

これは私が見逃している言語機能またはルールですか、それとも合法的に Scala のバグですか?