From: shugo@... (MAEDA Shugo) Date: 1998-12-09T14:48:51+09:00 Subject: [ruby-dev:3784] Re: List() 前田です。 >>>>> In [ruby-dev:3780] >>>>> "原" == Shin-ichiro Hara san wrote: >> # 実は7時までは暇だったとかいうオチはないですよね? :-p 原> ああ、やっぱり読まれた。(^^;; (^^; >> 卒論を書くマシンにrubyがインストールされているのが悪いんです。 原> その卒論のタイトル知りたいなあ。 まつもとさんのご指摘のように哲学科なのですけどよいですか? (^^; 「システムにとって意図とは何か」という題目で、ルーマンの社会 システム理論とアンスコムやデイヴィドソンの行為論を扱っています。 原> でもせっかくのアイデアなのにケチつける?:-) ケチをつけるというわけではないのですが、やはり配列とリストを 区別する/しない、というのは、どちらかに統一すべきような気が しています。 each_with_indexを def each_with_index i = 0 each { |*x| yield(*(x + i)) i += 1 } end のようにパラメータを展開して渡すようにしたとします。 とすると、現状のHash#eachではyield([key, val])としている わけですが、これは[key, val]という一つの値を渡している わけではなくて、key, valという二つの値を渡すことを意図 しているわけですから、 {"key"=>"val"}.each_with_index {|key, val, i| p key #=> "key" p val #=> "val" p i #=> 0 } となる方が、 {"key"=>"val"}.each_with_index {|key, val, i| p key #=> ["key", "val"] p val #=> 0 p i #=> nil } よりも自然だと思います。 つまりyieldで配列を渡した時に、一つの値として配列を渡すという意図が あったのか、複数の値を渡すという意図があったのかは、結局区別できな いわけですから、|*x|で受けた時に配列が渡されたことがわかったとしても、 yieldした側がどちらの挙動を望んでいるかわからないのではないでしょうか。 -- 前田 修吾 (mailto:shugo@aianet.ne.jp)