[英]What is the purpose of using ruby begin without rescue?
在查看http://vaidehijoshi.github.io/blog/2015/08/25/unlocking-ruby-keywords-begin-end-ensure-rescue/时,我不理解该示例
def create_or_update_batch
@batch ||= begin
BookBatch.create(book_batch.batch_attrs)
end
@batch.update
end
如果我有
def create_or_update_batch
@batch ||= BookBatch.create(book_batch.batch_attrs)
@batch.update
end
这有什么不同?
这个例子很糟糕-对于所描述的情况,在行为上没有区别(如果不相同,字节码将看起来非常相似)。
begin ... end
块可用于对多个表达式进行分组-例如,用于记忆一些繁重计算的中间结果,而无需其他中间分配,例如
some_var = begin
# a bunch of expressions goes there
end
# continue calculations using some_var
实际上, begin ... end
块的行为与def ... end
定义方法的行为几乎相同。 并且由于这种相似性, begin .... end
在生产代码中很少使用-在大多数实际情况下,最好将一组密切相关的表达式移到单独的方法中。
在这种情况下,有一种情况会有所作为-考虑
some_method while false
VS
begin
some_method
end while false
在前一个代码段中,根本不会调用some_method
,而在后一个代码段中,将只调用一次。 但是这种用法是不鼓励的-它使代码更加棘手(通过loop
和显式break
可以以更易读的方式进行操作)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.