はじめてのRubyを再度読み返す
昨日につづいてまたRubyネタ
WEBrickのライブラリを読んでいてたとえばhttpserver.rbに
def mount_proc(dir, proc=nil, &block)
とあった場合の&blockというのがわからなかったり、あとはserver.rbの
class SimpleServer def SimpleServer.start yield end end
というののyieldというのなど、rubyならではの記法についての理解がやっぱり甘いっていうことを再認識
そのためMacbook Airと一緒に携帯してたはじめてのRubyの7章のメソッドの所を写経しながら再度勉強しなおしました
この章の中でレシーバの省略という項目があり
class Laputa def hover vibrate end def vibrate p "vibrated" end end takalamakhan = Laputa.new takalamakhan.hover
こんなサンプルがあったのですが3行目のvibrateの箇所がメソッド呼び出しのレシーバを省略した書き方ということで凄い違和感があったのですが
この場合はレシーバであるselfに対してメソッドを呼び出します。selfは、C++やJava,C#でいうthisの相当です。
という説明で「あーなるほどね。」と納得。
要は
def hover self.vibrate end
というのと同じっていうことかー
納得したついでに、javascriptで書き直してみた。
var Laputa = function(){}; Laputa.prototype = { hover:function() { this.vibrate(); }, vibrate:function(){ alert("vibrated"); } }; var takalamakhan = new Laputa(); takalamakhan.hover(); // -> vibrated