`The rubyist'【えぬ】の日記

 | 

2008-02-02

イテレータを連結するという考え方の歴史 イテレータを連結するという考え方の歴史 - `The rubyist'【えぬ】の日記 を含むブックマーク はてなブックマーク - イテレータを連結するという考え方の歴史 - `The rubyist'【えぬ】の日記

self を返しているようなイテレータはブロックをもらわない場合は、

Enumerator を返すようになれば便利だと思います。

[ruby-dev:13325] Re: Enumerator -- Round 2

しばらく前に、Enumerableのメソッドをブロックが渡されていないと

きにEnumeratorを返すようにしましたが、その他の組み込みクラスも

対応させて見ました。Array, Dir, Hash, IO, Range, String, Struct

eachっぽいメソッドが対象です。

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/26924

Tue Aug 30 23:49:34 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>

* array.c, dir.c, enum.c, hash.c, io.c, range.c, string.c, struct.c:

let enumerable methods return Enumerator. [ruby-dev:26924]

* intern.h (RETURN_ENUMERATOR): utility macro for enumerable methods.

http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=9053

Enumerable::Enumerator(1.9以降) Enumerable::Enumerator(1.9以降) - `The rubyist'【えぬ】の日記 を含むブックマーク はてなブックマーク - Enumerable::Enumerator(1.9以降) - `The rubyist'【えぬ】の日記

これで某サイトの先に進めるw

irb(main):001:0> "alert(document.domain)".each_byte.to_a.join(',')
=> "97,108,101,114,116,40,100,111,99,117,109,101,110,116,46,100,111,109,97,105,110,41"

Hash#collect! Hash#collect! - `The rubyist'【えぬ】の日記 を含むブックマーク はてなブックマーク - Hash#collect! - `The rubyist'【えぬ】の日記

class Hash
  def collect!
    self.keys.each{|k|
      self[k] = yield(k, self[k])
    }
    self
  end

  def collect1
    Hash[*self.keys.collect{|k|
      [k, yield(k, self[k])]
    }.flatten]
  end

  # collect1と同義
  def collect2(&b)
    o=self.dup
    o.collect!(&b)
    o
  end
end

irb(main):001:0> a = {"zzz"=>"ZZZ", :aaa=>"ABcDef", 10=>"qweRtY"}
=> {"zzz"=>"ZZZ", :aaa=>"ABcDef", 10=>"qweRtY"}
irb(main):002:0> a.collect{|k, v| v.upcase }
=> ["ZZZ", "ABCDEF", "QWERTY"]
irb(main):003:0> a.collect1{|k, v| v.downcase }
=> {"zzz"=>"zzz", :aaa=>"abcdef", 10=>"qwerty"}
irb(main):004:0> a.collect2{|k, v| v.downcase }
=> {"zzz"=>"zzz", :aaa=>"abcdef", 10=>"qwerty"}
irb(main):005:0> a.collect!{|k,v| v.capitalize }
=> {"zzz"=>"Zzz", :aaa=>"Abcdef", 10=>"Qwerty"}
irb(main):006:0> a
=> {"zzz"=>"Zzz", :aaa=>"Abcdef", 10=>"Qwerty"}

…ああ、車輪を作ってしまった…

 |