気ままなタンス*プログラミングなどのノートブック

プログラミングやRPGツクール、DTM、VOCALOIDについてのんびり書きます。

Rubyのお話。

引数をブロックパラメーターとして渡して、ブロックとして評価する yieldというものがある

  • 「ブロックって何だよ!意味わかんねぇよ!」

頭の中にモヤモヤと、大量の「?マーク」が増殖していく。
理解しようとしても、目の前には真っ白で広大な部屋の中に「?マーク」が生まれるばかりで考えがまとまらない。(※脳内イメージです)
(このはてなマークって食べれるのかな?美味しいかな?※脳内イメージです)
「?マーク」は明確にイメージできるのに、yieldの中身を想像しようとしたら、 何もない空間に引きずりこまれそうになる。
余はまさに大混乱時代(ぼくが混乱してるってことです。ここテストに出ます。)

ブロックの中身を見たらイメージできるのでは

  • 「あ、そうだ。yield()メソッドの呼び出しをputsに渡して見れば・・・」
    • 何も出てこない。putsの改行のみ(リアルには辛く厳しいことばかり溢れているんだ・・・!)
      • 「くそおお、何も出ないぞ! 得たいの知れないSomethingが、いったい何を評価してやがるんですか」

(あとでもうちと調べてみよう・・・)


「ブロック付きメソッド呼び出し」でGoogle先生に質問

Rubyリファレンスマニュアルがヒット

  • 「先生ありがとう、ありがとう。 」
ここに気になる記述あり。 
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fcall.html 
# ブロック付きメソッドの定義、 
# その働きは与えられたブロック(手続き)に引数1, 2を渡して実行すること 
def foo 
yield(1,2) 
end 
  • 「お?!手続きって書いてあるぞ・・・」
# fooに「2引数手続き、その働きは引数を配列に括ってpで印字する」というものを渡して実行させる 
foo {|a,b| 
p [a, b] 
} # => [1, 2] (要するに p [1, 2] を実行した) 
  • 「わたしが悪かったですん。本当にすみませんでしたん」

つまりブロックとは


任意の「手続き」のことを示している。
手続き内で利用する変数(外部から受け取る変数)の個数と、
その手続き内で実施すべきアクションを定義したものこそが ブロック・・・なんだと思う。

@rinne.thinking["ruby"]["block"].map{|mark| 
if mark.skill >= 80 ? "!" : "?" 
} 

RinneGrid#thinking 
def map 
@thinking_list[target][drill].map{|mark| 
yield(mark) 
} 
end 

りんね(僕)でyieldを利用した何かを表してみようと思ったけど失敗した模様。