F#から.NETライブラリの呼び出し(F#)
F#は.NETの上で動作する。だから.NETの強力なライブラリにアクセスが出来る。
static 関数を呼び出す
#light open System Console.WriteLine( "Hello {0} libraries.", ".NET" )
FileInfo クラスを使う
#light open System.IO let file = new FileInfo( "test.txt" ) if not file.Exists then using (file.CreateText()) (fun stream -> stream.WriteLine("hello world")) printfn "file: %s" file.FullName
ちなみに using は F# ライブラリ FSLib.dll に定義されている関数。C# の using 構文と同様の効果を実現するものだ。
.NETのイベントハンドラを定義する
#light open System.Timers let timer = let t = new Timer() t.Interval <- 1000.0 t.Enabled <- true t.Elapsed.Add( fun _ -> printfn "elapsed" ) t read_line () |> ignore
Add()関数でイベントハンドラを追加する。ちなみに Timer.Elapsed のイベントハンドラは
public delegate void ElapsedEventHandler( object sender, ElapsedEventArgs e );
と定義されているわけで、普通に考えるとイベントハンドラは引数を2つとるはず。だけどF#でハンドラを定義するときは引数は1つだけでいいらしい。sender は不要で e だけを引数として受け取ればOK。上記のサンプルではアンダースコア _ で受けて引数を無視している。