单声道和Windows上的F# - 与简单功能

时间:2015-07-28 13:18:27

标签: f# mono

请有人在这里检查我的理智。鉴于这个简单的功能:

let filterOut item l =
  l |> List.filter (fun t -> not (t = item)) 

let f = 
  ["1";"2";"3"]
  |> filterOut "3"

在FSI中评估上述内容会产生以下结果:

  1. 在Mac OS X上使用mono 4.0.3的Xamarin Studio

    val f:string list = [“1”]

  2. Visual Studio 2013

    val f:string list = [“1”; “2”]

  3. 如果输入是一个int或chars列表 - 那么它按预期工作,两个平台产生相同的结果。另外,如果我指定filterOut仅用于字符串,它会正确生成相同的值。像这样:

     let filterOut item l:list<string> =
       l |> List.filter (fun t -> not (t = item)) 
    

    甚至以下代码在OS X上使用XS:

    let filterOut item l =
      l |> List.filter (fun t -> not (t = item)) 
    
    let f = 
      ["1";"2";"3"]
      |> filterOut "foobar"
    

    输出:

    val f : string list = ["1"]
    

    我比较了XS和VS编译代码之间的IL,它们看起来完全相同。所以它似乎是一个运行时差异。 如果这里有List.Filter和Mono上的字符串的一般比较吗?

    编辑:如果我在filterOut函数中添加“inline”,我也会在两个平台上得到正确的结果(OS X上的预期输出)。同样,Mono运行时上的通用比较器似乎有问题。

1 个答案:

答案 0 :(得分:2)

(1个月后)在最新的Mono 4.2.0上测试,现在按预期工作。