前段时间我注意到VS2012 for Web中的"Watch"窗口不适用于FSharp中的默认功能.例如,cos someValue不起作用,也没有在函数的开头插入let _cos = cos或使用的解决方法.该错误类似于"当前上下文中不存在cos"或"_cos在当前范围内无效"等.let _cos x = cos x_cos(someValue)
我应该更改某些设置还是这是一个意外的错误?当然,我可以声明我需要观察的所有结果,但这有点开销,这是非常不切实际的.我该怎么做才能解决这个问题?
我需要一些公共属性,在C#中我会这样做.
public VendorOrderService { get; set; }
Run Code Online (Sandbox Code Playgroud)
F#中此类属性的最短(正确/惯用)语法是什么?
member val VendorService = Unchecked.defaultof<VendorOrderService> with get, set
Run Code Online (Sandbox Code Playgroud)
PS我明白公共财产不是F#的超级惯用语.但是这段代码适用于较大的.NET项目,所以这些属性是强制性的.
在F#中,是否可以根据类型和值来区分联合?
这是在不知道语法应该是什么样的情况下尝试表达这一点.
type Foo =
| A of int * Foo
| B of string where B.name = "1" * Foo
| C of string where C.name = "2" * Foo
| Empty
Run Code Online (Sandbox Code Playgroud) 在FSI我输入
> let a = 10;;
val a : int = 10
> let a = a + 1;;
val a : int = 11
Run Code Online (Sandbox Code Playgroud)
看起来我在这里有一个可变变量?我错过了什么吗?
有没有办法使用"\"作为固定关系运算符?就像是:
let \ y x = if x % y = 0 then true else false
Run Code Online (Sandbox Code Playgroud) 请问,有人可以解释为什么这里的函数类型被推断为字符串 - >字符串?
let myFunc a:string =
match a with
| "A" -> 1
| _ -> 0
Run Code Online (Sandbox Code Playgroud)
当参数是通用的时,这种方法很好,但是一旦我添加:string,类型就会改变.为什么?
编辑: 我想声明参数类型是一个字符串,因为我实际上想要使用String.ToUpper()进行匹配:
let myFunc a:string =
match a.ToUpper() with
| "A" -> 1
| _ -> 0
Run Code Online (Sandbox Code Playgroud)
有点尴尬的解决方案就是这样
let myFunc a =
match a.ToString().ToUpper() with
| "A" -> 1
| _ -> 0
Run Code Online (Sandbox Code Playgroud)
但我真的知道这将是一个字符串
我继续学习F#模式匹配我的简单函数,如果参数是数字,则返回平方根,否则返回参数.我修改了一下它看起来如下.
let my_sqrt (o: obj) =
match o with
| :? float as d -> (sqrt d).ToString()
| _ as x -> x.ToString()
Run Code Online (Sandbox Code Playgroud)
它适用于我的目的,但如果我不想将返回值转换为字符串怎么办?如何返回"某个对象"然后在printfn "%A" (my_sqrt [| 1; 2; 3 |])构造中使用它?
以下代码有效.
Seq.iter (printfn "%d") [|1; 2; 3; 4; 5; 6; 7; 8; 9; 10|]
Run Code Online (Sandbox Code Playgroud)
这是另一个例子.http://msdn.microsoft.com/en-us/library/ee340408.aspx
数组类型可以直接替换序列类型吗?
我下载了一个Github项目,在VS 2012中打开它后,进行了自动升级.我收到一个我不明白的错误.它与报价有关.
这是我复制粘贴的文件:https://github.com/dmitry-a-morozov/fsharp-wpf-mvc-series/blob/master/Chapter%2012%20-%20BindingMicroDSL/BindingMicroDSL/StockPricesChart.fs
错误是"引用可能不涉及分配或获取捕获的本地变量的地址"
违规代码是这个关键和价值:
this.Control.DetailsName, <@@ stockProperty.Key @@>
this.Control.DetailsValue, <@@ stockProperty.Value @@>
namespace FSharp.Windows.Sample
open System.Windows.Data
open System.Drawing
open System.Windows.Forms.DataVisualization.Charting
open System.Collections.ObjectModel
open FSharp.Windows
open FSharp.Windows.UIElements
[<AbstractClass>]
type StockPricesChartModel() =
inherit Model()
abstract StocksInfo : ObservableCollection<StockInfoModel> with get, set
abstract SelectedStock : StockInfoModel with get, set
type StockPricesChartView(control) as this =
inherit PartialView<unit, StockPricesChartModel, StockPricesChartControl>(control)
do
let area = new ChartArea()
area.AxisX.MajorGrid.LineColor <- Color.LightGray
area.AxisY.MajorGrid.LineColor <- Color.LightGray
this.Control.StockPricesChart.ChartAreas.Add area
let series =
new Series(
ChartType …Run Code Online (Sandbox Code Playgroud)