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

0 投票する
86 に答える
141658 参照

c# - C# での var キーワードの使用

C# 3 での 'var' キーワードの使用について同僚と議論した後、var による型推論の適切な使用法について人々の意見はどうなっているのか疑問に思いました。

たとえば、疑わしい状況で var をかなり怠惰に使用しました。

var のより正当な使用法は次のとおりです。

興味深いことに、LINQ は少し灰色の領域のようです。たとえば、次のようになります。

IEnumerable を実装する型になるという点で結果がどうなるかは明らかですが、新しいオブジェクトを宣言する var と同じように完全には明らかではありません。

オブジェクトへの LINQ に関してはさらに悪いことです。

これは同等の foreach(var item in someList) { // ... } と同等です。

ここで、型の安全性について大きな懸念があります。たとえば、そのクエリの結果を、IEnumerable<int> と IEnumerable<double> を受け入れるオーバーロードされたメソッドに配置すると、呼び出し元が誤って間違った型を渡す可能性があります。

var 強い型付けを維持しますが、問題は、型が定義ですぐに明らかにならないことが危険かどうかです。オーバーロードが意味する場合、間違った型をメソッドに誤って渡したときにコンパイラエラーが発生しない可能性がある場合に拡大されます。

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

haskell - FundepsとGADT:タイプチェックはいつ決定可能ですか?

私はHaskellとHListがどのように実装されているかについての研究論文を読んでいて、説明されている手法がタイプチェッカーにとって決定可能であるかどうか疑問に思っていました。また、GADTでも同様のことができるので、GADTの型チェックは常に決定可能かと思いました。

説明を読んだり理解したりできるように、引用があればいいと思います。

ありがとう!

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

testing - Test.QuickCheck.Batch でリスト関数のテストに既定の型を使用するようにする

任意のリストに対して動作する抽出と呼ばれる関数をテストしています。

たとえば、次のようにテストしたい

しかし、これはコンパイルされません。runまたはの型を指定する必要prop_lenがあります。QuickCheck は を生成できないため[a]、具体的なものを生成する必要があります。だから私は選んだInt

aのタイプで指定する代わりに、QuickCheck を選択する方法はありますrunか?

0 投票する
3 に答える
385 参照

compiler-construction - 強制を推測する方法は?

型推論中に強制 (別名暗黙の変換) を推論する方法を知りたいです。私は、Bastiaan Heeren によるTop Quality Type Error Messagesで説明されている型推論スキームを使用していますが、一般的な考え方はおそらくすべての Hindley-Milner 風のアプローチで同じであると思います。

強制はオーバーロードの一種として扱うことができるように思えますが、このホワイト ペーパーで説明するオーバーロードのアプローチでは、コンテキストが戻り値の型に課す要件に基づくオーバーロードを (少なくとも私が理解できる方法では) 考慮していません。強要には必須。また、このようなアプローチでは、同一性強制を優先することや、強制可能性の推移的閉鎖を尊重することが難しくなる可能性があることも懸念しています。各強制可能な式、たとえばeをcoerce ( e ) にシュガーリングしていますが、それを coerce(coerce(coerce(... coerce( e )) にシュガーリングしています。) ...))) 強制の最大ネスティングに等しい深さについては、ばかげているように見えます。また、強制可能性の関係を、深さがコンテキストから独立している有限の推移的なクロージャーを持つ何かに制限します。

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

c# - 継承中の式の推論

次のコードがあります。

次のコンパイラ エラー メッセージが表示されます。

FigureItOut への呼び出しを次のように変更すると:

その後、動作します。代わりに基本クラスを変更して、最初の例をコンパイルする方法はありますか?

次のように、Base クラス全体をジェネリックにすると、次のようになります。

その後、それは機能しますが、おそらくメソッドレベルで使用できる他のハック(つまり、 FigureItOut を何らかの方法で変更する)ではなく、それを行いたくありません。

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

c# - C#3.0 Func/OrderBy型推論

私が今日OrderByで遭遇した非常に奇妙な状況:

それで:

これは問題ありませんが、orderBy以外の場所で使用できる可能性があるため、代わりにメソッドを作成しました。

これをOrderByに接続しようとすると、次のようになります。

Funcを使用した場合のようにタイプを推測することはできません。メソッド自体はFuncのように「強く型付けされている」ので、私には同じである必要があるようです。

補足:私はこれができることを理解しています:

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

java - Collections.emptyList() はリストを返します?

I'm having some trouble navigating Java's rule for inferring generic type parameters. Consider the following class, which has an optional list parameter:

import java.util.Collecti

I'm having some trouble navigating Java's rule for inferring generic type parameters. Consider the following class, which has an optional list parameter:

My Java compiler gives the following error:

But Collections.emptyList() returns type <T> List<T>, not List<Object>. Adding a cast doesn't help

yields

Using EMPTY_LIST instead of emptyList()

yields

Whereas the following change makes the error go away:

Can anyone explain what type-checking rule I'm running up against here, and the best way to work around it? In this example, the final code example is satisfactory, but with larger classes, I'd like to be able to write methods following this "optional parameter" pattern without duplicating code.

For extra credit: when is it appropriate to use EMPTY_LIST as opposed to emptyList()?


An alternative to the Dictionary/Config File approach would be

1) to define a interface for each of the transaction editors.

2) In your EXE or UI assembly have each of the forms register itself with the assembly that creates the individual transaction.

3) The class controlling the registration should be a singleton so you don't have multiple form instances floating around.

3) When a individual transaction is created it pulls out the correct form variable from the registration object and assigns it do an internal variable.

4) When the Edit method is called it just uses the Show method of the internal method to start the chain of calls that will result in the display of that transacton editor.

This eliminates the need for config files and dictionaries. It continues to separate the UI from the object. Plus you don't need any switch statement

The downside is having to write the interface for each every form in addition to the form itself.

If you have a great deal of different types of editors (dozens) then in that case I recommend that you use the Command Pattern

You have a master command that contains the dictonary recommend by Jonathan. That commands in turns will use that dictornary to execute one of a number of other command that calls the correct form with the correct object. The forms continue to be separate from the object themselves. The forms reside in the Command assembly. In addition you don't have to update the EXE to add another editor only the Command assembly. Finally by putting things inside of Command you can implement Undo/Redo a lot easier. (Implement a Unexecute as well as a Execute)

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

lambda - 統一問題の型推論

型推論の問題

タイピング環境で

統一問題で転送できますか?

どんな助けでも本当に感謝します!

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

parsing - パーサー規則の「戻り値の型」を推測するためのよく知られたアルゴリズムはありますか?

文法と添付されたアクション コードが与えられた場合、各プロダクションがどのような型になる必要があるか (そして、その結果、呼び出し側のプロダクションがそれから取得する必要がある型) を推測するための標準的な解決策はありますか?

C# の構文のようなものを使用する OO プログラムとアクション コードを考えていvarます (ただし、C# 固有のものを探しているわけではありません)。

関数のオーバーロードと再帰文法がなければ、これは非常に簡単です。

この問題は、次のような場合に発生します。

0 投票する
5 に答える
9716 参照

c# - C# 3.0 ジェネリック型推論 - デリゲートを関数パラメーターとして渡す

同じメソッドのデリゲートを暗黙的に作成できるのに、ジェネリック関数にパラメーターとして渡されたときに、C# 3.0 コンパイラーがメソッドの型を推測できないのはなぜでしょうか。

次に例を示します。

fooに渡してbar、渡される関数のシグネチャからコンパイラに型を推測させることができると思っていAction<T>ましたが、これは機能しません。ただし、キャストせずにAction<int>fromを作成できるfooので、コンパイラが型推論を介して同じことを行うことができないという正当な理由はありますか?