Ruby class_eval方法
发布时间:2020-12-16 19:52:33 所属栏目:百科 来源:网络整理
导读:我试图找出如何动态创建方法 class MyClass def initialize(dynamic_methods) @arr = Array.new(dynamic_methods) @arr.each { |m| self.class.class_eval do def m(*value) puts value end end } endendtmp = MyClass.new ['method1','method2','method3']
我试图找出如何动态创建方法
class MyClass def initialize(dynamic_methods) @arr = Array.new(dynamic_methods) @arr.each { |m| self.class.class_eval do def m(*value) puts value end end } end end tmp = MyClass.new ['method1','method2','method3'] 不幸的是,这只是创建了方法m,但是我需要创建基于m的价值的方法,想法? 解决方法
有两种接受的方式:
>使用define_method: @arr.each do |method| self.class.class_eval do define_method method do |*arguments| puts arguments end end end >使用class_eval与字符串参数: @arr.each do |method| self.class.class_eval <<-EVAL def #{method}(*arguments) puts arguments end EVAL end 第一个选项将闭包转换为方法,第二个选项计算字符串(heredoc)并使用常规方法绑定.第二个选项在调用方法时具有非常轻微的性能优势.第一个选择是(可以说)更可读. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |