您好,登錄后才能下訂單哦!
BasicObject是ruby中所有類的父類。
一、BasicObject提供的實例方法
BasicObject提供的方法較少,我在文章中只記錄一些要點。
1. == 與eql?同為BasicObject提供的實例方法,但用法上稍有不同。
1 == 1.0 #=> true 1.eql? 1.0 #=> false
2. send方法,下面為send方法的例子。
class Klass def hello(*args) "Hello " + args.join(' ') end end k = Klass.new k.send :hello, "gentle", "readers" #=> "Hello gentle readers"
send為ruby中的實例提供了動態調用方法的可能,實在是元編程的利器。
3. instance_eval && instance_exc
這兩個方法的作用都是將對象的作用域撕開,將方法后所跟的塊的self變成對象的上下文環境。所不同的是instance_exc可以向塊內傳遞參數。
二、 BasicObject提供的私有方法
1. method_missing方法
method_missing方法被用來處理對象調用方法不存在時的情況,如果在對象類中覆寫method_missing,那么可以達到意想不到的效果。使用起來較難。
2.singleton_method_added方法
當一個單例方法添加到一個接受者之后,singleton_methdo_added方法會被當作反饋被調用。
module Chatty def Chatty.singleton_method_added(id) puts "Adding #{id.id2name}" end def self.one() end def two() end def Chatty.three() end end ###Adding singleton_method_added ##Adding one Adding three
下面還有singleton_method_removed 和 singleton_method_undefined 方法,和本方法用法相同。我們可以通過示例代碼體會一下class << self .... end 的用法。
module Chatty def Chatty.singleton_method_removed(id) puts "Removing #{id.id2name}" end def self.one() end def two() end def Chatty.three() end class << self remove_method :three remove_method :one end end
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。