在红宝石中你可以去
a = { }
a['a'] = 82
a['b'] = 'foo'
puts a['a'] # 82
我希望我可以使用点表示法,比如 javascript。
puts a.a # 82
有没有办法在 ruby 中构建对象文字并使用点符号访问它们?
在红宝石中你可以去
a = { }
a['a'] = 82
a['b'] = 'foo'
puts a['a'] # 82
我希望我可以使用点表示法,比如 javascript。
puts a.a # 82
有没有办法在 ruby 中构建对象文字并使用点符号访问它们?
您可以创建一个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)
您需要的结构OpenStruct
与 JS 对象文字的工作方式相同。它具有覆盖method_missing
方法,允许使用 setter 方法添加新变量。
Ruby 没有对象字面量。
Ruby 是一种基于类的面向对象语言。每个对象都是类的一个实例,类负责创建自己的实例。您不只是通过写下来创建对象,您必须通过向类发送消息(通常称为new
,尽管这只是一种约定)来要求类创建其自身的实例。