0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

yieldとは

Last updated at Posted at 2024-12-21
irb(main):001* def greeting
irb(main):002*   puts 'おはよう'
irb(main):003*   puts 'こんばんは'
irb(main):004> end
=> :greeting
irb(main):005> greeting
おはよう
こんばんは
=> nil
irb(main):007* greeting do
irb(main):008*   puts 'こんにちは'
irb(main):009> end
おはよう
こんばんは
=> nil

渡されたブロックを実行するためにはメソッド内でyieldを使います。

irb(main):001* def greeting
irb(main):002*   puts 'おはよう'
irb(main):003*   yield
irb(main):004*   puts 'こんばんは'
irb(main):005> end
=> :greeting
irb(main):006* greeting do
irb(main):007*   puts "こんにちは"
irb(main):008> end
おはよう
こんにちは
こんばんは
=> nil

ブロックで呼び出した側の処理をyieldで実行させる

irb(main):001* def greeting
irb(main):002*   puts 'おはよう'
irb(main):003*   yield
irb(main):004*   yield
irb(main):005*   puts 'こんばんは'
irb(main):006> end
=> :greeting
irb(main):007* greeting do
irb(main):008*   puts "こんにちは"
irb(main):009> end
おはよう
こんにちは
こんにちは
こんばんは
=> nil

yieldの隣に渡すことでブロックの引数になる

irb(main):001* def greeting
irb(main):002*   puts 'おはよう'
irb(main):003*   text = yield 'こんにちは'
irb(main):004*   puts text
irb(main):005*   puts 'こんばんは'
irb(main):006> end
=> :greeting
irb(main):007* greeting do |text|
irb(main):008*   text * 2
irb(main):009> end
おはよう
こんにちはこんにちは
こんばんは
=> nil
irb(main):001* def greeting
irb(main):002*   puts 'おはよう'
irb(main):003*   text = yield 'こんにちは', 12345
irb(main):004*   puts text
irb(main):005*   puts 'こんばんは'
irb(main):006> end
=> :greeting
irb(main):007* greeting do |text, other|
irb(main):008*   text * 2 + other.inspect
irb(main):009> end
おはよう
こんにちはこんにちは12345
こんばんは
=> nil

inspect -> String[permalink][rdoc][edit]

オブジェクトを人間が読める形式に変換した文字列を返します。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?