Ngày F # đầu tiên của tôi. Nếu tôi có điều này:F # tương đương với `is` từ khóa trong C#?
let cat = Animal()
Bây giờ làm thế nào để tôi kiểm tra ở giai đoạn sau này nếu cat
is
Animal
?
Trong C#
bool b = cat is Animal;
Trong F #?
Ngày F # đầu tiên của tôi. Nếu tôi có điều này:F # tương đương với `is` từ khóa trong C#?
let cat = Animal()
Bây giờ làm thế nào để tôi kiểm tra ở giai đoạn sau này nếu cat
is
Animal
?
Trong C#
bool b = cat is Animal;
Trong F #?
@ildjarn xứng đáng tín dụng vào đây để trả lời đầu tiên, nhưng tôi gửi câu trả lời ở đây vì vậy nó có thể được chấp nhận.
Tương đương F # của từ khóa C# is
là :?
. Ví dụ:
let cat = Animal()
if cat :? Animal then
printfn "cat is an animal."
else
printfn "cat is not an animal."
Đối với cuộc biểu tình chỉ (không xác định một chức năng is
):
let is<'T> (x: obj) = x :? 'T
type Animal() = class end
type Cat() = inherit Animal()
let cat = Cat()
cat |> is<Animal> //true
Daniel, bạn có thể cho tôi biết cái gì là '|>'? Tại sao nên bao gồm nó trước khi một cuộc gọi chức năng? Nó có tên không? – nawfal
Nó được gọi là nhà điều hành đường ống phía trước. Nó áp dụng toán hạng ở bên trái làm đối số cuối cùng cho hàm ở bên phải. ([xem MSDN] (http://msdn.microsoft.com/en-us/library/ee340273.aspx)) – Daniel
Daniel, tại sao bạn không định nghĩa là một hàm, trông khá hữu ích đối với tôi? – sacha
Tôi biết mình đã trễ. Nếu bạn cố gắng kiểm tra loại của một bộ sưu tập trong fsi với:? nó sẽ cung cấp cho một lỗi, nếu các loại mục không phù hợp. Ví dụ.
let squares = seq { for x in 1 .. 15 -> x * x }
squares :? list<int> ;; // will give false
squares :? list<string> ;; // error FS0193: Type constraint mismatch
Gói trong một chức năng như Daniels là < 'T> hoạt động.
'let b = cat:? Động vật' – ildjarn
@ildjarn Bạn nên thêm câu trả lời đó thay vì nhận xét để có thể chấp nhận câu trả lời. –
@Jack: Trên thiết bị di động để tôi không thể đưa ra câu trả lời kỹ lưỡng. Đừng ngại. : -] – ildjarn