スポンサーサイト

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

F#入門編落穂拾い その9 (Indexers)

今回はIndexersを紹介します。
例えば
> open System.Collections.Generic;;
> let d = new Dictionary<char,int>();;
val d : Dictionary<char,int> = dict []
 
としてキー'k'、値100で次のように登録しておくと
 
> d.Add('k',100);;
val it : unit = ()
 
> d.['k'];;
val it : int = 100
 
というようにキーに対しての値を得ることができます。
これまでの例は共に . [ ]を利用していましたが、これは同様にItemメソッドでも利用できます。
> d.Item 'k' ;;
val it : int = 100
 
一般にクラスにItemメソッドを実装することにより、.[]形式で要素にアクセスすることができます。
要素はクラス内で登録してあるものから探してもよいし(dictionaryなどはこの例)
その度に作り返すような形でもかまいません。(今から紹介するのはこの例)
それではインデクサで、生まれてから何日か後の日付を取得するように、誕生日クラスを作ってみます。
 
> type Birth (year:int,month:int,day:int ) =
    let birthDay = new System.DateTime(year,month,day)
    member this.Item (days:int) = //このメソッドがインデクサの挙動を決める
        birthDay.AddDays(float days) ;;
 
type Birth =
  class
    new : year:int * month:int * day:int -> Birth
    member Item : days:int -> System.DateTime
  end
 
> let myBirth = new Birth(1978,4,15);;
 
val myBirth : Birth
 
> myBirth.[10000];;//生まれて一万日後は
val it : System.DateTime = 2005/08/31 0:00:00 {Date = 2005/08/31 0:00:00;
                                               Day = 31;
                                               DayOfWeek = Wednesday;
                                               DayOfYear = 243;
                                               Hour = 0;
                                               Kind = Unspecified;
                                               Millisecond = 0;
                                               Minute = 0;
                                               Month = 8;
                                               Second = 0;
                                               Ticks = 632610432000000000L;
                                               TimeOfDay = 00:00:00;
                                               Year = 2005;}
 
色々一杯不必要な情報もついてきますけど、あとは必要な部分だけ取り出すようにします。

スポンサーサイト

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

コメントの投稿

非公開コメント

No title

例によって余計なお世話だけど・
(float) は、カッコで囲む必要ってなくないですか。

No title

getter だけでなく、setter についても書かないとちょっと片手落ちのような気がしますね。

No title

>(float) は、カッコで囲む必要ってなくないですか
その通りですね。floatは関数ですから、ないほうがよいですね。ということで修正しました。

>setter についても書かないとちょっと片手落ちのような..
その通りだと思うので急遽次回はsetterについて書くことにしました。
プロフィール

T GYOUTEN

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

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

この人とブロともになる

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