从类中获取局部变量.new ruby



我有一个关于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

最新更新