繁体   English   中英

使用红宝石无需救援就可以达到什么目的?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM