Я нашел вопрос: 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
), но я получаю ошибку (я просто изменил последние скобки):
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': no block given (LocalJumpError) from ../../bitflipping.rb:5:in 'inject' from ../../bitflipping.rb:5:in ''
Можно ли переписать с do-end
? Я думаю, что есть проблема с приоритетом, как я могу их перегруппировать, например, inject
в конце получает блок правильно?
'map {| x | x} 'не имеет смысла. – sawa
Правда, было какое-то преобразование «строка-в-ин», которое я только что удалил, и сингл «x» остался :-) Я редактировал вопрос. – karatedog
Обратите внимание, что ошибка говорит что-то о 'each', но' each' не появляется нигде в вашем фрагменте кода. Отправьте код, в котором вызывается 'each'. – Kelvin