私はthisオンラインコンパイラを使っていくつかのF#コードで遊んでいました(正確なF#コンパイラバージョンが見つかりませんでしたが、これは後で関連します)。私は、次の2つの機能は非常に異なっていたが実現:なぜ '!='の使用は曖昧だと考えられますが、同様の '='の使用はそうではありませんか?
let f x y = x = y
let g x y = x != y
f
は完全に汎用的ですが、私の驚きにg
ではありませんでした。メッセージでコンパイルエラーが発生しますg 1 2
を呼び出す:
、一般的な構成は、それが私が行った構造体
である。すなわち、型「intは」参照セマンティクスを持っていますが、そうでないことを必要とし、
エラーFS0332:私は
g
を定義しようとしたときに、これは私自身のマシンで試してみました(モノラル上のF#3.0を使用して、私は、Visual Studio 2012で同じ結果を得る)と完全に異なるエラーを受け取っ解決できませんでした。固有のあいまいさこのプログラムポイントまたはその近くで演算子 '(!=)'を使用します。あいまいさを解決するためにタイプ注釈を使用することを検討してください。
!=
の使用が曖昧で、なぜそれがエラーなのですか?また、なぜこのような!=
の使用はあいまいだと考えられていますが、=
の使用はf
ではありませんか?この新しいエラーは、私が期待していたように自動化された汎化がうまくいかないケースを警告するのに役立ちます。しかし、これは、F#コンパイラの2つの異なるバージョン間で大きな変更と思われます。これらのエラーメッセージの両方の検索が空になった。私はF# specificationに関連性があるとは思わなかった。関連するセクションへのポインタは役に立ちます。
リンク:http://stackoverflow.com/questions/9130181/what-is-the-f-syntax-for-not-equal-to – DuckMaestro