在单行代码中枚举ruby变量

时间:2011-12-06 17:33:28

标签: ruby

这或许有点奇怪,但想知道是否有可能在 的Ruby代码行中实现以下功能。

bar = 15
foo = 5
10.times { foo = foo + 1 }
puts foo == bar

即。我想多次对预定义变量执行一个操作,然后将它与另一个变量进行比较,根据它们是否相等而返回一个布尔值,但是在一行代码中?

2 个答案:

答案 0 :(得分:3)

也许Enumerable#reduce会有所帮助。

puts (0..9).reduce(5) { |acc, _| acc + 1 } == 15

迭代次数作为正在调用reduce的对象传递。初始值作为reduce的参数传递。该操作在块中执行,每次执行的结果通过迭代作为块的第一个参数进行。

唯一缺少的是对变量的赋值。我们来做吧。

puts (foo = (0..9).reduce(5) { |acc, _| acc + 1 }) == bar = 15

是的, 是可能的,但是我建议使用详细,多行和可读解决方案。

答案 1 :(得分:1)

 puts((foo, bar = 5, 15; 10.times { foo += 1 }; foo) == bar)