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


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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/11/05 20:39:29
  • 終了:--

回答(4件)

id:jouno No.1

jouno回答回数280ベストアンサー獲得回数02005/11/05 22:47:57

ポイント18pt

こことか、

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


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


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


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

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

ここも参照。

id:mr-80b

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

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

2005/11/06 09:22:41
id:T-pon No.2

T-pon回答回数424ベストアンサー獲得回数42005/11/05 22:59:33

ポイント18pt

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]

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

id:mr-80b

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

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

2005/11/06 09:24:37
id:Kumappus No.3

くまっぷす回答回数3784ベストアンサー獲得回数1852005/11/05 23:17:41

ポイント17pt

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。

id:mr-80b

参考になりました。

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

ありがとうございます。

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

2005/11/06 09:27:28
id:Wafer No.4

Wafer回答回数103ベストアンサー獲得回数02005/11/06 05:51:16

ポイント17pt

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

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


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

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

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

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

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

id:mr-80b

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

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

2005/11/06 09:31:39

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません