Ruby 初心者スレッド Part 67 (724レス)
前次1-
抽出解除 レス栞

210
(3): (ワッチョイ 3bbb-565v) 2021/06/24(木)07:56 ID:R0/fGgxp0(2/2) AAS
すみません、もう一つ教えて下さい。
rubyというかプログラムを書くとき全般の注意として、
ファイルopenとcloseはなるべく近くに書くようにと
ありました。
恐らくclose漏れを警戒しているのだと思います。

yieldを使えば、以下コードでそれを実現できます。

def fileInterface
f= open()
begin
yield f
省17
211: (ワッチョイ db33-l/cN) 2021/06/24(木)09:32 ID:+4IsK47J0(1/2) AAS
>>210
大量の処理を関数にして分離。
あるいは、しょせん理想でしかないので、離れていても気にしない。
212: (ワッチョイ a75f-5d62) 2021/06/24(木)10:36 ID:5MDZvZ/d0(1) AAS
>>210
close漏れを警戒するのであれば、openにそのままブロックを渡した方がいい
openはブロックの実行結果を返し、ブロック脱出時に勝手にcloseします

まぁ、どうせclose漏れしてもそのうちGCに回収されるかプロセス終了時にcloseされる
213: (ワッチョイ 5a01-QZnr) 2021/06/24(木)11:01 ID:PG/lAwcj0(2/2) AAS
>>210
yield使った実装とやることは同じ

f= open file
begin
大量の処理を含むメソッド f # <― yieldがメソッドに変わるだけ
ensure
f.close
end

同じだからこそ毎回同じことを書かなくてもいいようblock付きで呼び出す
open(file){|f| 大量の処理を含むメソッド f}
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.225s*