Hatena::ブログ(Diary)

はけの徒然日記 このページをアンテナに追加 RSSフィード

2005 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 04 | 05 | 08 | 09 | 10 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 |
2011 | 01 | 02 | 03 | 04 | 11 | 12 |
2012 | 02 | 03 | 05 |
2014 | 02 | 03 | 04 | 05 | 12 |
2015 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 04 | 05 | 08 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 |

2006-07-25(Tue)

yield

ruby勉強

本で説明をみると良くわからなかったけれども、実際にプログラムを書いてみると解ったような気がする。様はブロックを接続して使用するメソッドの定義でyieldの引数が、ブロック内の||で囲んだ変数に渡されるということなんだろうな。

yieldの引数は、||内の変数の数と対応させる必要があって、メソッド内で実行されたyieldの数だけブロックに値が渡されるということ。

class Test
  def initialize
    @ary = [ 0, 1, 2, 3, 4, 5, 6, 7, 8]
  end
  def one_two
    yield 1
    yield 2
  end
  def each
    @ary.length.times do |i|
      yield @ary[i]
    end
  end
  def each_even
    @ary.length.times do |i|
      yield @ary[i] if (i % 2) == 0
    end
  end
  def each_reverse
    (@ary.length - 1).downto(0) do |i|
      yield @ary[i]
    end
  end
  def each2
    i = 0
    while i < @ary.length
      yield @ary[i],@ary[i + 1]
      i += 2
    end
  end
end

test = Test.new
test.one_two{|i| print i.to_s}      #=> 12
test.each{|i| print i.to_s}         #=> 012345678
test.each_even{|i| print i.to_s}    #=> 02468
test.each_reverse{|i| print i.to_s} #=> 876543210
test.each2{|x,y| print "#{x.to_s}#{y.to_s} "}  #=> 01 23 45 67 8 

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/hake/20060725/p1