2016-03-08 2 views
0

Я работаю над инструментом рефакторинга. Было бы здорово, если бы я смог заменить какой-либо метод вызова на место его определением, которое обычно было бы блоком высказываний. Например, исходный код может быть:Есть ли способ группировать блок операторов?

some_condition ? a : b 
def a 
    ... 
    # statements1 
    ... 
end 
def d 
    ... 
    # statements2 
    ... 
end 

, и я хочу, чтобы мой встраивание инструмент для замены вызова метода с помощью блоков кода непосредственно.

Для этого я хочу сгруппировать список утверждений вместе. Как мы обычно это делаем? Есть ли способ написать такой код?

some_condition ? { 
    ... 
    # statements1 
    ... 
} : { 
    ... 
    # statements2 
    ... 
} 
+0

Вы можете использовать оператор if/else или извлечь инструкции в метод. Иногда также имеет смысл помещать утверждения внутри блока или Proc. –

+0

@DavidGrayson Спасибо за совет, но я работаю над некоторой работой по замене кода, что было бы здорово, если бы я мог встроить вызов метода блоком операторов. –

+0

Это не тот код, который вы хотите встроить. Это не выглядело бы так хорошо, и это привело бы к синтаксической ошибке. Лучше использовать if-else здесь –

ответ

0

Ваш код может быть сокращен до одной строки.

%w(a b c).each { |char| puts char } 

else утверждение здесь неуместна, потому что true всегда возвращает истину.

+1

Привет, я обновил свое описание вопроса. Вы знаете, как я могу решить такой вопрос? –

+0

Взгляните на мой ответ –

1

Да. Вы можете использовать круглые скобки или begin ... end.

true ? (
    puts "a" 
    puts "b" 
    puts "c" 
) : (
    puts "d" 
) 


true ? begin 
    puts "a" 
    puts "b" 
    puts "c" 
end : begin 
    puts "d" 
end 
+0

Отлично! Большое спасибо. –

+1

Вы до сих пор не голосовали и не принимали ни одного ответа на свои вопросы. – sawa

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