2015-06-09 3 views
2

Есть ли способ передать блок кода и разбить инкапсуляцию, чтобы код выполнялся inline? Вот мой пример:Пропустить блок и выполнить inline?

def return_errors(&block) 
    errors = [] 
    block.call if block_given? 
    errors 
    end 

Есть ли способ я могу получить код внутри блока, чтобы поднять объем локальной переменной «ошибки» (без передачи его в качестве переменной)? Я хочу избежать использования переменной экземпляра, поскольку я не хочу, чтобы значение сохранялось.

ответ

2

отправить его в качестве блока аргумента:

def return_errors(&block) 
    errors = [] 
    block.call(errors) if block_given? 
    errors 
end 
+0

Я знал, что, но в том, что единственный способ? –

+0

@wise_gremlin Нет ... Другого пути нет. –

+0

Вы можете попробовать назначить 'errors = block.call if block_given?'. Это не совсем ответ на ваш вопрос, но может помочь в любом случае –

0

Вы можете «вернуться» это как «выход»

def foo(&block) 
    result = block.call if block_given? 
    p "result = #{result}" 
end 

foo{ 
    [1,2,3] 
} 
+1

Я подумал об этом, но это похоже на метод, который возвращает то, что вы ему передали :) –

+0

@PiotrKruczek. Казалось, что D, но его единственный способ сделать это;) –

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