2008年4月15日

[ruby-list:44830] Re: 計算するハッシュ

From: "5.5" <5.5@xxxxx>
Subject: [ruby-list:44827] 計算するハッシュ
Date: Mon, 14 Apr 2008 23:27:45 +0900

> このようなハッシュは,“連想記憶”というより“キャッシュ付き関数”
> とでも呼びたい感じですね。
> (“フィルムカメラ”と“レンズ付きフィルム”みたいな関係?)
>

> ハッシュ生成時に与えるブロックは,もはやデフォルト値を与えるとい
> う職務を超え,〈知らないキー〉に対する値を泥縄で計算させるものと
> 見ることもできそうです。(訊かれて慌てて考える,みたいな)

そうです。ブロック付きHash.newはmemoizeされた関数とみなせます。
memoizeはメモリ消費と引き換えに高速化する手法のひとつです。
ブロック付きHash.newはお手軽memoizeとして定石になっていると思います。

ちなみに複数引数になるとkeyをArrayにしてこんな感じに。
[[〜]]となるのが不格好ですが…

f = Hash.new {|h,(x,y)| h[[x,y]] = x+y }
f[[1,3]] # => 4
f[[2,4]] # => 6
f[[1,3]] # => 4

本格的なmemoizeがしたければ、gem install memoizeをどうぞ。

> 「で,それが何か?」とツッコまれると困るのですが,Ruby のブロック
> の威力を示す例になってるかな,と素人なりに思いまして。

ブロックはほんと便利ですよ。
--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/

投稿者 xml-rpc : 2008年4月15日 05:52
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/72178
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。