【发布时间】:2013-12-06 13:11:50
【问题描述】:
我发现了一个问题:Nested Loops Ruby 并解决了它,但解决方案看起来很难看(虽然有效):
puts (1..10).map { |i| (i..10).step(i).inject(0) { |memo, obj| memo = memo | 2**(obj-1) } }.inject(0) { |memo, obj| memo = memo ^ obj}
重写为多行,但保留花括号:
puts (1..10).map { |i|
(i..10).step(i).inject(0) { |memo, obj|
memo = memo | 2**(obj-1)
}
}.inject { |memo, obj|
memo = memo ^ obj
}
我尝试将其重写为多行 do-end 块以使其更具可读性(了解 {} 和 do-end 之间的优先级差异),但出现错误(我只是更改了最后一个大括号):
puts (1..10).map { |i|
(i..10).step(i).inject(0) { |memo, obj|
memo = memo | 2**(obj-1)
}
}.inject do |memo, obj|
memo = memo ^ obj
end.to_s(2)
../../bitflipping.rb:5:in 'each': 没有给出块 (LocalJumpError)
来自 ../../bitflipping.rb:5:in 'inject'
来自 ../../bitflipping.rb:5:in ''
可以用do-end 重写吗?我认为存在优先级问题,我该如何重新组合它们,例如最后的inject 可以正确获取块?
【问题讨论】:
-
map{|x| x}毫无意义。 -
没错,我刚刚删除了一些字符串到整数的转换,并且单个“x”保留了:-) 我编辑了这个问题。
-
请注意,该错误说明了有关
each的内容,但each不会出现在您的代码sn-p 中的任何位置。发布调用each的代码。 -
@Kelvin:迭代器在内部使用
each。
标签: ruby method-chaining