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


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

Ruby 初心者スレッド Part 34



1 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 08:39:14 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
   (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に完全対応していないためです。)
 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 を習得すれば将来スムーズに 1.9 系に移行できるでしょう。

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の 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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

242 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 21:18:45 ]
[1,2,3].map(&:to_s.to_proc)
から
[1,2,3].map(&Proc.new {|obj| obj.to_s })
が腑に落ちない

243 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 21:27:11 ]
>>242
>>240


244 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 22:05:10 ]
>>242
カッコで括って評価の順序を明確にすれば理解出来るか
1. [1,2,3].map(&:to_s)
2. [1,2,3].map(&(:to_s.to_proc))
3. [1,2,3].map(&(Proc.new{|obj|obj.to_s}))


245 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 22:05:51 ]
ん?
:mes.to_proc #=> proc{|o| o.mes}
が腑に落ちないと言ってるんだが?

246 名前:デフォルトの名無しさん [2010/02/05(金) 22:08:54 ]
「Symbol#to_procがそういうprocを返すように定義されている」


247 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 22:09:04 ]
そりゃ失礼した。
どう腑に落ちないのかはよくわからんが。

248 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 22:14:26 ]
仕様です→なんでそんな仕様?
ってことでしょ
>>245はこんなとこじゃなくMLででも聞け

249 名前:デフォルトの名無しさん [2010/02/05(金) 22:18:12 ]
なんでこういう仕様かっていうと[1,2,3].map(&:to_s)って書くため
気持ち悪いのは元々Railsだから仕方ない

250 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 22:26:57 ]
名前
名前、ばかにする
ばかにする、あんた、名前

1だけ・・・
出会い頭に、おたんこなす宣告から、あんたばかぁ、から丁寧にばかにするまで
レパートリーに富んだ構文糖に乾杯 >> 244



251 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 22:27:02 ]
obj.methodsでシンボルの配列が帰ってくるから
関連がないということもない
と言えないこともない

252 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 22:58:44 ]
いや、どこにそういう仕様だと書いてあるのかってことなんだが

253 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 01:21:49 ]
AがnilだったらAにxを代入

A = x unless A

これより簡潔な書き方ってあります?

254 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 01:25:43 ]
おま、それ x が真だったら短絡して A = x と同じ意味になっちゃうぞ

255 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 01:28:33 ]
あれ?そうなっちゃいます?
rubyってifとかunlessを倒置して後ろに置いてるのをよく見ますけど。

256 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 01:41:21 ]
弁解の余地もございません
>>254は撤回した上で吊ってきます

unless修飾子なんか嫌いだグスン

257 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 02:05:03 ]
>>253
a = a or x
a ||= x

258 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 02:54:23 ]
>>137

了解です。できれば Ruby/GTK2 から扱いやすいプロッターがあるといいのですがなかなか見つけられません。

259 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 03:02:50 ]
>>257はfalseでも動作するので注意
まあ元のunless自体同じような動作だが

260 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 07:57:34 ]
>>230
インデックスの仕方が微妙なせいで、記号とかアンダーバー含むと全然検索できないw
chm便利なんだけど、検索は本当に困る



261 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 10:17:38 ]
>>253 に関連して

a or next
a or raise

みたいなイディオム?をたまに見かける

262 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 10:30:03 ]
read or die

263 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 10:31:17 ]
>>254
意味がわからん。
>>253が間違えてるとは思えない自分に誰か救済の手を


264 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 10:33:27 ]
>>263をさらに撤回する ほんとうにすまない

265 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 13:54:41 ]
お前らミス多すぎるだろ・・・俺もミスってた

a = a or xは優先順位の都合で
(a = a) or xとして結合するからxの代入が起きない

a = (a or x)
a = a || x
と書くのが正しい

なんにせよ初期化のイディオムとしては、||=を使うこと
(簡単な解説を兼ねてorを並べたのが失敗)

falseの扱いは>>259の言う通り根本的な問題だから触れなかったけど
必要なら時はa = a.nil? && xとかやって
まあfalseが入ってるかもしれない変数にこの手の初期化はあまり行わないから普段は問題ない

266 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 13:57:09 ]
またミスったああああ

a = a.nil? && x
これダメ絶対、素直に後置してください・・・

267 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:11:35 ]
gdgd

268 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:12:26 ]
ネスティングを少なくする書き方をおしえて下さい。

269 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:17:08 ]
>>268
Rubyのネストは怖くない
ブロックは大いに使え

が、まあ、self を返すブロックつきメソッドとか map みたいなコレクション変更メソッドとか
そういうのを1行でメソッドチェインするようになると結構見栄えはよくなるよ
メソッドチェインするときはブロックは { } で書いてね
end のあとにドットつけられると動作上問題なくても見栄え的にぐんにゃり

270 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:23:37 ]
少し長くなった(ネストした)と思ったらさっさと別メソッドに分けるとか
簡潔なメソッド名を考えると、コメント代わりになるし動作の見直しにもなるのでおすすめ



271 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:25:08 ]
メソッドが10行超えたらほぼ確実にどこかおかしいな

272 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:27:46 ]
>271
kwsk

273 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:40:56 ]
5行越えたらFワードって聞いたぞ
外人さんの過激派はさすがに煽り方が違う

274 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:43:07 ]
まあ、メソッド多いほうがテストしやすいしな

とか言ってるとがっつりプライベートメソッドにされてたりする
気持ちはわかるが

275 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:33:30 ]
・メソッドが10行を超えることは望ましくない
・1行が80byteを超えることは望ましくない
はRubyのコーディングルールとしてよく採用されている

276 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:44:58 ]
1行80bytesは理由があるからともかく
メソッド10行制限ってのはカルト宗教の世界だな

277 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:49:22 ]
> 1行80bytesは理由があるから
ねえよ
そっちのほうがただの宗教だ
悔しかったら「lessやgrepは色づけしないから色付けに頼った視覚効果のスクリプトを書くべきではない」レベルまで言え

278 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:52:33 ]
10行ルールってまじ?
標準ライブラリのほとんどがボツってこと貝?

279 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:53:24 ]
メソッドが長いとリフレクションしにくい

280 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:57:01 ]
>>277
あ、どっかでそれ読んだ
「お前の環境がヘボいだけだろ」とか心の中で突っ込んだ覚えがある


行数は、本来は行数そのものが問題じゃないよね
短い定義の適切なメソッドの作成を目指すべきというのが本論
その現実的な目安として、やっぱ5行…は過激派だが、10行くらいがポイントだと思うなあ
これより長かったら分割手段を本気で考えたほうがいいかと



281 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:58:58 ]
>>278
まあ基本的には

めちゃくちゃベーシックな添付クラスだからごてっとするのも致し方ない面はあるが、
それでももうちょいこまごまとしててもいいとは思う
特にユーティリティ的なクラス

282 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:03:26 ]
はいはい、なんでもサブルーチンサブルーチン(笑)
どんどん分割しよう。

283 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:07:32 ]
空行だらけのBlogみたいで読みにくいからやめてくらさい

284 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:18:27 ]
あれはblogシステムでは「段落」としてるものを、ユーザーが「物理行」に使ってるためだろ

285 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:25:41 ]
横書き日本語なのに段落を前後空間空けとしてレンダリングするブラウザがアホなだけ

286 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:28:32 ]
>>277
べつに誰も悔しくないと思うけどw

287 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 09:03:47 ]
>>275-278
Railsのプラグインのソースを読む機械が多いが、
ちゃんと作ってるプラグインはモジュール化しまくり、メソッド分割しまくりだな。
なんでこんなところまでちゃんとモジュール化しとんねん!て思うほど

288 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 09:49:17 ]
>>275-276
漏れは関数は25行以内(最悪でも50行程度)って教えられた
80x25のコンソールで一画面か、印刷して一ページのサイズ

289 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 09:53:55 ]
>>277
それがあるんだよ
たまに
def hoge()                                        p 123                                        end

みたいに改行せずにエディタの80文字の折り返しだけで次の行へいったつもりでソース書く馬鹿がいるんだよ
(っていうか昔の糞エディタだと2行に分かれていたものが1行に繋がってしまうケースとか良くあったんだ)

290 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 09:56:36 ]
10行君は初心者。



291 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 09:58:11 ]
>>284
いや、実態は携帯で長ったらしくスクロールさせてページ切り替わると
リロードが増えてアクセス数も増えるみたいな都市伝説があるらしい

仮に100歩ゆずってそれでリロードされるのが事実だとしても
そんな方法でアクセス数増やしてなにが嬉しいのかと

292 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 09:59:30 ]
>>289
emacsですねわかります

293 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:00:10 ]
>>288
それは従来のプログラミング言語の話だろ
わざわざRubyにそのまま持ち込む必要はない

294 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:01:16 ]
Reekっていうコードチェッカを興味本位で使ってみたが
メソッド定義が10行以上だと「長い」と指摘してくるな

295 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:02:31 ]
あんまり長くなるとインデントも深くなってくることが多いからな
すっきりさせるために短く書くのは悪いことじゃない罠

296 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:04:24 ]
>>292
一太郎だろ

297 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:05:50 ]
>>291
アメーバだっけ?芸能人ランキングのあるやつ
改行増やしてPV増やしてランキングの上を目指すんだって
本当かどうかは知らない

298 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:09:36 ]
資源の無駄遣いだなぁ

エコに反してるから改行撲滅キャンペーンした方がいいぞ

299 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:10:03 ]
ああNON STYLEの石田だっけ?

300 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:10:45 ]
とりあえず、お前らの権限で fileutils.rb とか net/imap.rb に
10行ルール適用してもらってよ。



301 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:32:50 ]
>>291 >>297
あれはPVアップ界王拳の一種で、ケータイで見たときに複数のページに分割されるのでPVがあがるってやつ
芸能人もそうだけおdPV多いとアメブロはお金もらえる仕組みがある

最近PCの情報サイトでもページ分割するのちらほら見るよね、携帯向けじゃなくても
あれPV上げるため

302 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:44:45 ]
>>293
言語の話じゃなくて環境の話じゃね?

303 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:51:12 ]
>>294
それ面白そうだなw 使ってみるか

304 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:12:10 ]
>>303
やめとけ
警告多すぎて森に隠れる木の状態になるぞ
igonoreの指定も面倒だし

305 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:14:38 ]
何事も原理主義はよくないと思います

306 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:16:32 ]
めちゃくちゃ実利だと思うが…

307 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:26:24 ]
定義済みのクラス特異メソッドをprotectedにするのってどうすればいいんでせう?

class DB
protected
self.new
super
end
end

してもクラス外で普通にDB.newできてしまったorz

308 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:28:00 ]
protectedにしてどうしたいの?

309 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:31:07 ]
具体的には、DBのインスタンスを作成する手段をDB.openに限定したいんです。
db.closeするのを忘れたくないんで。

310 名前:307 mailto:sage [2010/02/07(日) 11:40:07 ]
class Hoge
private
def self.hoge
puts 'hoge'
end
end
Hoge.hoge

でも動いちゃいますね……
そもそもクラスメソッドをprivateにするのってどうすりゃいいんでしたっけ?



311 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:40:33 ]
「DBクラスいじるならopen使え」とマニュアルに大きな赤い字で書いておけ
それとブロックつきopenの提供で充分

312 名前:307 mailto:sage [2010/02/07(日) 11:42:15 ]
www.gesource.jp/weblog/?p=473

吊ってきたいと思います。
スレ汚しすいませんでした。

313 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:48:31 ]
>>258

素直にgnuplot使うのが手っ取り早い
rgplot.rubyforge.org/


314 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 12:24:44 ]
rubyのprivateにはいつも混乱させられる
うまい覚え方はないものか

315 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 12:44:35 ]
俺も覚えられてない・・・
privateがC++なんかのprotected相当なんだっけ?

316 名前:デフォルトの名無しさん [2010/02/07(日) 13:01:40 ]
rubyのprivateは、
「任意のレシーバに対する呼び出しが出来ない」
関数っぽく書く呼び出し方のみが可能ってことね。


317 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 13:06:54 ]
「RubyでC++やJava再現しようぜ時代」の負の遺産
こんなオモチャ機能は1.9で無くなってもよかった

318 名前:デフォルトの名無しさん [2010/02/07(日) 13:07:32 ]
privateよりprotectedのほうが理解されていないと思う。


319 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 13:17:06 ]
>>317
少なくとも名称は変えるべきだったよなあ

320 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 13:23:05 ]
>>316
つまり、
class Chinko
  private def manko
  end
end
の場合、

class Chinko内で
def sounyu
  manko
end

のような呼び出しはOKだが、

chinko = Chinko.new
chinko.manko
は駄目なんだっけ?



321 名前:デフォルトの名無しさん [2010/02/07(日) 13:29:10 ]
ifの条件文のレイアウトのことなのですが、改行が問題になるケースってあるでしょうか?
if name == "foo" ||
name == "bar"
#do something
end

()や:が必須の言語ですと気分的にも安心なのですが、
Rubyではあまり改行してるの見ない気もします。
一応、上のコードは問題ちゃんと判定されているし、
条件文内の代入文もきちんと評価されていますが、どうも不安です。
条件文の後にthenを入れておけば確実なのかなとも思うのですが・・・

322 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 13:30:37 ]
マニュアルくらいは読め
Rubyのprivateは単に見栄え上の判断しかしない

323 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 13:33:43 ]
>>321
カッコ書いて条件部分を式にすればいいじゃん

時々、カッコ書いたら死ぬ病の人が紛れ込んでるんだけど、そういう人は Ruby 使ったら駄目よ

324 名前:320 mailto:sage [2010/02/07(日) 13:36:27 ]
こんなん書いている間にマニュアル読めよ、試せよという感じですね、すいません。
  chinko = Chinko.new
  chinko.manko

   private method `manko' called for #<Chinko:0xxxxxxx> (NoMethodError)
で駄目ですね。
  tansyou.send :manko
みたいにsend経由だとOKなんですね。

325 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 13:37:53 ]
質問させて下さい。

たまにブログなどで見かけるように、

puts 1 + 1 # => 2

のように、出力結果をコメントで文の右に追加してくれるスクリプトがあったと思うのですが、
どなたか御存知ありませんか?

326 名前:325 mailto:sage [2010/02/07(日) 13:41:06 ]
>>325 ですが、自己解決しました。
xmpfilter でした。

「ruby 実行結果 コメント」で検索したらでてきました。
xmpfilter で Ruby のコードに実行結果をコメントに表示 | すぐに忘れる脳みそのためのメモ
jutememo.blogspot.com/2008/06/xmpfilter-ruby.html

eigenclass - xmpfilter: automagic Test::Unit assertions/RSpec expectations and code annotations
eigenclass.org/hiki/xmpfilter

327 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 15:13:27 ]
クロージャとプロシージャの違いがわからないのですが…
sortメソッドを使うときに、a.sort{|a,b|a<=>b}とか書きますよね。この場合はどちら?

328 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 15:18:41 ]
そんな小難しい外の用語を使わずに、ブロック引数、でよい。

329 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 15:38:31 ]
クロージャとプロシージャは別概念

クロージャは生成時の情報(コンテクストと呼ばれる)を閉じ込めて保有するオブジェクト及びブロックの総称
一般的にbindingメソッドを持つ
例 Procインスタンス, Bindingインスタンス, ブロック

プロシージャは手続きオブジェクト及びブロックの総称
一般的にcallメソッドを持つ
例 Procインスタンス, Methodインスタンス, ブロック

>>327の例の場合
ブロック生成時の情報は特にブロック内に閉じ込められていない。
だからクロージャとしては使われていない。
もっぱら手続きを実行するためのブロックなのでプロシージャとして使われている。

クロージャの例
def hoge
var = "hoge"
Proc.new{var}
end
closure = hoge
#p var #=> undefined local variable or method `var'
p eval('var', hoge.binding)


330 名前:329 mailto:sage [2010/02/07(日) 15:41:57 ]
MethodインスタンスではなくUnboundMethodインスタンスか



331 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 16:02:44 ]
説明は

「Rubyではコンテキスト情報の保存にBindingクラスのオブジェクトを用いる」

でいいじゃん
それ使えばコンテキスト依存の処理になるからおおむねクロージャだ
使わない(使わなくてすむ)ならただのプロシージャ(可搬性のある処理のかたまり)

332 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:28:39 ]
2年前に書いたスクリプトを流したら90秒もかかった
当時は14秒で終えてたのに

333 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:35:39 ]
いつどこでどのように流されたんですか

334 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:54:49 ]
実行することを流すと言います。

335 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 00:08:40 ]
スパゲティコードをまるでソウメンのように流すのですね

336 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 00:24:48 ]
そうです。まさにスパゲティです。

337 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 01:23:06 ]
ためしにVMware上のUbuntuで動かしたら2.4秒だった

338 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:43:24 ]
IronRuby 6.4秒

339 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:16:30 ]
Windows版Ruby 1.8 -> 1.9で
テキストモードでのファイル読み込みが10倍ほど遅くなってるのでそのせいか?

読み込み時のエンコーディングをASCII-8BITとかにしてもさほど変わらんので
universal newlineとかいう改行コードの差異を吸収してLFに変換するのが遅いのだろうか
バイナリモードで読んでからforce_encodingすると1.8と同程度になるよ

自分は趣味程度にしか使ってないので困らないけど
巨大なログを処理する人とかだと、地味にいやな性能劣化なんだろうな


340 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:34:44 ]
日英辞書テキストのEDICT(SJISに変換済み、5.3MB、10万行)を Mingw版Ruby 1.8.7p160 で
ruby -e "open(ARGV.shift,'r'){|f|f.read}" edict
すると 0.42秒
Mingw版Ruby 1.9.1p0 では107秒
ちょっ、200倍遅いorz

ruby -e "open(ARGV.shift,'rb'){|f|f.read.force_encoding('cp932')}" edict
バイナリモードで 0.46秒
ruby -e "open(ARGV.shift,'rb'){|f|f.read.force_encoding('cp932').gsub!(/\r\n|\n|\r/,?\n)}" edict
などと改行変換もすると 3.72秒

K6-2 450MHzのWindows2000なんでちょっと遅いし、Rubyも最新のじゃないですが




341 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:35:14 ]
>>339
migw32使え

342 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:59:11 ]
10倍ですか...
へんに差異を吸収しようとせずエンコーディング毎に処理して欲しいもんだ
コンパイラが古いとはいえ、まさか仮想環境や.NETに負けるとは思わなかった。

↑↑↑はパズル問題を解くスクリプトで読み込みはほんの少し
書き出しは途中経過も出してるんでかなり多い
1.8.6: 220"、1.9.0: 14"、1.9.1: 90"






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

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

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