[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/09 18:31 / Filesize : 81 KB / Number-of Response : 296
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 18



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環境で、一番簡単に
ファイルのオープンダイアログを表示するには
どうすればいいでしょうか

もろもろインストールの必要を最小限にしたかったりもします。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<81KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef