私はEloquent Rubyの本(これまでの素晴らしい本)を読んでいて、blocs、params、scopeについて話している1つのセクションを理解していません。ここでパラメータ付きRubyブロック
class SomeApplication
# Rest of the class omitted...
def do_something
with_logging('load', nil) { @doc = Document.load('book') }
# Do something with the document...
with_logging('save', @doc) { |the_object| the_object.save }
end
def with_logging(description, the_object)
begin
@logger.debug("Starting #{description}")
yield(the_object)
@logger.debug("Completed #{description}")
rescue
@logger.error("#{description} failed!!")
raise
end
end
end
本は、コードはそれが@docは、コードブロック内に自動的に表示されているためであることが必要以上に複雑であると言う...コードです。だから引数として渡す必要はありません。
彼が話しているparam @docまたは|the_object|
はわかりません。不必要な複雑さを取り除くためにこのコードを変更した後、このコードはどのように見えるでしょうか?
with_logging('load', nil)
で作成された@docがまだ表示されていることを意味しますか?その場合でも、下部のwith_logging
メソッドがどのようにそのメソッドにアクセスするのか分かりません。