gpt4 book ai didi

ruby - 将构造函数参数转换为实例变量

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

<分区>

Possible Duplicate:
Idiomatic object creation in ruby

很多时候我有一个 initialize 方法,看起来像这样:

class Foo  
def initialize bar, buz, ...
@bar, @buz, ... = bar, buz, ...
end
end

有没有办法用一个简单的命令来做到这一点,比如:

class Foo
attr_constructor :bar, :buz, ...
end

其中的符号代表实例变量的名称(具有 attr_accessorattr_readerattr_writer 的精神/风格)?


我想知道是否有内置的方式或更优雅的方式来做这样的事情:

class Class
def attr_constructor *vars
define_method("initialize") do |*vals|
vars.zip(vals){|var, val| instance_variable_set("@#{var}", val)}
end
end
end

这样我就可以像这样使用它了:

class Foo
attr_constructor :foo, :bar, :buz
end

p Foo.new('a', 'b', 'c') # => #<Foo:0x93f3e4c @foo="a", @bar="b", @buz="c">
p Foo.new('a', 'b', 'c', 'd') # => #<Foo:0x93f3e4d @foo="a", @bar="b", @buz="c">
p Foo.new('a', 'b') # => #<Foo:0x93f3e4e @foo="a", @bar="b", @buz=nil>

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