ruby
  • setter
  • class-eval
  • 2013-01-20 172 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

    相關問題