2013-05-21 8 views
12

Mój pierwszy dzień F #. Jeśli mam to:F # odpowiednik słowa kluczowego `is` w języku C#?

let cat = Animal() 

Teraz jak mam sprawdzić w późniejszym etapie, jeśli catisAnimal?

W języku C#

bool b = cat is Animal; 

w F #?

+9

'let b = cat:? Animal ' – ildjarn

+4

@ildjarn Powinieneś dodać to jako odpowiedź zamiast komentarza, aby można go było zaakceptować. –

+1

@Jack: Na telefonie komórkowym, więc nie mogę udzielić dokładnej odpowiedzi. Nie krępuj się. : -] – ildjarn

Odpowiedz

21

@ildjarn zasługuje na kredyt tutaj odpowiedzi na pierwszy, ale jestem złożeniem odpowiedzi tutaj, więc może być przyjęta.

F-odpowiednik słowa kluczowego C# is to :?. Na przykład:

let cat = Animal() 
if cat :? Animal then 
    printfn "cat is an animal." 
else 
    printfn "cat is not an animal." 
8

poglądowymi (nie definiują funkcję is):

let is<'T> (x: obj) = x :? 'T 

type Animal() = class end 
type Cat() = inherit Animal() 

let cat = Cat() 
cat |> is<Animal> //true 
+0

Daniel, czy możesz mi powiedzieć, co to jest '|>'? Dlaczego należy go uwzględnić przed wywołaniem funkcji? Czy ma imię? – nawfal

+2

Nazywa się to operatorem potoku do przodu. Stosuje operand po lewej jako ostatni argument funkcji po prawej stronie. ([zobacz MSDN] (http://msdn.microsoft.com/en-us/library/ee340273.aspx)) – Daniel

+0

Daniel, dlaczego nie zdefiniowałbyś go jako funkcji, wygląda mi na całkiem przydatny? – sacha

3

Wiem, że się spóźniłem. Jeśli próbujesz przetestować typ kolekcji w fsi z:? spowoduje błąd, jeśli typy elementów nie są zgodne. Na przykład.

let squares = seq { for x in 1 .. 15 -> x * x } 
squares :? list<int> ;; // will give false 
squares :? list<string> ;; // error FS0193: Type constraint mismatch 

Zawijanie w funkcji podobnej do Danielsa to < "T> działa.

Powiązane problemy