为什么ary.each会转储对象的所有内容?

时间:2011-05-24 18:24:52

标签: ruby-on-rails ruby

foo是一个对象数组,bar是该对象的一个​​属性。

(rdb:1) foo.bar.map{|v| bar.v }
["a", "b", "c", "d", "e", "f"]


(rdb:1) foo.bar.each{|v| p bar.v }
[massive outpouring of object attributes]

3 个答案:

答案 0 :(得分:6)

因为each的结果被定义为被迭代的Enumerable对象。

如果你想在irb中使用each而不是淹没输出,那么:

foo.bar.each{|v| p bar.v }; nil

答案 1 :(得分:1)

#each将返回其接收器,然后irb将决定帮助打印它,因为irb is a REPL.

您可以在表达式的末尾添加.any?

(rdb:1) foo.bar.each{|v| p bar.v }.any?
# output from only the #p call
=> true

答案 2 :(得分:0)

我认为可以告诉IRB不要显示返回值。这就解决了你的问题,而不必将; nil放在每一行的末尾。

或者,您可以修改inspect的{​​{1}}方法,使其更简洁。

bars