У меня есть простой класс, который переопределяет to_json для вывода списка атрибутов в массиве -
class MyClass
def initialize(a, b)
@a = a
@b = b
end
def to_json(*opt)
[@a, @b].to_json(*opt)
end
end
to_json отлично работает для экземпляра класса -
irb> m = MyClass.new(10, "abc")
irb> m.to_json
=> "[10,\"abc\"]"
Но если я помещаю объект в массив, мой пользовательский to_json НЕ вызывается -
irb> [m].to_json
=> "[{\"a\":10,\"b\":\"abc\"}]"
Я ожидал бы получить следующий вывод -
=> "[[10,\"abc\"]]"
Другой пример - если я создам другой экземпляр, который содержит первый экземпляр
irb> m2 = MyClass.new(20, m)
irb> m2.to_json
=> "[20,{\"a\":10,\"b\":\"abc\"}]"
То, что я ожидаю, это
=> "[20,[10,\"abc\"]]"
Похоже, to_json не вызывается рекурсивно. Как это решить?
Спасибо как всегда !!
Обновление
Это похоже на работу Ruby 1.9.1. Спасибо, Младен!
Мне нужно использовать 1.8.7.