我试图通过使用 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_radio
和call_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] 删除。
我来说两句