class Module
private
# Generate a string of code to define attr reader methods.
def readonly(*syms)
return if syms.size == 0
code = ""
syms.each do |s|
code << "def #{s}; @#{s}; end\n"
end
# Create instance methods.
class_eval code
end
这是《The Ruby Programming Language》上的 demo,我的问题是,class_eval 生成的方法如何调用,比如写了
readonly :x
应该是会生成一个
def x
@x
end
的方法
但是每次都报
undefined method ‘x' for #<Module:0x1fafd30> (NoMethodError)
错误
这段代码到底怎么用呢?