- 1 名前:デフォルトの名無しさん [2008/02/22(金) 14:31:31 ]
- プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
【Ruby1.9 は不安定な開発版であり初心者には全く向きません】 【最新安定版の Ruby1.8.6 の使用を強くお勧めします】 関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問はRailsスレへ。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
- 75 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:17:03 ]
- >>74
>>72はそういうことを言いたいわけではないと思われ
- 76 名前:75 mailto:sage [2008/02/26(火) 22:17:55 ]
- >>72じゃなくて>>73だorz
- 77 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:30:19 ]
- >>72は一言も最適化とは言ってないな。
- 78 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:34:14 ]
- ディスクアクセスが無意味に多いのが心情的に嫌なのだろう
そう感じるセンスそのものは悪くはない
- 79 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:28:06 ]
- 無意味に多いのかそれは、とか
全部動かさずにユニットテストしろよ、とか
- 80 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:49:05 ]
- 要するにプリコンパイルヘッダーが必要ということか?
- 81 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 04:45:24 ]
- C++ とかやると、コンパイル時にいくつヘッダ読んでるかなんて
全く気にならなくなるZE
- 82 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:05:29 ]
- コンパイル時(>>72の例だと開発中)はどうでもいいんだが、実行時に、というのが心情的に気持ち悪いという話だろう。
- 83 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:26:02 ]
- なら、コンパイル系の言語を使えばいいんじゃまいか?
- 84 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:54:36 ]
- そんな読み込み程度を気にするのがいかにも初心者だな
- 85 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:55:55 ]
- Ruby使いはお茶でも飲んでまたーりするがよい
わっはっはっは
- 86 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:06:07 ]
- >>84
そうか? 「それ自身は事実だから好きにせえ」以外の必死な否定論が出ることのほうがよっぽど初心者だと思うが…
- 87 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:07:32 ]
- ところでCが書けないRuby書きはニワカだと思いますがどうですか。
- 88 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:13:07 ]
- I/O を工夫することはパフォーマンスチューニングでは基本事項。
もとの環境や条件が不明だけど、CGIのようにリクエストのたびにプロセスを 実行しなきゃいけない場合は、読み込み速度を工夫するのは別におかしな話ではない。 ファイルサイズが小さくても、ファイルの数が多ければハードディスクのシークタイムは バカにならない。 ただ、ファイルを連結しても断片化してたら効果は少ないから、デフラグを ちゃんとやってやる必要があるけど。
- 89 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:17:28 ]
- もうそんな時代でもないんだけどな
- 90 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:24:31 ]
- >>89
ストレージへのアクセスが問題にならないコンピュータができたならぜひ教えてくれ というか最近の子は「HDDがガリガリ言う」とか気にしないもんかね 静音化されて意識しなくなったんだろうか
- 91 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:29:29 ]
- HDDはアクセスすると壊れるからなあ
いや、こんなんで壊れる確率がはっきり増えるHDDってのもかなりアレだが… とりあえず 「クラス単位の細切れファイルをインストール時に数個にまとめとく」 というのは別に非難されるようなことじゃないと思うぞ というかそんなにまでして行為そのものを否定する理由を知りたい
- 92 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:30:48 ]
- ガリガリ言うほどのアクセスを問題にしてるのか?
そもそもそんなこと言ってたらRubyなんて選択肢にならんだろ
- 93 名前:デフォルトの名無しさん [2008/02/27(水) 12:32:34 ]
- 鈍足のRubyを使う人は達観した境地にあるので小さいことは気にしない
- 94 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:57:19 ]
- 正直、完全に論点がずれてるような気がしてならない。
元発言は、無駄を嫌うというプログラマの美徳を発揮してるだけじゃないの?
- 95 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:04:35 ]
- チューンナップを突き詰めるとRuby使うなになるからおすすめしない
- 96 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:08:02 ]
- Railsみたいな糞のかたまりで遊ぶのがRubyistだからな
- 97 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:16:36 ]
- Railsのナカミを喜んでる人は少数だと思う
Railsは開けないほうがよい箱だ あくまで外部から自分のために便利に使うシステム
- 98 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:42:30 ]
- これが SyntaxError になるんだけど何故でしょうか?
def foo?; end def bar?; end case when not foo? when not bar? end
- 99 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:52:00 ]
- >>94
まぁ、美意識の問題だわな。 そしてそれは、そんな変なエネルギーってわけではない。
- 100 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:15:48 ]
- >>98
notだから。 case when (not foo?) when (not bar?) end か case when ! foo? when ! bar? end なら期待通りに動く
- 101 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:16:13 ]
- >>98
この辺の話かな ttp://www.ruby-lang.org/ja/man/html/trap_A4C7B2F2B7E8A4B9A4EBA4E2A4CE.html when (not foo?) ならおkのはず
- 102 名前:デフォルトの名無しさん [2008/02/27(水) 18:42:53 ]
- [標準出力へのフックを仕込む]
標準出力に出力 標準出力に出力 標準出力に出力 [標準出力に書き出した内容をメールで送信] ってやりたいんですが、 どうやったら出来ますか?
- 103 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 18:55:07 ]
- 出力時にスコープの広い変数に文字列を追加保存しとけばいいじゃん?
- 104 名前:98 mailto:sage [2008/02/27(水) 19:02:54 ]
- >>100, >>101
なるほど。 てっきり「not foo?」は「式」かと思っていたんですが、「文」なんですね。 了解しました。深いっす。
- 105 名前:デフォルトの名無しさん [2008/02/27(水) 19:12:13 ]
- phpでいうis_array()はどうやればいいですか?
rubyは配列もあるしハッシュもあるし、自分でコレクションも作れるしで どう判定していいのか分かりません(?o?)
- 106 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:17:02 ]
- [0,1,2].is_a?(Array) #=> true
[0,1,2].kind_of?(Array) #=> true ArrayクラスはObjectクラスを継承している。 だからArrayクラスはObjectクラスのクラスメソッドやインスタンスメソッドも使える。 Objectクラスのリファレンスをみるべし。 www.ruby-lang.org/ja/man/html/Object.html
- 107 名前:デフォルトの名無しさん [2008/02/27(水) 19:30:43 ]
- >>106
ありがとうございます 試してみたところ、PHPとは異なり、 ハッシュと配列は明確に区別されているようですね ハッシュ.is_a Array → false 配列.is_a Hash → false
- 108 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:34:50 ]
- オブジェクト、実際的には変数、が配列かどうかを調べなければならないコードというのはRubyではかなり異常
極力他のアプローチを取るようにしたほうがいい
- 109 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:40:03 ]
- case arg
when Array when Hash とかよくやるじゃん
- 110 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:42:06 ]
- そうですか(><)
YAMLで書いた設定ファイルを読んで 該当キーをeachで回すようにしてるんですが、 キーを省略した時にはnilになりますよね。 nilをeachしたらエラーになるので、eachできるかどうかを調べてから eachしたいのですが、 こういう場合はruby的にはどう書くものですか?
- 111 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:45:14 ]
- >>110
・ 変数がnilかどうかを事前にif文で比較して弾く ・ eachでnilが例外エラーを起こしたらその例外をキャッチする どっちか好きなほう使え
- 112 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:45:32 ]
- def hoge(foo, bar)
raise ArgumentError unless foo.is_a?(String) raise ArgumentError unless foo.is_a?(Array) ・ ・ ・ end とかメソッドの最初でモリモリやっちゃうのはだめ?
- 113 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:58:48 ]
- >>112
わりと下品。 まあ、それ以上でもそれ以下でもない程度かと。 コレを無くすために悩む時間がえらい長引くってんならあっても仕方ないんじゃね。おいおい考え変えていけばいいかと。 そのクラスやメソッドに本当にそんなクラスのインスタンスが指定されることがあるのか? をよく考えるといい。 標準添付で「結果の数によってStringあるいはArrayが返ります」とかいうメソッドがあるかい? …そういえばなんか添付モジュールで複数のクラスが返ってくる可能性のあるやつあった気がするがまあいいや。 「Stringが来たときはHashに変換しよう」とかいうのも同様。Stringなんか渡してくる奴が悪い、で桶。 raaやgemで公開して育てる気マンマンでちまちまフールプルーフさいこー、という場合はあったほうがいいのかも。
- 114 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 20:07:48 ]
- 日本語がよくわからない
- 115 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:35:03 ]
- >>102
require 'stringio' # 標準出力へのフックを仕込む $stdout = StringIO.new # 標準出力に出力 puts '未承諾広告' puts 'こんにちは^^)' # # 標準出力に書き出した内容を $stdout.rewind text = $stdout.read メールで送信(text)
- 116 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:42:15 ]
- >>115
ぬう、適切だが邪悪だ…
- 117 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:45:13 ]
- >>110
eachに反応するときだけeachしたいなら、 respond_to? :each する。 と思ったことが私にもありました。 なんでStringがeach持ってるんだよ……(1.8での話)
- 118 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:48:51 ]
- >>116
標準出力をフックしたいとか言う元の要件自体が邪悪なだけだ(w 使い方自体は巻き戻せるIOの正しい使い方 $stderrに仕込んでおくとwarnの出力をロギングできるぞ warn使ってる人ってあんまり見ないけどな >>117 eachの中でArrayやHashという構造べったりの処理をするからあまり意味がなかったり…
- 119 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:52:27 ]
- STDOUTに元の残ってるし、
writeメソッドがないとTypeErrorだし、 邪悪っていうにはおとなしい希ガス。 バッドノウハウなのは確かだけど。
- 120 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:24:04 ]
- >>118
>標準出力をフックしたいとか言う元の要件自体が邪悪なだけだ(w そんなことないだろ なんで邪悪なのか説明してみな
- 121 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 09:08:29 ]
- Herokuってどうよ
- 122 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:40:13 ]
- >>120
出力先が固定になってるあたりかな。
- 123 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:02:13 ]
- なんでパイプしてその先でメールするんだと
駄目なんだろ。
- 124 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:06:51 ]
- >>122
それだけじゃわかんね。固定してたらなぜだめなの?
- 125 名前:デフォルトの名無しさん [2008/02/28(木) 13:16:13 ]
- 標準出力をフックしたい⇒出力先が固定
意味不明だな。
- 126 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:20:35 ]
- なんかのはずみで標準出力に出るようなものも全部キャプチャしたいなら
すなおに別プロセスで読み出せ
- 127 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:07:34 ]
- こんなもんでいいんじゃね
class Dummy @@origout = $stdout def initialize @buf = '' end def write(str) @@origout.write(str) @buf << str end def flush tmp = @buf @buf = '' tmp end end $stdout = Dummy.new puts "hello" puts "world" $stderr.puts $stdout.flush.inspect 思い切り誤爆してきた。。。
- 128 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:43:56 ]
- >>126
なんで別プロセスにするのがいいの? $stdout = StringIO .new だとなんか問題あるの?
- 129 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:47:47 ]
- >>118 バカ
>>122 バカ >>126 バカ
- 130 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:53:15 ]
- バカとしか言えない>>129はバカでよい
是正させる気も無いようだしただの害悪だな
- 131 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:52:29 ]
- >>128
ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFCAD1BFF4.html#a.24stdout 大抵はそれで問題ないけど 拡張ライブラリとか子プロセスなんかの出力は $stdoutを書き換えるだけだとリダイレクトできないはず
- 132 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:41:22 ]
- Rubyに限ることではありませんが、
httpでpostするデータが大きくてメモリ不足になるとき どうやって回避するのがよいのでしょうか? Net::HTTP.start(host) {|http| r = http.post(path, data, header) } という感じでpostするときdataが大きすぎる場合に備えて 小出しに分けて送ることってできませんか?
- 133 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 19:08:26 ]
- >>131
だったら最初からそう書けよ おまえの書き方だと $stdout を変更するのがすべて悪いみたいじゃないか >>130 バカはおまえだろ
- 134 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 19:13:28 ]
- >>132
サーバ側の話? それともクライアント側の話? サーバ側の話なら、cgi.rbを使わず自前でHTTPを解析する必要がある。 クライアントの話なら、dataをファイルに保存しておいて、例えば10MBずつ読み込んで送信を繰り返せばいいんじゃね?
- 135 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 20:13:54 ]
- 空気悪いな
>>131はこの話題に関しては初めて書きこんだのだが >>132 クライアント側だとすると、body_streamを使うのはどう? ttp://d.hatena.ne.jp/unageanu/20071009 この辺か
- 136 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 20:34:05 ]
- >>133=129
あきらめろ、幾ら頑張ってもお前の>>129は「馬鹿じゃない」と解釈する余地が無い。
- 137 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 01:19:04 ]
- www.ruby-lang.org/ja/man/html/Net_HTTPRequest.html
1.9 featureって書いてあるから1.8じゃ使えないのかと思ったら1.8.6でも使えるのね。よかった。
- 138 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:22:09 ]
- >>134
クライアントです。 分けるといっても複数のpostを一連の1つのpostと 認識させるにはどうしたらいいんでしょうか… >>135>>137 チャンク形式っていうんでしょうか? で、body_streamを使えばヘッダとか気にしなくていい ってことでよいでしょうか? >>132 のdataの内容を一旦 data.txt に書き出しておいて、 あとは >>135 の例のchunkedを使うようにするとできたっぽいですが、 一時ファイルを使わないようにできないでしょうか?
- 139 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:48:00 ]
- RubyにあるモジュールはCGIやHTTPの知識の必要性を良くも悪くも隠蔽しない
その知識のまま進むのは危険だ HTTPやCGIの勉強をすることを勧めるよ
- 140 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 13:29:26 ]
- >>138
>>137が書いてるページの body_stream 使うんだろうけど、おれもやったことないからわからん。 ぐぐったらこんなのあった d.hatena.ne.jp/unageanu/20071009
- 141 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:11:22 ]
- curlコマンド使うのが一番楽やねん
- 142 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:17:48 ]
- 「年・月・日」ではなく「年・月」の2つしかないデータがあるんだけど、
これを格納するデータオブジェクトって何がいいかな? いや、年月日が揃ってるデータと「年・月」が同じかどうかという比較をするんよ 年月日ならDateオブジェクトなんだけど、日をどうしようかなあと
- 143 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:30:19 ]
- >>142
・ 「どうせ参照されないからいいじゃん?」とか年金式にdayを1に固定してDateを使う ・ [year, month] という配列に入れておく ・ Dateを継承した「dayが無指定でも動く」という新しいDateを作る
- 144 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:05:14 ]
- ・Date に適当にメソッドを足して適当に YYYY/MM/01 でも代表元に使う
- 145 名前:デフォルトの名無しさん [2008/02/29(金) 21:09:37 ]
- require 'yaml'
yaml_str = <<YAML_STR hoge: - moge: [poge, page] YAML_STR data = YAML.load(yaml_str) data['hoge'].each {|key,value| p key,value} こうすると、 keyが{"moge"=>["poge", "page"]} valueがnilになってしまいます。 key=moge,value=[poge, page] になって欲しいのですが…。 どこが間違っているのでしょうか?
- 146 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:47:44 ]
- data["hoge"] #=> [ {"moge"=>["poge", "page"]} ]
つまり "moge"=>["poge", "page"] という(キーが一つの)ハッシュを一つ持つ配列 mogeをリストにせずにインデントで階層にすれば data["hoge"] #=> {"moge"=>["poge", "page"]} になる
- 147 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:09:30 ]
- >>145
data['hoge'].each {|hash| hash.each {|key,val| p key, val}}
- 148 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:17:20 ]
- >>146-147
ありがとうございました YAMLのマッピングの記述を勘違いしていたようです
- 149 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:09:51 ]
- なんか最近思うんだけどさ
ここ「初心者」スレだよな・・・ 素直に本家行けば?って人ばっかりじゃね?
- 150 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 04:39:41 ]
- 本スレはMatzと愉快な仲間たちについて
あれこれ語るスレであって、プログラムを語るスレではないのです …あれ? じゃあ板違いじゃない?
- 151 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:36:51 ]
- 「Rubyの初心者」のスレでしょ?
プログラミング自体の初心者じゃないといけないの?
- 152 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:44:14 ]
- >>149が考えるところの「本スレ」のレベルに依存するな
- 153 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:15:48 ]
- >>149
同意。
- 154 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:39:06 ]
- あんなS/Nの小さいスレ
使ってられねーよ
- 155 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:00:41 ]
- irb> s = '2'; case s; when /(1)/,/(2)/,/(3)/ then p $1 end
"2" irb> s = '2'; case s; when Regexp.union(/(1)/,/(2)/,/(3)/) then p $1 end nil なんで?
- 156 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:07:39 ]
- unionすると
/(1|2|3)/ になるのではなく /(1)|(2)|(3)/ になって、 今回マッチしたのは(2)のとこだからグループとしては$2。 $1ではない。
- 157 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:16:53 ]
- >>156
をを …正規表現をコンマで並べても用が済むcaseでunionを使うのはめんどくさいっすな
- 158 名前:デフォルトの名無しさん [2008/03/01(土) 21:37:16 ]
- nkf.guessやKconv.guessなんかを文字列にしたいんだけど、
この文字列の配列ってあらかじめ定義されてないんでしょうか? 文字コードの推測 www2u.biglobe.ne.jp/~MAS/ruby/CAB8BBFAA5B3A1BCA5C9A4CEBFE4C2AC.html
- 159 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:54:35 ]
- ないっす
いわゆるエンコーディングの名称・略称を表示するようにはできてない puts "#{str}は日本語EUCだよ!" if NKF.guess(str) == NKF::EUC というような使い方しか想定してない模様 一応 irb> NKF.constants ["UTF8", "VERSION", "JIS", "UNKNOWN", "NKF_VERSION", "ASCII", "UTF32", "SJIS", "NOCONV", "AUTO", "REVISION", "UTF16", "EUC", "BINARY", "NKF_RELEASE_DATE"] の結果をどうにかすればできなくはないけど、 自前で文字列対応テーブルを書いたほうがたぶん早い
- 160 名前:デフォルトの名無しさん [2008/03/01(土) 22:05:26 ]
- >>159
サンクス >>158のページのようなのを使いまわすことにする
- 161 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:52:59 ]
- net/httpで相手サーバがタイムアウトした場合の例外をキャッチしたいんだけど、
具体的に何の例外が発生するんですか? というか、そのへんの情報ってどっかにまとまってませんか?
- 162 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:58:15 ]
- 手元の俺スクリプトの例
rescue Net::ProtoRetriableError,Net::ProtoFatalError,Net::ProtoServerError,Errno::ETIMEDOUT,TimeoutError =>ex puts 'サーバーから応答がないので空データを使います' return '' 正直、ドレが効いてるんだかよくわからん
- 163 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:04:24 ]
- net/protocol.rbを見ると、ソケット生成(接続)や読み書きは
timeoutメソッドの中でやってるのでTimeout::Errorかな。 TimeoutErrorはこれの後方互換用。
- 164 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:10:11 ]
- http.getに該当する部分から飛び出す例外を全部捕捉して
「よくわからんけど鯖がエラー返しましたエラー」にすれば桶 begin res = open(uri).read rescue puts "#{uri.host}のサーバかそこへのアクセスで何かエラーです" res = '' end 実際問題としてサーバー側の原因以外の例外はここでは起こらんわけだし Timeoutだけ補足してもProtoServerErrorの500系エラーはスルーされるぞ 500系エラーって新幹線みたいだな
- 165 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:15:10 ]
- Timeout::ErrorはStandardErrorのサブクラスではないので、
引数なしのrescueでは捕まらんのだわ。
- 166 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:27:51 ]
- >>165
既にFAQレベルだな… ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/40726 直感的という言葉は使いたくないがやっぱ説明なしじゃわかりにくいよね シグナルとかあのへんの勉強をするといいんだが、ちと重いな
- 167 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:33:49 ]
- Errno::ETIMEDOUT って何?
- 168 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:39:30 ]
- タイムアウトした(Timed Out)というエラー。
- 169 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:46:43 ]
- ネット系はErrno::ECONNABORTEDとかErrno::ECONNRESETみたいなのも飛んでくるし、
例外をキャッチしても、それ以降の接続はなにやっても失敗したりするので悩ましい
- 170 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:51:49 ]
- >>167
システムコールが返すタイムアウト Timeout::Error → 「相手のWebサーバからHTTPの返事が返ってこない」 Errno::ETIMEOUT → 「Webサーバ以外の色々から返事が来ないタイムアウト」 と思って桶 そもそもサーバが見つからないとかそういうの。たぶん >>169 retryはたいてい成功しないよね
- 171 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 16:23:37 ]
-
return @hoge = kekka と @hoge = kekka return kekka と @hoge = kekka return @hoge ってどれが一般的かな
- 172 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 19:11:27 ]
- @hoge = kekka
- 173 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 20:47:42 ]
- @hoge = kekka
return
- 174 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 21:09:01 ]
- >>171
returnを使いたくて仕方ないのなら2番目でよろしく 1番目はなんか見てて不安だ
- 175 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 21:33:05 ]
- win環境で、一番簡単に
ファイルのオープンダイアログを表示するには どうすればいいでしょうか もろもろインストールの必要を最小限にしたかったりもします。
|

|