簡體   English   中英

在何時以及如何向Ruby對象動態添加方法有用嗎?

[英]When and how is it useful to dynamically add a method to a Ruby object?

我一直在嘗試從“基礎良好的Rubyist”那里學習Ruby,並且遇到了在運行時向對象添加方法的想法:

obj = Object.new
obj.respond_to? "hello" # Returns false

def obj.hello
  puts "something"
end

obj.respond_to? "hello" # Returns true
obj.hello()  # Output is "something"

我有Python和Java的背景知識,我無法想象有任何方式可以使用這個新想法。 那么,這有什么用呢? 它如何適應面向對象編程的精神? 在運行時執行此操作是否昂貴?

總是有很長的清單,您可以使用任何一種語言進行操作,但是如果沒有充分的理由,則不應該這樣做,並且擴展單個對象肯定是該清單上的重點。

通常,您不會定義單獨的方法,但是您可能會包含很多方法:

module Extensions
  def is_special?
    true
  end
end

obj = Object.new
obj.send(:extend, Extensions)

obj.is_special?
# => true

Rails的ActiveRecord這樣做是根據Rails實例啟動時的架構,為模型動態創建模型的方法,因此每一列都有一個關聯的方法。 這種動態編程可用於使代碼無縫適應不斷變化的環境。

在很多情況下,您都希望明確地將其拼寫出來,以便對您的方法進行充分的文檔記錄,但是對於那些無關緊要的情況,動態響應總比在代碼中維護架構和關聯方法等兩件事要好。 ,那么它可能是最好的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM