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的块中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ajax传递给asp.net mvc 后台数组参数方式
- 整理swift第三库及相关讲解(一)
- if-statement – 为什么Swift的可选绑定在某些情况下会以’
- xml – Jenkins:度量“JUnit”的结果文件无效.结果文件已被
- swift – AVAudioRecorder的有效“设置”键/值是什么?
- c# – BackgroundWorker是保持WCF / WPF应用程序响应的唯一
- objective-c – iOS 6 UIInterfacePortrait ONLY视图控制器
- c# – 从.NET中的字符串中提取JSON
- Synametrics WinSQL Pro 6.5.76.586
- PostgreSQL的存储过程简单入门