代码之家  ›  专栏  ›  技术社区  ›  lrleon

如何定义接收可变参数的方法生成

  •  0
  • lrleon  · 技术社区  · 6 年前

    在ruby类定义中,我想定义一个方法生成器。假设我要生成的每个方法在符号和参数数量上都不同。所以,我有这样的东西:

    def self.my_define_service1(name) # generate for 1 parameter
        define_method(name) do |p1|
          # basic stuff
          call(name.intern, p1)
        end
    end
    
    def self.my_define_service2(name) # generate for 1 parameter
        define_method(name) do |p1, p2| 
          # basic stuff
          call(name.intern, p1,p2)
        end
    end
    
    # and so on ... many definitions as the number of parameters I have
    

    call

    我的问题是:有可能只写一个生成器吗?差不多吧

    def self.my_define_service(name, *args)
        define_method(name) do |args| # <-- how to do here?
          # basic stuff
          call(name.intern, *args)
        end
    end
    

    如果答案是肯定的,怎么办?

    2 回复  |  直到 6 年前
        1
  •  0
  •   alebian    6 年前

    尝试使用:

    def self.my_define_service(name, *args)
      define_method(name) do |*args|
        # basic stuff
        call(name.intern, *args)
      end
    end
    
        2
  •  0
  •   lrleon    6 年前

    eval :

    def self.my_define_service(name, *args)
        pars_list = args.join ', '
        d = %{
              def #{name}(#{pars_list})
                call(':#{name}', #{pars_list})
              end
            }
        eval d
      end