gpt4 book ai didi

ruby - 为什么这个绑定(bind)不起作用

转载 作者:数据小太阳 更新时间:2023-10-29 08:35:51 25 4
gpt4 key购买 nike

我有这个代码:

require 'erb'
ab = 2 + 2
class Greeter
def self.render(template)

ERB.new(template).result(TOPLEVEL_BINDING)
end
end

p Greeter.render("Hi <%= ab %>")

为此我得到 undefined local variable or method 'ab' for main:Object。但是,当我将它更改为 ab 成为实例变量时,一切正常:

@ab = 2 + 2
class Greeter
def self.render(template)

ERB.new(template).result(TOPLEVEL_BINDING)
end
end

p Greeter.render("Hi <%= @ab %>") # Hi 4

据我所知,TOPLEVEL_BINDING 包括与顶层的所有绑定(bind),也包括局部变量。为什么 ab 没有被捕获为 TOPLEVEL_BINDING 的一部分?

最佳答案

不是 TOPLEVEL_BINDING 产生结果 Hi 4:

@ab = 2 + 2
class Greeter
def self.render(template)
ERB.new(template).result # NO binding at all
end
end

p Greeter.render("Hi <%= @ab %>") # Still "Hi 4"

此外,TOPLEVEL_BINDING 永远不会更新新的局部变量:

TOPLEVEL_BINDING.local_variables
#⇒ [:title] # it’s pry-related bullshit
a = 3.14
TOPLEVEL_BINDING.local_variables
#⇒ [:title] # no trace of `a`

关于 what TOPLEVEL_BINDING is 的好答案.

关于ruby - 为什么这个绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41739225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com