人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Rubyの構文「yield」についてできるだけわかり易く説明されているページを知りたい。

Rubyを勉強中の者です。今「yield」について調べているのですが、よく理解できません。そこで、Rubyの構文「yield」についてできるだけわかり易く説明されているページを知りたいです。

●質問者: ぇむぁる
●カテゴリ:コンピュータ
✍キーワード:Ruby 勉強
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● jouno
●18ポイント

http://www.jaist.ac.jp/~m-hatake/ruby/ruby4.htm

Ruby

こことか、

http://ruby.mirror.easynet.be/ja/column/v0003.html

Iterator Quick Start

ここなんかどうでしょう。


簡単に言うと、関数に、引数として無名の関数(ブロック)を渡すわけです。そうすると、関数の中では、yieldの位置で、その渡された無名関数が実行されます。


で、yieldに引数を与えると、その引数は、渡された無名関数に引数として渡されます。


http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=FAQ%3A%3...

Rubyリファレンスマニュアル - FAQ::ブロック付きメソッド呼び出し

ここも参照。

◎質問者からの返答

参考になりました。ありがとうございます。

他の方の回答とあわせて参考にさせていただきます。


2 ● T-pon
●18ポイント

http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%A5%E1%A...

Rubyリファレンスマニュアル - メソッド呼び出し

上記URLのyieldの項を読むと分かります。

yieldは自分で定義したブロック付きメソッドでブロックを呼び出すときに使います。


def foo

yield 0

yield 1

yield 2

end


という定義があります。これはfooに渡す関数について0と1と2を順に代入して実行する、というものを定義しています。いわばルーチンに対するルーチンを定義していることになります。fooに対しては次のようにルーチンを渡します


# fooに「引数1個のルーチンで、その働きは引数を配列に括ってpで印字する」というものを渡して実行させる

foo {|a|

p [a]

}


ちなみに|a|と書くことでfooに続くルーチンが引数をaで受け取ることを明示しています。上記は


p [0]

p [1]

p [2]


と同じことになります。


ちなみに2変数以上も同様に

def poo

yield(1,1)

yield(2,2)

yield(3,3)

end


foo{|a,b|

p [a,b]

}


とすることにより

p [1,1]

p [2,2]

p [3,3]

を実行することになります。

◎質問者からの返答

参考になりました。ありがとうございます。

他の方の回答とあわせて参考にさせていただきます。


3 ● くまっぷす
●17ポイント

http://ruby.mirror.easynet.be/ja/uguide/uguide09.html

Ruby User's Guide - $B%$%F%l!<%?$C$F$J$K!)(B

yieldは自分でイテレータを定義するときに使う文ですね(もっとトリッキーな使い方もあるかもしれないけど)。


Rubyの場合、イテレータの後にブロック引数を定義できますが、yieldはそのブロック引数にイテレータから何を投げるかを定義できます。


例えば

table = Hash[ 2,”B”,1,”A”,4,”D”,5,”E”,3,”C”]


def testiter(h)

for i in h.keys.sort

yield( h[i] )

end

end


testiter table do|i|

print i,”¥n”

end


はHashをイテレータの引数として、そのkeyをソートしてvalueを順にブロック引数に渡す例です。結果は

A

B

C

D

E

となります。


ただ、rubyはこのように制御構文まで作れて面白いことは面白いんですが、通常使うときはすでにいろいろな制御構造や組み込みライブラリがあるんでなかなか使わないような気がします>yield。

◎質問者からの返答

参考になりました。

「ただ、rubyはこのように制御構文まで作れて面白いことは面白いんですが〜」というような情報も、非常にありがたいです。

ありがとうございます。

他の方の回答とあわせて参考にさせていただきます。


4 ● Wafer
●17ポイント

http://ruby.mirror.easynet.be/ja/uguide/uguide00.html

Ruby User's Guide

ここの「イテレータってなに?」がわかりやすいと思います。

自前のイテレータを作成したときに「このタイミングでdo it!」の場所にyieldと書く、というようなイメージがわいてくると、理解が早まる気がします。


引数を持たせたりイロイロできるので難しく思えてしまいますが、とっかかりはこんな感じで。

http://www.ruby-lang.org/ja/

オブジェクト指向スクリプト言語 Ruby

あとは、公式HPのリファレンスマニュアルですかね。

検索して「Rubyの文法:メソッド呼び出し・yield」に詳しく載っています。

◎質問者からの返答

参考になりました。ありがとうございます。

他の方の回答とあわせて参考にさせていただきます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ