ruby metaprogram 問題


#1

怎麼用metaprogram 寫出下面的methods
只能寫到看起象的methds ,怎麼讓他是可執行的,就卡關了

  ["start","end"].each do |x|
    define_method("date_#{x}") do  
      "self.date_#{x}.strftime '%Y%m%d'"
    end
  end
  
  def date_start
    self.off_start.strftime "%Y%m%d"
  end

  def date_end
    self.off_end.strftime "%Y%m%d"
  end

#2

你可以用 eval 系列…看你要用 class_eval or instance_eval…

他把 string 當執行 code.

再高階一點用 hook…

試試看吧.


#3

謝謝啦,搞定了

    define_method("date_#{x}") do  
      eval "self.date_#{x}.strftime '%Y%m%d'"
    end
  end

#4

這裡用 send 比較好啊…… 能不用 eval 就不用:

["start","end"].each do |x|
  define_method("date_#{x}") do  
    self.send("date_#{x}").strftime '%Y%m%d'
  end
end

#5

了解,但是請教一下 eval 有什麼邪惡的影響嗎?


#6

單純凡事不要太 evil X"DD

因為沒寫好瞬間就是打點唄