gpt4 book ai didi

Ruby class_eval 方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:38:43 29 4
gpt4 key购买 nike

我正在尝试弄清楚如何动态创建方法

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 的值创建方法,想法?

最佳答案

有两种可接受的方式:

  1. 使用 define_method :

    @arr.each do |method|
    self.class.class_eval do
    define_method method do |*arguments|
    puts arguments
    end
    end
    end
  2. 使用 class_eval使用字符串参数:

    @arr.each do |method|
    self.class.class_eval <<-EVAL
    def #{method}(*arguments)
    puts arguments
    end
    EVAL
    end

第一个选项将闭包转换为方法,第二个选项评估字符串 (heredoc) 并使用常规方法绑定(bind)。在调用这些方法时,第二个选项具有非常轻微的性能优势。第一个选项(可以说)更具可读性。

关于Ruby class_eval 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2039031/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com