[#42503] floatの値がずれる — Sato Hiroshi <hirocy.f01@...>

hirocyと申します.

33 messages 2006/07/04
[#42504] Re: floatの値がずれる — rubikitch <rubikitch@...> 2006/07/04

From: Sato Hiroshi <hirocy.f01@plala.to>

[#42505] Re: floatの値がずれる — Sato Hiroshi <hirocy.f01@...> 2006/07/04

hirocyです.るびきちさん,ありがとうございます.

[#42569] JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表 — Takahiro Kambe <taca@...>

こんばんは。

19 messages 2006/07/11
[#42570] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表 — Yukihiro Matsumoto <matz@...> 2006/07/11

まつもと ゆきひろです

[#42572] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表 — Takahiro Kambe <taca@...> 2006/07/11

In message <1152619872.835566.21152.nullmailer@x31.priv.netlab.jp>

[#42575] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表 — Yukihiro Matsumoto <matz@...> 2006/07/11

まつもと ゆきひろです

[ruby-list:42554] Re: Array#default

From: take_tk <ggb03124@...>
Date: 2006-07-07 07:52:01 UTC
List: ruby-list #42554
たけ(tk)です

[ruby-list:42551] Re: Array#default にて
小西 弘将 <konishi@raax.co.jp> さん曰く:

> >欲しいなと思うときは、行や桁の個数をあらかじめ特定できないような二重配列
> >の場合やデータが離散的で全てを初期化する必要がない場合、などです。
> 可変配列を考える場合でも、配列の拡張の時に初期値を与えることができますよ
> ね?

エクセルの例[ruby-list:42553] などではどうでしょう?

> 二重配列以上は、現在標準がないのですから、それをやるのは個々人の責任とい
> う気がします(二重配列のインプリメントの問題)。

それはそれとして・・

> 初期化しない配列の中身を知ることにdefaultという関数を作るのと、初期化を
> 必ずするということのコストは、初期化を必ずした方がコストが同程度か安いと
> 思います。範囲外のアクセスは、例外発生だと思います。

エクセルの例ではどうでしょう?

> 逆に、default導入で、配列中にないオブジェクトが帰ってくようになると、そ
> れはそれで困ると思うのですが。

これはHash#default でも同じです。([ruby-list:42536] で指摘した『オブジェ
クトの共有』の問題)

----
  a = Hash.new
  a.default = []

  a[1] = [ 1 ]
  b = a[0] # 初期化されていないので、Hash#defaultを呼び出す
  b[0] = 2 # a[0][0]に代入したつもりなのに???

  p b       #=> []
  p b[0]    #=> 2
  p a[0][0] #=> 2
  p a       #=> {1=>[1]}
----

この問題があるので、Hash.new(){} というのが導入されたわけです。

----
  a = Hash.new(){|h,k|h[k]=[]}

  a[1] = [ 1 ]
  b = a[0]  # 初期化されていないので、Hash.new のブロックを呼び出す
  b[0] = 2  # a[0][0]に代入した

  p b       #=> [2]
  p b[0]    #=> 2
  p a[0][0] #=> 2
  p a       #=> {0=>[2], 1=>[1]}
----

これと同じことをArrayでやるのが、[ruby-list:42536] Array#default っちゅー
ことです。

まあ、既に自前のライブラリにしてしまったので、標準でなくても困らないので
すが、何で Hash で出来て、Array では出来ないのだろう? という疑問です。

Take_tk = KUMAGAI Hidetake
たけ(tk)=熊谷秀武


In This Thread