Настройка вывода IRB

Я создал класс под названием SpecialArray и хотел бы настроить тип вывода, который показывает irb. В настоящее время, когда я создаю новый экземпляр класса, irb возвращает весь объект. Это то, что я вижу в настоящее время:

1.9.3p194 :022 > SpecialArray.new([1,2,0,6,2,11]) 
=> #<UniqueArray:0x007ff05b026ec8 @input=[1, 2, 0, 6, 2, 11], @output=[1, 2, 0, 6, 11]>

Но я хотел бы показать только то, что я определил как вывод. Другими словами, я хотел бы увидеть это.

1.9.3p194 :022 > SpecialArray.new([1,2,0,6,2,11]) 
=> [1, 2, 0, 6, 11]

Что мне нужно сделать, чтобы указать, что irb должен отображать только вывод?

РЕШЕНИЕ:

Это метод, который я в итоге создал.

def inspect
  output.inspect
end

person Ben Downey    schedule 27.06.2012    source источник


Ответы (1)


IRB вызывает метод Object#inspect для получения строкового представления ваш объект. Все, что вам нужно, это переопределить этот метод следующим образом:

class Foo
  def inspect
    "foo:#{object_id}"
  end
end

Тогда в IRB вы получите:

>> Foo.new
=> foo:70250368430260 

В вашем конкретном случае просто сделайте SpecialArray#inspect возвращаемое строковое представление базового массива, например:

SpecialArray
  def inspect
    @output.inspect
  end
end
person KL-7    schedule 27.06.2012