gpt4 book ai didi

ruby-on-rails - Ruby 结构创建 block 无法访问 block 外的变量

转载 作者:数据小太阳 更新时间:2023-10-29 07:52:31 24 4
gpt4 key购买 nike

在这种情况下,访问 Struct 创建 block 中的 default 变量似乎不起作用:

default = 'test'
A = Struct.new(:a, :b) do
def initialize(*args)
super(*args)
self.b ||= default
end
end

它抛出以下错误:

'initialize': undefined local variable or method `default' for #<struct A a=2, b=nil> (NameError)

有人可以解释为什么会发生这种情况以及是否有解决方法?

(在 Ruby 1.9.3 和 2.1.2 上测试)

最佳答案

这是因为 def 关键字开始了新的局部变量作用域,所以 default 局部变量在其中是不可见的。解决方法是使用define_method,因为你传递给它的 block 是闭包:

default = 'test'
A = Struct.new(:a, :b) do
define_method(:initialize) do |*args|
super(*args)
self.b ||= default
end
end
a = A.new
a.b
# => "test"

关于ruby-on-rails - Ruby 结构创建 block 无法访问 block 外的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28069447/

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