LoginSignup
0
1

More than 3 years have passed since last update.

【備忘録】Ruby : 基本的なprocオブジェクトの使い方とyieldの使い方

Last updated at Posted at 2020-02-11

参考: https://shinmedia20.com/ruby-proc

sample.rb

addAB =  Proc.new { |a,b| a.to_i+b.to_i }
#ブロックをオブジェクト化
puts "和は#{addAB.call(2,4)}です。"
#callで実行することでオブジェクト化したブロックの処理を行える。
puts "三つ目の引数を加えた和は#{addAB.call(2,4,4)}"
#三つ目の引数は無視される


def sample(&sample_proc)
    #引数にブロックを渡すsampleメソッド
    #引数に&をつけることでブロックだと認識させている。
    puts sample_proc.call(2)
    #渡されたブロックに引数を2を渡して実行する。
end
sample { |n| n**4 }
#sampleメソッドに引数 { |n| n**4 } を渡している。
#sampleメソッド内でブロック変数2を渡してブロックを実行している。


def sample2 (&block)
    puts block.call(3)
end
sample2 { |n| n*n }
##出力値は 9


def sample3(&block)
    puts yield(5)
    # yield は引数で渡されたブロックを実行する
    # つまり渡された引数(ブロック)に対してcallメソッドを使わなくても良い。
end
sample3 { |n| n*n }


def sample4
    # sample3の引数(ブロック)の記述なしver
    puts yield(6)
end
sample4 { |n| n*n }


def sample5
    if block_given?
        #メソッドに引数としてブロックを渡したか判定
        #渡しているなら true , 渡していないなら false
    puts yield
    else
        puts "blockは渡されませんでした"
    end
end

sample5
## 引数を渡していない : expect => blockは渡されませんでした
sample5 { puts "blockです" }
## 引数を渡している : expect => blockです


0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1