Ruby 的繼承鍊 (2) - Module 的 include、prepend 和 extend
上一篇解釋了 Ruby 如何用全物件來實現物件導向後,在繼承鏈中找尋方法時還有一個很重要的東西 -- Module。 本篇將延續上一篇的內容,討論如何透過 `include` `prepen` 和 `extend` 來引入 Module。 »
上一篇解釋了 Ruby 如何用全物件來實現物件導向後,在繼承鏈中找尋方法時還有一個很重要的東西 -- Module。 本篇將延續上一篇的內容,討論如何透過 `include` `prepen` 和 `extend` 來引入 Module。 »
先前看了 Metaprogramming Ruby 這本書,對於 Ruby 語言在實踐物件導向的方式有初步的了解,但整本書像是利用故事的方式來帶入觀念,難免不夠精練。直到最近看了泰安大大推薦我一部 Dave Thomas 在解釋 Ruby Object model 的 talk 之後,完全是貫穿了之前破碎和模糊的觀念,趁著忘記之前趕緊寫下這篇文章。 »
基本概念 { ... } 跟 do ... end 都是程式碼區塊 block, 本身不能當作物件。 基本的 block 用法,可以在 method 中插入 yield def a_method(a, b) a + yield(a, b) end a_method( »
Dynamic Dispatch 一般呼叫方法的方式 obj.my_method(3) 這裡面 receiver 是指物件 obj,方法名稱是 my_method,可以改由 send 方法來呼叫。 obj.send(:my_method, 3) 這樣的好處是 method 的名稱可以作為一個參數傳遞。 attr »
又來開新副本了,經過朋友推薦看了這本 Metaprogramming Ruby 2 之後覺得 Ruby 真的是很神奇的語言,也了解了 Ruby 為什麼適合做一個 DSL ,推薦要撰寫 ruby 的朋友一定要閱讀這本書,雖然不見得會用到這些技巧,但是會了解 Ruby 與 C++ JAVA 這些物件導向語言的最大不同之處以及 Ruby 強大的地方。 open class »