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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
267 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 09:54:00 ] 「RubyはGUIに向かない、Pythonにしとけ」ってのは、どういうこと? Pythonには、LinuxでもMacでもWindowsでも動くことができるGUIライブラリが標準で用意されてるんでしょうか。
268 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:04:22 ] というかRubyのGUIは全部間借りなのよ Ruby/TKはTcl/Tkというものを使ってて、Tkの勉強が必要 Ruby/GTKはGTKの、Ruby/QtはQt(Qt4)そのものの勉強をする必要がある Rubyの文法とか考えとかそういうものとは全く別のものを勉強しなければならない 「GUIはRails並に別」と言われる所以 「わざわざRubyから呼んで苦労背負い込むくらいなら 直接そのプログラミング言語を学んで直接起動させたほうがマシじゃね」という
269 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:07:09 ] > Pythonには、LinuxでもMacでもWindowsでも動くことができるGUIライブラリが標準で用意されてるんでしょうか。 これに全く答えてないわけだが。 Pythonには間借りでないGUIライブラリがあるわけ?
270 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:15:22 ] この際だから はっきり言ってしまうと Pythonの場合 wxPythonならwxWidgetsは覚える必要はないし PyQtならQtを覚える必要がない TkinterだけはTcl/Tkを知らないと使えないとは思うけど
271 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:35:23 ] Tclの難しいところ(変数/コマンド置換、制御構文のブレース等)はRubyがやってくれるから Tcl知ってる人がTk使えるようになるのと Ruby知ってる人がRuby/Tk使えるようになるのに必要な勉強の量は大差ないだろう 問題はLinuxでRuby/Tkが使えるようになるまでだけど RubyでGUIやりたいって言ってる人はたいていWindowsユーザなんじゃないか だとすればActiveScriptRuby入れてActiveTcl入れるだけでRuby/Tkが使えるようになるから PythonでTkinter使うのとたいしてかわらない とういわけでRubyでGUIスレの発展を切に願います
272 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:39:34 ] Ruby/Tkが学習距離的にいちばんマシではある 「とりあえずウィンドウとかボタンとか入力欄とか出せればなんとかなんじゃね」 というコンセプトがRuby寄りだ 「Tcl/Tkでいちばん難しいのはTcl」という本末転倒な症状もRubyなら軽減 が、Rubyを一通り学んでからGUIに手を出すという順番自体は重ねて推奨
273 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:48:22 ] >>270 それは>>269 の答えになってるの?それともただの独り言?
274 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:50:05 ] >>273 半分くらい答えになってるんじゃね?真偽は置いておいて。 というか何故そんなに喧嘩腰なんだ
275 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:54:18 ] wxPythonなんかも結局wxWidgetsのマニュアル見ることになるから あんまりRuby/Tkなんかと変わらないよ その辺はどこのGUIインタフェースも一緒
276 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:56:24 ] 深い使い方しないという範囲限定の話だと思う
277 名前:267 mailto:sage [2010/03/28(日) 11:02:09 ] >>268 プログラム言語によらず、GUIライブラリなんてそんなもんだと思っていたので、 RubyじゃなくてPythonだと何が嬉しいのかを知りたかったのです。 >>270 > wxPythonならwxWidgetsは覚える必要はないし > PyQtならQtを覚える必要がない GUIライブラリ固有の知識がなくてもPythonの知識だけでGUIが作れるということでしょうか。 これはにわかには信じられないのですが、ちょっとPython勉強して出直してきます。
278 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:08:16 ] ttp://www.ibm.com/developerworks/jp/linux/library/l-qt/ > Ruby/Qt の使い方は、PyQtにかなり似ています。どちらの言語も同じような動的特性 (dynamism) と > 簡潔性を備えていますので、個々の要素に名前の違いはあるにしろ、似た感じのコードになっていても > 不思議はありません。 RubyもPythonも似たようなもんなんじゃね?
279 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:08:42 ] でも俺はある程度Tcl/Tk知ってるからPerlでもRubyでもPythonでもTcl/Tk単体でも 学習コスト最低レベルでウィンドウを扱える まあ要は用途次第だな GUIを提供することだけが最重要で、その裏にあるプログラムの動作はどうでもいいとか
280 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:14:18 ] そもそものあれとしてGUIが必要な人はRubyを使わないし、 Ruby使ってる人はRubyからGUIライブラリを呼ぼうなんて考えない GUIが必要なときは素直に他の言語で書く
281 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:17:23 ] >>280 んなこたーない。 …とは思うものの、自分も Ruby で書かれた GUI アプリは Rabbit くらいしかしらない。
282 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:17:35 ] >>280 で、つまりRuby上のGUIは初心者の領域ではないという話になるわけか 別スレ立ったんだしとりあえずそっちでいいじゃん
283 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:18:38 ] >>280 それはそうだろうけど、その「他の言語」ってところでPythonを勧められることがままあると。 んで、PythonとRubyではそんなに違いないんじゃないの?ってのが>>267 の疑問では。 C#やらJavaやら勧められるんなら、そういう疑問は出てこないと思う。
284 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:20:22 ] >>281 goRua…は終わったか ホントにGUI部分の処理が面倒だなあ ウィンドウ処理と滅茶苦茶高次に融合したRubyとかないの
285 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:25:03 ] いいからこっちでやれ Railsとスレ分けられるんだからGUIとだってスレ分けられるだろ Ruby で GUI するスレ pc12.2ch.net/test/read.cgi/tech/1269609576/
286 名前:デフォルトの名無しさん [2010/03/28(日) 11:39:52 ] ここは初心者スレだからGUIの話もオッケーよ
287 名前:デフォルトの名無しさん [2010/03/28(日) 11:46:26 ] プログラミング初心者には、GUIってのは、すでに出来上がって動いている ものを操作するのは分かりやすいが、それをそう見えるように作るのは面倒 くさいということは知って欲しいなー。 テキストメッセージ1つのウィンドウを出す程度で満足なら別だけど。
288 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:59:32 ] Rubyで使えるGUIライブラリってどんなのがあるの? WndowsFormは使えんよね?
289 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:03:19 ] attr_writer :hogeとdef hoge=(h);@hoge = h; endは 同じ意味だと思いますが、どっちを使うべきなんですか?
290 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:10:29 ] >>289 前者は後者の意味であるということを理解してるならどっちでもいいよ 作ってる最中は attr のことが多いと思う 条件演算子→if式→case式 と移行するのと似たような感じで 結局後者(でメソッド内部で正規化処理つき)になることが少なくない
291 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:17:26 ] >>288 Ruby/Tk VisualuRuby Ruby/Qt4 Ruby/GTK2 WxRuby FxRuby Apollo Ruby/FLTK RubyShoes なんか終わってるのもいくつかあるが気にするな
292 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:22:24 ] >>290 ありがとうございました
293 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:22:57 ] >>291 ありがとうございました
294 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:01:29 ] test do 例外が発生する可能性のある処理 end ---------------------------------------------------------------------------- def test begin 例外が発生する可能性のある処理 yield ensure;end end このようなコードを書いたのですが、test do; endの適切な処理がわかりません 教えてエロ人!!
295 名前:デフォルトの名無しさん [2010/03/28(日) 13:06:36 ] 発生したときどうしたいのさ?
296 名前:294 mailto:sage [2010/03/28(日) 13:18:57 ] >>295 test do endの中で全ての例外を処理し、 例外が発生した時はメソッドをreturnで終了させたい
297 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:24:46 ] > test do endの中で全ての例外を処理 えー そういう場合はメソッドのユーザーが自分の責任で begin で括る begin test do ... end rescue => e error_handling(e) end
298 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:30:30 ] >>297 THX
299 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 15:51:35 ] チルダとダブルクォーテーションの使い分けって何かあったっけ? 何か重要なものがあったような気がするけど思い出せないんだ
300 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 15:55:41 ] 質問が微妙によくわからないけどこれ置いとく doc.okkez.net/187/view/spec/literal ja.wikipedia.org/wiki/%E3%83%81%E3%83%AB%E3%83%80
301 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:01:10 ] チルダ ( ~ ) ? Ruby で ~ を使うのは、マッチング演算子の =~ とその否定の !~ と、 前置の単項演算子で、整数のbitwise-not、正規表現オブジェクトと $_ とのマッチ、 IPAddr オブジェクトのbitwise-not、なので、ダブルクォートとの使い分けをする場面は ないと思うが...
302 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:08:37 ] 間違ったプライムだ 文字やら文字列列をくくる時なんかに使うアレ
303 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:10:41 ] ′や″をRubyで使うことはない
304 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:13:32 ] 「円記号でエスケープ」と聞いて¥を使ってしまうようなピュアな人がここにも…ッ というか文字列括る記号はさっき出てた ttp://doc.okkez.net/187/view/spec/literal#string このへんで用が済みそうだが
305 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:17:51 ] うーn?%記法とやらを使えってか? >>doc.okkez.net/187/view/spec/literal とりあえずこれ読んでくる
306 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:20:10 ] LispやErlangなんかのフォーマット文字列だっけ チルダ使うの
307 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:20:46 ] 親クラスのアトリビュートにアクセスするためには、どうすればいいんですか?
308 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:26:42 ] 記号の区別の知識があることがやっぱ前提だよな "''゛“"”′″`'‘’
309 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:29:56 ] >>307 Rubyにはアトリビュートというものはない 継承されたクラスの a というメソッド内部から継承元の同名のメソッド a にアクセスするには super を使う
310 名前:307 mailto:sage [2010/03/28(日) 16:34:42 ] >>309 そんじゃ、親クラスで定義した@hogeには サブクラスから(メソッドを通さず)アクセスできないってことですか?
311 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:40:09 ] >>310 え、いやふつーにアクセスできると思うんだが irb> class C; def initialize; @hoge="hoge"; end; end irb> class C2 < C; def hoge; @hoge; end; end irb> p C2.new.hoge "hoge"
312 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:59:36 ] 読み方いくつかバリエーションあるんだが " ダブルクォート(ダブルクォーテーション) ' シングルクォート(シングルクォーテーション) ` バッククォート でいいよな 表記の揺れは許容
313 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:05:59 ] ( ) カッコ、パーレン、小カッコ { } ブレース、波カッコ、カーリーブラケット [ ] ブラケット、角カッコ
314 名前:デフォルトの名無しさん [2010/03/28(日) 17:08:01 ] シェルスクリプトやPerlの知識はいくらか前提にしたいなー。
315 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:15:11 ] プライムは 1′23″ とか書くときに使う記号だな
316 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:58:23 ] >>312 「マーク」を付けないところが童貞っぽい。 IPアドレスをIPって略しちゃうのと一緒で。
317 名前:307 mailto:sage [2010/03/28(日) 18:00:19 ] >>311 JRubyでJavaのコードを継承しているんだけど なぜかnilになっちゃう
318 名前:307 mailto:sage [2010/03/28(日) 18:20:48 ] どうやら、JRubyからJavaのフィールドにアクセスするためには 絶対publicじゃないとダメみたい しかもJRubyではローカル変数としてアクセスするみたい class Super{ public String str = "str" } class Sub < Super def initialize p str end
319 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 19:11:37 ] >>315 わかったからもうやめて 俺のHPは0だ
320 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 19:20:27 ] >>316 ダブルクオーテーションとダブルクオーテーションマークに何か違いでも
321 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 19:43:07 ] フルだとどうにも長いからな IPアドレスなんかとは違って紛らわしい候補はないから縮めてもらっても意味はわかるが そもそもがダブルクとかシングルクとかそれくらい短いといいのに
322 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:04:45 ] 一重引用符、二重引用符で各5文字だ。
323 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:19:17 ] >>322 それは、カギカッコと区別がつきづらいので使わないで欲しい。
324 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:21:07 ] 半角単引用符 半角複引用符 6文字でFA
325 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:24:53 ] ほほう«ギュメ»は‹引用符›ではないと申されるかこれは異なことを …いいよもうシングルクオートで
326 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:27:50 ] 次の瑣末粘着者さんどうぞ
327 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:06:44 ] メソッドの名称とかモジュールの名称って 短い方がプログラムの実行速度が速くなるとかありますか?
328 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:12:59 ] …いつのBASICだ 気にする必要はない 変な省略はせずにわかりやすい長めの名称推奨
329 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:38:43 ] 大きなオブジェクトを変数に入れた後は変数に nil を明示的に指定すると メモリ内に巨大なデータがいつまでも残ったままになったりしません とか書いたら信じて実行してくれるだろうか
330 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:49:44 ] irb だとわかるけど、 require するとけっこうメモリ食うよね
331 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 01:56:45 ] win32版Ruby1.87(OSはWindowsXP)9で、漢字を表示するようなスクリプトをUTF-8で保存して スクリプト一行目に#! ruby -Kuと入れて実行したら文字化けした -KsにしてS-JISで保存して実行したら直った ・・・ちゃんとBOM無しとやらにしたのに何でかしら?Ruby本体の設定とかあって、それを間違えてるとかかしら? ちなみに使用したのはサクラエディタ
332 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 02:12:20 ] >>331 Windowsという事は、コマンドプロンプトで実行したという事ですね。 コマンドプロンプトはデフォルトではSJISしか正しく表示できないのです。 コードページをUTF-8に変更すれば表示できると思われます。 方法は「コマンドプロンプト コードページ UTF-8」でググってみて下さい。
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 だったりするのがアレだ罠