12

在红宝石中你可以去

a = { }
a['a'] = 82
a['b'] = 'foo'
puts a['a'] # 82

我希望我可以使用点表示法,比如 javascript。

puts a.a # 82

有没有办法在 ruby​​ 中构建对象文字并使用点符号访问它们?

4

3 回答 3

17

您可以创建一个Struct.

A = Struct.new(:a, :b)
a = A.new(82, 'foo')
puts a.a
#=> 82

编辑:

你甚至可以做

a = { }
a['a'] = 82
a['b'] = 'foo'
Struct.new(*a.keys).new(*a.values)
于 2012-09-28T01:25:39.400 回答
5

您需要的结构OpenStruct与 JS 对象文字的工作方式相同。它具有覆盖method_missing方法,允许使用 setter 方法添加新变量。

于 2012-09-28T05:10:51.597 回答
2

Ruby 没有对象字面量。

Ruby 是一种基于类的面向对象语言。每个对象都是类的一个实例,类负责创建自己的实例。您不只是通过写下来创建对象,您必须通过向类发送消息(通常称为new,尽管这只是一种约定)来要求类创建其自身的实例。

于 2012-09-28T01:16:24.827 回答