gpt4 book ai didi

ruby - 在 Ruby 中初始化对象时如何设置属性值?

转载 作者:数据小太阳 更新时间:2023-10-29 06:34:09 26 4
gpt4 key购买 nike

给定以下类:

class Test
attr_accessor :name
end

当我创建对象时,我想执行以下操作:

t = Test.new {name = 'Some Test Object'}

目前,它导致 name 属性仍然是 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_accessor!

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com