【问题标题】:Are Dynamic Class Methods possible in Ruby? [duplicate]Ruby 中可以使用动态类方法吗? [复制]
【发布时间】:2011-03-31 23:27:47
【问题描述】:

可能重复:
How do I use define_method to create class methods?

我正在尝试这样做:

class Foo
  class << self
    def runtime_method(*methods)
      methods.each do |name|
        define_method "self.#{name}" do |*args|
          "dynamic class method #{name.inspect}"
        end
        self.class_eval do
          define_method name do
            "dynamic instance method #{name.inspect}"
          end
        end
      end
    end
  end

  runtime_method :foo, :bar
end

puts Foo.foo rescue #=> otherwise, undefined method `foo' for Foo:Class (NoMethodError)
puts Foo.new.foo #=> dynamic instance method: :foo
puts Foo.new.bar #=> dynamic instance method: :bar

有没有办法在 ruby​​ 中定义动态类方法?

【问题讨论】:

    标签: ruby metaprogramming


    【解决方案1】:

    我不确定我是否完全理解你,但这就是你的意思吗?

    >> class Foo
    >> end
    => nil
    >> Foo.blah
    NoMethodError: undefined method `blah' for Foo:Class
        from (irb):3
    >> 
    ?> Foo.class.class_eval do
    ?>   def blah
    >>     puts "hello"
    >>   end
    >> end
    => nil
    >> Foo.blah
    hello
    => nil
    

    【讨论】:

    • 这定义了 every 类的 blah。
    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多