class SomeClass
end
some_local_var = 5
sc = SomeClass.new
def sc.should_work_closure
puts some_local_var # how can I access "some_local_var", # doesn't this work like a closure ?
end
sc.should_work_closure()
第9行:should_work_closure': undefined local variable or method
some_local_var'代表#(NameError)
从t.rb:12
答案 0 :(得分:0)
不,def
不像闭包一样工作。
要使sc
中的def
可用,您可以将其设为常量,将其设为全局(通常是个坏主意),或者将define_method
与块一起使用(这些是闭包)。
但是,由于您不在类中,define_method
是类(和模块)的方法,因此您不能只使用它。您必须在class_eval
的本征类上使用sc
才能进入该类。
示例:
class <<sc; self end.class_eval
define_method(:should_work_closure)
puts some_local_var
end
end
这样可行,但看起来有点吓人。在方法定义中从周围范围访问局部变量通常是个坏主意。