1

VS2012 for Webの[監視]ウィンドウが、FSharpのデフォルト機能では機能しないことに少し前に気づきました。たとえば、cos someValueは機能しません。また、関数の先頭にlet _cos = cosまたはlet _cos x = cos xが挿入されて_cos(someValue)使用される回避策も機能しません。エラーは、「cosは現在のコンテキストに存在しません」または「_cosは現在のスコープでは無効です」などです。

一部の設定を変更する必要がありますか、それともこれは予期しないバグですか?もちろん、監視する必要のあるすべての結果を宣言することはできますが、それは少しオーバーヘッドであり、非常に実用的ではありません。これを修正するにはどうすればよいですか?

4

1 に答える 1

9

参照された回答で述べたように、ウォッチとイミディエイトウィンドウはC#のみをサポートしているため、F#式を評価できず、F#コンテキスト(開いた名前空間など)を認識しません。

要約すると、結果をローカル変数(通常のローカル変数にコンパイルされる)に格納することが、結果を確認するための最良の方法です。

詳細: 場合によっては、F#で実行したいことに対応するC#コードを記述できます。これはおそらく、対応するC#を書くのがそれほど難しくない単純な状況でのみ価値がありますが、多くの場合、それを行うことができます。たとえば、を呼び出すcos 3.14には、次のように記述する必要があります。

Microsoft.FSharp.Core.Operators.Cos(3.14)

cosF#ソースコード(ここではprim-types.fsiにあります)で関数を見つけた場合は、 (。NET命名ガイドラインに従うために)CompiledNameという名前のメソッドとしてコンパイルするようにコンパイラーに指示する属性が付属していることがわかります。Cos)。Operatorsこれは、 (ここを参照)という名前のモジュールで定義されてAutoOpenいるため、F#コードを明示的に記述する必要はありませんがopen、実際には、コードのコンパイル時にF#コンパイラが生成するクラスの名前です。

于 2013-03-04T02:11:35.297 に答える