- 1 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 13:56:36 ]
- プログラミング言語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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
- 333 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 02:38:29 ]
- >>332
d コマンドプロンプトちゃんの設定が悪かったのか にしてもこんな設定があったとは・・・
- 334 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 07:43:46 ]
- chcp65001 のことだったらまともに動かないし使えねーんだが
- 335 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 07:47:45 ]
- >>334
全く問題ない文字を表示してるだけなら問題はない >>333はそのパターンだろう
- 336 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 12:48:03 ]
- QueueにデータAが無かったら、データAを追加する
処理を書きたいのですが どのようにして確認すればいいのでしょうか?
- 337 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 13:23:48 ]
- デフォルトではQueueは存在しないので、
自分で作るかArrayで代用するか適当なライブラリインストールする必要がある …で、Arrayで代用する場合はまあ include? でいいんじゃね queue = Array.new queue.push('one') queue.push('two') queue.push('three') puts queue.shift puts queue.shift queue.push('four') if queue.include?('three')
- 338 名前:デフォルトの名無しさん [2010/03/29(月) 13:24:23 ]
- RubyのQueueはスレッド間のデータ受け渡し用に用意されているもので、
汎用のデータコンテナではないと思う。 一応 Queue のインスタンス変数 @que が内部で持ってるデータのリスト なので、これを無理矢理参照して include? でデータの存在をチェック出来 るけど、素直にArrayをshift/pushもしくはunshift/popのペアを使って キューと見なすほうがよいと思う。
- 339 名前:336 mailto:sage [2010/03/29(月) 13:33:19 ]
- >>337-338
よーくわかりました。 Array.newとQueue.newの2つを使いたいと思います ありがとうございました
- 340 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 19:12:32 ]
- File.exist?(filename)とFile.exists?(filename)
の違いがわからない 単に書き方が違うだけか?
- 341 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 19:21:06 ]
- >>340
前者推奨 sつきの後者は互換性のために残されているだけで1.9では既に無い ttp://www.ruby-lang.org/ja/man/html/obsolete.html#FileTest.2eexists.3f 見つけるの苦労したぞ わかりやすいとこに置いておいてくれ
- 342 名前:デフォルトの名無しさん [2010/03/29(月) 20:15:24 ]
- その後復活したけどな
svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/file.c?view=diff&r1=14389&r2=14390 しかもobsoleteもなくなってるという
- 343 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:37:30 ]
- >>340
なるほど、んじゃあexist?(hoge)を使うようにしよう ともかくありがとう
- 344 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:56:56 ]
- javaのつもりでcase 文で一行ごとにbreakを入れたら酷い目にあった
知ったかは危険だ・・・
- 345 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 23:40:13 ]
- スレッドの中から@arrray.shift()としたのですが、
スレッドの外から@arrayを見るとちゃんと動作していません どうやったら、整合性が取れるようになりますか?
- 346 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 00:38:52 ]
- >>345
> どうやったら、整合性が取れるようになりますか? typoを無くす
- 347 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 05:58:33 ]
- >>336
それはキューではない。
- 348 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 08:12:10 ]
- >>346
何それ?
- 349 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 10:23:04 ]
- >>342
まあ 1.9.2 で実際に出たら考える
- 350 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 10:25:27 ]
- shiftできるんだから、@arrrayの方が正しんだな。
- 351 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 19:18:13 ]
- BitmapArrayって何ですか?
- 352 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 08:49:43 ]
- def hoge *argsのとき、
hoge {:fuga => :piyo} で呼ばれたのか、 hoge :fuga => :piyo で呼ばれたのか判断する方法ってあるんですか?
- 353 名前:352 mailto:sage [2010/03/31(水) 09:06:16 ]
- あ、
hoge {:fuga => :piyo}じゃブロックになっちゃうから hoge({:fuga => :piyo})ですね。
- 354 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 09:14:02 ]
- Ruby にはキーワード引数というものは存在しない
Symbol キーの Hash をそれっぽく使っているだけ メソッドの引数内に限り、解釈の混乱の起きない範囲で Hash リテラルは { } を省略することができる hoge(:key1 => val1, :key2=>val2) と hoge({:key1 => val1, :key2=>val2}) は同じだ huga(param, {:key1 => val1, :key2=>val2}) と huga(param, :key1 => val1, :key2=>val2) も同じ
- 355 名前:352 mailto:sage [2010/03/31(水) 10:02:08 ]
- どもです。わかりました。
- 356 名前:デフォルトの名無しさん [2010/04/02(金) 04:53:24 ]
- 正規表現で得た複数のデータをそれぞれ配列に格納して、
その配列を比較するにはどうすればよいのでしょうか。
- 357 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 10:02:28 ]
- そのまんま1処理ずつ書けばいいじゃん
なんでもかんでも1フレーズに押し込めようとするのは損
- 358 名前:デフォルトの名無しさん mailto:sage [2010/04/03(土) 13:57:20 ]
- >>356
String#scan www.ruby-lang.org/ja/man/html/String.html#scan
- 359 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 01:27:32 ]
- 鬼車を使いたいんですが、1.87に実装されていますか? 1.91は不安なので。
- 360 名前:デフォルトの名無しさん [2010/04/04(日) 02:47:06 ]
- リテラルは無理だが、oniguruma gemはある。
- 361 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 12:02:56 ]
- >>360
どうもありがとうございます。今から試してみます。 ところでみなさん、1.9系統への移行はいまだに時期尚早だと思いますか? 正式リリースから一年以上経ったし、そろそろ良いかなーとも思っているんですが。 みなさんはいまだに何か不都合とかありますか。
- 362 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 14:42:20 ]
- system("make")等でmakeを実行しつつログを保存したいのですが
良い方法はないでしょうか?IOクラスのパイプとかリダイレクトとか良く分からなくて… text=`make`ではmakeの出力がリアルタイムで確認できず system("make 2>&1 | tee hoge.txt")では、$?でmakeの戻り値を 取得できなくなってしまうので困ります(失敗したらexitしたいのです)。
- 363 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 14:52:42 ]
- >>362
1.8 なら fork と exec で自分でがんばるしかないと思う。 1.9.1 なら spawn で、1.9.2 なら open3 で、できるかもしれない。
- 364 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 15:32:31 ]
- spawn for legacy
github.com/ujihisa/spawn-for-legacy
- 365 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 17:33:45 ]
- Structを要素とする2次元配列の消費メモリが大きくて困っています
500個 * 約13000個 * 要素数5の構造体(整数4つ+文字列)のデータで 2Gbyte以上消費します(Cで書けば150Mbyte程度で収まる) Rubyではこの程度のメモリ消費は普通なのでしょうか? あるいは使い方やコツ等が分かっていないのでしょうか? 環境はruby1.8.7 on MacOSXです
- 366 名前:362 mailto:sage [2010/04/04(日) 17:34:10 ]
- >>363>>364
ありがとうございます。1.9.1だったので以下のようにしてみました。 こういうコードでいいのか分かりませんが、とりあえず目的は達成できました。 r,w = IO.pipe pid = spawn("make", STDOUT=>w) spawn("tee build.log", STDIN=>r) ret = Process.waitpid2(pid)[1].to_i w.close if ret != 0 puts "[Error] (build) #{src}" exit 1 end
- 367 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 17:40:08 ]
- >Rubyではこの程度のメモリ消費は普通なのでしょうか?
普通
- 368 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 18:56:57 ]
- ruby1.8.7がruby1.9系の良いところをフィードバックしたバージョン
rails3がruby1.9対応だからみんなそれまでは焦って動くことはなさそう。 メモリ消費でCと比べるのはrubyがかわいそう javaだってcの10倍以上使っておかしくないんだぜ? ruby1.9系が1.8系よりも良い所って 今のところガーベージコレクションが良いって記事しか読んだ事無いな。
- 369 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 10:54:00 ]
- >>366
わざわざtee使って複数プロセスにするから面倒な事になるんだろ。 ret = IO.popen("make", "r") {|mk| open("build.log", "w") {|log| IO.copy_stream(mk, log)} Process.wait2(mk)[1] } unless ret.success? abort "[Error] (build) #{src}" end IO.copy_streamがなければそのくらい作れ。
- 370 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 10:55:53 ]
- あ、teeになってないな、これだと。
copy_streamの代わりにこうでもしてくれ。 mk.each{|line| log.puts(line); puts(line)}
- 371 名前:365 mailto:sage [2010/04/05(月) 17:58:32 ]
- >>367,368
そうですか・・ 倍程度かなと勝手に予想してましたが、そんなに甘くはないですね ありがとうございました。
- 372 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 22:51:12 ]
- 書きやすくて実行しやすくてなおかつ投げ出したくならない程度の実行速度も求めた結果、
Ruby においてはメモリはすっげぇ大量に消費される ご存知の通り、プログラムにおいて実行速度とメモリ使用量はトレードオフだ どっちも良くしたい場合はアセンブラかせめて C で書か「ねばならない」 大量のデータを処理するのでなければ常識的な範囲内に収まるものではあるのだが、 大量のデータを処理することが事前にわかっているのなら Ruby を使わないほうがたぶん幸せ
- 373 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:17:25 ]
- 馬鹿な事いってんじゃないよ、
ムーアの法則知らないのか? それは、10年前のpcの話だろ
- 374 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:22:18 ]
- >>373
何言ってるの いつの時代もCPUは100パーセント使用されるし メモリはスワップにまで突っ込むし HDDは90%まで埋まるもんだよ 10年前のデータ量を現在のマシンで取り扱うなら、君の言ってることは真だろうね
- 375 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:34:47 ]
- ムーアの法則を知っていてパーキンソンの法則を知らないのはニワカ
- 376 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:35:36 ]
- >>372
大量のデータでまったく同じ処理を何回もするならそうかも知れない (大量の定義にもよるが) あるいはとにかく速さを要求されるならそうかも知れん ただ,大量のデータでもそんなに何度もしないならRubyの方が幸せかも知れん たとえばRubyで処理に1日かかってアセンブラなら半分の時間でできるとしよう coding/debug でその差以上得しなければ時間的にさえ得にならない 人件費ではさらに得にならない coding のオーバーヘッド評価しないと意味が無いから状況に依りすぎる 有名な教訓を思い出すなぁ "premature optimization is the root of all evil"
- 377 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:45:13 ]
- >>374
いわゆるデスクトップ版Linuxを使ってるとその思いが強くなる 10年くらい前は「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思い 5年くらい前には「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思い 今年インストールしたLinuxでも「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思ってる
- 378 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:59:29 ]
- >>377
いいかげんマシン買い換えようよ
- 379 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:31:18 ]
- >>378
えっ
- 380 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 14:16:53 ]
- 今すぐtwmに変更するんだ!
- 381 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 15:39:04 ]
- 通年重いのはツールキット部分だな
起動するGUIアプリケーションが全部OpenMotif使うようになるとかなら歓迎だがそうでもあるまい
- 382 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 18:11:00 ]
- Ruby 使うって時点で GTK だったりするのがアレだ罠
|

|