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 之後,完全是貫穿了之前破碎和模糊的觀念,趁著忘記之前趕緊寫下這篇文章。 »
在 Rails 中果要實作 tag 的功能,目前網路上找到比較常見的做法是使用 act as taggable on 這個 gem,不過這個 gem 似乎沒有維護的很好?於是參考了網路上的做法,自己在 Rail 上實作做了一個簡單的 tag 功能,本篇的範例實作以下項目: 每篇文章(post)可以加上多個標籤(tag) »
基本概念 { ... } 跟 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 »