观看窗口不适用于F#

时间:2013-03-03 22:15:45

标签: visual-studio-2012 f#

前段时间我注意到了" Watch" VS2012 for Web中的窗口不适用于FSharp中的默认功能。例如,cos someValue不起作用,在函数开头插入let _cos = coslet _cos x = cos x并且使用_cos(someValue)的解决方法也不起作用。错误类似于" cos在当前上下文中不存在"或者" _cos在当前范围内不起作用,等等。

我应该更改某些设置还是这是一个意想不到的错误?当然,我可以宣布我需要观察的所有结果,但这有点开销,这是非常不切实际的。我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:7)

正如referneced answer中所提到的,监视和直接窗口仅支持C#,因此它们无法评估F#表达式,也无法识别F#上下文(例如打开的命名空间)。

总结将结果存储在局部变量(编译为普通局部变量)中是查看结果的最佳方式。

更多详情: 在某些情况下,您可以编写与您在F#中要执行的操作相对应的C#代码。这可能只适用于简单的情况,当相应的C#不是很难写,但通常可以这样做。 例如,要调用cos 3.14,您需要编写如下内容:

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

如果在F#源代码(righ here, in prim-types.fsi)中找到cos函数,那么您可以看到它带有CompiledName属性,告诉编译器将其编译为名为Cos的方法(遵循.NET命名准则)。它在名为Operators的模块中定义(请参阅it here),该模块使用AutoOpen进行注释,因此您无需在F#代码中显式编写open,但它是实际上是编译代码时F#编译器生成的类的名称。