我有一个关于ruby中作用域的问题,为什么baz
方法不能访问变量foo
,这似乎违反直觉,因为baz
的作用域包含在create_B
的作用域中
class A
def self.create_B(foo)
Class.new do
def baz
p foo
end
end
end
end
A.create_B(4).new.baz
NameError: undefined local variable or method `foo' for #<#<Class:0x00007f3a31bddf18>:0x00007f3a31bdde28>
from (pry):23:in `baz'
def
关键字创建一个新的作用域。为了访问外部定义的变量,可以使用define_method
方法:
class A
def self.create_B(foo)
Class.new do
define_method(:baz) do
p foo
end
end
end
end
A.create_B(4).new.baz
#=> 4