ruby里作用域之间宛如身处两个异世界,当你试图穿过一个作用域的时候,变量会立即失效,而不是像在js里面你定义一个全局变量之后,任何function里面都能调用
aa = 'success!'
class MyClass
def my_method
puts aa
end
end
MyClass.new.my_method
=> NameError: undefined local variable or method `aa' for #<MyClass:0x007fb67a84ab88>
你期望能在这个方法里面能够输出success!,然而却并不能,aa这个变量和MyClass这个class还有my_method这个方法身处三个作用域,他们之间无法互相取变量,那怎么样才能让他们共享一个作用域呢。
aa = 'success!'
MyClass = Class.new do
define_method :my_method do
puts aa
end
end
MyClass.new.my_method
=> 'success!'
用Class.new代替class,用define_method代替def,此时他们便处于一个作用域中了!
为什么会想到写这个,主要是在写招采外网动态标题方法的时候碰到的一个问题。
网友评论