スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#入門基本編落穂拾い その40 制約(4)

今回はクラス、インターフェイス関連の制約から紹介します。
 
まずはType Constraint(型制約)です。
'a :> ClassA という形で表記し、'aがclassAかclassAから派生したクラスであるという制約です。
また'a :> InterfaceAという形の場合は、'aがInterfaceAを実装しているという制約を表します。
 

type ClassA () =
    member this.Val =
        0
 
type ClassDerivA () =
    inherit ClassA()
 
type ClassNotDerivA () =
    member this.Val =
        1    
 
>let test x:'a when 'a :> ClassA =
     x ;;
 
val test : 'a -> 'a when 'a :> ClassA
 
> test (new ClassA());;
val it : ClassA = FSI_0005+ClassA {Val = 0;}
 
> test (new ClassDerivA());;
val it : ClassDerivA = FSI_0005+ClassDerivA {Val = 0;}
 
> test (new ClassNotDerivA());;
  test (new ClassNotDerivA());;
  ------^^^^^^^^^^^^^^^^^^^^
 
 error FS0001: The type 'ClassNotDerivA' is not compatible with the type 'ClassA'
 
インターフェイスも同様です。
 
たとえばIComparableを実装している型'aという制限は
'a :> Icomparable<'a> と書きます
 
 
また、デフォルトのコンストラクタを持たなければならないという制約もありこれは次のように書きます。
 
'a when 'a : (new :unit -> 'a)
 
その他、Null Constraint,Explicit Member Constraint,Enumeration Type Constraint,Delegate Constraint,Unmanaged Constraintなどがあるようですが、詳しくはhttp://msdn.microsoft.com/en-us/library/dd233203%28VS.100%29.aspx を参照してください。
 
紹介するのが最後になりましたが、制約はandでつなぐことができます。
例えばデフォルトのコンストラクタをもち、比較可能な型であるという制限は
 
'a when 'a : (new :unit -> 'a) and 'a:comparison と書くことができます。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。