给定以下类:
class Test
attr_accessor :name
end
创建对象时,我要执行以下操作:
t = Test.new {Name = 'Some Test Object'}
目前,它的结果是名称仍然是
nil
。这可能吗?注意:我不想添加初始值设定项。
最佳答案
好啊,
我想出了一个解决办法。它使用initialize方法,但在另一方面却做了您想要的事情。
class Test
attr_accessor :name
def initialize(init)
init.each_pair do |key, val|
instance_variable_set('@' + key.to_s, val)
end
end
def display
puts @name
end
end
t = Test.new :name => 'hello'
t.display
高兴吗?:)
使用继承的替代解决方案。注意,使用这个解决方案,您不需要显式声明attr_访问器!
class CSharpStyle
def initialize(init)
init.each_pair do |key, val|
instance_variable_set('@' + key.to_s, val)
instance_eval "class << self; attr_accessor :#{key.to_s}; end"
end
end
end
class Test < CSharpStyle
def initialize(arg1, arg2, *init)
super(init.last)
end
end
t = Test.new 'a val 1', 'a val 2', {:left => 'gauche', :right => 'droite'}
puts "#{t.left} <=> #{t.right}"
关于ruby - Ruby-初始化对象时设置属性值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2348621/