我是 Ruby 新手,对如何创建Class
类似于的方法感到困惑:attr_accessor
,因为它将方法添加到用户类,但是这些添加的方法可以访问预初始化的实例变量。我很难解释,所以这里是我努力的一个大大简化的示例:
class Class
def super_accessor_wow(attr_name)
attr_name = attr_name.to_s
new_var_name = "@crazy_var_name"
instance_variable_set(new_var_name, ["hi", "everyone"])
module_eval(%Q/
def super_#{attr_name}()
return @#{attr_name}
end
def super_#{attr_name}=(value)
@#{attr_name} = value
end
def greetings
return #{new_var_name}
end
/)
end
end
这就是我尝试使用新方法Class
修改我自己的类的方式:
class Foo
super_accessor_wow(:bar)
end
foo1 = Foo.new()
foo1.super_bar = 1000
puts foo1.super_bar
puts foo1.greetings.inspect
第一个放版画'1000'
第二个 puts prints 'nil'
,所以我的instance_variable_set
调用super_accessor_wow
似乎没有效果。
我预计第二个 puts 会'['hi', 'everyone']'
顺便打印出来。所有这些代码都包含在一个 Ruby 文件中。