ruby
  • setter
  • class-eval
  • 2013-01-20 272 views 1 likes 
    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

    编辑:你”很正确我做了改变以反映这一点..非常感谢。

    回答

    3

    class_eval是一种方法,但你在这里为变量赋值(class_eval =

    +0

    ,你也应该使用'define_method'而不是'class_eval' –

    +0

    能否请您详细阐述,为什么?我很想知道背后的原因。 – Klam

    +1

    @ user1994202评估字符串而不是块的方法是1)计算成本高昂,2)长期不安全 - 最终很容易将不可信数据插入到字符串eval中,从而允许外部攻击者在您的进程中执行任意代码。 – dbenhur

    相关问题