打印

[问题求助] eval的问题

eval的问题

初学ruby在使用eval时碰到一个问题, 在字符串中定义的变量eval不认得,总是报:

php?name=Ruby" onclick="tagshow(event)" class="t_tag">RubyTest.rb:412: undefined local variable or method `pstr' for main:Object (NameError)

代码如下:

p = proc do |*art|
  command = "
    pstr = Array.new
    art.each do |arg|
      if arg.respond_to?(%Q/each_key/)
        arg.each_key{|key| pstr<<key.to_s}
      else
        pstr<<arg.to_s
      end
    end
    puts %Q/#{pstr.join(",")}/
  "
  eval command
end

def do_proc bc
  bc.call(
    {"abc" => 100,
    "def" => 20},
    "bmw"
  )
end

do_proc p


以上代码预期的结果为: abc,def,bmw

另: 如果把: pstr = Array.new 定义在外面,不会报错但是puts出来的值是空的,也就是说 each那一段代码都没有起作用, pstr的值没有变化。请教一下坛里的朋友知道该如何写才正确。

TOP

这样就ok了,eval真的很邪恶,很多书上都建议不要去用它。。。

p = proc do |*art|
	eval "
	pstr = Array.new
	art.each do |arg|
      if arg.respond_to?(%Q/each_key/)
        arg.each_key{|key| pstr<<key.to_s}
      else
        pstr<<arg.to_s
      end
    end
    puts pstr.join(',').to_s"
end

def do_proc bc
  bc.call(
    {"abc" => 100,
    "def" => 20},
    "bmw"
  )
end

do_proc p


###
blog => red_world,
mail => [image]http://services.nexodyne.com/email/icon/NTbKP7EQRA%3D%3D/c2n6Sgw%3D/R01haWw%3D/0/image.png[/image]
###

TOP

运行验证ok,多谢了

运行验证ok,多谢了

TOP

command 字符串应该用单引号就对了。

TOP

或者
eval<<-DOC
 。。。。
<<DOC
也可以的

TOP

2008-12-05 05:15 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.61