2008年4月29日火曜日

Chapter 6 More about Methods

うーん。だんだんチュートリアル調がタルくなってきた。
Part IIIからやればよかったかな。

お、*rest が使える。

def varargs(arg1, *rest)
...

restはArrayになると。

Iteratorについては、methods定義の際に&で明示的に引数指定された場合だけ、Proc objectに自動変換されるのか。そいで、その呼び出しはyieldではなく、.callとなる。

method を call するとき、receiver をomitすると、selfだということになる。
selfって? おお、あのselfか。pythonでよく見る。

すべての method はvalueを返す。関数型的な側面?
returnもある。大域脱出。

おお、*で多値ができるのか。

irb(main):006:0> def five(a, b, c, d, e)
"I was passed #{a} #{b} #{c} #{d} #{e}"
end
def five(a, b, c, d, e)
"I was passed #{a} #{b} #{c} #{d} #{e}"
end
nil
irb(main):009:0> five(*(10..14).to_a)
five(*(10..14).to_a)
"I was passed 10 11 12 13 14"
irb(main):010:0>

ああ、ちゃう、これは多値じゃない。わからん、Ocamlにあったかね。

あ、lambdaだ。これはProc objectをつくる、と。

keyword parameter は無い。代わりにhashを使う、と。
これ、書きぶりはkeyword parameterとほぼ同じ。

Chapter 5 Standard Types

うう。

6.times do ... end

とか、気持悪くないか。。。
覚えていけば、問題はないが。

#{expr}は便利。ヒアドキュメントも便利。
これらもある意味、宣言的なのかな。

パターンマッチ的に代入できる。

file, length, name, title = line.chomp.split(/\s*\|\s*/)


Rangeも宣言的といえば宣言的。
Rubyが使い易いと言われるのは、宣言的な構文糖衣が充実しているからなのかな?

2008年4月13日日曜日

Chapter 4 Containers, Blocks, and Iterators


  • う〜ん。yeildやlambdaやProcを、よくできた仕組みと思うか、関数型言語の方がわかりやすい、と思うか。

Chapter 3 Classes, Objects, and Variables


  • rubyでは、classの定義がひとところでなくてもよい。
  • methodは実行時に探して決定する。(ちょっとCLOSっぽい)
  • superは、親のmethodを呼ぶ。
  • accessorを書かずにslotに外からアクセスするにはどうするんだろう?