Ruby 初心者スレッド Part 28
■ このスレッドは過去ログ倉庫に格納されています
0001one
2009/05/16(土) 10:06:50【Ruby1.9.1 は従来版とは異なる部分も多く、書籍や解説やライブラリのサポートがまだありません】
【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】
※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・モジュール名やエラーメッセージでググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0002one
2009/05/16(土) 10:08:33Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?
A:
プログラム作成自体の初心者なら
「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/dp/4797336617/
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
「初めてのRuby」
http://www.amazon.co.jp/dp/4873113679/
以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください
「Rubyレシピブック 第2版 268の技」(初心者向け)
http://www.amazon.co.jp/dp/4797340045/
「プログラミングRuby 第2版 言語編」(初心者向け)
http://www.amazon.co.jp/dp/4274066428/
「Ruby Way 第2版」(脱初心者向け)
http://www.amazon.co.jp/dp/4798115339/
「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
http://www.amazon.co.jp/dp/4873113245
以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません
「プログラミング言語 Ruby」(言語として深く知りたい人向け)
http://www.amazon.co.jp/dp/4873113946/
0003one
2009/05/16(土) 10:09:14Ruby Home Page 【公式、お役立ち度が微妙】
http://www.ruby-lang.org/ja/
Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ 【詳しい英語版】
HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
http://www.ruby-doc.org/docs/ProgrammingRuby/
Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
http://jp.rubyist.net/magazine/
逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
http://www.namaraii.com/rubytips/
はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
http://d.hatena.ne.jp/keyword/Ruby
RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
http://www.rubyforge.org/
GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
http://github.com/
日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
http://jp.rubyist.net/
0004one
2009/05/16(土) 10:09:55本スレ
Rubyについて Part 35
http://pc12.2ch.net/test/read.cgi/tech/1238194350/
アンチスレ
Rubyについて(アンチ専用) Part003
http://pc11.2ch.net/test/read.cgi/tech/1207233348/
Railsスレ
【Ruby】Ruby on Rails Part7
http://pc11.2ch.net/test/read.cgi/php/1241100447/
Windows用スレ
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
Ruby 1.9 系列スレ
魁け! Ruby 1.9.X
http://pc11.2ch.net/test/read.cgi/tech/1201603546/
0005デフォルトの名無しさん
2009/05/16(土) 10:16:280006デフォルトの名無しさん
2009/05/16(土) 11:33:250007デフォルトの名無しさん
2009/05/16(土) 13:00:41>982 名前: デフォルトの名無しさん Mail: 投稿日: 2009/05/16(土) 04:43:41
>ruby1.8.6です。
>ファイルアクセスが他のソフトとぶつかる場合で質問です。
>
>Rubyで周期的にXMLファイルを上書きしていますが、この上書きのタイミングと
>他のソフトによるXML読み込みが衝突した場合(と思われる時)、
> in 'initialize': Permission denied - new XML.xml (Errno::EACCES)
>
>というエラーメッセージが出ます。
>そこでRubyの振る舞いとして、他のソフトがファイルアクセス中は上書きを延期するか、
>あるいは別の方法で衝突を回避したく思います。
>何か良い方法はありますでしょうか?
>
>なお別のソフト側で衝突回避を試みましたが、上手くいかないためRubyに望みを
>託すことにしました。
0008デフォルトの名無しさん
2009/05/16(土) 13:02:31File#flock を使ってロックすればいいんじゃないでしょうか。
File.open('file.xml', 'w') do |f|
f.flock(File::LOCK_EX)
f.write('<?xml version="1.0" ?>')
end
でどうよ?
0009デフォルトの名無しさん
2009/05/16(土) 13:07:35Perlなんかでやってたときは、そのロックだと
ファイルの書き込みオープンでファイル空っぽ
→(他のプロセスからの読み出しの可能性)
→ファイルロック
になるから駄目、だったような。
Rubyのブロックでその辺どうなるんだろ
0010デフォルトの名無しさん
2009/05/16(土) 13:25:42Ruby 初心者スレッド Part 27
http://pc12.2ch.net/test/read.cgi/tech/1238632943/
0011デフォルトの名無しさん
2009/05/16(土) 13:52:090012デフォルトの名無しさん
2009/05/16(土) 13:58:53マルチプロセスだからブロックだろうとなんだろうと関係ない。
・非破壊的にopen
・ロック
・上書き
とやらないとダメだろう
File.open('file.xml', 'r+') do |f|
f.flock(File::LOCK_EX)
f.truncate(0)
f.rewind
f.write('<?xml version="1.0" ?>')
end
0013デフォルトの名無しさん
2009/05/16(土) 14:01:32書き込み禁止にしてるような気がするんだが。
そうなるとロック以前にエラーになるわけで、ポーリングしかないんじゃないかな。
0014デフォルトの名無しさん
2009/05/16(土) 14:15:40使わない方がいいと思う
0015デフォルトの名無しさん
2009/05/16(土) 16:40:280016デフォルトの名無しさん
2009/05/16(土) 17:34:470017デフォルトの名無しさん
2009/05/16(土) 18:37:17前スレ>>983さん,本スレ>>7-9,>>12-14さん、有難うぎざいます。
細かい点ですが、
前スレ>>983
直接
File.open(path,'w'){|f| f.write(data)}
するのではなく
File.open(path_v,'w'){|f| f.write(data)}
File.rename(path_v, path)
ここで、path でなく path_v としているのは、
何か意味があるのでしょうか?
0018デフォルトの名無しさん
2009/05/16(土) 18:46:57というかその質問をするってことは動作の意図わかってないんか
0019デフォルトの名無しさん
2009/05/16(土) 19:23:07最近の Linux だと NFS でもちゃんと flock できたりするから驚きだ。
0020デフォルトの名無しさん
2009/05/16(土) 20:07:01詳しくないけど、
・排他ロックしてないけど、書き込み途中(=壊れた状態)のファイルを読まれる心配がない。
(そんなことできるのかどうか知らないけど。)
・万一書き込み中にこけてもデータが壊れない。
って感じではないかと。
002117
2009/05/16(土) 21:54:36色々有難うございます。
試しに例外処理を
begin
File.open('newXML.xml', 'w') {|f|
f.write new_xml
}
rescue
puts "XML, unable!"
end
の形で使ったところ、衝突中は上書きがスキップされますが
強制終了は無くなりました。
0022デフォルトの名無しさん
2009/05/17(日) 02:33:30現在、勉強用に買った書籍付録の実行環境+DOSプロンプトで例えばABC.rbを
C:\>ABC.rb
などどして実行していますが、アイコンクリックなどの方法で実行する
ことは出来ますか?
0023デフォルトの名無しさん
2009/05/17(日) 02:46:51ダブルクリックで実行したいのなら自前でウィンドウ作る言語やったほうがいいぞ
0024デフォルトの名無しさん
2009/05/17(日) 02:58:33Exerbを使えば実行ファイルにできる
ただ、普通の(標準入力や標準出力を使う)スクリプトだと
実行してすぐにウインドウが閉じるので、あまり意味をなさない
RubyでGUIアプリケーションを作るのなら役に立つ
0025デフォルトの名無しさん
2009/05/17(日) 03:26:55可能
ただし、設定方法はOSによって異なる
「拡張子 関連付け」で検索
0026デフォルトの名無しさん
2009/05/17(日) 03:46:18たぶん、CUIに慣れていないってことなんだろうか。
キーボード入力が不慣れってことならどうしようもないけど、それはプログラミングの
上では避けては通れないので、ないことにして。
勉強の為なら、>>23-24の言うとおり、とにかくまずは標準入出力での試行錯誤が
気楽で楽しいかも。そのためには・・・
まず、Windowsのコマンドプロンプトを、少しでも使いやすくすることを考えてはどうか。
Windous2000以上なら、DOS窓でも入力補完機能が付いている。
ショボいけど、ヒストリー(コマンド履歴)機能もある。
これらを知ってると知らないとでは、かなり違うはず。
ttp://journal.mycom.co.jp/special/2002/xpcommand/001.html
あとそれでも不満なら、補完ツールを入れるという手段もある。
たぶん、ckw + NYACUS(or PowerShell) って人もそれなりにいるかと思う。
ttp://d.hatena.ne.jp/hideden/20071115/1195229532
とりあえず参考になれば。
002726
2009/05/17(日) 03:48:15○Windows2000
これは恥ずかしい;;
見なかったことにして・・・。
0028デフォルトの名無しさん
2009/05/17(日) 03:52:42thx
Exerbは確かに直ぐに終了しますが、puts "Hello, World" も
puts "Hello, World"
sleep 2
と小細工すれば動作確認出来ました。
0029デフォルトの名無しさん
2009/05/17(日) 04:02:10pts "Hello, World"
sleep 2
って書いてみ
003022&28
2009/05/17(日) 04:03:04OS) WinXP-Pro(SP2)
Mem) 4GB(実質3.24GBですがw)
Ruby) 1.8.6
>>25-26
有難うございます。
0031デフォルトの名無しさん
2009/05/17(日) 04:55:44確か、こんな感じのdo_ruby.batファイルとか作って.rbに関連付けておけばよかった気がした。
失敗した時だけ待つ
常に待つなら、
ruby %*
pause
0032デフォルトの名無しさん
2009/05/17(日) 05:04:210033デフォルトの名無しさん
2009/05/17(日) 05:16:27いるわけで、定形の作業用スクリプトをたまに起動するだけなら
>>32なんて問題にならないし、
人に説明する場合でも、コマンドプロンプトを開いてコマンドを入力させるより
アイコンをダブルクリックの方が楽だったりする
場合もある
0034デフォルトの名無しさん
2009/05/17(日) 08:14:42それ知らなかったよ。サンクス
003534
2009/05/17(日) 09:04:590036デフォルトの名無しさん
2009/05/17(日) 14:26:56一見パイプの拡張かと思ったらexitコードの論理和かよ
cmdで使えたなんて知らなかった
0037デフォルトの名無しさん
2009/05/17(日) 14:47:10うる覚えだった。スマソw
0038デフォルトの名無しさん
2009/05/17(日) 14:52:47今覚えとこうな。
0039デフォルトの名無しさん
2009/05/17(日) 15:16:47少しは抱くべきではないだろうか
0040デフォルトの名無しさん
2009/05/17(日) 15:21:33ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E3%81%86%E3%82%8B%E8%A6%9A%E3%81%88&num=50
0041デフォルトの名無しさん
2009/05/17(日) 15:27:59「う・る・お・ぼ・え」と書くつもりで正しく書いてるだけだ
その人にとっては「うる覚え」が完全に正しい
もちろん「うろ覚え」が辞書上も多数派的にも"正しい"が、
だからといって今更「うる覚え」がなくなるわけでもなく
0042デフォルトの名無しさん
2009/05/17(日) 15:30:24///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
0043デフォルトの名無しさん
2009/05/17(日) 20:31:45見通しがちょっとよくなったような気がする
Rubyあんまり関係ないな
0044デフォルトの名無しさん
2009/05/17(日) 20:35:40h = Hash.new
…
return h
end
というメソッドを勢いで作ってしまうことはある
適切な名前を付けるべきだとは思うんだけどね
0045デフォルトの名無しさん
2009/05/17(日) 21:12:55で、とりあえずこのテストをJRubyで通るようにするのはあとまわしにすることに決定しました。
このとき、そのテストに『今はテストが失敗するけどあとまわしにするよ』というような目印をつける方法が
Test::UnitかRSpecにあったと思うんですけど、どなたかご存じないですか。
ぐぐろうにもキーワードが思いつきません。
0046デフォルトの名無しさん
2009/05/17(日) 21:16:01「スコープが広いものにほど明瞭な(長い)名前を付けよ」って一般原則からすれば
メソッドが十分短いならhは許されるだろう。hogeは不味いだろうけど
というか、極端に長すぎるのも考え物
記述密度が上がって逆に可読性を落としてしまう
Linusに言わせれば
>Modula-2 や Pascal のプログラマとは違って、C言語プログラマは 「こ
>の変数は一時的に使われるカウンターである(ThisVariableIsATemporaryCounter)」
>などというような気のきいた名前は使いません。C言語プログラマは、"tmp" な
>どの十分に書きやすく、それでいて少なくとも分かりにくくはならない変数名を
>選ぶものです。
Rubyも立場的には近いと思う
to_sとか、意味が通る限りにおいて短い名前を希求する
0047デフォルトの名無しさん
2009/05/17(日) 21:19:50RSpecのpendingのことかな
詳しくはるびまの連載記事に載ってる
0048デフォルトの名無しさん
2009/05/17(日) 21:39:47それです。さんきゅー。あいしてる。
0049デフォルトの名無しさん
2009/05/18(月) 11:07:46>File.open('file.xml', 'r+') do |f|
> f.flock(File::LOCK_EX)
> f.truncate(0)
> f.rewind
> f.write('<?xml version="1.0" ?>')
>end
'r+' だとファイルが存在しなかったときにエラーになるよね。
それがいやで、自分は 'r+' じゃなくて 'a' にしてるんだけど、なにか問題あるでしょうか。
詳しい人のコメント求む。
0050デフォルトの名無しさん
2009/05/18(月) 11:18:10'r+' はファイルの先頭から書き込む
対象のファイルが全くの空である場合は動作が「たまたま」同一
0051デフォルトの名無しさん
2009/05/18(月) 11:20:570052デフォルトの名無しさん
2009/05/18(月) 11:24:10「あるはずのファイルが無い」とか「書けるはずなのに(権限などで)書けない」なんてのは
似たようなもんで、どのみちきっちりやるならチェックなり例外処理なりしなきゃいけない。
つまり、こまけぇこた(ry
0053デフォルトの名無しさん
2009/05/18(月) 11:38:29def exclusive_write(path, content)
body = lambda{|f|
f.flock File::LOCK_EX
f.write content
f.truncate f.tell
}
File.open(path, 'r+', &body)
rescue Errno::ENOENT
File.open(path, 'w', &body)
end
自分の過去を掘り返してきたらこんなんが出てきた。
正しいかどうかは…。
0054デフォルトの名無しさん
2009/05/18(月) 11:48:30> あいしてる
これは、
あいしてる ( ^з^)-☆Chu!!
までやるべき
005517
2009/05/18(月) 17:02:45皆さんのレスを一通り見ましたが、File.openの箇所で工夫するというのが定石
なのでしょうか?
本を読んでいたら、 File.readable?(path) と File.writable?(path) なるものが
ありましたが、(これらが未だ登場しないといいうことは)使うと何か弊害が
生じるのでしょうか?
0056デフォルトの名無しさん
2009/05/18(月) 17:54:21>'a' はファイルの最後から書き込む
>'r+' はファイルの先頭から書き込む
そうなんだけど、今の場合は f.truncate(0) して f.rewind(0) してから書き込んでいるから、
最初のファイルポインタの位置は関係ないよね。
>>51
これって何?初めて見るんだけど。マニュアルに書いてある?
0057デフォルトの名無しさん
2009/05/18(月) 18:05:17ttp://www.ruby-lang.org/ja/man/html/File_Constants.html
0058デフォルトの名無しさん
2009/05/18(月) 18:07:42そういえば昔、CGIだけどレンサバの容量の制限(quota?)でファイルが書けず、
1日分のデータが無くなったってトラブルがあったな・・・(遠い目
0059デフォルトの名無しさん
2009/05/18(月) 18:11:38///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
0060デフォルトの名無しさん
2009/05/18(月) 18:46:21Emacsでいいんだけど
0061デフォルトの名無しさん
2009/05/18(月) 19:00:040062デフォルトの名無しさん
2009/05/18(月) 21:16:280063デフォルトの名無しさん
2009/05/19(火) 01:53:42こいつのソース見てくれ。殆どの処理が module として定義されて
普通に実行しただけでは何も起こらないよね?
これはどうなっているの?
よくわからないけど、rubygems がゴニョゴニョしていると考えていいのかい。
0064デフォルトの名無しさん
2009/05/19(火) 02:20:21lib/crackup.rb
288| at_exit do
まったく読み込んでないが、これじゃないか。
0065デフォルトの名無しさん
2009/05/19(火) 02:26:30006663
2009/05/19(火) 02:36:16すまん、勘違いしていた。さんくす。
0067デフォルトの名無しさん
2009/05/19(火) 08:09:15検索すると、マジックコメントが Ruby(と Ruby が参考にした Python)独自のものだと思ってる人がちょくちょくいる模様
これ Emacs 自身が解釈する文字列で、読み込むファイル全般で効くから
-*- coding: utf-8 -*-
の行があったら Emacs はその文字エンコーディングだとみなして読み込むから
嘘だと思ったら
-*- ruby -*-
とだけ書いた hoge ファイルを Emacs で読み込んでみるといい
いわゆる拡張子がなくて判断情報がないはずなのに ruby-mode になるからさ
-*- perl -*- と書いたら perl-mode に、 -*- html -*- と書いたら html-mode になる
0068デフォルトの名無しさん
2009/05/19(火) 09:50:33ほー知らなかった。emacsはそういう機能があるんだな。vimも似たようなのなのなかったっけ?
0069デフォルトの名無しさん
2009/05/19(火) 11:28:5667 じゃないけど
http://jp.rubyist.net/magazine/?0025-Ruby19_m17n#l18
0070デフォルトの名無しさん
2009/05/19(火) 16:27:04これを英語でいうと何といいますか。
0071デフォルトの名無しさん
2009/05/19(火) 16:58:190072デフォルトの名無しさん
2009/05/19(火) 17:20:32substitution となってるな。
0073デフォルトの名無しさん
2009/05/19(火) 20:31:20メソッドチェーンの途中で nil があってもそれ以後予期に計らってくれる便利なハックや方法はありませんでしょうか?
Delphi Prismのコロン演算子みたいなのです(例がマイナーすぎてスマソ・・)
Colon Operator - Delphi Prism
http://prismwiki.codegear.com/en/Colon_Operator
007473
2009/05/19(火) 20:36:41>>73 ですが、既存のgemsとかのユーティリティ的なものがあればそれキボンという感じです。
わがままですいません…。
Activeなんたらとかにないのかなーと探しているのですが、見つからず
0075デフォルトの名無しさん
2009/05/19(火) 20:40:43・・・ごめん、忘れてw
0076デフォルトの名無しさん
2009/05/19(火) 20:59:01あえて小手先の拡張でなんとかするなら・・・こんな感じか?
obj.send_if_defined(:method1).send_if_defined(:method2)
0077デフォルトの名無しさん
2009/05/19(火) 21:08:54眺めた程度ではリンク先の意味を理解できず申し訳ないのだけど
良きに計らうっていうのは具体的にどういう挙動を期待してる?
ふとこんなのを思いついた
class Nil; def method_missing; return nil; end
0078デフォルトの名無しさん
2009/05/19(火) 21:22:12メソッドチェーンを使わないか、
期待した返り値にならない場合は例外出して抜けるメソッドだけをチェーンに使うか、
NoMethodError を rescue する
0079デフォルトの名無しさん
2009/05/19(火) 21:59:40variable interpolation
いや、
expression interpolationだな。
0080デフォルトの名無しさん
2009/05/19(火) 22:00:42ActiveSupportのObject#tryおよびそれの同等品でどうか。
実態はsendだが、nilにだけはnilを返すように定義されている。
0081デフォルトの名無しさん
2009/05/19(火) 22:17:57でもこれ確かに便利だな
ttp://d.hatena.ne.jp/takihiro/20090204/1233745492
0082デフォルトの名無しさん
2009/05/20(水) 01:11:270083デフォルトの名無しさん
2009/05/20(水) 01:18:26catch〜tryのtry?
それとも
0084デフォルトの名無しさん
2009/05/20(水) 01:39:500085デフォルトの名無しさん
2009/05/20(水) 02:18:00名前がよければ採用してもいいという話になっていたと思うが、
誰かが思い出させないとそれきりかな?
いちおうRedmineには入っていたハズ。
008673
2009/05/20(水) 04:16:49ちょっと使ってみようと思います。
> require 'activesupport'; [4649, "HageUnko", nil].map{|i| i.try(:+, i) }
[9298, "HageUnkoHageUnko", nil]
ありがとうございました。
0087デフォルトの名無しさん
2009/05/20(水) 04:51:55ttp://www.func09.com/wordpress/archives/154
を参考にSocketサーバーを作りたいと思っています。
先ずは、server_client.rb中の require "socket_server" について調べましたが、
リファレンス ttp://www.ruby-lang.org/ja/man/html/socket.html には socket_server
というライブラリはありません。
もしかして、ある時期から単に socket になったのでしょうか?
参考サイトの日付は2007年10月です。
008887
2009/05/20(水) 06:35:46目標は、厳密にはXMLSocketサーバーです。
0089デフォルトの名無しさん
2009/05/20(水) 10:43:00pstore = obj.transaction
p pstore.roots
pstore.close
とすると、2行目で止まって、Ctrl+C すると
/usr/lib/ruby/1.8/pstore.rb:296:in `flock': Interrupt
from /usr/lib/ruby/1.8/pstore.rb:296:in `transaction'
from /home/俺/上記ファイル.rb:2:in `hoge_method'
というようになるようになってしまったんだが、
似たような現象にぶち当たった経験があるとかで原因の心当たりある人いる?
0090デフォルトの名無しさん
2009/05/20(水) 11:31:07他のスクリプトやエディタ(てことはないか・・・)が開いててロックしているとか
0091デフォルトの名無しさん
2009/05/20(水) 12:34:18あ、ほんとだ、超でっかいpstoreのトランザクションの奥で同じファイルをPStore.newしてる
何がどうなっていつのまにこうなったんだ、これ
まあいいや、ありがとう
0092デフォルトの名無しさん
2009/05/20(水) 15:02:35>interpolation
さんくすです
0093デフォルトの名無しさん
2009/05/20(水) 15:17:04nil だったか空のハッシュだったかぜんぜん覚えられないんだが
0094デフォルトの名無しさん
2009/05/20(水) 15:17:490095デフォルトの名無しさん
2009/05/20(水) 15:21:43irb
require 'pstore'
PStore.new('1').transaction{|p| p[p.roots.first]}
これを打つのがしんどいから聞いてるんだよ逆切れ
0096デフォルトの名無しさん
2009/05/20(水) 15:25:05というかなんであれは ENOENT とか発生しないのは何故?
0097デフォルトの名無しさん
2009/05/20(水) 15:34:21言うのをめんどくさがるから却ってめんどくさくなる好例だなw
まあそのコードが一発で出てきたところから推測できるように
rootsの初期値は空のArray
nilもHashもfirstが通らん
0098デフォルトの名無しさん
2009/05/20(水) 15:49:54ファイルがそもそも存在しない場合も、
ファイルはあるけど登録が空である場合も、
ファイルがあって何らかのデータが登録されてる場合も、
transaction の返り値オブジェクトの [] メソッドはハッシュのように振舞うし、
fetch メソッドはキーの有無をチェックして例外を出す
ということで、 ファイル自体が無い場合もそのキーでの登録が無い場合も一律 nil だな
nil をキーとして何かデータが登録されていると誤動作するであろう pstore 利用スクリプトは時々見る
0099デフォルトの名無しさん
2009/05/20(水) 18:00:35ttp://taiyaki.org/ruby/jstring/
が定番でしょうか?
最終版が 2003-5-7 ですが、枯れているのか
放置されているのか分からなくて。
0100デフォルトの名無しさん
2009/05/20(水) 18:14:13UTF-8で、
puts "日本語".scan(/./u)[1]
とかではいかんのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています