オブジェクト式

F#には、いろいろと興味深い機能がありますが、オブジェクト式もそのひとつ。

open NUnit.Framework

type IGreeing =
abstract Greet : string -> string

[<Test>]
let ``test Object Expression``() =
let greeting =
{ new IGreeing with
member
this.Greet(name) = "Hello " + name
}
Assert.AreEqual("Hello hoge", greeting.Greet("hoge"))

Javaの無名内部クラスとほとんど同じだと思います。これに相当する機能がC#になくて若干不便だなーと思っていましたが、F#にはあるんですね。


IGreeingがインタフェース。オブジェクト式を使っているのは、{new ... }というところです。