私はF#が初めてです。
変数が整数型か別の型かを確認するにはどうすればよいですか。
ありがとう。
1 つの方法は、コメントで @ildjarn によってリストされています。
let isInt x = box x :? int
慣用的な方法は、パターン マッチングを使用することです。まず、可能なオプションを定義する識別共用体を定義します。
type Test =
| IsAnInteger of int
| IsADouble of double
| NotANumber of Object
次に、match ステートメントを使用して、取得したオプションを決定します。最初に match ステートメントで使用する値を作成するときは、判別共用体型に入れる必要があることに注意してください。
let GetValue x =
match x with
| IsAnInteger(a) -> a
| IsADouble(b) -> (int)b
| NotAnInteger(_) -> 0
テストを使用して制御フローを決定する可能性があるため、慣用的に行うこともできます。これにより、可能性のあるすべてのケースを処理しないと、match ステートメントによって警告が表示されるため、ケースを見逃すのを防ぐこともできます。
>GetValue (NotAnInteger("test"));;
val it : int = 0
>GetValue (IsADouble(3.3))
val it : int = 3
>GetValue (IsAnInteger(5))
val it : int = 5
この質問に「c#-to-f#」というタグを付けたことを考えると、C#のバックグラウンドからF#に来ていると思います。したがって、おそらく変数を明示的に入力することに慣れているので、型推論に少し混乱するかもしれません。
必要に応じて、値のタイプを明示的に宣言できます。
let x:int = 3
しかし、通常、型推論にこの作業を任せる方が簡単で優れています。私が値を言ったことに気付くでしょう-あなたはそれに破壊的な割り当てをすることができないので、上記の宣言は変数ではありません。変数が必要な場合は、次のようにします。
let mutable x:int = 3
次に、この構成を介してxに新しい値を割り当てることができます
x <- 5
ただし、原則として、可変値は避けたいと思うでしょう。