ruby初心者日記
とうとう macbook 買ってしまいました。おどろいたのは、電気入れるとディスプレイ裏の林檎マークが光るんです。飾りかと思ってた。ちなみに関係ないですが、わたくしは椎名林檎好きなので、このマークはとても気に入りました。
さて、そんな感じでノートPCも新しくなったことだし、気分を変えてちょっと ruby でもやってみようと思ったところ、色々とはまったりしたのでメモっておきます。
ファイルクローズの不思議?
こんな↓関数を作って
def save(dat) open('hoge.txt','w').write(dat) end def load return open('hoge.txt').read() end
こんな↓感じで呼び出したところ
irb(main):002:0> save('hage') => 4 irb(main):003:0> p load "" => nil
どうもうまくファイルが読み込めない。どうやら、
def save(dat) f = open('hoge.txt','w') f.write(dat) f.close # or flush end
としなければいけないようだ。ruby ではブロックを抜けるとファイルハンドルが close される、と覚えていたのだけど、関数を抜けるときはcloseされないのだろうか??ちょっとぐぐったところ、
open('hoge.txt','w') {|f| f.write(dat)}
と書けば、close はいらないようだ。
stack level too deep
こんなコードを書いてたら、stack level too deep というエラーが出た。
class Hoge def warn(message) now = Time.now.strftime("%H:%M:%S") warn "[#{now}] #{message}" end ・・・
warn を $stderr.puts としたら出なくなった感じ?たぶんだけど。
end of file reached
ruby版Mechanize を使っていたら、end of file reached というエラーが出た。
ファイルクローズやら何やら色々とはまった後だったし、きっと自分の書き方が悪いんだろうと思って散々悩んで時間かけたあと、mechazine のバグらしいことが判明。。。やられた。mechanize-0.6.8を入れたけど、疲れたので検証は明日やることにする。