gpt4 book ai didi

ruby - Ruby 中 eval 的替代方法是什么?

转载 作者:数据小太阳 更新时间:2023-10-29 07:46:05 25 4
gpt4 key购买 nike

我编写了以下递归函数来解析一些设置并正确填充我拥有的一些日志文件对象。

当我针对 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

有什么想法吗?

我正在尝试 instance_variable_set 元编程方法,但我仍然遇到一些问题。由于某种原因,我的测试现在都失败了

Argument Error: comparison of Fixnum with String failed

我还在想办法解决这个问题。

最佳答案

因为对对象属性的赋值只是方法调用的语法糖(即 obj.foo = bar 与调用 foo= 方法相同 obj 与参数 bar),使用 Object#public_send :

logfile.public_send(:"#{key}=", value)

在旧代码中,您经常看到 send 而不是 public_send,但您应该使用后者,因为如果您尝试调用私有(private)方法,它将引发错误。

关于ruby - Ruby 中 eval 的替代方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35003746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com