私の最初のF#の日。私は、このお持ちの場合:F#の `is`はC#のキーワードですか?
let cat = Animal()
をcat
is
Animal
場合は今どのように私は、後の段階でチェックしますか? F#ので
bool b = cat is Animal;
?唯一のデモンストレーションのために
私の最初のF#の日。私は、このお持ちの場合:F#の `is`はC#のキーワードですか?
let cat = Animal()
をcat
is
Animal
場合は今どのように私は、後の段階でチェックしますか? F#ので
bool b = cat is Animal;
?唯一のデモンストレーションのために
@ildjarnは、最初に答えるために、ここでの信用に値するが、それは受け入れることができるので、私はここで答えを提出しています。
F#相当のC#is
キーワードは、:?
です。例:
let cat = Animal()
if cat :? Animal then
printfn "cat is an animal."
else
printfn "cat is not an animal."
(is
関数を定義していない):
let is<'T> (x: obj) = x :? 'T
type Animal() = class end
type Cat() = inherit Animal()
let cat = Cat()
cat |> is<Animal> //true
私は遅刻していることを知っています。 fsiでコレクションのタイプをテストしようとすると:? アイテムタイプが一致しない場合、エラーが発生します。例えば。
let squares = seq { for x in 1 .. 15 -> x * x }
squares :? list<int> ;; // will give false
squares :? list<string> ;; // error FS0193: Type constraint mismatch
Danielsのような関数でのラッピングは、< 'T>が動作します。
'let b = cat:? Animal' – ildjarn
@ildjarnあなたはコメントの代わりに答えとしてそれを追加して受け入れることができます。 –
@ジャック:モバイルでは、私は徹底的な答えを与えることはできません。どうぞ。 : - ] – ildjarn