[#15625] rb_hash_initialize — Takaaki Tateishi <ttate@...>

立石です.

22 messages 2002/01/04
[#15627] Re: rb_hash_initialize — matz@... (Yukihiro Matsumoto) 2002/01/04

まつもと ゆきひろです

[#15628] Re: rb_hash_initialize — Takaaki Tateishi <ttate@...> 2002/01/04

立石です.

[#15685] undefined method `inherited' for false (NameError) — WATANABE Hirofumi <eban@...>

わたなべです。

13 messages 2002/01/15
[#15686] Re: undefined method `inherited' for false (NameError) — nobu.nakada@... 2002/01/15

なかだです。

[#15757] 文字列→整数変換 — nobu.nakada@...

なかだです。

30 messages 2002/01/25

[#15830] [ 提案 ] puts, print 等を IO から分離 — UENO Katsuhiro <unnie@...>

うえのです。

14 messages 2002/01/31

[ruby-dev:15628] Re: rb_hash_initialize

From: Takaaki Tateishi <ttate@...>
Date: 2002-01-04 15:58:44 UTC
List: ruby-dev #15628
立石です.

At Fri, 4 Jan 2002 18:10:51 +0900,
matz@ruby-lang.org (Yukihiro Matsumoto) wrote:
> |rb_hash_aref()については複数の引数をとれるようになると嬉し
> |いです.そして,callというエイリアスも付けるというのはどう
> |でしょうか?
> これって具体的にはなにを意味するんでしょうか?

例えば,

  hash = Hash.new{|h,key| h[key] = key[0] + key[1]}

としたときに,

  hash[1,2]
  # => 3

とできるといいなと思っていました.
そして,Hash#[]のエイリアスとしてcallが定義されているとして,同様に

  hash.call(1,2)
  # => 3

とできると,ProcやMethodと同様にcallメソッドがあるオブジェクトとして
扱えるようになります.
単純に,Proc,Methodと同じように扱いたかったというだけです.

>  hash[a,b,c]
> としたときに
>  defalt_proc.call(a,b,c)
> が実行されるといいなということ?

こちらは他のメソッドに初期化を委譲するという感じでしょうか?

> もしそうなら、それはHashの意味を変えちゃうんで受け入れがたい
> 印象があります。

Hash#call というのも Hash の意味からはずれてしまう気もしますが,
実行結果をキャッシュするという使われ方をする場合には,call があ
る方が良い気がします.


ところで,初期化のためのブロックは,Hashオブジェクト自身も引数
にとり,

  Hash.new{|h,key| h[key] = key + 1}

としますが,

  Hash.new{|key| key + 1}

としなかったのは,他のキーに対する値を変更できるという理由からで
しょうか?
-- 
Takaaki Tateishi <ttate@kt.jaist.ac.jp>

In This Thread