ruby - 有没有办法通过散列来初始化对象?

标签 ruby hash constructor initialization

如果我有这个类:

class A
  attr_accessor :b,:c,:d
end

和这段代码:

a = A.new
h = {"b"=>10,"c"=>20,"d"=>30}

是否可以直接从散列初始化对象,而不需要遍历每一对并调用 instance_variable_set?像这样的东西:

a = A.new(h)

这应该会导致每个实例变量被初始化为在散列中具有相同名称的变量。

最佳答案

你可以在你的类上定义一个初始化函数:

class A
  attr_accessor :b,:c,:d
  def initialize(h)
    h.each {|k,v| public_send("#{k}=",v)}
  end
end

或者您可以创建一个模块,然后“混合”

module HashConstructed
 def initialize(h)
  h.each {|k,v| public_send("#{k}=",v)}
 end
end

class Foo
 include HashConstructed
 attr_accessor :foo, :bar
end

或者你可以尝试像constructor这样的东西

关于ruby - 有没有办法通过散列来初始化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1572660/

相关文章:

ruby-on-rails - carrierwave gem 上的捆绑安装错误

java - 无法获取构造函数方法以在 Java 中打印到控制台

ruby - 如何在循环中获取字符串对象名称?

ruby - RVM 安装错误(没有校验和..无法验证它)

c# - 从 MD5 散列而不是字符串创建 Guid 是否有效?

c - 使用链接 C 代码进行哈希处理

c++ - 在构造函数中初始化指针的正确方法

c++ - 在构造函数 C++ 中创建指向对象的指针

ruby-on-rails - 如何设置多层 Rails ActiveRecord 多对多关系?

php - 散列密码加密?