加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 将一个局部变量注入绑定

发布时间:2020-12-17 03:30:15 所属栏目:百科 来源:网络整理
导读:我正在尝试将局部变量设置为现有绑定 def foo_callback lambda { |name| p name }endb = foo_callback.binding 绑定没有任何局部变量开头: b.eval("local_variables") # = [] 让我们为绑定设置一个原始局部变量: b.eval("age=30") 一切都按预期工作: b.ev
我正在尝试将局部变量设置为现有绑定

def foo_callback
  lambda { |name| p name }
end
b = foo_callback.binding

绑定没有任何局部变量开头:

b.eval("local_variables") # => []

让我们为绑定设置一个原始局部变量:

b.eval("age=30")

一切都按预期工作:

b.eval("local_variables") # => ["age"]
b.eval("age") # => 30

现在,让我们尝试将非原始局部变量设置为绑定:

country = Country.first
b.eval("lambda {|v| country = v}").call(country)

注意:用于设置变量的technique是从facet gem借用的.我尝试了ruby 1.9 safe implementation,结果相同.

绑定不反映本地变量国家/地区.

b.eval("local_variables") # => ["age"]

我该如何解决这个问题?本质上,我想使用现有的非原始变量的值在绑定中声明一个新变量.

我在Ruby 1.8.7上.

解决方法

您正在绑定之外创建国家/地区,然后lambda中的国家/地区仅在该范围内有效.如果你需要将它注入到绑定中,为什么不评估呢?

更新

尝试在lambda范围之外声明变量,但在绑定范围内:

b.eval("country = nil; lambda {|v| country = v}").call(country)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读