Project1

标题: 如果用这种方式来构造一些复杂的对象呢? [打印本页]

作者: DeathKing    时间: 2011-1-19 12:03
标题: 如果用这种方式来构造一些复杂的对象呢?
  1. class A
  2.   def initialize(a,b)
  3.   end
  4. end

  5. module Kernel
  6.   def A(*args)
  7.     args.each do |element|
  8.       element.each do |key,value|
  9.         eval("@#{key.id2name} = A.new(*value)")
  10.       end
  11.     end
  12.   end
  13. end
复制代码
如果构造诸如Window一类的对象,用这种方式会复杂么?


作者: 苏小脉    时间: 2011-1-21 11:10
本帖最后由 苏小脉 于 2011-1-21 11:11 编辑

你想达成什么目的?自动化大量的对象创建过程?我可能会用二人合作模式,一个人从符号到参数的映射的一个阵列中拿出一个元素,交给它的伙伴来处理具体的创建。这样做就将任务划分为了两块。

一般来说,能避免 eval 就尽量避免,因为 eval 有额外的“分析时”开销(将字符串作为源代码进行词法、文法分析),而这个“剖析时”却又是在程序“运行时”进行的。把不需要惰性求值的表达式预先进行及早求值,能避免一些分析时开销。如果可能的话,用 instance_exec,或 instance_eval 带块的形式,也比直接在字符串上求值好。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1