問題タブ [type-inference]
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.
c# - C# での var キーワードの使用
C# 3 での 'var' キーワードの使用について同僚と議論した後、var による型推論の適切な使用法について人々の意見はどうなっているのか疑問に思いました。
たとえば、疑わしい状況で var をかなり怠惰に使用しました。
var のより正当な使用法は次のとおりです。
興味深いことに、LINQ は少し灰色の領域のようです。たとえば、次のようになります。
IEnumerable を実装する型になるという点で結果がどうなるかは明らかですが、新しいオブジェクトを宣言する var と同じように完全には明らかではありません。
オブジェクトへの LINQ に関してはさらに悪いことです。
これは同等の foreach(var item in someList) { // ... } と同等です。
ここで、型の安全性について大きな懸念があります。たとえば、そのクエリの結果を、IEnumerable<int> と IEnumerable<double> を受け入れるオーバーロードされたメソッドに配置すると、呼び出し元が誤って間違った型を渡す可能性があります。
var
強い型付けを維持しますが、問題は、型が定義ですぐに明らかにならないことが危険かどうかです。オーバーロードが意味する場合、間違った型をメソッドに誤って渡したときにコンパイラエラーが発生しない可能性がある場合に拡大されます。
haskell - FundepsとGADT:タイプチェックはいつ決定可能ですか?
私はHaskellとHListがどのように実装されているかについての研究論文を読んでいて、説明されている手法がタイプチェッカーにとって決定可能であるかどうか疑問に思っていました。また、GADTでも同様のことができるので、GADTの型チェックは常に決定可能かと思いました。
説明を読んだり理解したりできるように、引用があればいいと思います。
ありがとう!
testing - Test.QuickCheck.Batch でリスト関数のテストに既定の型を使用するようにする
任意のリストに対して動作する抽出と呼ばれる関数をテストしています。
たとえば、次のようにテストしたい
しかし、これはコンパイルされません。run
またはの型を指定する必要prop_len
があります。QuickCheck は を生成できないため[a]
、具体的なものを生成する必要があります。だから私は選んだInt
:
a
のタイプで指定する代わりに、QuickCheck を選択する方法はありますrun
か?
compiler-construction - 強制を推測する方法は?
型推論中に強制 (別名暗黙の変換) を推論する方法を知りたいです。私は、Bastiaan Heeren によるTop Quality Type Error Messagesで説明されている型推論スキームを使用していますが、一般的な考え方はおそらくすべての Hindley-Milner 風のアプローチで同じであると思います。
強制はオーバーロードの一種として扱うことができるように思えますが、このホワイト ペーパーで説明するオーバーロードのアプローチでは、コンテキストが戻り値の型に課す要件に基づくオーバーロードを (少なくとも私が理解できる方法では) 考慮していません。強要には必須。また、このようなアプローチでは、同一性強制を優先することや、強制可能性の推移的閉鎖を尊重することが難しくなる可能性があることも懸念しています。各強制可能な式、たとえばeをcoerce ( e ) にシュガーリングしていますが、それを coerce(coerce(coerce(... coerce( e )) にシュガーリングしています。) ...))) 強制の最大ネスティングに等しい深さについては、ばかげているように見えます。また、強制可能性の関係を、深さがコンテキストから独立している有限の推移的なクロージャーを持つ何かに制限します。
c# - 継承中の式の推論
次のコードがあります。
次のコンパイラ エラー メッセージが表示されます。
FigureItOut への呼び出しを次のように変更すると:
その後、動作します。代わりに基本クラスを変更して、最初の例をコンパイルする方法はありますか?
次のように、Base クラス全体をジェネリックにすると、次のようになります。
その後、それは機能しますが、おそらくメソッドレベルで使用できる他のハック(つまり、 FigureItOut を何らかの方法で変更する)ではなく、それを行いたくありません。
c# - C#3.0 Func/OrderBy型推論
私が今日OrderByで遭遇した非常に奇妙な状況:
それで:
これは問題ありませんが、orderBy以外の場所で使用できる可能性があるため、代わりにメソッドを作成しました。
これをOrderByに接続しようとすると、次のようになります。
Funcを使用した場合のようにタイプを推測することはできません。メソッド自体はFuncのように「強く型付けされている」ので、私には同じである必要があるようです。
補足:私はこれができることを理解しています:
lambda - 統一問題の型推論
型推論の問題
タイピング環境で
統一問題で転送できますか?
どんな助けでも本当に感謝します!
parsing - パーサー規則の「戻り値の型」を推測するためのよく知られたアルゴリズムはありますか?
文法と添付されたアクション コードが与えられた場合、各プロダクションがどのような型になる必要があるか (そして、その結果、呼び出し側のプロダクションがそれから取得する必要がある型) を推測するための標準的な解決策はありますか?
C# の構文のようなものを使用する OO プログラムとアクション コードを考えていvar
ます (ただし、C# 固有のものを探しているわけではありません)。
関数のオーバーロードと再帰文法がなければ、これは非常に簡単です。
この問題は、次のような場合に発生します。
c# - C# 3.0 ジェネリック型推論 - デリゲートを関数パラメーターとして渡す
同じメソッドのデリゲートを暗黙的に作成できるのに、ジェネリック関数にパラメーターとして渡されたときに、C# 3.0 コンパイラーがメソッドの型を推測できないのはなぜでしょうか。
次に例を示します。
foo
に渡してbar
、渡される関数のシグネチャからコンパイラに型を推測させることができると思っていAction<T>
ましたが、これは機能しません。ただし、キャストせずにAction<int>
fromを作成できるfoo
ので、コンパイラが型推論を介して同じことを行うことができないという正当な理由はありますか?