Hatena::Groupsubtech

#生存戦略 、それは

-> 06 { 10 / 13 }

ruby のイテレータで perl の $_ ライクな。

17:22 | はてなブックマーク - ruby のイテレータで perl の $_ ライクな。 - #生存戦略 、それは

http://www.dogbiscuit.org/mdub/weblog/Tech/Programming/Ruby/MethodMissingMagic

見て。なるほどーすげぇぇぇえぇな。これで

p (0..10).to_a.delete_if( &_ % 2 == 0 )
#=> [1, 3, 5, 7, 9] 
p 'string'.split('').map( &_.succ ).join
#=> "tusjoh"

とかできるよヤホー。method_missing で呼び出しのメッセージを que にいれてるのと、結合の優先順位をうまく利用している。リンク先見た方が仕組み知るの早いけど

delete_if( & ( _ % 2 == 0 ) )

ってなって

(_ % 2 == 0)
#=> #<MessageBuffer:0x402ae9c4 @messages=[[:%, 2], [:==, 0]]>

が to_proc で proc になって渡ると。へぇぇぇぇ。

class MessageBuffer
  instance_methods.each do |m|
    undef_method m unless m =~ /^(__|respond_to|inspect)/
  end

  def initialize
    @messages = []
  end

  def method_missing(*message)
    @messages << message        # record the message
    self                        # return self so we can keep recording
  end

  def __replay_all_messages__(obj)
    @messages.inject(obj) do |obj, message|
      obj.__send__(*message)
    end
  end

  def to_proc
    proc { |x| __replay_all_messages__(x) }
  end

end

module Kernel
  def _
    MessageBuffer.new
  end
end

babiebabie2006/10/16 16:55牽制されてる気がしてならない>エロゲ公表

LisaLisa2011/07/03 04:59What an aemwsoe way to explain this—now I know everything!

rqbnfflgfserqbnfflgfse2011/07/03 17:51kyWYIZ <a href="http://enrbonpgbmuf.com/">enrbonpgbmuf</a>

ogxmuoifjjogxmuoifjj2011/07/03 22:39BMeaQ1 , [url=http://sxopuivphzqd.com/]sxopuivphzqd[/url], [link=http://lhjaxipkwesq.com/]lhjaxipkwesq[/link], http://xcgariaidpna.com/

dephvgqpeudephvgqpeu2011/07/05 17:22fIFfoV <a href="http://qfuvjnmbfpno.com/">qfuvjnmbfpno</a>

トラックバック - http://subtech.g.hatena.ne.jp/secondlife/20061013