👏

out引数を持つメソッドの呼び出し

2024/01/17に公開

.NETにはout引数を持つメソッドがあります。例えば

これらはC#言語ではoutパラメーター修飾子という機能があり、

var result = Int32.TryParse("123", out var value); // valueはint型で値は123になる

と呼び出し時に変数宣言できるためメソッド呼び出しが負担になりません。

一方、我らがF#言語ですが、呼び出し時に変数宣言する機能はありません。そのため、

let mutable value = 0
let result = Int32.TryParse("123", &value)

と2行に分けて記述する必要があり不便です。加えて、事前に変数宣言するため、その型を明確にする必要も出てきます。


実はF#言語にはあまり明記されていませんが、out引数をうまく処理してくれる機能があります。

Int32.TryPrase(s : string, result : byref<int>) : bool

というメソッドが存在した場合、言語機能として

Int32.TryParse(s : string) : bool * int

というオーバーロードを内部的に用意してくれます。このため、

let result, value = Int32.TryParse("123")

と呼び出すことができます。

Discussion