LoginSignup
2
1

More than 5 years have passed since last update.

yield a, b と yield [a, b] は違う

Posted at
def yield_two_args
  p yield 1, 2
end

def yield_array
  p yield [1, 2]
end

この2つのメソッドの違いを確認します。

ブロック引数が2つの場合

yield_two_argsyield_arrayは同じ挙動なので、この使い方をする限り利用する側には2メソッドの違いが見えない

yield_two_args {|a, b| a + b } #=> 3
yield_array {|a, b| a + b } #=> 3

ブロック引数が1つの場合

このときに挙動が異なる

yield_two_args {|a| a } #=> 1
yield_array {|a| a } #=> [1, 2]

Hash#each

ちなみに、Hash#eachはkeyとvalueのペアがブロックに渡ってきますが、

{ key: "value" }.each {|a| p a} #=> [:key, "value"]

ということで、yield [key, val]形式です

2
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
2
1