2013-12-06 2 views
0

Я нашел вопрос: 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 в конце получает блок правильно?

+0

'map {| x | x} 'не имеет смысла. – sawa

+0

Правда, было какое-то преобразование «строка-в-ин», которое я только что удалил, и сингл «x» остался :-) Я редактировал вопрос. – karatedog

+0

Обратите внимание, что ошибка говорит что-то о 'each', но' each' не появляется нигде в вашем фрагменте кода. Отправьте код, в котором вызывается 'each'. – Kelvin

ответ

0

попробуйте сделать его способом, может быть? хотя, по словам пиши, map{|x| x} ничего не делает

def my_method 
    first_step = (1..10).map do |i| 
    (i..10).step(i).map { |x| x}.inject(0) { |memo, obj| memo = memo | 2**(obj-1) } 
    end 
    second_step = first_step.inject { |memo, obj| memo = memo^obj}.to_s(2) 
    return second_step 
end 

puts my_method 
+0

Выполнение этого метода просто скрывает проблему :-) (также разбивая его на более мелкие кусочки), но я просто хочу знать, можно ли переписать фигурные скобки для завершения и, если возможно, то как (в этом случае) , – karatedog

Смежные вопросы