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 cat
is
Animal
?
W języku C#
bool b = cat is Animal;
w F #?
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 cat
is
Animal
?
W języku C#
bool b = cat is Animal;
w F #?
@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."
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
Daniel, czy możesz mi powiedzieć, co to jest '|>'? Dlaczego należy go uwzględnić przed wywołaniem funkcji? Czy ma imię? – nawfal
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
Daniel, dlaczego nie zdefiniowałbyś go jako funkcji, wygląda mi na całkiem przydatny? – sacha
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.
'let b = cat:? Animal ' – ildjarn
@ildjarn Powinieneś dodać to jako odpowiedź zamiast komentarza, aby można go było zaakceptować. –
@Jack: Na telefonie komórkowym, więc nie mogę udzielić dokładnej odpowiedzi. Nie krępuj się. : -] – ildjarn