- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我对 alias_method
感到困惑.下面的示例似乎应该产生一个无限循环,但实际上并没有:
class ApplicationController
dual_accessor :filter_by, :default => []
end
class Class
def dual_accessor(*attributes)
options = attributes.extract_options!
attributes.each do |attribute|
class_eval <<-ruby
class_inheritable_accessor :#{attribute}
singleton_class.send :alias_method, :read_#{attribute}, :#{attribute}
def self.#{attribute}(value = :__read__)
if value == :__read__
read_#{attribute}
else
self.#{attribute} = value
end
end
ruby
self.send(attribute, options[:default]) if options[:default]
end
end
end
据我了解,
{ default: [] }
提取到 options
局部变量中。:filter_by
。class_eval
在类对象的上下文中评估 heredoc 中的字符串。self
的单例对象上调用alias_method
,(self
指的是类的一个实例)。read_filter_by
的 filter_by
的新副本。filter_by
的类方法,它接受一个默认参数:__ read __
。当我们调用 read_#{attribute}
时,例如read_filter_by
,这怎么不造成无限循环呢?看起来该方法会一遍又一遍地递归地调用自己。
最佳答案
read_filter_by
调用使用 class_inheritable_accessor
创建的访问器方法。
重要的是 read_filter_by
方法指向调用 alias_method
时 filter_by
的内容 - filter_by< 的后续重新定义
不影响 read_filter_by
关于ruby - alias_method 如何不创建无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28728016/
这个问题在这里已经有了答案: How to alias a class method in rails model? (5 个回答) 去年关闭。 考虑以下类: class Foo def an_i
在以下代码中来自 ruby docs ,为什么 orig_exit 最终没有在无限递归中调用自己? module Mod alias_method :orig_exit, :exit def
我对 alias_method 感到困惑.下面的示例似乎应该产生一个无限循环,但实际上并没有: class ApplicationController dual_accessor :fil
我无法理解这段代码中 alias_method 的用途 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do alia
我无法理解这段代码中 alias_method 的用途 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do alia
在 Ruby 中,您可以通过多种方式重新定义方法。一种是打通eigenclass,也就是单例类,还有一种是使用instance_eval。但是,alias_method 仅适用于特征类。为什么会这样,
我最近一直在阅读 Metaprogrammin Ruby 第 2 版,在第 5 章的末尾,他们提供了一个小测验 Your task is to change Fixnum class so that
我有一个公开两个接口(interface)方法 client_options 和 user_options 的类,在这个祖先级别,它们等同于 default_options。我不希望其他开发人员直接实
我一直在尝试修补全局缓存模块,但我不明白为什么它不起作用。 有人有什么建议吗? 这是错误: NameError: undefined method `get' for module `Cache'
我找到了一篇关于 alias 与 alias_method 的博文。如该博客文章中给出的示例所示,我只是想将一个方法作为同一个类中另一个方法的别名。我应该使用哪个?我总是看到使用 alias,但有人告
假设我有一个包含三个子类的基类。基类有一个大多数子类通用的方法,它有一个别名: class Beer def bottle_content '250 ml' end alias_m
我正在尝试覆盖 Rails 的“fields_for”方法,我目前正在这样做: module ActionView::Helpers::FormHelper include ActionView:
我正在开发我的网络应用程序,我想覆盖一个方法,例如,如果原始类是 class A def foo 'original' end end 我想重写 foo 方法,可以这样做 class
如果这两个方法只是同义词,为什么人们还要费心写额外的字符“_chain”? 最佳答案 没有。 alias_method 是 Ruby 的标准方法。 alias_method_chain 是一个 Rai
我有一个关于 Mechanize::Cookie 行为不端的问题,我想尝试用猴子修补它。我的代码: class Mechanize::Cookie class << self; alias_met
我在理解 alias_method/alias_method_chain 时遇到一点困难。我有以下代码: module ActionView::Helpers module FormHelper
class Country < ActiveRecord::Base #alias_method :name, :langEN # here fails #alias_method :name
我有一个直接从 ActiveResource::Base 继承的模型,我正在尝试为记录表中的大部分列运行 alias_method,但结果是一个 NameError: NameError: undef
什么在以后调用时更快: def first_method?() second_method?() end 或 alias_method :first method, :second_method 如果
我有以下初始化程序: app/config/initializers/store_location.rb module StoreLocation def self.skip_store_loca
我是一名优秀的程序员,十分优秀!