这或许有点奇怪,但想知道是否有可能在 单 的Ruby代码行中实现以下功能。
bar = 15
foo = 5
10.times { foo = foo + 1 }
puts foo == bar
即。我想多次对预定义变量执行一个操作,然后将它与另一个变量进行比较,根据它们是否相等而返回一个布尔值,但是在一行代码中?
答案 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)