您好,登錄后才能下訂單哦!
在Ruby中,所有的class都是對象,是Class這個類的實例。
一、 類是對象
當我們編寫一個新的class的時候(一般情況下使用class Name ... end ),我們實際上生成了一個Class類的對象同事將其賦予了一個全局變量(在這里Name就是這個全局變量)。當我們調用Name.new來創建一個新的對象的時候,我們默認地調用了Class中的new方法。我們可以通過覆寫Class類中的new方法來證明這一點:
class Class alias oldNew new def new(*args) print "Creating a new ", self.name, "\n" oldNew(*args) end end class Name end n = Name.new
執行這段代碼會產生這樣的輸出: Creating a new Name
二、Class.new do .... end
fred = Class.new do def meth2 "hello" end def meth3 "bye" end end a = fred.new #=> #<#<Class:0x100381890>:0x100376b98> a.meth2 #=> "hello" a.meth3 #=> "bye"
上面代碼中的block實現了跨越ruby作用域門的作用。實際上是對Class類的覆寫,不過顯得更加ruby way。至于這樣的做有什么大用處,我還沒想通,還需要在以后的源代碼閱讀中認真體會。
三、 私有方法inherited
class Foo def self.inherited(subclass) puts "New subclass: #{subclass}" end end class Bar < Foo end class Baz < Bar end
上面這段代碼會產生下面的輸出:
New subclass: Bar
New subclass: Baz
這應該也算是ruby元編程的一點點內容吧,類似于included,當Foo類被繼承的時候,子類會自動的向這個私有方法傳遞子類類名并且執行該方法內的代碼。也應該用處。之前在Rails源代碼中遇見過。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。