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