[#8530] Enumerable and rand — Koretsugu Daigoro <tmmcross@...>

これつぐです。

21 messages 1999/12/05
[#8534] Re: Enumerable and rand — matz@... (Yukihiro Matsumoto) 1999/12/06

まつもと ゆきひろです

[#8581] Re: [ruby-list:19228] Ruby 1.4.3 — Katsuyuki Komatsu <komatsu@...>

小松です。

19 messages 1999/12/07
[#8592] Re: [ruby-list:19228] Ruby 1.4.3 — matz@... (Yukihiro Matsumoto) 1999/12/07

まつもと ゆきひろです

[#8645] urllib and httplib — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

47 messages 1999/12/14
[#8646] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/12/14

なひです.

[#8653] Re: urllib and httplib — matz@... (Yukihiro Matsumoto) 1999/12/14

まつもと ゆきひろです

[#8656] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/12/15

なひです.

[#8659] Re: urllib and httplib — Wakou Aoyama <wakou@...> 1999/12/15

青山です。

[#8685] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/12/21

なひです.

[#8687] Re: urllib and httplib — TAKAHASHI Masayoshi <maki@...> 1999/12/21

高橋征義です。

[#8690] Re: urllib and httplib — matz@... (Yukihiro Matsumoto) 1999/12/21

まつもと ゆきひろです

[#8717] Re: urllib and httplib — TAKAHASHI Masayoshi <maki@...> 1999/12/24

高橋征義です。

[#8963] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/01/19

なひです.

[#8650] [PATCH] Ruby/Tk — Koji Arai <JCA02266@...>

新井です。

20 messages 1999/12/14
[#8651] Re: [PATCH] Ruby/Tk — Koji Arai <JCA02266@...> 1999/12/14

新井です。

[#8692] [win] dir name — KANEKO Naoshi <wbs01621@...>

金子です。

22 messages 1999/12/21
[#8695] Re: [win] dir name — Koji Oda <oda@...1.qnes.nec.co.jp> 1999/12/22

小田@QNES です。

[#8741] Re: [ruby-list:19945] Re: array + empty string — Wakou Aoyama <wakou@...>

青山です。

18 messages 1999/12/27
[#8743] Re: [ruby-list:19945] Re: array + empty string — matz@... (Yukihiro Matsumoto) 1999/12/28

まつもと ゆきひろです

[#8742] [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Kazunori NISHI <kazunori@...>

西@九大です。

64 messages 1999/12/27
[#8744] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/28

まつもと ゆきひろです

[#8748] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Kazunori NISHI <kazunori@...> 1999/12/28

西@九大です。

[#8751] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/28

まつもと ゆきひろです

[#8767] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Kazunori NISHI <kazunori@...> 1999/12/29

西@九大です。

[#8777] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/30

まつもと ゆきひろです

[#8791] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Minero Aoki <aamine@...> 1999/12/31

あおきです。

[#8792] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/31

まつもと ゆきひろです

[#8793] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — ARIMA Yasuhiro <fit0298@...> 1999/12/31

有馬です。

[#8795] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Akinori MUSHA aka knu <knu@...> 1999/12/31

 knuです。

[#8798] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 2000/01/01

まつもと ゆきひろです

[#8811] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Akinori MUSHA aka knu <knu@...> 2000/01/03

 knuです。

[ruby-dev:8577] Re: [REQ] {enumerable, integer, range}.rand

From: Dai <MAP2303@...>
Date: 1999-12-07 13:03:29 UTC
List: ruby-dev #8577
  かんだです。
# こっちフォローしてる余裕ないですが

matz@netlab.co.jp (Yukihiro Matsumoto)さんの書かれた、
	「[ruby-dev:8574] Re: [REQ] {enumerable, integer, range}.rand」
からの引用です。

> まつもと ゆきひろです
> 
> In message "[ruby-dev:8569] Re: [REQ] {enumerable, integer, range}.rand"
>     on 99/12/07, Kazunori NISHI <kazunori@swlab.csce.kyushu-u.ac.jp> writes:

> で、「あるcollectionのランダムな1要素を選択する」という機能
> は、collectionのメソッドとして見えた方が自然だと私に思えると
> 言うそれだけのことです。

  やはり Collection モジュールを提案した方がよさそうに思います(^^;
  ぼくも Enumeration#random_get() はイヤですが、Collection#random_get() は
うれしいかもしれないなーというところ。

  で、Collection が何なのかというのが前にメールでありましたが、完全でな
いフォローをば。
  Collection は名の通り、集合です。Array から順序を無くしたようなもので
しょうか。
  Set との違いは知りませんが、Java だと重複の無いのが Set らしいですね。

  手許の Java1.2.2 API から interface Collection のメソッドを抜き出すと:
# 使ったことないので実際は違うかもしれませんが

boolean add(Object)
boolean addAll(Collection)
void clear()
boolean contains(Object)
boolean containsAll(Collection)
boolean equals(Object)
boolean isEmpty()
Iterator iterator() // Iterator ってのは Ruby でいう Enumeartion です。
boolean remove(Object)
boolean removeAll(Collection)
boolean retainAll(Collection)
int size()
Object[] toArray()
Object[] toArray(Object[]) // 引数配列は、型を指定する。

  と、名前からもかなり想像付くのではないでしょうか?
  ただ、Java の interface はインターフェースだけを宣言し(^^;、定義は Class
で行うもので、Ruby は include 元に定義されたメソッドを追加するものですから、
より基本的なものを include元のクラスが実装しているということになります。

  Iterator を返すメソッドがあることから、Collection is_a Enumeration にし
ていいでしょう。
  remove(Object), add(Object), size() あたりは基本的なものですね。
  contains(Object) は each() でもできますけど、元のオブジェクトが実装して
いてほしいかなぁ。あっと、今も Ruby の Enumeration に member?() とかありま
すか(^^;


で、例えば
module Collection
  include Enumeration

  def addAll(col)
    col.each { |a| add(a) }
  end
  ...
end

class A
  include Collection

  def each; ... end

  def remove(obj); ...; end
  def add(obj); ...; end
  def size(); ...; end
end

  などと使うわけです。
  で、意味としては random_get は Collection に実装すべきでしょう…でも
each() に対する関係は contains/member? と同じですねぇ。

  ちなみに Javaだとさらに List というのがあって、こいつは順序付きの
Collection です。Map はキーから値が引けるやつです。この辺をごっちゃにして
Collection と言ってました、僕は(^^;

  と、Collection 欲しいんなら仕様示せとも思われるでしょうが、コレクション
関係のクラス群の設計は結構面倒なんですよね。Java だけじゃ片寄るから、他も
調べたいし(STLとかどうなってるのかな?)。

  そういえばまつもとさんはなぜ Enumeration だけ実装したんでしょう?

-- 
  だい@楓街           
    MAP2303@mapletown.net                  紅玉軌道異変アリ。

In This Thread