我希望访问我的DSL用户在一个块中声明的局部变量。
E.g。
class Scraper
def scrape!(&block)
a = block.binding
instance_eval &block
b = block.binding
p "b] Notice that the variable named variable no longer exists here..."
eval("p local_variables", a)
p "or here ..."
eval("p local_variables", b)
p "Although, when we rerun the proc, all is still as it was..."
pr = block.to_proc
pr.call
c = pr.binding
p "Still nothing here though..."
eval("p local_variables", c)
end
end
s = Scraper.new
s.scrape! do
variable = "some_value"
p "A] Notice that the variable named variable clearly exists here..."
p local_variables
end
答案 0 :(得分:0)
如果您认为在eval中将某些内容传递给local_variables方法,为了证明该变量不再存在,这不是代码中发生的事情。
局部变量确实是局部变量,因此范围会发生变化,当范围发生变化时,范围变化的局部变量与您在另一个范围内所看到的变量不同。
要获取这些局部变量,您必须处于该上下文中。 Self必须是该对象,然后您才能访问这些局部变量。
因此,在这些区域中不再存在名为“变量”的变量,因为该变量从未存在于您所在的范围内。
本地变量并不意味着长寿,真的。
现在怎么去找他们?您可以通过将其作为方法的最后一次评估来获取内容。