前段时间我注意到了" Watch" VS2012 for Web中的窗口不适用于FSharp中的默认功能。例如,cos someValue
不起作用,在函数开头插入let _cos = cos
或let _cos x = cos x
并且使用_cos(someValue)
的解决方法也不起作用。错误类似于" cos在当前上下文中不存在"或者" _cos在当前范围内不起作用,等等。
我应该更改某些设置还是这是一个意想不到的错误?当然,我可以宣布我需要观察的所有结果,但这有点开销,这是非常不切实际的。我该怎么做才能解决这个问题?
答案 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#编译器生成的类的名称。