Ruby对象文字(ala javascript)

时间:2012-09-28 01:11:14

标签: ruby

在红宝石中你可以去

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

我希望我能使用点符号,比如javascript。

puts a.a # 82

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

3 个答案:

答案 0 :(得分:14)

您可以创建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)

答案 1 :(得分:5)

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

答案 2 :(得分:2)

Ruby没有对象文字。

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