我有以下程序。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