我编写了以下递归函数,以便解析一些设置并正确填充我的一些日志文件对象.
当我针对Code Climate运行此代码时,它告诉我(当然)eval不鼓励使用.有没有一种方法,我可以重写这个方法,所以我并不需要eval,也并不需要一个case说法?什么都没想到.
def parse(settings, logfile = nil)
settings.each do |key, value|
if value.is_a?(Hash)
logfile = Logmsg::LogFile.new
parse(value, logfile)
else
eval("logfile.#{key} = value")
end
end
end
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在尝试instance_variable_set元编程方法,但我仍然遇到一些问题.由于某种原因,我的测试现在都失败了
Argument Error: comparison of Fixnum with String failed
Run Code Online (Sandbox Code Playgroud)
我仍然想弄明白这一点.
由于赋值给对象的属性只是方法调用的语法糖(即与使用参数obj.foo = bar调用foo=方法相同),使用:objbarObject#public_send
logfile.public_send(:"#{key}=", value)
Run Code Online (Sandbox Code Playgroud)
在较旧的代码中,您经常会看到send而不是public_send,但是您应该使用后者,因为如果您尝试调用私有方法,它将引发错误.
| 归档时间: |
|
| 查看次数: |
1915 次 |
| 最近记录: |