Ответ 1
Вы можете создать 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)
В рубине вы можете пойти
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
, хотя это только соглашение).