2015-07-28 14 views
7

Ai đó có thể kiểm tra sự tỉnh táo của tôi tại đây. Với chức năng đơn giản này:F # trên Mono và Windows - sự khác biệt với chức năng đơn giản

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

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

Đánh giá nêu trên trong FSI sản xuất như sau:

  1. Xamarin Studio với mono 4.0.3 trên Mac OS X

    val f: danh sách chuỗi = [ "1"]

  2. Visual Studio 2013

    val f: string lis t = ["1"; "2"]

Nếu đầu vào là danh sách ints hoặc ký tự - thì nó hoạt động như mong đợi và cả hai nền tảng đều cho kết quả giống nhau. Ngoài ra nếu tôi chỉ định filterOut để chỉ làm việc với các chuỗi, nó sẽ tạo ra các giá trị giống nhau một cách chính xác. Cũng giống như vậy:

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

Ngay cả những đoạn mã sau với XS trên OS X:

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

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

kết quả đầu ra:

val f : string list = ["1"] 

Tôi đã so sánh IL giữa XS và VS mã biên dịch và họ xuất hiện giống hệt nhau. Vì vậy, nó có vẻ giống như một sự khác biệt thời gian chạy. Nếu có điều gì xảy ra ở đây với List.Filter và so sánh chung với các chuỗi trên Mono?

EDIT: Nếu tôi thêm "inline" vào hàm filterOut, tôi cũng nhận được kết quả chính xác trên cả hai nền tảng (đầu ra dự kiến ​​trên OS X). Một lần nữa có vẻ như đã xảy ra sự cố với trình so sánh chung về thời gian chạy Mono.

+1

Tôi đã kiểm tra nó bằng Linux Mono 4.0.2, ví dụ đầu tiên cho tôi kết quả chính xác ["1"; "2"]. Nhưng thứ hai với "foobar" cho sai [1 ​​"; "2"]. Sử dụng định nghĩa với nội tuyến đưa ra câu trả lời đúng trong cả hai trường hợp. Để kiểm tra tính chính xác trên Windows, tôi đã sử dụng https://dotnetfiddle.net/ – lad2025

+0

@ lad2025 Cảm ơn bạn đã kiểm tra. – Kevin

+0

Rõ ràng là một lỗi, như bạn nói có vẻ như nó có thể là một vấn đề trong thời gian chạy Mono, bạn có thể gửi một lỗi chống lại thời gian chạy Mono không? http://www.mono-project.com/community/bugs/ –

Trả lời

1

(1 tháng sau) Được thử nghiệm trên Mono 4.2.0 mới nhất và hiện hoạt động như mong đợi.

Các vấn đề liên quan