Ruby对象文字(ala javascript)

tes*_*ter 10 ruby

在红宝石你可以去

a = { }
a['a'] = 82
a['b'] = 'foo'
puts a['a'] # 82
Run Code Online (Sandbox Code Playgroud)

我希望我可以使用点符号,如javascript.

puts a.a # 82

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

old*_*god 14

你可以创建一个Struct.

A = Struct.new(:a, :b)
a = A.new(82, 'foo')
puts a.a
#=> 82
Run Code Online (Sandbox Code Playgroud)

编辑:

你甚至可以做

a = { }
a['a'] = 82
a['b'] = 'foo'
Struct.new(*a.keys).new(*a.values)
Run Code Online (Sandbox Code Playgroud)


Hau*_*eth 5

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