我想多次调用一个方法。以下两种方式都有效,但我不明白其中的区别。有人可以澄清一下吗?
class Dog
def bark
puts 'Wow!'
end
end
dog = Dog.new
3.times do dog.bark end
3.times.map { dog.bark }
答案 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]