我有以下程序。ruby混淆 - 局部变量或instance_method?
module C
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def test_for
class_eval <<-DEFINECLASSMETHODS
def self.my_method(param_a)
puts "SELF is: #{self.inspect}"
puts param_a
puts "#{param_a}"
end
DEFINECLASSMETHODS
end
end
end
class A
include C
end
class B < A
test_for
end
当我运行
B.new.my_method("aaa")
,我得到这个错误
NameError: undefined local variable or method `param_a' for B:Class
我感到很困惑。
我定义param_a如在类方法my_method一个局部变量,
puts param_a
运行良好,并且将输出 “AAA”。
然而,
puts "#{param_a}"
输出该错误。
为什么?
任何人都可以解释这一点吗?
该死!我完全错过了!鹰眼+1!就我个人而言,我规定我总是使用单引号字符串,除非我100%肯定我绝对肯定*想要*字符串插值发生。这只是一个例子,为什么这是一个好主意。 – 2010-05-14 11:42:24
这是我总是推荐使用'class_eval'的块形式的众多原因之一。 – Chuck 2010-05-14 16:40:28