【问题标题】:Setting Attributes using Hash in RUby在 RUby 中使用哈希设置属性
【发布时间】:2017-05-19 19:07:49
【问题描述】:

我目前完全被学校问题所困扰,并想寻求一些指导。

定义一个名为 User 的类。它的初始化方法应该以一个 Hash 作为参数。我们将参数命名为 config 并将参数的默认值设置为空哈希:

class User
  def initialize(config = {})
  end
end

这个config = {} 语法为初始化提供了一个“默认参数”。如果有人在没有 config 参数的情况下初始化 User 实例,方法中的 config 变量将自动设置为我们给它的默认值——一个空的 Hash。

config 参数应用于设置用户的以下任何属性:nameemailbioagesex。如果 Hash 参数中未提供属性,则初始化方法应将其默认为“n/a”值。例如:

class User
  def initialize(config = {})
    @name = config[:name] || "n/a"
    @email = config[:email] || "n/a"
    ...
  end
end

设置默认值是 Ruby 中非常常见的任务。一个基本的方法是使用|| 赋值运算符,意思是“或”。考虑以下示例:

a = 3
a = a || 6
a #=> 3
b = b || 9
b #=> 9

解码上述条件赋值中的逻辑。

我们还需要访问在我们的初始化方法中设置的实例变量。为此,我们可以使用attr_accessor 方法声明。 attr_accessor 方法还允许我们在一行上声明多个属性。例如:

class User
  attr_accessor :name, :email

  def initialize(config = {})
    @name = config[:name] || "n/a"
    @email = config[:email] || "n/a"
    # ...
  end
end

完成编写User 类和initialize 方法以处理所有必需的属性。

此时我完全迷失了。提前致谢。

【问题讨论】:

  • 只需将所有必需的属性添加到attr_accessor 的参数列表中,并按照现有模式为每个必需的属性添加一行到initialize。还是我错过了什么?
  • 您到底对什么感到困惑?如何为类添加属性?你对 attr_accessor 感到困惑吗?作业的其他要求是什么?因为看起来它已经完成了,您只需将其余属性添加到 users 类。

标签: ruby hash


【解决方案1】:

看起来你直接复制了你的作业。我不会为你做这项工作,但我会在几行代码上给你一些提示:

def initialize(config = {})

这是在定义方法时使用默认参数值。如果用户没有提供config 哈希,该方法将默认使用空哈希。

@name = config[:name] || "n/a"

此语句使用|| 进行流量控制。如果设置了config[:name],则将值分配给@name。否则,默认为“n/a”。

attr_accessor :name, :email

这是为:name:email 创建getter 和setter 的快捷方式。看起来您的任务是添加 bioagesex 作为实例变量,并使用适当的默认值设置它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    相关资源
    最近更新 更多