Techioz Blog

Go defer に相当する Ruby は何ですか?

概要

私は Ruby の初心者で、これを使用するプロジェクトに取り組んでいます。 Go は defer ステートメントを提供します。私はその関数を Ruby で複製する方法を知りたかったのです。

例:

dst, err := os.Create(dstName)
if err != nil {
    return
}
defer dst.Close()

解決策

Ruby には defer ステートメントに相当する適切なステートメントはありませんが、特定のコード ブロックが確実に実行されるようにしたい場合は、ensure ステートメントを使用できます。違いは、defer のようにコード ブロックをスタックできないことですが、結果は同じです。

ブロック内

begin
  # ...
ensure
  # This code will be executed even if an exception is thrown
end

メソッド内で

def foo
  # ...
ensure
  # ...
end