Rob*_*oss 7 ruby ruby-on-rails
出于某种原因,我的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'
Run Code Online (Sandbox Code Playgroud)
要为某个类的对象获取别名方法链,您应该调用alias_method_chain类本身而不是它的实例.如果你想使类链方法适用相同的规则:你应该调用alias_method_chain类的单例类,可以像这样获得:
klass = class << Client; self; end # => returns singleton class for Client class
Run Code Online (Sandbox Code Playgroud)
在这种情况下Client是一个klass类的实例(以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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3733 次 |
| 最近记录: |