スポンサーサイト

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

F#入門基本編落穂拾い その25 オプションパラメータ

タイプメンバーの引数(クラスのコンストラクターの引数も含む)はオプションパラメータにできます。これはどういうものかというと、引数がある場合でも、ない場合でも対応可能な形の引数です。定義方法としてはパラメーター名の前に?を付け、処理する側ではSomeとNoneで「ある場合」と「ない場合」の処理を記述します。 
 

 
> type exClass (?someInitVal) =
    let initLst = //コンストラクタの引数があれば要素1個のリスト、なければ空リスト
        match someInitVal with
        |Some (x) -> [x]
        |None -> []
 
    member this.AddEleAndShow (firstEle, ?secondEle) =
      let addedLst = //要素を1個もしくは2個追加   
        match secondEle with
        |Some(v) ->v :: firstEle :: initLst 
        |None -> firstEle :: initLst     
      printfn "%A" addedLst;;
 
type exClass =
  class
    new : ?someInitVal:obj -> exClass
    member AddEleAndShow : firstEle:obj * ?secondEle:obj -> unit
  end
 
 
(実行例)
> let exCInstance0 = new exClass();;
val exCInstance0 : exClass
 
> exCInstance0.AddEleAndShow (3);;
[3]
val it : unit = ()
 
> exCInstance0.AddEleAndShow (3,5);;
[5; 3]
val it : unit = ()
 
> let exCInstance1 = new exClass(7);;
val exCInstance1 : exClass
 
> exCInstance1.AddEleAndShow (3);;
[3; 7]
val it : unit = ()
 
> exCInstance1.AddEleAndShow (3,5);;
[5; 3; 7]
val it : unit = ()

 
複数の場合は最後の方から並べるようにします。
   member this.AddEleAndShow (?firstEle, secondEle) =
   .....
はダメです。
 
なお、let束縛で定義する関数にはオプションパラメータは使用できません。
let f (x ,?y) = ....
とはできないということです。
 
スポンサーサイト

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

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

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

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

この人とブロともになる

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