论坛首页 Ruby版 ruby

Binding趣用

浏览 454 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-07-02
昨天看到一段代码,感觉挺有趣,贴出来分享给大家。
class BindingDemo
  def initialize
    @ivar = "wombat in instance variable"
  end
  def get_binding(param)
    lvar = "cat in local variable"
    binding
  end
end

b = BindingDemo.new

the_binding = b.get_binding("dog in paramater") { "elk in block" }

puts(eval("@ivar", the_binding))
puts(eval("lvar", the_binding))
puts(eval("param", the_binding))
puts(eval("yield", the_binding))

eval("lvar = 'new value'", the_binding)
puts(eval("lvar", the_binding))
   
最后更新时间:2008-07-02
解释哈 趣味何在??
   
0 请登录后投票
最后更新时间:2008-07-02
执行下不就知道了。
   
0 请登录后投票
最后更新时间:2008-07-02
eval("lvar = 'new value'", the_binding)  
puts(eval("lvar", the_binding))


这个输出 "new value"怎么解释??我只能强行理解的
   
0 请登录后投票
最后更新时间:2008-07-03
eval是在当前定上下文中去执行代码,由此可知,eval("lvar = 'new value'", the_binding) 是在the_binding上下文中给变量ivar重新赋值为'new value'.
那么puts(eval("lvar", the_binding)) 理所当然应该输出'new value'
   
0 请登录后投票
论坛首页 Ruby版 ruby

跳转论坛:
JavaEye推荐