簡體   English   中英

別名方法鏈未定義方法

[英]Alias method chain undefined method

出於某種原因,我的alias_method_chain不想工作,我不知道為什么。 任何人都可以向我解釋為什么以下不起作用?

[2] pry(main)> Client.respond_to? :mapping
=> true
[3] pry(main)> Client.alias_method_chain :mapping, :safety
NameError: undefined method `mapping' for class `Client'

要為某個類的對象獲取別名方法鏈,您應該在類本身而不是在其實例上調用alias_method_chain 如果你想使類鏈方法適用相同的規則:你應該在類的單例類上調用alias_method_chain ,可以像這樣獲得:

klass = class << Client; self; end  # => returns singleton class for Client class

在這種情況下, Clientklass類的實例(將Class類作為其超類)。

類方法鏈的結果示例如下:

class Client
  def self.mapping
    puts 'mapping'
  end

  def self.mapping_with_safety
    puts 'safety'
    mapping_without_safety
  end

  class << self
    # call alias_method_chain in context of Client's singleton class
    alias_method_chain :mapping, :safety
  end
end

# alternatively you can do it outside of Client class like that 
# (class << Client; self; end).alias_method_chain :mapping, :safety

Client.mapping
# => safety
# => mapping

為了使alias_method_chain起作用,映射函數必須是實例方法,而不是像示例中的類方法,所以Client.new.respond_to? :mapping Client.new.respond_to? :mapping需要為true(注意新的調用)。

暫無
暫無

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

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