Рубиновый объект to_s дает неожиданный результат

Как правильно просмотреть вывод операторов puts ниже? Мои извинения за такой простой вопрос... Я немного заржавел в рубине. репозиторий github

require 'active_support'
require 'active_support/core_ext'
require 'indicators'

my_data = Indicators::Data.new(Securities::Stock.new(:symbol => 'AAPL', :start_date => '2012-08-25', :end_date => '2012-08-30').output)

puts my_data.to_s #expected to see Open,High,Low,Close for AAPL
temp=my_data.calc(:type => :sma, :params => 3)

puts temp.to_s #expected to see an RSI value for each data point from the data above

person Rilcon42    schedule 03.06.2016    source источник


Ответы (2)


Просто используйте метод .inspect вместо .to_s, если вы хотите увидеть внутренние свойства объектов.

person rootatdarkstar    schedule 04.06.2016
comment
Как мне получить доступ к атрибутам? например, если temp.inspect возвращает #<Indicators::Main:0x00000002c76d50 @abbr="SMA", @params=3, @output=[nil, nil, 89.09592100000002, 88.57603566666667]> - person Rilcon42; 04.06.2016
comment
puts temp@output не является допустимым синтаксисом Ruby. Если output является методом для temp, используйте temp.output. Если output является переменной экземпляра, попробуйте temp.instance_variable_get("@output") - person max pleaner; 04.06.2016
comment
@maxpleaner спасибо за отличный ответ и комментарий. Я также нашел полезным использовать temp.instance_variable_set(:@other, 'variable') для добавления дополнительных свойств, чтобы упорядочить массив с этими объектами (arr.sort_by { |ob| ob.instance_variable_get("@other") }. - person CPHPython; 20.06.2018
comment
@CPHPython Я не был тем, кто опубликовал этот ответ, все равно спасибо - person max pleaner; 20.06.2018

Может быть, проверить драгоценный камень awesome_print.

Он предоставляет метод .ai, который можно вызывать для чего угодно.

Пример:

my_obj = { a: "b" }
my_obj_as_string = my_obj.ai
puts my_obj_as_string
# ... this will print
# {
#     :a => "b"
# }
# except the result is colored. 

Вы можете сократить все это до одного шага с помощью ap(my_obj).

Также есть способ возвращать объекты в виде HTML. Это вариант my_obj.ai(html: true).

person max pleaner    schedule 04.06.2016