单声道和Windows上的F#与简单函数的差异
有人能检查一下我的精神状况吗。鉴于此简单功能:单声道和Windows上的F#与简单函数的差异,f#,mono,F#,Mono,有人能检查一下我的精神状况吗。鉴于此简单功能: let filterOut item l = l |> List.filter (fun t -> not (t = item)) let f = ["1";"2";"3"] |> filterOut "3" 在FSI中评估上述内容会产生以下结果: 在Mac OS X上使用mono 4.0.3的Xamarin Studio val f:字符串列表=[“1”] Visual Studio 2013 val f:字
let filterOut item l =
l |> List.filter (fun t -> not (t = item))
let f =
["1";"2";"3"]
|> filterOut "3"
在FSI中评估上述内容会产生以下结果:
let filterOut item l:list<string> =
l |> List.filter (fun t -> not (t = item))
产出:
val f : string list = ["1"]
我比较了XS和VS编译代码之间的IL,它们看起来完全相同。因此,这似乎是运行时的差异。
如果在Mono上List.Filter和字符串的一般比较出现了问题
编辑:如果我将“inline”添加到filterOut函数中,我也可以在两种平台上获得正确的结果(在OSX上预期的输出)。Mono运行时上的通用比较器似乎又出了问题。(1个月后)在最新的Mono 4.2.0上进行了测试,现在可以正常工作。我使用Linux Mono 4.0.2检查了它,第一个示例给出了正确的输出[“1”;“2”]。但是带有“foobar”的第二个给出了不正确的[“1”;“2”]。在这两种情况下,使用definition和inline都能给出正确的答案。为了在Windows上检查正确性,我使用了@lad2025,感谢您的检查。很明显,正如您所说的,一个bug可能是Mono运行时的问题,您可以针对Mono运行时提交一个bug吗@PhillipTrelford谢谢-忙得不可开交。
val f : string list = ["1"]