如何从Ruby中的打印对象中停止类初始化程序?

时间:2016-01-10 18:30:23

标签: ruby output irb

每当我从IRB实例化一个新方法时,它会打印出一堆我认为不必要的东西。这是预期的行为吗?我可以阻止它发生吗?

例如,以下代码

class Box
  def initialize(index)
    @index = index
  end
end

box = Box.new(5)

将打印

 #<Box:0x000000015836e8 @index=5>

随着更复杂的东西,我在终端中获得了更多。

2 个答案:

答案 0 :(得分:9)

这是预期的,因为默认情况下irb会打印出最新评估的结果。

您可以use noecho或追加;nil打印nil

box = Box.new(5); nil

答案 1 :(得分:6)

这是预期的行为。 irb是REPL(读取,评估,打印循环)。这意味着它将打印评估您输入的每个连续表达式的结果。调用类的构造函数的结果是新对象。分配结果是指定的任何内容。

您可以覆盖班级的Object#inspect方法来更改正在打印的内容:

class Box
  def initialize(index)
    @index = index
  end

  def inspect
    "A box with index #{@index}"
  end
end

box = Box.new(5)

# => >A box with index 5