我想多次调用一个方法.以下两种方式都有效,但我不明白其中的区别.有人可以澄清一下吗?
class Dog
def bark
puts 'Wow!'
end
end
dog = Dog.new
3.times do dog.bark end
3.times.map { dog.bark }
Run Code Online (Sandbox Code Playgroud)
map创建一个包含块返回的值的新数组.
times迭代给定块提供的次数并返回它所做的迭代次数.(在你的情况下为3)
在以下情况中,返回值为3:
val = 3.times do dog.bark end
Wow!
Wow!
Wow!
# => 3
val
# => 3
Run Code Online (Sandbox Code Playgroud)
但是当map使用时,你会得到一个数组nil.(因为你没有在你的方法中返回任何东西)
val = 3.times.map { dog.bark }
Wow!
Wow!
Wow!
# => [nil, nil, nil]
val
# => [nil, nil, nil]
Run Code Online (Sandbox Code Playgroud)
由于您的方法仅用于打印输出,因此返回的内容无关紧要,因此您无法区分这两者.
理解这一点的更好方法是从方法中返回一些值.这里:
class Dog
def bark
1
end
end
dog = Dog.new
Run Code Online (Sandbox Code Playgroud)
现在您可以轻松地注意到上面讨论的差异:
3.times do dog.bark end
# => 3
3.times.map { dog.bark }
# => [1, 1, 1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |