ruby闭包问题(无法访问var)

时间:2010-10-24 11:59:59

标签: ruby

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

1 个答案:

答案 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

这样可行,但看起来有点吓人。在方法定义中从周围范围访问局部变量通常是个坏主意。