【发布时间】:2020-01-01 22:14:34
【问题描述】:
在遍历数组(或任何其他可枚举)时,是否有任何简洁明了的方法可以知道您是否处于最后一次迭代中?
例如,在 Rails 视图中,您可能需要显示一组内容,并且您可能希望在它们之间放置一条水平线,但不是在每个之前,也不是在每个之后。只是他们之间。我确信还有许多其他可能的用途,但这是我认为最常见的一种:在集合项目本身的数据之间显示一些东西。
我很确定除了将each 切换到each_with_index 或each.with_index 并在迭代之外添加一个变量以获取项目总数,然后在块的末尾检查之外别无他法。
由于似乎非常不太可能有内置方法使用each 执行此操作,是否可以创建一种方法来为您提供此功能而无需在迭代之外添加代码?最简单的形式(这不是我正在寻找的,但可能是朝着正确方向迈出的一步)可能类似于
people.each.with_count.with_index(1) do |person, count, index|
# ...
do_something_in_between if index < count
end
但实际上我更喜欢类似的东西
people.each do |person|
# ...
end.between do
do_something_in_between
end
有可能实现吗?
【问题讨论】:
-
当我遇到这种情况时,我
pop将最后一个元素放入一个临时数组或变量中,处理主数组然后处理剩余的元素。我们永远不应该真正关心我们是否在元素 n 上,我们分块处理并循环直到完成。 -
在集合的数据之间放置一些东西 - 这不是
join所做的吗?
标签: ruby-on-rails ruby metaprogramming