1
我试图运行下面的,但我不断收到一个红宝石问题与class_eval
"NoMethodError: undefined method `bar=' for #/Foo:0x86f69ba/"
class Class
def my_attr_accessor(name)
attr_name = name.to_s
attr_reader name
attr_reader "my_"+name
class_eval %Q"def #{name}=(val)
@#{name}=val
end"
end
end
实际上,我用类似这样的帖子东西
:Ruby - Using class_eval to define methods
编辑:你”很正确我做了改变以反映这一点..非常感谢。
,你也应该使用'define_method'而不是'class_eval' –
能否请您详细阐述,为什么?我很想知道背后的原因。 – Klam
@ user1994202评估字符串而不是块的方法是1)计算成本高昂,2)长期不安全 - 最终很容易将不可信数据插入到字符串eval中,从而允许外部攻击者在您的进程中执行任意代码。 – dbenhur