2015-06-09 26 views
2

有没有什么方法可以传递一段代码并破解封装以使代码以内联方式执行?这是我的例子:传递一个块并执行内联?

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但它没有一个方法来做到这一点;) –