Ruby:使用 args 定义方法

拉维

我试图通过使用 args 动态定义方法来重构代码。我试过使用Define_method,但它抛出了一个错误,我被迫定义define_singleton_method。

这是我的代码,我想删除所有带有 call_* 前缀的方法。

def construct_payload(id, file_name, type)
    case type
    when 'Radio' then call_radio(id, file_name)
    when 'Pan' then call_pan(id, file_name)
    end
  end


  def call_radio(_id, _file_name)
    base(_id).merge(radio(_file_name))
  end

  def call_pan(_id, _file_name)
    base(_id).merge(pan(_file_name))
  end

  def base(_id)
    {
      "id": _id,
    }
  end

 def radio(file)
   { 
      "mode": "ds",
      "file": file
    }
 end

 def pan(file)
   { 
      "mode": "pr",
      "file": file
    }
 end

#enter code here

有没有一种方法可以动态定义call_radiocall_pan方法?

拉维

我认为 eval 是编写更少代码的更好选择

def construct_payload(id, file_name, type)
  eval("base(id).merge(#{type}(file_name))")
end

def base(_id)
    {
      "id": _id,
    }
  end

 def radio(file)
   { 
      "mode": "ds",
      "file": file
    }
 end

 def pan(file)
   { 
      "mode": "pr",
      "file": file
    }
 end

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章