gpt4 book ai didi

ruby - 分配实例变量的快捷方式

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

我正在学习 Codecademy 的 Ruby 类(class),大约完成了 85%。

它一遍又一遍地要求你创建一个类并传入一些参数并使它们成为实例变量,例如:

class Computer
def initialize(username, password)
@username = username
@password = password
end
end

每次,它都会要求您制作与您传入的参数完全相同的实例变量。

这让我想知道是否有一种 Ruby 方法可以自动处理这个问题,无需每次都自己输入。

我知道你可以做到

class Computer
def initialize(username, password)
@username, @password = username, password
end
end

但这并没有减少打字。

我做了一些搜索,发现您可以使用 attr_reader 来创建一组“getter”

class Song
attr_reader :name, :artist, :duration
end

aSong = Song.new("Bicylops", "Fleck", 260)
aSong.artist # "Fleck"
aSong.name # "Bicylops"
aSong.duration # 260

但据我所知,这并不是我真正想要的。我不是在尝试自动创建 getter 和/或 setter。我正在寻找的是这样的

class Person
def initialize(name, age, address, dob) #etc
# assign all passed in parameters to equally named instance variables
# for example
assign_all_parameters_to_instance
# name, age, address and dob would now be accessible via
# @name, @age, @address and @dob, respectively
end
end

我搜索了 用于分配实例变量的 ruby​​ 快捷方式 等,但找不到答案。

这可能吗?如果是,怎么办?

最佳答案

Person = Struct.new(:name, :artist, :duration) do
# more code to the Person class
end

你的另一个选择是传递变量的哈希/关键字,并使用类似 ActiveModel::Model 的东西 https://github.com/rails/rails/blob/master/activemodel/lib/active_model/model.rb#L78-L81

def initialize(params={})
params.each do |attr, value|
self.instance_variable_set("@#{attr}", value)
end if params
end

关于ruby - 分配实例变量的快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27215386/

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