このブログの中を検索する

2012/06/19

F#の判別共用体は、ある種のクラス階層を表すために使える

title: F#の判別共用体は、ある種のクラス階層を表すために使える
url: http://www.atmarkit.co.jp/fdotnet/special/introfs_02/introfs_02_01.html

snippet:
-----引用-----

F#の判別共用体は、ある種のクラス階層を表すために使える。

例えば、ファイルとディレクトリを判別共用体で表してみよう。次のコードがその例だ。

// 簡単のため、ファイルはファイル名とサイズのみを持っているとする
type FileSystemEntry =
  | File of string * int
  | Dir of string * FileSystemEntry list
↑ファイルとディレクトリを判別共用体で表した例

※定義した「FileSystemEntry」型を、Dirケースの値の型としても定義しているところがポイント。
このコードでは、「File」と「Dir」という2つのケースを持つ判別共用体としてFileSystemEntry型が定義されている。File/Dirケースの値の型は、「of」以下に記載されている。このコード例では、Fileケースが保持する型はstring型とint型であり、Dirが保持する型はstring型とFileSystemEntry型リストである(タプルの型のように見えるが、実はタプルそのものではない。単に、複数の型を持つことを意味する)。値の型の中で「FileSystemEntry型リスト」が使われることで、再帰的に判別共用体を格納できるので、ファイル・システムのツリー構造を表現できるというわけだ。

-----引用-----

0 件のコメント:

コメントを投稿