[英]Ruby class_eval method
我試圖弄清楚如何動態創建方法
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)並使用常規方法綁定。 調用方法時,第二個選項在性能上有很小的優勢。 第一個選項(可以說)更具可讀性。
define_method(m) do |*values|
puts value
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.