作者: 機械伯爵
日時: 2009/5/16(22:31)
 機械す。

> リンク先にこうあるのですけどどういう疑問なんでしょうか?
> 
> | そして、Ruby 1.9系 と 1.8.7 では &Symbol 形式(や Symbol を直接)を渡
> して楽できる様になりました。
> |
> | p (1..5).inject(&:+)
> | # =| 15
> |
> | p (1..5).inject(:+)
> | # =| 15
> |
> | 後者の様に Symbol を渡せるのは、引数が Symbol の場合、inject が内部で
> to_proc してるからです。
> | Enumerable#map などでは使えません。
> 
> :*をわたしても自動的に &:* と同じになるように変換されるからです。

 ええ、ここは読みました(ここを読んでも、るびきちさんの説明を戴いても、
やっぱなかなか頭がついていけないのですが)

 ただ、その後の例でしつこく&を付けてる(って言い方は失礼か)ので、
「なんか意味あるのかしらん?」と気になったわけです。

 Schemeのdefineで関数作るときに、lambdaをわざわざ書くとか、そういう
ような「動作を見やすくする」例と見ればいいんですね。

> そして、この&の意味は
> |2.9 &がついた引数は何ですか
> |
> |手続きオブジェクトをブロックとして受け渡しするための引数です。

 これは、今手元の本(「オブジェクト指向スクリプト言語Ruby」の初版……)
で確認しました。

 そういえば、そのようなコトを読んだような気が……

※ブロックをオブジェクトとして扱うこと自体、ここ一年くらいでようやく
 なんとか意味がわかってきたトコですからね……でも、多分半分くらいしか
 理解してないと思われますが……
 
> ということで誤解を恐れずに他の言語でたとえると、Perlで
> 
> func \&foo
> 
> とやるようなものです。

 ……かえってわかんないです(号泣)

 うわぁ、ラクダ本ラクダほん〜〜〜っ!

 ……

 &はサブルーチンだけど、\ってなんだっけ?

> #ここ数年ひいきにしてたとある店が突然閉店してて悲しい

 大須が見る影も無くなったのが……(名古屋近辺でしかわからないネタ)

 /機械伯爵/