みたろーのさんどぼっくす

やってみたあんなことやそんなこととかを、気が向いたらまとめてみるよ。

なんとかクリア…? / 7つの言語… Ruby・3日目

引き続き、これ、やってます。

7つの言語 7つの世界

7つの言語 7つの世界

3日目の「試してみよう」までクリアできたかな?

強力な再定義能力

3日目まで写経すると、本当に強力、いや、破壊的にすら感じる再定義能力に驚く。クラスですら例外なく再定義することができるし、その方法もあっけない。 言語として提供しているデバッグ用メソッドすら上書き、動的にメソッド名を解釈してしまうことができるのには、恐怖すら感じる。

「呼ぶ名がすべて」「応じるならそれでいい」…ダックタイピングって、すごい。

ダックタイピングとmoduleとメタプログラミング

それを強力に推進する仕組みが、moduleを含むメタプログラミングを支援する仕組みなんだろうな、って思った。いいライブラリはメタプログラムがうまくって、ダックタイピングがスラスラとできるようなライブラリなんだろうな。

今回は、そこには手を入れられないけれど。

今回のできた!

https://github.com/mitaroThanken/seven-languages-in-seven-weeks/blob/master/Ruby/Day3/acts_as_csv_with_csvrow.rb

…んー、なんか違う気がする…

ハマり道

  • BasicObject#method_missing の第一引数は、Symbol

    いや、ちゃんとドキュメント引けばわかることだけれども。

  • def self.method_missing? def method_missing?

    「試してみよう」で、CsvRowクラス作って、Romanクラスみたいに method_missingを再定義して…?動かない。 ふと思い立って、Romanクラスにはついてた、「self.」を外した…ら動いた。

    んー。これは違いがわかってない…今日は時間切れ。


Rubyについては一旦これで終わり。 またいつか出会うこともあるでしょう。その頃には 2.x 系がメインになっているかなぁ…

来週からは、Io。…だけど時間が確保できるかな…