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

Die*_*ego 2 ruby irb output

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

例如,以下代码

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

box = Box.new(5)
Run Code Online (Sandbox Code Playgroud)

将打印

 #<Box:0x000000015836e8 @index=5>
Run Code Online (Sandbox Code Playgroud)

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

Sim*_*tti 9

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

您可以使用noecho或附加;nil打印输出nil.

box = Box.new(5); nil
Run Code Online (Sandbox Code Playgroud)


ndn*_*kov 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
Run Code Online (Sandbox Code Playgroud)