から指定したメソッドを上げるF#で使用がサポートされていない例外は、私が使用してF#で、この一般的な機能を持っていますC#の:演算子( - - )()演算子C#
int a = sub<int, int, int>(4, 1);
これは、エラーが発生します。
Unhandled Exception: System.NotSupportedException: Specified method is not supported. at ProjA.MainClass.Main (System.String[] args) [0x00000] in <4f209fa43741462db3b8f73ac83c35a2>:0 [ERROR] FATAL UNHANDLED EXCEPTION: System.NotSupportedException: Specified method is not supported. at ProjA.MainClass.Main (System.String[] args) [0x00000] in <4f209fa43741462db3b8f73ac83c35a2>:0
これは、(+)演算子またはインラインキーワードなしでうまく動作することに注意してください。
1)何か間違っているのですか?これはバグですか?
2)この問題を解決する方法はありますか(ただし、この関数を汎用化するにはインラインキーワードが必要です)。
3)C#からf#関数を呼び出すときに似たような経験がありましたか?どのように解決しましたか?
私はmacOS SierraでMono 4.8を使用しています。
@EJoshuaSコンパイラは、3つのパラメータ、つまり戻り型の最後のパラメータを強制します。型引数は、コンパイラによって自動的に推論することはできません。私が言及したように、奇妙なことは、( - )を(+)に変更すると、例外なくすべてが正常に機能するということです。 – mateuszlewko
はい、私の前のコメントを無視してください、私は一度それを自分で試してみました。私はそのような種類の行動にも少し驚いている(私はマシンで全く同じことを見た)。明らかに、C#からF#に呼び出すときには、 "インライン"キーワード[ちょっと変なことがあります](http://stackoverflow.com/questions/4413324/how-does-f-inline-work) - 実際には、インライン関数では正しく動作しますが、なぜこれが "+"ではなく " - "で動作するのか少し困惑します。私は実際に誰かが知っている場合、なぜこれも理由についての説明を見たいと思っています。 – EJoshuaS
私はこれがうまくいくことにも驚いています。+あなたが+を使用すると、あなたはおそらく他の何かの定義を隠していると思われます。インラインでは、F#コンパイラは実際に関数を作成しません。それは、使用できるメタデータを作成するだけです。したがって、C#コンパイラがそれを全く見ないという事実は驚くべきことです –