ruby - 在 Ruby 中将对象转换为值的散列

标签 ruby hash object

我四处搜索,但找不到任何内置方法来将对象(我自己创建的)转换为值的散列,因此必须寻找其他地方。

我的想法是使用.instance_variables,去掉每个变量前面的@,然后为每个变量使用attr_accessor创建哈希。

大家怎么看?这是“Ruby 方式”,还是有更好的方式来做到这一点?

最佳答案

假设您希望包含在哈希中的所有数据都存储在实例变量中:

class Foo
  attr_writer :a, :b, :c

  def to_hash
    Hash[*instance_variables.map { |v|
      [v.to_sym, instance_variable_get(v)]
    }.flatten]
  end
end

foo = Foo.new
foo.a = 1
foo.b = "Test"
foo.c = Time.now
foo.to_hash
 => {:b=>"Test", :a=>1, :c=>Fri Jul 09 14:51:47 0200 2010} 

关于ruby - 在 Ruby 中将对象转换为值的散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3209525/

相关文章:

javascript - 在 Angular 应用程序中以树结构显示数据

ruby-on-rails - 如何获取 Rails 模板以在迁移列上添加其他属性?

ruby-on-rails - 在 Ruby 的构建器中自定义节点名称

ruby - rvm gemset list 和 rvm list gemsets 之间的区别

powershell - 比较 Powershell 中的 Filehash

javascript - 从数组中动态获取对象的值

ruby - pg_config、ruby pg、postgresql 9.0 升级后出现问题,centos 5

algorithm - 日志时间的 HRW 会合散列?

PHP & MySQL : using bcrypt hash and verifying password with database

Python如何检查目标对象是否不再是同一个实例或 "valid"