加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用define_method动态定义的setter方法?

发布时间:2020-12-16 19:54:53 所属栏目:百科 来源:网络整理
导读:我使用很多迭代来定义我的模型中的方便方法,如: PET_NAMES.each do |pn|define_method(pn) do......end 但是我从来没有能够动态定义setter方法,即: def pet_name=(name)...end 使用define_method像这样: define_method("pet_name=(name)") do...end 有任
我使用很多迭代来定义我的模型中的方便方法,如:
PET_NAMES.each do |pn|
define_method(pn) do
...
...
end

但是我从来没有能够动态定义setter方法,即:

def pet_name=(name)
...
end

使用define_method像这样:

define_method("pet_name=(name)") do
...
end

有任何想法吗?提前致谢.

解决方法

以下是一个相当完整的示例,在您用于扩展类的模块中使用define_method:
module VerboseSetter
  def make_verbose_setter(*names)
    names.each do |name|
      define_method("#{name}=") do |val|
        puts "@#{name} was set to #{val}"
        instance_variable_set("@#{name}",val)
      end
    end
  end
end

class Foo
  extend VerboseSetter

  make_verbose_setter :bar,:quux
end

f = Foo.new
f.bar = 5
f.quux = 10

输出:

@bar was set to 5
@quux was set to 10

你很近,但是你不想在你调用define_method的参数中包含该方法的参数.参数在你传递给define_method的块中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读