调用方法时.map和.times之间的区别

时间:2015-02-28 15:16:07

标签: ruby

我想多次调用一个方法。以下两种方式都有效,但我不明白其中的区别。有人可以澄清一下吗?

class Dog
    def bark
        puts 'Wow!'
    end
end

dog = Dog.new
3.times do dog.bark end
3.times.map { dog.bark }

1 个答案:

答案 0 :(得分:5)

map创建一个包含块返回值的新数组。

times迭代给定的块提供的次数并返回它所做的迭代次数。 (在你的情况下为3)

在以下情况中,返回值为3

val = 3.times do dog.bark end
Wow!
Wow!
Wow!
# => 3
val
# => 3

但是,当使用map时,您将获得一个nil数组。 (因为你没有在你的方法中返回任何东西)

val = 3.times.map { dog.bark }
Wow!
Wow!
Wow!
# => [nil, nil, nil] 
val
# => [nil, nil, nil]

由于您的方法仅用于打印输出,因此返回的内容并不重要,因此您无法区分这两者。

更好的理解方法是从方法中返回一些值。这里:

class Dog
    def bark
        1
    end
end

dog = Dog.new

现在您可以轻松地注意到上面讨论的差异:

3.times do dog.bark end
# => 3
3.times.map { dog.bark }
# => [1, 1, 1]