1 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 17:31:07 ] プログラミング言語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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
355 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:49:15 ] >>354 ・性能落ちるかもしれない不安 ・今後消えるかもしれない不安 だと思う
356 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:52:52 ] 言語処理系としてのruby1.9独自仕様なのか、 それともプログラミング言語Ruby1.9の仕様と解釈していいのか混乱があるのでは もし前者だとしたら、処理系依存には抵抗がある ハチドリ本いわく >Ruby 1.9 では、ハッシュの要素は、実装によっては挿入された順序で反復処理される。 う〜ん・・・・・
357 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 01:19:10 ] >>355 性能というのが速度のことであれば逆に速くなった。 というか、だからこそ入った。
358 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 01:22:27 ] 確かに列挙は早そうだな
359 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:14:22 ] 実装依存じゃOrderedHashのつもりで使うのは御法度か
360 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:16:02 ] rubyの開発グループは本当に人材酷いな。Railsに全部任せちゃえよ
361 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:36:06 ] いやいやRailsの人たちに任せたら新機能と非互換がTINYごとにどんどん増えるよ。
362 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 04:38:27 ] >>360 お前Rails使ってないか、あるいは使い始めたの今月だろ
363 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 05:31:14 ] 来月には後悔するのか、流動性速すぎだろRails
364 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 07:24:58 ] Railsは、こっち推奨になりました→やっぱやめました→ごめん、やっぱこれ とかバージョンアップのたびにあったりして笑うw いや、使っている方としてはどっちだよ!とか思うけど
365 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:11:13 ] 前田さんたちに頑張ってもらって、言語仕様で明文化してもらうまでは Hashのキー順序については昔ながらの意識でいることにする。
366 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:28:47 ] JISの話なら、1.8ベースだから順序の保証は入らんと思うぞ
367 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:37:01 ] >>338 >>328 のmethod_defined?も。 >>329 ある機能自体がある定数やメソッドで提供されてるんだから、最も自然だろう。
368 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:22:53 ] defined? や responsed_to? はダックタイピング用の機能であって モジュール存在判定に使うもんではないと思う
369 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:48:38 ] むしろモジュールの存在を問わず メッセージに応答できるか否かだけを問うべきでは?
370 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:54:42 ] 実際に必要なのは処理結果であって返事そのものではないというのが理想と現実の深くて暗い谷間
371 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:01:47 ] >>368 ダックタイピングならそんな判定はしない
372 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:04:48 ] ていうかさあ、responed_to? 使ってる奴だって その名前のメソッドを持っていることを期待してるのではなく 「Ruby 1.9 の」 force_encoding であることを期待しているんだろ じゃあそれの条件をきちんと書けよ
373 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:08:05 ] >>372 期待していない不正なメソッドが動作した場合はたいてい例外が発生してプログラムが止まる
374 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:26:09 ] if str.respond_to?(:force_encoding) && defined?(::Encoding::ASCII_8BIT) && str.respond_to?(:encode) && str.respond_to?(:encoding) && defined?(::Encoding::UTF_8) && str.class.new.encode(::Encoding::UTF_8).encoding == ::Encoding::UTF_8 && (_ = str.class.new.encode(::Encoding::UTF_8).force_encoding(::Encoding::ASCII_8BIT); _.encoding == ::Encoding::ASCII_8BIT) then str.force_encoding(::Encoding::ASCII_8BIT) end
375 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:35:44 ] プログラムが止まったあと>>373 がどう改修するのかにちょっと興味がある どうせ基本雑談なので次の質問の方気後れせずにどうぞ
376 名前:デフォルトの名無しさん [2009/09/27(日) 00:35:12 ] blog.livedoor.jp/dankogai/archives/51183588.html 上のページに掲載されているjavascriptを使って、ブラウザ上で文字列にRaw Deflateにかけた上で Base64 encodeしたデータをサーバへ送信し、 サーバ側ではrubyでBase 64 decode、標準のzlibライブラリを用いてRaw Inflateしたいのですが、 「Zlib::DataError: incorrect header check」が発生しうまく圧縮データを伸張できません。 サーバ側のrubyは以下のようなコードです。 #!/usr/bin/ruby require 'zlib' data = "(javascriptで生成した圧縮データ)" p Zlib::Inflate.inflate(data.unpack('m')[0]) ちなみに、perlだと同じように標準的なライブラリを使って以下のようなコードで圧縮データを伸張できましたので、このjavascriptのコードが特殊なことをやっているというわけではないのかな?と思います。 #!/usr/bin/perl use IO::Uncompress::RawInflate ':all'; use MIME::Base64; $data = "(javascriptで生成した圧縮データ)"; $decoded = decode_base64($data); rawinflate(\$decoded => \$inflated); print $inflated; このJavascriptライブラリ特有の問題なのか、rubyの問題なのか切り分けができておらず微妙かと思ったのですが、 perlで動いたので一度ruby界隈で聞いてみようと思い書き込みしています。 何か分かりましたらご教授いただけないでしょうか。
377 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 00:49:00 ] unpackが怪しい気がするから、Base64デコードしたデータのハッシュを、Perlのやつと比べてみたらどうかな? あと、詳しくないんだけど、そもそもRawDeflateと普通のDeflateって同じものじゃないとか?
378 名前:デフォルトの名無しさん [2009/09/27(日) 01:20:21 ] >>377 まさかと思って調べたところ、RawDeflateと普通のDeflateが違うものでした。 考えが及びませんで、ありがとうございました。 RawDeflateにchecksumなんかが頭についたものがDeflateのようで、以下のようにしたら動きました。 p Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(data.unpack('m')[0])
379 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 03:45:29 ] 配列の中にハッシュ入れたんですけど a = [0, {1 >= 5}, 3] これの配列データがFixnumかハッシュかどうかで処理を分けたいんですが is_a?(Fixnum)で分岐させようとしたらエラーが出ました classで調べたらエラーが出ます どうすればいいんでしょうか?
380 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 03:56:08 ] {1 >= 5} でエラーという落ちじゃないだろうな ちょっとコードをはってみろ
381 名前:379 mailto:sage [2009/09/27(日) 04:07:10 ] class hogehoge def mastery_open_flag MASTERY_ARRAY::HASH_DATA[1].each{|i| open_flag = true if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum) MASTERY_ARRAY::HASH_DATA[1][i].each{|index, level| unless @actor.mastery_level_data[index] >= level open_flag = false end } if open_flag @actor.mastery_open_data[i] = true end end } end end エラーはTypeErrorで cannot convert Hash into Integerと出ます
382 名前:379 mailto:sage [2009/09/27(日) 04:08:30 ] module MASTERY_ARRAY HASH_DATA[1] = [ 0, 0, {0 => 5, 1 => 3}, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ] end モジュールの配列です。
383 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:19:58 ] どの行でそんなエラー出てるんだい
384 名前:379 mailto:sage [2009/09/27(日) 04:28:48 ] if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum) ここです 配列のインデックス2のハッシュ読もうとしたら出ます
385 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:35:08 ] mastery_open_flag の MASTERY_ARRAY::HASH_DATA[1].each{|i| ... } の i に hash が きてるからだろう。 i = {0 => 5, 1 => 3} if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum) 状態で配列のインデックスにハッシュをブチ込んで、 整数に変換できないよエラーになってる。eachの i にインデックスが入ると勘違いしてない?
386 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:38:30 ] www.ruby-lang.org/ja/man/html/Array.html の each と each_index をよく読むといい って、eachの例がeach_indexの結果と区別つきにくいね…1,2,3じゃない例つかえばいいのに
387 名前:379 mailto:sage [2009/09/27(日) 04:40:24 ] あーそういうことですか インデックス入らないと困るんですが 何かうまい書き方ありますか? とりあえず考えてみます あったらお願いします ありがとうございました
388 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:47:09 ] each {|要素| ... } each_index {|インデックス| ... } each_with_index {|要素, インデックス| ...}
389 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:49:28 ] 用件は「要素が整数であること」なんだろうか 「要素がハッシュであること」なんじゃなかろうか MASTERY_ARRAY::HASH_DATA[1].each{|e| open_flag = true if e.kind_of?(Hash) e.each_pair{|index, level| open_flag = false unless @actor.mastery_level_data[index] >= level } end @actor.mastery_open_data[e] = true if open_flag end
390 名前:379 mailto:sage [2009/09/27(日) 04:58:13 ] おーすごいさすがプログラム板 each_indexで動きましたありがとうございます 389さんが書いたとおり「要素がハッシュであること」が評価の大筋です kind_of?(Hash) これは知りませんでした なんとかいけそうですありがとうございました
391 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 05:02:31 ] >>389 @actor.mastery_open_data[e] = true の e は each_with_index の i だと思う 要はナントカデータは全部要素数 100の配列なんだろう マス目みたいに決まっててアクセス手段がインデックスしかないんだ MASTERY_ARRAY::HASH_DATA[1].each_with_index{|e, i| open_flag = true e.each_pair{|index, level| open_flag = false unless @actor.mastery_level_data[index] >= level } if e.kind_of?(Hash) @actor.mastery_open_data[i] = true if open_flag }
392 名前:デフォルトの名無しさん [2009/09/27(日) 13:24:58 ] Win32で一文字入力してすぐ制御を返すサンプルないですか?
393 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:44:36 ] Curses.getch は?
394 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:44:37 ] ありがとう。 Winにもcursesってあるのか。
395 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:53:34 ] >>394 普通に導入可能だよー
396 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:22:24 ] rubyでCGIの勉強しようとおもって lighttpdをインストールしました。 ところが、設定方法がわからず、htmlは表示出来るのですが cgiが動きません。涙目状態です。あちこちググりました・・・ 途方にくれています・・・
397 名前:デフォルトの名無しさん [2009/09/27(日) 21:25:08 ] mongrelをいれるといいよ
398 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:26:57 ] 力になっちゃあげたいけど、スレ違いかな・・・ WebProg板か、どっかにLighttpdのスレがあるから、そこで質問したらいいよ
399 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:28:09 ] SocketってライブラリがあるからそれでWebサーバ書くのがいいと思うな というか環境や参考にしたページをどこまで試してどこで詰まったとか そういうのも無しに答えられるわけないので
400 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:30:33 ] それが無いこと自体が答だろ つまり、サーバ立てる知識が無い
401 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:32:26 ] >>398 lighttpdのスレは先に見ました。最終書き込みが8月、その前が6月くらいと 人の気配が感じられませんでした・・・
402 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:36:43 ] どう転んでもWebサーバの挙動の知識は必要になるわけなんだし 普通にゼロから勉強したほうが早いんだけどね
403 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:36:52 ] Linuxなら各ディストリの初心者スレにいけば、誰かが教えてくれそう。
404 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:40:14 ] >>402 まったくだぬ 「WebサーバやHTTPはお着せとコピペで済ませて本題のRubyの学習をしよう」というのは CGI関連に限ってはありえん
405 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:44:58 ] >>404 翻訳しながら、lighttpdの本家のページ見てみます。 mongrelも検討してみます。 apacheの設定よりは、ずいぶん楽そうに見えたんですが。。
406 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:47:26 ] 中途半端にマイナーなサーバソフトウェアだと情報が全くないということはばしばしある めっちゃメジャーなのを小規模で使うのが結局マシだったりすることは意外と多い
407 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:50:40 ] 自分用WebサーバはApacheを接続数とか1人用に絞って使うのが一番だという結論になった
408 名前:デフォルトの名無しさん [2009/09/27(日) 21:50:52 ] >>396 はどう動かないか書いていないから誰も助けようがないよ。 cgiがどう動かないのさ。スクリプトを貼ったりしろよ。
409 名前:デフォルトの名無しさん [2009/09/27(日) 22:02:07 ] Apacheの方が情報多いのに。
410 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:03:40 ] >>408 /var/wwwがドキュメントルートディレクトリで、ここに1.html /usr/lib/cgi-binがcgiディレクトリに、1.cgi 1.htmlで、action=/usr/lib/cgi-bin/1.cgiと記述。 ブラウザで、localhost/1.htmlを表示。ボタンを押すと 404 not foundとなります。 lighttpd.confでのcgiディレクトリ指定が間違ってるんかなぁと・・
411 名前:デフォルトの名無しさん [2009/09/27(日) 22:13:48 ] ログをまずは見ようぜ。 1.cgiに実行権限がついているかとか1.htmlの読み込み権限とかもチェックしような
412 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:15:53 ] action=/usr/lib/cgi-bin/1.cgi っておかしいだろ… lighttpd とかにかかわらず /usr/lib とか公開するとは考えにくいから action=/cgi-bin/1.cgi とかなんじゃないのか この調子じゃ権限とかもだめそうだな
413 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:31:01 ] >>396 RubyでCGIの勉強をするなら、lighttpdから始めるのはオススメしない cgi.rbを使って、WEBrick上 or Apache上で動かしてみるとか Sinatra使うとかしたほうがいい
414 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:40:09 ] >>411 chmod 755はしてあります。 >>412 あ、cgi-binでいいんですね。フルパスにしちゃいました。 たしかに公開しないですもんね。
415 名前:デフォルトの名無しさん [2009/09/27(日) 22:52:59 ] ファイルの所有者も確認しような lighttpdを起動したユーザがownerだよな?
416 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:55:57 ] 式がnil, false, 0なら偽になるif文てないの?
417 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:06:09 ] >>415 ファイルオーナーが、「root」ですね lighttpdは、「www-data」が起動してます sudo cpでファイルを/usr/lib/cgi-binにコピーすると 所有者が、ルートになってしまいます。 ちょっと、apacheや他のを調べてみます。みなさん、スレ違いに付き合って くださって申し訳ありがとうございまsyた
418 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:18:45 ] >>416 !x || x== 0 '' や [] や {} も偽にしたいならActiveSupport入れてblank? と present? を使え。
419 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:23:03 ] >>418 それだとnil, false, 0で真になるんだけど。偽がほしいんですが無理なんですか?
420 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:29:26 ] x && x != 0 どんだけ応用力ないのかな…
421 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:33:29 ] いかにも落とし穴がありそうだと漏れのアンテナが反応しております
422 名前:418 mailto:sage [2009/09/27(日) 23:35:35 ] すまん逆転させるのわすれてた。てへ。
423 名前:デフォルトの名無しさん [2009/09/27(日) 23:49:22 ] >>417 ファイルの権限を777にして実行してみな。 それで実行できれば権限関係の設定がおかしかったってことだ linuxの基礎を勉強私的な。
424 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 10:48:55 ] Digest::MD5.digest の値を hexdigest に変換する計算式を教えてください。 convert(Digest::MD5.digest(value)) == Digest::MD5.hexdigest(value) となるようなconvert()です。 あるいはヒントでもいいのでお願いします。
425 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 10:59:18 ] そのへんはさすがにマニュアルにも書いてあるだろ > 与えられた文字列に対するハッシュ値を、ASCIIコードを使って 16進数の列を示す文字列にエンコードして返す。 ということで irb> p Digest::MD5.digest('12345') "\202|\313\016\352\212plL4\241h\221\370N{" irb> p Digest::MD5.hexdigest('12345') "827ccb0eea8a706c4c34a16891f84e7b" irb> p Digest::MD5.digest('12345').unpack("H*")[0] "827ccb0eea8a706c4c34a16891f84e7b"
426 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 11:12:25 ] >>425 ありがとうございます。 1バイトずつ16進数に変換するということなので、こう理解しました。 irb> Digest::MD5.hexdigest('foo') => "acbd18db4cc2f85cedef654fccc4a4d8" irb> Digest::MD5.digest('foo') => "¥254¥275¥030¥333L¥302¥370¥¥¥355¥357eO¥314¥304¥244¥330" irb> Digest::MD5.digest('foo').unpack('C*') # 1バイトずつに分解 => [172, 189, 24, 219, 76, 194, 248, 92, 237, 239, 101, 79, 204, 196, 164, 216] irb> Digest::MD5.digest('foo').unpack('C*').collect{|c| '%x' % c } # 16進数に変換 => ["ac", "bd", "18", "db", "4c", "c2", "f8", "5c", "ed", "ef", "65", "4f", "cc", "c4", "a4", "d8"] irb> Digest::MD5.digest('foo').unpack('C*').collect{|c| '%x' % c }.join == Digest::MD5.hexdigest('foo') => true なるほどー。 どうもでした。
427 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:26:36 ] Dir.foreach('hoge'){|filename| filename.match(/(aaa)(bbb)/} print $1 } この状況で、$1や$2の情報を配列に入れるにはどうすればいいですか? 具体的にはこの後、$1の内容について一つ一つ処理をしていきたいんです。
428 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:39:11 ] ary = [] Dir.foreach('hoge'){|filename| filename.match(/(aaa)(bbb)/} ary << [$1, $2] # もしくは ary << $1 << $2 } p ary
429 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:47:13 ] filename.scan(/(aaa)(bbb)/)
430 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:51:17 ] >>428 「<<」ってこういうところで使うんですね。 勉強になりました。ありがとうございました!
431 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 00:50:52 ] rubyを使ってgnuplotで簡単にグラフを書きたいんだけど、 何かお勧めありますか?
432 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 08:15:40 ] h = YAML.load_file(path) @username ||= h[:user]||h[:username]||h[:id]||h['user']||h['username']||h['id'] @password ||= h[:pass]||h[:password]||h['pass']||h['password'] イライラ
433 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 12:52:20 ] エディタから編集中のRubyのスクリプトを独立したウィンドウ、ターミナルで起動したい エラーがあったらエディタがそれを取り込んでタグジャンプしたい teeやら別のモジュールをrequireするのはなるべく避けたい もちろんユーザーはputs/getsを制約なく使いたい といううまいやり方ってないですか? ようするにエラーが出たらそれだけをログファイルに書き込んでrubyは終了コード1を返したいです 標準エラーをファイルに書き込むようなファイルをこっそり-rするのが現実的なんですかね
434 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 13:06:42 ] >>433 Emacs使え
435 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 13:10:50 ] 標準の ruby-mode で M-x run-ruby で Emacs 内に irb 開いて M-x ruby-load-file → Enter すれば irb でファイルが実行されるな エラー行ジャンプはどうしようか
436 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 14:56:39 ] >>432 >h = YAML.load_file(path) >@username ||= h[:user]||h[:username]||h[:id]||h['user']||h['username']||h['id'] >@password ||= h[:pass]||h[:password]||h['pass']||h['password'] YAML使ってるなら、キーは文字列になるだろうから、Symbolは考えなくていいんじゃないかな。 YAMLでわざわざSymbolをキーに使うとは考えにくい。 @username ||= h['user'] || h['username'] || h['id']
437 名前:デフォルトの名無しさん [2009/09/29(火) 19:21:13 ] 1万PVのPHPで作られたサイトをRuby(ROR)かScala(Lift)どちらかを使って バージョンアップしようと計画していますが、どちらがお勧めでしょうか? TwitterもRubyからScalaへ書き換えたりしていますので...
438 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 19:28:02 ] 問題ないならPHPのままにしておく
439 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 19:33:59 ] scalaって日本でも実績あるの?
440 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:17:30 ] 1万PVって何かを説明してるように見えて、実際はまったく説明してないよなあ。 開設以来10年で1万PVなのか、毎秒1万PVなのか。
441 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:21:10 ] >>434-435 特定のエディタの話はしてないんだけど…
442 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:22:53 ] 一応、単位としては1日か1ヶ月かのどっちかだな 1日1万PVならコンテンツによってはまあ普通 1ヶ月1万PVなら内容によっては閉鎖したほうがエコ どっちにしてもPHPで動いてるならPHPで増強したほうがきっと楽だ
443 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:24:12 ] >>441 だからEmacs使えって どうせ使いもしないで脳内で考えてるんだろ
444 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:28:12 ] エディタの布教は余所でやれ。
445 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:32:33 ] 求めること全部できるんだから仕方あんめえ エディタとして動作するものではEmacs以外ではgvimかPeggyくらいしか心当たりがない どう動作するのが効率いいかの研究もEmacsの動作見れば丸分かりだ
446 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:35:49 ] 特定のエディタじゃなくて何を求めてるんだ どんなエディタでも連携して動く万能スクリプトが欲しいのか
447 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:38:44 ] >>446 たぶんそうだと思う エディタ内でシェルを起動するのでなければ emacsclient みたいなシステムがないと無理だと思うんだけどね というか、できないからこそ数十年かけて Emacs が M-x compile を進化させてきたのではないんかのう
448 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:43:52 ] うん、Emacsのとか使ってれば「Rubyは特に関係ない」ということにすぐ気づけたはずなのに コンパイラ等が異常終了コードをシェルに返してエラー行を標準出力などに表示さえしてくれれば用は済む
449 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:45:04 ] $stderr.reopen($0 + ".errorlog")
450 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:54:21 ] >>442 単純にPVって言ったら普通に日単位だろ 何この馬鹿
451 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 23:38:21 ] >>437 >1万PVのPHPで作られたサイトをRuby(ROR)かScala(Lift)どちらかを使って >バージョンアップしようと計画していますが、どちらがお勧めでしょうか?
どういう理由でバージョンアップしようとしているのかがわからないので、答えられる人はいないでしょう。 パフォーマンスが理由ならRoRはイバラの道だし、開発効率が理由ならLiftはイバラの道。 どちらの道を選んでもイバラの道だと思うので、PHPのまま改善することをお勧めします。 あるいはPythonを使ってGoogleAppEngineにするとか。これもイバラだな。
452 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 23:47:46 ] railsは慣れてしまえば今までの開発が馬鹿に思えるぐらい楽になる
453 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 23:49:40 ] 日に1万PV程度なら、サーバ丸1台あればRoRでも余裕だよ。 下手するとキャッシュなしでもいけるくらい。
454 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 00:35:22 ] そりゃ1日8万秒以上あるんだから言われなくても分かる
455 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 06:13:47 ] 結局ピーク性能が足りるかどうかだよな。
456 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 08:24:47 ] そして既存のPHP+サーバではおそらく足りてるわけであって、 現時点で言えることは「じゃあPHPでやっとけ」にしかならんという
457 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 10:56:30 ] でも結局ピーク性能が足りるかどうかだよ。
458 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 11:42:46 ] おいちょっと待てよ、ピーク性能が足りてるかどうかが問題だろ
459 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 11:46:40 ] WebProg板に帰れ
460 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 12:24:24 ] 1ヵ月1万PVwww
461 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 12:57:50 ] いや、ここはピーク性能が足りるかどうかが肝だろ。
462 名前:デフォルトの名無しさん [2009/09/30(水) 18:46:43 ] 全角の数字を半角にしようと下記のフィルタつくったんだけど 変換されないで、元の値が戻ってくる。 何が間違ってるか教えてください。 使う文字コードはUTF-8です。 #全角数字を半角数字に変換するフィルタ def zen_to_han_int(str) outstr = str.gsub(/0/,"0") outstr.gsub!(/1/,"1") outstr.gsub!(/2/,"2") outstr.gsub!(/3/,"3") outstr.gsub!(/4/,"4") outstr.gsub!(/5/,"5") outstr.gsub!(/6/,"6") outstr.gsub!(/7/,"7") outstr.gsub!(/8/,"8") outstr.gsub!(/9/,"9") return outstr end
463 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 18:52:32 ] >>462 str とスクリプトファイルの文字コードが合ってない ごく一般的には str とスクリプトの正規表現リテラルの文字コードは同一にする …あーつまりスクリプトのファイルが UTF-8 じゃないか str が UTF-8 じゃないか あるいは ruby -Ku のような実行指定をしてないかどれか
464 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 18:53:19 ] 今はじめて気がついたけどメイリオって数字が全角と半角全く同じに見える。きめぇw
465 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 18:54:43 ] def zen_to_han_int(str) p "yes!" if /0/ =~ str end これで 0 を含む文字列渡したときに "yes!" と表示されなければ>>463
466 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:10:23 ] むしろ、メイリオになってから、半角全角混同さんが気にならなくなりました ^p^
467 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:12:28 ] やっとWindowsに標準添付された真の意味での表示用のフォントだからな 表示されるぶんには全角半角の区別がある意味は何もないわけで つまり区別が必要な人は使ったら駄目よ
468 名前:デフォルトの名無しさん [2009/09/30(水) 20:25:22 ] >>463-465 見直したら、スクリプトがS-JISでかかれてました。 $JCODE = "UTF-8" ってやってもだめなのね もうひとつ、お願いします。 #数字に変換できるか def intrger_string?(str) begin Integer(str) return true rescue ArgumentError return false end end Rubyレシピブックのまるぱくりなのですが 3桁の先頭に0を含む文字列を渡すとfalseになる場合があります。 例えば078から099までのあいだとか これも原因が良くわかりません。 どなたか教えてください。
469 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:30:25 ] >>468 8進数
470 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:30:28 ] 該当メソッドのマニュアルくらい読め ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#Integer マニュアル読んだ上でここがわからんとかそういう質問してくれ どうせマニュアル読んで調べてる時間のほうが長いんだから、マニュアルの見方を勉強したほうが結局は得だ
471 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:18:02 ] >>468 $JCODEってなんやねん
472 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:21:37 ] >>468 0x1234 とかも渡してみろ。
473 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:47:46 ] >>468 正規表現じゃだめなん? del integer_string?(str) return str =~ /¥A¥d+¥z/ end
474 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:25:26 ] >>469-470 お恥ずかしいです 下記のように書き直しました def intrger_string?(str) if str.gsub(/\d/,"").size == 0 then return true else return false end end >>471 $KCODEの間違えです(´Д⊂
475 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:32:57 ] >>473 それだと2/8/16進表記に対応してないから>>468 とは別物になるぞ
476 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:56:18 ] >>474 メソッド本体だが、ifの条件式が 成立したら(=false, nil以外を返ったら)true 成立しなかったら(=falseかnilが返ったら)false を返すだけなので、その条件判定式だけでruby的には十分。 ところで str == '' のときはtrue/falseどっちになって欲しいのだろう?
477 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 08:49:38 ] >>475 十進だけにしたいんだろ /\A\d+\z/ =~ str が最善だと思う
478 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 11:28:02 ] hoge= メソッドと hoge メソッドって、どっちが先に定義されてると自然? reader があってから wiriter があるとわかりやすいよね?
479 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 14:25:42 ] attr_reader :hoge def hoge=(value) でやるのが俺の定番 でも両方書くなら書きやすさ的にライタ側から書くかなあ
480 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:38:52 ] ここの真ん中辺のコードなんですが ttp://www.aoky.net/articles/why_poignant_guide_to_ruby/chapter-4.html wordlist.rb code_words = { 'スターモンキー' => '新帝国の神経質な閣僚のフィルとピート', 'カタパルト' => 'chuckyゴーゴー', '火炎瓶' => '暖房つきのリビング', 'ナイジェリア' => "Ny and Jerry'sドライクリーニング(ドーナッツ付き)", 'とどめをさす' => 'コンセントをさす' } require 'wordlist' # 邪悪なアイデアを取ってコードワードと入れ替える print "新しいアイデアを入力してください: " idea = gets code_words.each do |real, code| idea.gsub!( real, code ) end メソッドdoのブロック引数で、real, codeの二つが出てきます。 これはなんですか?意味がわからないです。。。 コピペで、rbファイルを2つ作って、下のコードをruby hoge.rbとして実行しても 想定通り動きませんし・・・
481 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:53:16 ] >>480 こゆこと これなんぞと思ったら出力して中身を見れ code_words.each do |key, value| puts "#{key} -> #{value}" end ナイジェリア -> Ny and Jerry'sドライクリーニング(ドーナッツ付き) カタパルト -> chuckyゴーゴー スターモンキー -> 新帝国の神経質な閣僚のフィルとピート 火炎瓶 -> 暖房つきのリビング とどめをさす -> コンセントをさす
482 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:54:10 ] だからそういう文法というか基本クラスのメソッドの使い方っぽいのは マニュアルを一応眺めてから「ここの部分がさっぱりわからんおまえら親切に教えろ」とか言ってくれ 親切かどうかはともかくおおむね解説なりツッコミなりが入るからさ ttp://www.ruby-lang.org/ja/man/html/Hash.html#each > key と value を引数としてブロックを評価します。 self を返します。 {:a=>1, :b=>2}.each_pair {|k, v| p [k, v]} # => [:a, 1] [:b, 2]
483 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:54:20 ] doはメソッドではない。ではdoでなければメソッドは何でしょう?
484 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:59:00 ] >>482 それはマニュアルを読むだけの力があるのに 手抜きして読まない人向けのお言葉
485 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:00:29 ] >>483 do はブロック開始の(予約)文字列 メソッドに引数を渡すときの ( と ) それそのものがメソッドではないのとおおむね同じ理屈 文字列だからたまたま読めるだけで、別に <<<<<< >>>>>> でもよかった
486 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:06:57 ] >>481 eachメソッドがハッシュに対して使われたときは、その引数は |key,value|という形になるわけですね。 >>482 申し訳ないです。 >>483 481の結果からすると、each(すべての要素にたいして)do以下を行えという ことだと思いますが、メソッドでないならdoはなんだろう。
487 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:14:30 ] >>481 実行してみました。 undefined local variable or method `code_words' for main:Object (NameError) というエラーが出ました。code_wordsが定義されていない?
488 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:20:19 ] 初心者が最初にwhyの感動的rubyガイドで勉強するのは 不適切だったりしますか?
489 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:44:46 ] >>488 こっちのが無難 www1.tf.chiba-u.jp/~shin/tutorial/index.rb
490 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:56:55 ] >>486 だから、doは予約語だってば。 ifがメソッドでないのと同じ。
491 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:12:37 ] > >>483 > 481の結果からすると、each(すべての要素にたいして)do以下を行えという > ことだと思いますが、メソッドでないならdoはなんだろう。 そのeachはなんですか? すべての要素にたいして、というおまじないか何かですか? プログラミング言語はそういうふわふわとしたものではないです。
492 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:21:35 ] おまいら、ここは初心者スレだ。 初心者っつーのはとんでもない思い込みや勘違いをしていることも多いんだから あたたかい目でみてください。 >>486 >メソッドでないならdoはなんだろう。 すでに指摘があるように、doは構文を表す予約語のひとつです。 while i < 10 do print i end では、whileやdoやendが予約語です。なおこの場合ならdoは省略可能。 [1, 2, 3].each do |x| puts x end なら、each や puts はメソッド名、do と end は構文を表す予約語。
493 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:39:54 ] do が何だかわかりませんレベルの人には来て欲しくないな 質問するなら最低限、言語の基礎は身に付けておいて欲しい これくらいは自力で学習、調査しておくのが質問する側のマナーだろう
494 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:42:28 ] そもそも、動作としては arr.each(ブロック) なんだよ オブジェクト arr の インスタンスメソッド each に引数でブロックを与えている ただ、便利なブロックがこのままだとたいそう使いにくいので [1,2,3].each(do |e| p e endのブロック、ただし実行できるならこのブロックを要素ごとに実行すること) といちいちテクニカルにする代わりに [1,2,3].each do |e| p e end と平易に書くように Ruby を作ったのだ このへんの動作が気になるなら my_block = lambda do |e| p e end [1,2,3].each(&my_block) とでも書いてみるといい
495 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:58:26 ] >>493 思考過程の筋が見えるなら特に問題はないと思われ まあ、つまりは「勝手に省略せず詳しく書け」ということでしかないわけだが 若干のエスパー能力が要るから万人には勧められない
496 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 19:29:15 ] 理解としては>>486 でまったく問題ないのになんでこんなことになってるんだ
497 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 20:58:03 ] 申し訳ありません。whyのrubyガイドが 最初の方は、とてもわかりやすかったのです。 読み進めていると、コードが出てきて、ruby ファイル.rbと実行しても エラーが出たりするようになり、僕はアホなのだろうかと思って質問しました。 初心者向けとして適当でないようなので、もうすこし文法を押さえながら 読んでみようと思います。ありがとうございました。
498 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:29:17 ] >>493 >do が何だかわかりませんレベルの人には来て欲しくないな おまえは>>1 を声に出して10回よめ。 この程度が我慢できないやつはこのスレくるな。
499 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:41:55 ] でも>>493 程度が我慢できない人は2chに来るべきじゃないよね。
500 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:45:19 ] せめてネタ系のスレで頑張ってもらえるとありがたいんだけど そうもいかないんだろうね
501 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 00:48:12 ] rubyに限らず初心者スレッドは全てを受け入れる糞溜だと思ってる
502 名前:デフォルトの名無しさん [2009/10/02(金) 05:22:34 ] 日本語の文字抽出でうまい方法が分からず困っています。 抽出元のサンプルは下記の通り 11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69 上記サンプルのうち、「この、文字列を抽出したいんdesu.」の部分を抽出したいんです。 抽出対象:日本語、句読点、日本語文字列に付随する半角英数字、半角記号("テスト."等。空白類を挟んだら不要対象とする) 不要対象:半角英数字、半角記号、空白、"○"、"×"等 現在のコードは下記の通り while line=gets if /\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*/ =~ line if $1 != " " print "日本語抽出:", $1, $2, $3,$4,$5,$6,"\n" end end end 実行結果↓ 日本語抽出:○ × ::この&カ字列を抽盾オたいん (続きます)
503 名前:デフォルトの名無しさん [2009/10/02(金) 05:25:20 ] (続き) if文の条件が大変なことになっているのは if /(\W+)/ =~ line としてしまうと最初の"○ ×"のみ抽出して終わってしまうためです。 プログラムとして力技で美しくないのは分かっています。 また、日本語が文字化けしてしまっています・・・文字コードの問題だろうとソース先頭に#!ruby -Ksを足してみましたが、 空白類の扱いが変わった?のと記号以外の文字類が表示されなくなりました。 抽出部分を綺麗にするにはイテレータで回せば良いかなと思っています。 →一文字ずつチェックしようと思いましたが、String#each_byteが全半角を問題なく捌けるのか問題が・・・ 問題をまとめると 1:文字列の中から上記抽出対象のみ抽出したいが、力技で汎用性がないので改善したい 2:文字化けしてしまうが原因、対策が分からない となります。 OSはWindows XP SP3でRubyのバージョンは1.8.6です。 長文乱文で分かりにくい質問となってしまい申し訳ありませんが、よろしくお願いします。
504 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 05:32:32 ] まあrubyはメゾットの様なものが多いのも事実だけどな。 そこらの統一性の無さは、原理追求派よりも教祖信仰派のほうが多いってだけじゃないかと。 メゾットだからこうって寄りも、教祖がこう使う様に教えたから深く考えずに同じ様に使うのほうが、良いruby信者に成れる気がする。
505 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 05:36:40 ] irb> s = "11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69" irb> puts s.split[6] この、文字列を抽出したいんdesu. 空白で区切られた7フィールド目という意味ならこれでいいのでは フィールド内に半角空白が混じっても構わないという条件だととたんに面倒になるが
506 名前:503 [2009/10/02(金) 06:02:35 ] >>505 レスありがとうございます。 すみません、確かにサンプルに限定すればそれで解決ですね。 ただ、やりたいのは日本語部分(日本語文字列に付随する記号類、英数字は抽出対象とする)の抽出なのです。 質問の書き方が悪かったのですが、おっしゃる通り、日本語列の中の空白、記号、英数字、 もしくは日本語列の先頭・末尾の半角英数字、記号類は抽出したいんです。 (日本語列と結合していない日本語以外(英数字、記号、空白類)は除外)
507 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 06:13:51 ] 結合ってなんだ?
508 名前:503 mailto:sage [2009/10/02(金) 06:21:11 ] >>507 付随と同義です。ややこしくてすみません。 文字列の結ご・・・連結ですね。すみません。
509 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 06:46:02 ] >>507 おそらく、セパレータとフィールドという概念がないんだと思う だから、元データを作った人の意図を読むことができないし、説明もできてないから俺らもどうにもできん たとえば、俺らは>>502 を見たときに 「番号、マルバツ、マルバツ、英数字、時分秒、英数字、日本語入り文字列、年月日、時分秒、数字」 という空白で区切られた固定の何らかの意味を持った10項目(または年月日+時分秒の9項目)と読むが、 >>503 にとってはおそらくそうではないのだろう ひょっとしたら例示のために出しためちゃくちゃな文字の集まりなのかもしれない 空白の数には全く意味がなく、 形態素解析のように「空白で区切られた、日本語文字を含む文字の連なり」が欲しいのなら split.find_all{|e| <eがShift_JISの日本語文字を含むということ> } とすればよい Shift_JIS (というかたぶん CP932)の日本語文字を含む条件を表す正確な正規表現はどっかから拾え irb> s = "11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69" irb> puts s.split.find_all{|e| /[\xa1-\xdf]|[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]/n =~ e}.delete_if{|e| /\A[○|×|△]\Z/s =~ e} この、文字列を抽出したいんdesu.
510 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:01:18 ] >>503 >>509 のようにsplitで配列にしてからfind_allでもいいし 文字列に繰り返し正規表現をしたいのならscanてのもある Array,String,Hash,Enumerableあたりのメソッドは軽くリファレンスに目を通しておくといいよ へぇこんなのあるんだっていう程度でも使う時に思い出せる
511 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:02:44 ] -Ksを指定するとShift_jis全角文字も\wでマッチするようになる
512 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:18:29 ] >>511 「も」では駄目だろ 英数字記号だけの場合はマッチしてはいけない irb> /\w/ =~ "あういえ".tosjis nil irb> $KCODE = 's' irb> /\w/ =~ "あういえ".tosjis 0 irb> /\w/ =~ "a" 0 全角文字(と場合によっては半角カタカナ)にのみマッチする正規表現か、 英数字記号だけにマッチして全角区域に誤爆しないという正規表現が必要
513 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:32:08 ] >>512 ああすまん-Ksにして結果が変わった原因ってことで書いただけなんだ
514 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:09:04 ] ruby って、ライブラリやクラスメソッドの使い方を 覚える言語ってことですか?
515 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:10:33 ] オブジェクト指向言語は大体そんなもんだ
516 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:26:59 ] 大抵のプログラミング言語において、文法なんて数時間で全部理解し終えるもんだからなあ。 後は当然ライブラリの使いこなしってことになるだろう。
517 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:32:04 ] クラスメソッドよりもインスタンスメソッドのほうが多いよ! とかそんな話を 別に覚えなくてもいいけど、その場合はライブラリに相当するものを全部自力で作ることになる どっちか気に入ったほう選んでくれ
518 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:13:39 ] Windows版のRubyって、OpenSSLも使えるんでしょうか。 知っている人がいたら教えてください。
519 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:22:50 ] パッケージ次第だった気もするけど、基本的に使える
520 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:24:35 ] >>518 推奨されてるパッケージでインストールする限りは使えるはず 他の人のWindows版でも絶対に使えるとは限らないのは他のOS版のRubyと同じ
521 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:42:25 ] ありがとうございます。 RSAの仕組みを勉強するのにRubyを使うことにします。
522 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 14:40:48 ] rubyでは、値がすべてオブジェクトということは 1という数値や"太陽パクパク"という文字列や、それらを代入した number,sun_eaterといった変数もオブジェクトということですか? number = 1 sun_eater = "太陽パクパク"
523 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 14:59:20 ] >>522 整数とかはさすがに高速処理するように小細工を施してはありますが、 それらも含めオブジェクトは全部クラスのインスタンス(=オブジェクト)です irb> p 1.class Integer irb> p "太陽パクパク".class String 変数はオブジェクトについたラベルです ラベル名 → オブジェクトID というような対応表を Ruby が管理していて、 該当ラベルの変数が呼ばれたときにはその表の対応を参照して該当オブジェクトが使われます 変数というハコが入れ物オブジェクトとして存在するわけではありません irb> p 1.object_id 3 irb> p "太陽パクパク".object_id -605838888
524 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:06:21 ] >>522 >rubyでは、値がすべてオブジェクトということは >1という数値や"太陽パクパク"という文字列や、それらを代入した >number,sun_eaterといった変数もオブジェクトということですか? 数値や文字列もオブジェクト。 ただし、「変数」はそれらオブジェクトを格納するもの(あるいはオブジェクトとひもづけるもの)であって、オブジェクトそのものではない。 そのへんは他の言語でも同じ。
525 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:08:38 ] >>523 変数はオブジェクトじゃなくラベル。 あやうく、間違った認識で通り過ぎるところでした。 ありがとうございます。
526 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:10:25 ] >>524 他の言語でも同じなんですね。ありがとうございます。
527 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:50:19 ] C++、Perlでは宣言された変数自体がオブジェクトの実体であるケースもあるけどね と、話をややこしくしてみる
528 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:55:56 ] 他言語がどうであれ、Rubyにおいて変数は箱ではなくラベルなのは間違い無い 沢山あるオブジェクトの中のいくつかに名前を付けるのが変数 1つのオブジェクトに複数の名前があることも珍しくないし 無名のまま役割を終えるオブジェクトも存在する
529 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:58:09 ] だいなみっくえいりあしんぐ
530 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:04:25 ] 2chまとめエディターを作っているのですがどうにもこうにもならなくなってしまったのでヒントをください。 やろうとしていることは DATの中身をコピペで入力 ↓ 下ごしらえの置換 アンカー順に並べ替える チェックボッックスによるdivのclassの追加(文字色を変えたり大きくしたりするため) ↓ ソースを出力 というものです。 ひとまずここまでひとりでつくりました。 tomiya.bne.jp/cgi-bin/upup/src/myg_l2344.zip.html やっていることは 簡単な置換とレスに1〜1001までの番号をハッシュとして付ける ことまでです。 教えて欲しいことは アンカー順に並べ替える方法 本文をスキャンして「>>○○」を抽出しハッシュのkeyに代入? チェックしたレスのみ出力する方法 チェックボックスでdivのclassを追加 <div class="res">を<div class="res aka">や<div class="res aka deka">などに置換? です、見当がつきそうな方はどうかご教授ください。
531 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:26:40 ] オブジェクトについて、もうひとつ質問です。 class Gohan def caree print "今日のご飯はラーメンだ\n" end def natto print "朝飯は納豆だ\n" end end yuhan = Gohan.new yuhan.caree asamesi = Gohan.new asamesi.natto この場合、yuhanやasamesiがオブジェクトになるのでしょうか?
532 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:29:10 ] ARGVで漢字のフォルダ名が展開できず困っています。 英字だと >ruby -e "p ARGV" hon/* ["hon/新規テキスト ドキュメント.txt"] となってうまくいきますが、漢字だと >ruby -e "p ARGV" 本/* ["本/*"] となってしまい、フォルダ内の新規テキスト ドキュメント.txtが展開されません。 どうすれば展開できるかご教示ください。 OSはWindows XP SP3です。 >ruby -v ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]
533 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:31:30 ] Ruby標準のCGIクラスって、どれぐらいの大きさのデータを受け取れるのでしょうかね? DBの内容をWeb上からバックアップ(DL)したり、復帰させたり(UP)するシステムを考えてるのですが バックアップするときは、ストリーミングで流せばいいような気がするけど 復帰させるときは、大量のデータが一度メモリに溜め込まれる気がします たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。 また、なにか回避策が有るのでしたら、教えてください。
534 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:35:45 ] ワイルドカードの展開ってシェルの役割じゃ・・・? と思ったらWinではやってくれないのか
535 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:39:19 ] >>531 >>523
536 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:42:14 ] >>532 ARGV の処理は環境依存 コマンドプロンプトで DIR 本/* とやって、望みの出力が得られなければ ARGV では無理というかコマンドプロンプトの使い方の知識が足りない
537 名前:532 mailto:sage [2009/10/02(金) 18:50:17 ] >>536 それはうまくいきます。/の代わりに\ですが。 >dir 本\* ドライブ D のボリューム ラベルは以下略 >ruby -e "p ARGV" hon\* ["hon/新規テキスト ドキュメント.txt"] 英字は/でも\でもok >ruby -e "p ARGV" 本\* ["本\\*"] 漢字はどっともだめ
538 名前:532 mailto:sage [2009/10/02(金) 18:55:24 ] 書き忘れ >ruby -e "p ARGV" */* ["hon/新規テキスト ドキュメント.txt", "本/新規テキスト ドキュメント.txt"]
539 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:56:09 ] >>530 #!/usr/local/bin/ruby -Ks class Ch2Thread def initialize(file) @dat = file parse end attr_reader :data, :title, :size def [](v); @data[v]; end def parse @data = Array.new arr = @dat.to_a arr.each_with_index do |res, i| @data << parse_res(res, i) end @title, @size = arr[0].split(/<>/)[-1], @data.size end def parse_res(res, resno) e = res.split(/<>/) d = e[2].split return {:no => resno + 1, :name => e[0], :mail => e[1], :date => "#{d[0]} #{d[1]}", :id => d[2], :be => d[3], :res => e[3]} end end sure = Ch2Thread.new(File.open('./sample.dat').read) puts "Title => #{sure.title}" sure[0..3].each do |res| res.each{|k,v| puts "#{k} => #{v}"} end
540 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:59:22 ] >>532 WinXP SP2 + ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] だけど展開してくれた。なんなんだろうね
541 名前:540 mailto:sage [2009/10/02(金) 19:02:24 ] SP3だった・・・ あとコマンドプロンプトから動かしてる? 専用エディタとかから走らせたりしてると挙動が違ってくるかも
542 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:03:55 ] >>532 ren 本 書 ruby -e "p ARGV" 書/* 1.9のglob周りは多バイト文字に関しては腐ってるね。
543 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:04:15 ] 1.9.1リファレンスより >標準のシェルがワイルドカードを展開しない環境 (Win32)では、Ruby インタプリタが自前でワイルドカードを展開して Kernel::ARGV に設定します。 らしいからできるはずだと思うけど うち(Vista コマンドプロンプト)でも 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]だと 本\* 本/* どっちも認識してくれるけど 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]だとできなくなってるな
544 名前:532 mailto:sage [2009/10/02(金) 19:11:36 ] ご確認いただきありがとうございます。 うちも1.8.7はokでした。 1.9.1で通る漢字もありました。 >ruby -e "p ARGV" ホン/* ["ホン/新規テキスト ドキュメント.txt"] >ruby -e "p ARGV" 川/* ["川/新規テキスト ドキュメント.txt"] >ruby -e "p ARGV" 山/* ["山/新規テキスト ドキュメント.txt"]
545 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:14:53 ] Ruby Freaks Lounge 第8回 Windows版Ruby 1.9で培う危機回避スキル(前編) gihyo.jp/dev/serial/01/ruby/0008 Rubyで日本語ファイル名と聞いた瞬間に悪寒がする漏れは正しかった
546 名前:539 mailto:sage [2009/10/02(金) 19:16:56 ] とりあえずレスの全データを扱いやすい形に整えないと見通し的にどうにもならないような気がしたので、 たとえばこんなクラスを作る 動作は超適当 変数名も適当 レス本文のHTMLタグとかを消したい場合は parse_res のとこで適当に追加してくれ クラスでなくてもでっかいハッシュや配列を作るのでもいいんだけど面倒だったのでクラスにした
547 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:19:00 ] 日本語とかマジで廃止しろよ 100年前に廃止してくれてれば今頃こんな苦労することも無かった
548 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:23:46 ] >>547 PC/AT互換機使うのいますぐやめろ 元凶はそれだ ずっとNECなら日本語処理は完璧だったのだ
549 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:24:14 ] たいした苦労もしてないくせに
550 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:25:48 ] 悪いのはシフトJISだよ 日本語は悪くないよ EUCばんざーい
551 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:29:40 ] もはや現実逃避しかないのか・・・・・・w
552 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:35:07 ] 松江市さんは、rubyのドキュメントをしっかりしたものに してください。
553 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:40:25 ] >>533 >たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。 添付ファイルデータなら、cgi.rb が一時ファイルに書き出してくれるので、実メモリを超えても大丈夫なんじゃないかなあ。 >また、なにか回避策が有るのでしたら、教えてください。 そのような場合は、cgi.rbを使わず、自前で$stdinからPOSTデータを読み出したほうがいいと思います。
554 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:58:15 ] >>548 78JISに拘泥して混乱を広げた元凶だということも知らずに呑気な馬鹿だ。
555 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:01:03 ] >>542 で必要最低限のことは全部触れられていそうだな 「本」をShift_JISとして見ると2バイト目が { なので、rubyのglob特殊文字になる。 というわけで、1.9では、2バイト目がrubyのglob特殊文字になる文字列をコマンドライン引数に与えると危ない、と。
556 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:04:04 ] 文字のエンコードが1種だけなら問題ないという話だろ
557 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:14:38 ] 勉強せずにスラスラ英語の文書読めるプログラマと、毎日英語と奮闘してるプログラマ どれだけ差が開くと思う? つまり日本がこの業界でアメリカに勝てないのは必然だ
558 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:20:16 ] 単なるrubyのバグの話でしょ
559 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:24:39 ] Rubyに限らず 引数の文字コードって どんなふうに判別するものなんだろう?
560 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:35:10 ] 引数の文字列自体はWindows-31Jにしてくれてるぞ
561 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:35:11 ] インターネット時代なんだしJISで統一すれば何もかもうまく逝ってけどな。 いまからならOSもメールもウェブもUTFで統一。
562 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:42:47 ] 文字コードとかごちゃごちゃし過ぎて分からんから指定できるところはとりあえず全てUTF-8にしてる。 特に問題が起きたことはない。
563 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:43:48 ] Win32で1.9.2プレビュー1をビルドしようとしたができんw clにminiprelude.cがないぞゴルァって言われる あるしちゃんとインクルードパスにも入ってるのに・・・
564 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 01:45:15 ] >>546 おお、ありがとうございます。 しかしこれからどうしたらいいのか全然アイディアが浮かばないんです。 どういう方向性でいけばいいのでしょうか。
565 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 02:06:27 ] >>564 わかんねーときは、わかる機能だけで作ってみるといいよ ゴールを遠くに設定しすぎてるから方向わからないんだよ、チェックポイント作りまくれ
566 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 05:59:16 ] いきなり無茶し過ぎなんだろ。小さい所から順々にステップアップしないと。
567 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:37:28 ] とあるフォルダの中のファイル名をずらーっとデータベースに入れたのは良いんですが、 この後ファイルがそのフォルダに追加されるごとにデータベースも更新したいです。 差分を取る方法を教えてください。
568 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:39:12 ] >> [1,2,3]-[1] => [2, 3] ファイルリスト程度ならオンメモリで余裕だろう
569 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:49:58 ] データベース自体は Ruby 以外を使うか、pstore に保存して cron とかで毎回読んでくれ
570 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 15:23:49 ] >>565 >>566 なるほど、そういう考えもありますね。 もうちょっとこつこつやるべきでした、ありがとうございます。
571 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:30:46 ] requireとかを使って外部のファイルを読み込むときですが main.rb class Main def initialize @foo = Array.new require 'sub.rb' end end main = Main.new [EOF] sub.rb @foo.concat ['hoge'] [EOF] みたいな場合にsub.rbからmain.rbの@fooにアクセスするにはどうしたらいいですか? よろしくお願いします
572 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:40:01 ] rquireは、対象コードをその位置に展開するメソッドではない。 中身が何でも気にしないなら eval File.read('sub.rb') とでも。
573 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:43:37 ] >>571 require はトップレベルにファイルを「追加」する ファイルを物理的に大きな1枚のファイルにする効果しかない(いや物理的って変だが) メソッドの「奥深く」で require しても、クラス定義の外で普通に require したのと何も変わらない それと、Ruby では、単純な行単位の切り取りを行うことはできない 現在のクラスにメソッド定義内で機能を追加するには、たとえば module の include を使う メソッド単位でしか追加できないので、そこは要領よく機能を分ける # sub.rb module Sub def add_hoge @foo.concat ['hoge'] end end # main.rb require 'sub.rb' class Main include Sub def initialize @foo = Array.new add_hoge end end p Main.new.instance_variable_get('@foo')
574 名前:571 mailto:sage [2009/10/03(土) 19:57:00 ] >>572 ,573 レスありがとうございます。言葉足らずですいません・・・ sub.rbにはclassも書いてあるのでその場に展開されるとエラーになります・・・ sub.rbに書いてあるクラスをsub.rb内で初期化してそのオブジェクトをmain.rbの 方に持ち帰りたいです(プラグインシステムみたいな感じ) グローバル変数を使えば出来るようですがあまりスマートじゃない感じですので もうちょっとすっきりする方法があればと・・・ よろしくお願いします
575 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:16:58 ] class Main def initialize(plugin_name) @foo = Array.new require plugin_name plugin_mod = Object.const_get(plugin_name.capitalize) extend plugin_mod do_something end end Main.new('plugin1') # plugin1.rb module Plugin1 def do_something @foo.concat('hoge') end end
576 名前:571 mailto:sage [2009/10/04(日) 15:48:48 ] >>575 extendで何とかなりました ありがとうございました
577 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:06:53 ] ちょっとした質問です。 items.each{ |x| x.destroy } というようなこう全部の要素にたいしてメソッドを呼ぶのを もっと簡単に書く方法があったような気がしたのですが、ご存知ありませんでしょうか? Ruby 1.8.7です。
578 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:09:46 ] &:destroy
579 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:11:34 ] >>578 それだ! items.each(&:destroy) でいけましたありがとうございました。
580 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:21:21 ] 1.8.6 では動かないから配布には注意な
581 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 21:11:40 ] 1.8.6 なんてもう使わない方がいいよ
582 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:36:26 ] >>581 なんで?
583 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:49:02 ] >>581 さんがサーバソフトウェアのリプレースを行ってくれるそうです
584 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:38:28 ] 感謝の印におっぱい見せろ
585 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:39:11 ] ごばくった。すまん
586 名前:デフォルトの名無しさん [2009/10/05(月) 23:44:01 ] >>584-585 wwwwww
587 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 06:33:24 ] お礼におっぱいを要求するような人間が使う言語、それがRuby
588 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 10:13:13 ] だがそれがいい
589 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 12:14:57 ] テンプレに追加しといて。 質問する人へ: 回答をいただいたら、ありがとうの言葉とともに、感謝の印としておっぱいを見せましょう。
590 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 08:45:57 ] 教祖もおっぱい成人だったか。
591 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:45:26 ] >>573 > require はトップレベルにファイルを「追加」する > ファイルを物理的に大きな1枚のファイルにする効果しかない(いや物理的って変だが) $ cat s.rb a=1 def f; 1; end $ cat c.rb require './s' p defined? a p defined? f $ ruby c.rb nil "method" $ ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] トップレベルでのローカル変数のスコープは require/load を越えないのでしょうか?
592 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:00:48 ] require や load した場合、ローカル変数だけは、ファイルごとにスコープがあります ローカル変数という概念を保護する制限だと思ってくだされ require ではなく Ruby スクリプトファイルとして読み込んで実行することで制限を乗り越えることができますが勧めません ファイルとモジュールの構造を変えることのほうを強く勧めます
593 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:09:36 ] 数字をキーに持つハッシュがあり その中で一番小さい数のキーの値を取り出したいのですが 単純に書くと以下になるんですが 他に何かこれだという方法はないでしょうか? h = {2 => "a", 5 => "b", 7 => "c"} p h[h.keys.sort[0]] => "a" これで問題があるわけではないですが 他に方法がある気がしたので質問させてもらいました
594 名前:デフォルトの名無しさん [2009/10/07(水) 18:12:38 ] hoge = moge.execute print hoge というとき、print hogeの hogeのところで moge.executeが参照され 実行されて得られた結果が、printされるという理解でいいですか?
595 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:15:16 ] >>593 素直に書くなら h[h.keys.min]
596 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:18:42 ] >>594 一行目の時点で >moge.executeが参照され実行されて得られた結果 がhogeに収まる 二行目はすでに収まってるhogeの中身を出力するだけ >>594 の日本語の部分をrubyで書くとこんな感じ? hoge = Proc.new { moge.execute } # moge.executeはまだ実行されない print hoge.call # Procを実行する(moge.executeが実行される)
597 名前:デフォルトの名無しさん [2009/10/07(水) 18:22:48 ] rows = dbh.do("INSERT INTO people (name,height) VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)") printf "%d rows were inserted\n", rows ruby/dbiの使い方ページにあるコードの抜粋なんですが、実行すると 4 rows were insertedと表示されます。 printf "%d " , rowsで、rowsから何かの数字を得ているようなのですが どういう動きをしているんでしょうか?
598 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:24:35 ] そのような目的に使うデータ構造としては、ヒープツリーや優先順位つきキューというものがあり、 Rubyには長らくこれが標準だというような実装がなかった。ので、自分で作るか、 既存のものをさがすかということになります。 以下、最近できたものなので、あるよ、という紹介しかできませんが、 depqという優先順位つきキューのgemがあります(あるはずです)。 ttp://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-dev/39248?39066-39441
599 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:25:21 ] >>598 は>>593 あてね
600 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:25:45 ] >>596 考えていたことと逆でした。ありがとうございます。
601 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:35:10 ] >>597 ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#printf ttp://www.ruby-lang.org/ja/man/html/sprintf_A5D5A5A9A1BCA5DEA5C3A5C8.html 個人的には Ruby ではないので嫌い to_s で問題の起こらない範囲で puts "#{rows} rows were inserted" と書くべき
602 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:40:22 ] >>601 String#%は?
603 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:42:04 ] >>602 異端審問される恐れがあるので 人前に晒すスクリプトでは使わないように
604 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:44:10 ] スタイルの押しつけうぜぇ
605 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:14 ] 個人的にString#%は蛇道
606 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:21 ] >>601 どもです。putsに書き換えて実行したところ同じように出ました。 どこから、4という数字を得ているのでしょうか? 上の式だとdbh以下を実行して 4つの要素をDBに登録していますよね。
607 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:53 ] >>604 Ruby使うの今すぐやめれ プログラミングスタイル強制要素が無数に散りばめられてるぞ
608 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:58:58 ] >>601 君にはPythonが向くんじゃないかな?性格的に。
609 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:02:23 ] >>608 sprintf は Ruby のものではないということを知らない?
610 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:04:06 ] >>606 そりゃそういうふうに作られてるからだろ do のマニュアル読め わざわざカウントして数値を返してるようなので初心者殺しではある
611 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:10:25 ] sprintf と pack/unpack は「Ruby らしい」糖衣実装が望まれていながら、 ダラダラと旧来の仕様を引きずってきたんだよな オタクが他の言語の知識を流用できて便利というただそれだけの理由で
612 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:14:00 ] >>611 あれは正規表現みたいなサブ言語だと思って諦めるのが吉かと思われます 確かに覚えにくいしなんとかしたほうがいいのは確かなんだけれど あれをまたまとめて別途組み立ててしまうとそれだけで結構な一覧表に
613 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:17:18 ] >>610 どもっす。doのマニュアルを探してきます。
614 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:18:04 ] printf類にrubyらしい実装なんて不要 他の言語と違う動作されたらそれこそ非難の的
615 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:24:33 ] prntf などの「メジャーな関数」をなくせという話ではないように読めるが
616 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:25:25 ] >>611 sprintfは別言語でそれやられて大迷惑 >>612 も言ってるけどいまさら別に覚えるのも嫌だから 今までと同じでいいよ・・・
617 名前:593 mailto:sage [2009/10/07(水) 19:27:45 ] >>595 minですね 探し切れてませんでした ありがとうございます >>598 なるほど、確かに求めてるのはヒープみたいなものでした 参考になりましたありがとうございます
618 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:32:02 ] 別にみんな自由に書けばいいじゃんw Obsoleteでもない限り機能として用意されてるんだから使えばいいし 「個人的に嫌い」な人が大半になればそれを使わないのがデファクトスタンダードになるだけだし
619 名前:591 mailto:sage [2009/10/07(水) 19:37:20 ] どうもありがとうございました >>592 うーん、もうちょっと明示的にスコープの話が書いてあると嬉しいような。 doc.okkez.net/static/187/method/Kernel/m/require.html doc.okkez.net/static/187/method/Kernel/m/load.html
620 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:56:18 ] ruby/dbiの公式に行きまして、classデータベースというページがあり メソッドの説明がしてありました。しかし、記述が少ししかなく。 こういう場合、ソースを読むんでしょうか? とりあえず、今は目的に必要なことだけをやっていこうと思います。
621 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:06:32 ] >>597 >rows = dbh.do("INSERT INTO people (name,height) >VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)") >printf "%d rows were inserted¥n", rows > >ruby/dbiの使い方ページにあるコードの抜粋なんですが、実行すると >4 rows were insertedと表示されます。 > >printf "%d " , rowsで、rowsから何かの数字を得ているようなのですが >どういう動きをしているんでしょうか? 1行目の rows = dbh.do("insert....") で、insertした件数が返されて rows に代入されているだけじゃないかな。 それを printf "%d ", rows で出力している。そんだけ。
622 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:29:41 ] >>620 ググったら公式じゃないけどこんなページがあったよ ttp://www.nslabs.jp/book2-dbi.rhtml
623 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:31:28 ] >>618 選択肢がないという話では
624 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:35:37 ] >>623 >>602-603 がそうはとても見えない
625 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:38:34 ] >>624 sprintf 使ったことある?
626 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:45:18 ] >>625 sprintf系まとめて異端だったの? >>603 は「(sprintfはまだしも)String#%は使うな」と言ってるんだと思ってたけど
627 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:51:44 ] C に由来する sprintf や pack/unpack の書式記号や利用法が Ruby らしくないというツッコミなんじゃ…
628 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:57:52 ] pack系はともかくsprint系に選択肢ないか?
629 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:02:21 ] >>603 はどう考えてもネタです
630 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:04:49 ] pack は map で直接書くというコードの動作的にはある意味わかりやすい代替手段が
631 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:27:58 ] しかしprintfを非難するとはいい度胸だ…これも平成ゆとりが増えたからなのか…
632 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:33:55 ] packにせよprintfにせよ、DSLは不思議と好き嫌いが分かれる気がする
633 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:34:36 ] >>631 「わかりにくい」ことは確か 初心忘れると老害と罵られるぞ
634 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:37:58 ] 反printf派に聞きたいんだけど 今より使いやすい(Rubyっぽい)printf構文ってどんなの?
635 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:39:17 ] とりあえず「詳しくはmanページ読んでね」というのは頂けないな 「正規表現はPerlと同じ物が多いので同じ場合はそちらを」は通用しないのに
636 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:40:14 ] >>633 packは使ったこともないし使う場面もないから構文すら知らない。 rubyでdef endしちゃうから今後も使うことはないだろう。
637 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:40:50 ] $と記号1つのグローバル変数(今となっては排除したいらしいが)も、 「Perlといっしょ」で通じなくなってきてるからな…
638 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:42:04 ] printfを知らないとなると、rubyしか触ったことないってことになるんだがな… webクリエータはたいてい適当だしそんなもんかw
639 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:43:00 ] >>636 バイナリファイルのヘッダパースとかどうやってやってるの?
640 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:43:31 ] >>636 irb1.8> p "ルビー" "\343\203\253\343\203\223\343\203\274" これ日本語に戻してー
641 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:44:32 ] >>638 お前puts使わないだろ
642 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:47:39 ] >>636 1.8でUnicodeEscapeSequence文字列が欲しいです先生
643 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:49:20 ] >>640 evalしろ
644 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:50:35 ] packはまあ・・・・使う時にリファレンスを見てやるしかないな 一方、青木氏はpackで壊れた >まったくpackの意味不明さときたら、 >「packのテンプレートがわからなくたって悔しくなんかないんだからな! バーカバーカ!」 >と幼児退行してみたくなるほどです。
645 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:52:37 ] >>643 こういう文字列をevalしろとな
646 名前:デフォルトの名無しさん [2009/10/07(水) 22:09:18 ] 青木氏って2chねら?
647 名前:デフォルトの名無しさん [2009/10/07(水) 22:27:52 ] ttp://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv このファイルが開けないのですが、どーすれば良いのでしょうか。
648 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:31:52 ] >>647 中身がタブ区切りのtsvだからです っていうかファイルの中身確認することくらいしようぜ
649 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:34:21 ] putsすると日本語でも表示されるよね sjis問題で文字化けはするけど
650 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:44:34 ] gets, puts ってのはもろにCだと思うんだが・・・
651 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:55:35 ] え・・・そうだと思うけどなんか違った・・?
652 名前:デフォルトの名無しさん [2009/10/07(水) 23:28:42 ] visualstudioみたいにボタンとかを貼り付けて入力フォームが作りたいんですが ああいうツールは無いんでしょうか?
653 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:32:42 ] CentOS上でruby1.8.7から1.9にアップデートしたいのですが、 Linuxの知識に乏しいためなかなか手が付けられません。 1.8.7のインストールはネットで調べつつなんとかソースコードから入れました。 一般的にはどのような手段でアップデートするのでしょうか?
654 名前:デフォルトの名無しさん [2009/10/07(水) 23:34:49 ] >>653 このスレ的には Debian にしろって言われると思うが。
655 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:34:51 ] > Linuxの知識に乏しいためなかなか手が付けられません。 じゃあ無理だ 諦めろ あとスレ違い
656 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:39:29 ] こういう奴は何しにこのスレに張り付いてるんだろうか
657 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:41:38 ] >>656 わりと適切だと思うが… Linux使ったことあるか?
658 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:43:45 ] make がなにやってるか理解しないといかんからなー それはこのスレの範囲を超える パッケージがないなら諦めれ
659 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:01 ] 貼りついてるw
660 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:15 ] もろスレ違いだと思うが。
661 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:52 ] Ruby公式ページにインストールガイドってリンクあるからみればいいよ
662 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:48:54 ] 教祖も使っているDebian最強 aptitude install ruby
663 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:49:18 ] Linux上で、しかもLinuxに関する知識がないのなら パッケージ管理システム(aptやyum)を使え、としか
664 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:54:26 ] >>662 1.9.1は存在しない(Sid除く)
665 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:58:14 ] この場合Linuxの知識は無関係だろ
666 名前:デフォルトの名無しさん [2009/10/08(木) 00:38:00 ] >>653 package application で source または archive の site を追加… 大抵は package gpg key は初期の物が使える筈… source package で compile install が出来るので在れば source を拾って来て install.
667 名前:デフォルトの名無しさん [2009/10/08(木) 00:50:15 ] ruby は python を使えれば 使う事ができますか python と ruby の関数で違う物は在るのでしょうか?
668 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 00:54:47 ] フィッシングタイムですか?
669 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 00:58:16 ] 邪魔しないでください >>668
670 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:05:11 ] >>667 全体的に大阪弁と東北弁ぐらいの違い
671 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:09:16 ] >>667 片方が使えるなら、もう片方もさほど苦労しない
672 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:53:24 ] gems.rubyforge.orgにgemでアクセスできなくない?
673 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 15:57:30 ] rubyが司る世界において 数字の1が生まれたら、それは数字クラスに所属していて 数字クラスのメソッドにない動きは出来ないってことですか?
674 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:10:39 ] Rubyには、オブジェクト(インスタンス)ごとにメソッドを定義できる、 特異メソッドという仕組みがあるので、たいていのクラスでは、イン スタンスごとに振る舞いを変えることができる。 しかしながら、数(Numericおよびサブクラス)にはこれが定義できない ように制限されている。 なお、数インスタンスが生まれた後に、数クラス自体にインスタンスメ ソッドを追加した場合、既存の数インスタンスでも使える。
675 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:21:33 ] irb> module One; def one; "one!"; end; end irb> 1.extend(One) TypeError: can't define singleton from (irb):2:in `extend_object' from (irb):2:in `extend' from (irb):2 from :0 irb> "1".extend(One).one "one!" ああ、わかりやすいエラーだ
676 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:26:28 ] >>673 一般的にはそう クラスに定義された動作(メソッド)のみが可能 ただし Ruby はオープンクラスだから、自分でクラスを拡張してメソッドを追加変更することができる ある人の String クラスにあるメソッドが、 別の人の String クラスにもあるとは限らない ある人の作った String のインスタンスが、別の人の作った String のインスタンスと全く同じ動作をする保証はない ただ、組み込みクラスのメソッドやライブラリ標準メソッドの上書きは自己責任なので気にしなくてよい それと整数クラスは>>674 の言うように例示にはちょっと不適
677 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 18:34:07 ] >>675 数字と数の違いか:-p
678 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:22:07 ] M1::C1::C2 というネストしたクラスがあります あるオブジェクトが M1 を「ネスト構造上含んで」いるかどうかを調べたいです 文字列として正規表現で比較するしかありませんか? obj.class.to_s =~ /\AM1::/
679 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:56:18 ] >>678 どんな場合にも動作するのは文字列としての比較 Module.nesting が使えることも多いが、特定条件で存在できないモジュールオブジェクトを指定できない
680 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:58:02 ] C → Java → Ruby と勉強してきましたが、次の言語は何がいいと思いますか? プログラミングは単なる趣味です。
681 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:58:52 ] Haskell
682 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 12:08:49 ] Lisp系列が足りないな
683 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 14:20:33 ] >>680 趣味というなら、マイナー言語でもいいよね。 Rubyとは真逆の、静的な関数言語がいいんじゃないかな。 OCamlかHaskellあたり。どちらも日本語での入門書があるし。
684 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:10:41 ] railsで、webアプリを作るのに 必要な知識ってなんですか? ruby rails 正規表現 html,xhtml,xml javascript mysqlなどRDMS apacheなどhttpサーバー こんなもんでしょうか?
685 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:15:04 ] >>684 他の言語でフレームワークべったりでないWebアプリケーションを作ることができれば問題なし なんじゃそりゃって感じだけど、まず間違いない あとRailsは板違いなので 【Ruby】Ruby on Rails Part8 pc11.2ch.net/test/read.cgi/php/1252842574/ こっち池
686 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:15:17 ] >>681-683 サンクス。 OCamlかHaskellあたりがお薦めなんですね。 了解しました。
687 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:20:43 ] >>685 どもっす。半年間精進してダメなら諦めます。
688 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:40:15 ] rspec 版の testrb コマンドってありませんか?
689 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:48:15 ] >>688 spec -fs -c spec/
690 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:54:54 ] >>689 1578 examples, 0 failures っひょー
691 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:28:14 ] >>690 おまえすごいな
692 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:32:09 ] 個人でもちょっと規模大きければこんなもんだろ
693 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:31:04 ] 俺レベルになるとワンライナーで大企業の基幹システムを作れるようになる
694 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:45:04 ] rspec 使ってるとテストはやたら増える
695 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:08:57 ] 無印のサイトはシェルやワンライナーで作ってる、なんて言ってたけど、 どーりで重いわけだと思ったよ
696 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:44:18 ] 初心者らしい話題 class CArray < Array end a = CArray.new b = CArray.new c = a + b p c.class #=> Array CArrayを返してほしい。 class CString < String end a = CString.new("aaa") b = CString.new("bbb") c = a + b p c.class #=> String CStringを返してほしい。
697 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:17:14 ] CArray というクラス名に吐いた class CArray < Array def +(v); self.class.new(super(v)); end end
698 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:58:05 ] a[0..1]みたいなのはちゃんと元のクラスにやってくれるんだよね
699 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:22:00 ] Array や String の(Cで記述した) + メソッドの定義の中で Array.new や String.new がハードコーディングされてるんだろうな 何らかのシステム的理由があるか、いまさら変更できないか、どっちかだろう まあ、バグっちゃバグかもしれん
700 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:13:02 ] >>698 むしろそっちのほうの挙動が不思議 Stringクラスの実装はCStringを知らないはずなのに、 どうしてCStringオブジェクトを返せるんだ?
701 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:28:37 ] インスタンスがあればクラスわかるから返せるにきまっとるわい
702 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:03:22 ] superのnew呼び出しでself.class.newってやるのきもくね?
703 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:10:19 ] 継承を前提としたクラスならってところ 組み込みでいえばIOとかNumericあたり というか、otherと絡むときにわざと基本クラス返してる気がするなぁ
704 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 03:07:56 ] レヴェルの低いインターネッツだな
705 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 03:22:09 ] 組み込みのくみこちゃんをdisるのはやめろ
706 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:06:39 ] >>703 あらゆるクラスは継承で動作可能「でなければならない」 継承したとたん動作しなくなるライブラリはプギャー
707 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:26:07 ] それぞれArrayを継承したFooとBarがあったとして foo + bar がどのクラスを返すべきかとか考えると >>703 の言うようにわざと基本クラスを返すのはありなんじゃないかと思う
708 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:31:28 ] >>707 > foo + bar がどのクラスを返すべきか 変換っぽいメソッドでない限り、通常はレシーバのクラスを返すべき つまり、foo のクラスを返すべき
709 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:54:09 ] このパッチをあててリビルドすればOK --- a/array.c +++ b/array.c @@ -2657,12 +2657,14 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary) VALUE rb_ary_plus(VALUE x, VALUE y) { + VALUE klass; VALUE z; long len; y = to_ary(y); len = RARRAY_LEN(x) + RARRAY_LEN(y); - z = rb_ary_new2(len); + klass = rb_obj_class(x); + z = ary_new(klass, len); MEMCPY(RARRAY_PTR(z), RARRAY_PTR(x), VALUE, RARRAY_LEN(x));
710 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:07:52 ] 本当にそのほうがいいと思うなら、 redmine.ruby-lang.orgにfeature request投げとけば。 個人的には、両方のクラスが同じときだけにすべきじゃないかと思うが。 あと2chに初出のコードは著作権的に取り込むのは危険なんじゃなかったっけ。
711 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:22:54 ] >>710 危険というか取り込み不可能 というか別にそんなことを意図したコードでもあるまい お前空気読めないと周りから言われるか全く何も言われないかどっちかだろ
712 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:50:19 ] 無理矢理ねじ込んだ感バリバリの3行目に ドカタのストレスを見た。
713 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:56:26 ] 言われるか言われないかのどっちかワロタ
714 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:27:56 ] 質問です;; mvcモデルをつくりたいのですが、下記エラーが出て削除機能が使えません undefined method `destroy' destroyが使えない?? newもfindも使えるのに・・ 解決法知ってる方いたら教えてください
715 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:40:02 ] MVCと直接関係ない質問に見えるけど何の話?
716 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:45:48 ] 要するにdestroyメソッドを使う方法がわからないです
717 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:47:12 ] destroyメソッドってなに?
718 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:49:12 ] すいませんここはrailsは対象外なんですかね・・ 他当たってみます
719 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:51:30 ] >>718 RailsならRailsと言え。 MVCってのはRails固有の概念ではない。 あと、 【Ruby】Ruby on Rails Part8 pc11.2ch.net/test/read.cgi/php/1252842574/
720 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 16:33:54 ] undefined method `destroy'の後が重要だったりするんだよな
721 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 17:12:32 ] >>720 この場合はいいえ
722 名前:714 mailto:sage [2009/10/11(日) 01:00:33 ] >>721 何か知ってる事あったら教えてもらえますか?
723 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 01:07:07 ] うざ
724 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 11:59:17 ] PStore.dump してファイルに保存済みのデータがあったとし a = nil PStore.new(...).transaction do |c| a = c[:data] # Array や Hash がネストしたデータ(shallow copy では完全にコピーできない) end x = a[...][...].XXX[...] というように PStore.transaction の外で読み込んだデータ を使っても問題ないものなのでしょうか。 内部的には Marshal.load しているということなので、問題 ないような気もするのですが、ドキュメントの記述を見ると そういう使い方していないようなかんじなので…。
725 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:02:25 ] Marshal.dump は唯一、標準ライブラリで深いコピーを行う
726 名前:724 [2009/10/11(日) 12:16:24 ] なるほど >>725 さん PStore が Marshal 上に実装されているという前提が変わらない限りは PStore#transaction の外にデータを持ち出しても問題ないわけですか これまで無駄に transaction の内部にコード入れていたので書き直そう…。
727 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:20:45 ] >>724 PStore#transactionは、 * 同じデータファイルに対する他のPStoreアクセスを禁止している (読んでる間に書き換えられないように) * ブロック処理がabortされなければ、変更の再ダンプを行う。 という感じの仕事をしている。 中で読んだデータはそのままメモリにある。ブロックを出たあと、 誰かがデータファイルを書き換えたとき、それとメモリが一致しな いということを認識した上でなら問題ない。
728 名前:724 mailto:sage [2009/10/11(日) 12:43:24 ] まさにそのあたりが気になっていた(transaction 抜けたら参照している データがメモリ上から消えちゃう可能性があるのかなあ、とか)のです、 明快な説明どうもありがとうございました >>727 さん
729 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:19:20 ] きちんとトランザクションって書いてあるだろ トランザクション抜けたからって取得データ本体が消えるなんてことはそもそも …実装としてありそうな気もするな トランザクション有効中に明示的に複製してクダサーイというのはアリではある んで、PStore#transaction は普通は File.open のようにブロック範囲を限定して使う データを取得または保存する瞬間にだけ、トランザクションに入る 何らかの理由で複数回アクセスしたいという場合は、PStore.new のオブジェクト自身を変数で保持する なお、 PStore は、実装の都合上「ファイル全体を最初から最後まで必ず読み込む」ので注意 変更部分に対応したファイルの一部分だけを書き換えるとか、そういう細やかな小細工は通用しない データの大きさと更新頻度によっては複数に分けたほうが負荷的にお得
730 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:36:09 ] WinでAutoHotKeyの代わりに使える機能を完備してあるライブラリってない?
731 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 16:56:05 ] 繰り返し処理で正規表現を使う場合 a.each do |b| print "match" if c =~ /hoge/ end よりも reg = Regexp.new("/hoge") a.each do |b| print "match" if c =~ reg end の方がいいでしょうか?
732 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:05:15 ] そういうのは正規表現の中に変数を含む場合です
733 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:12:35 ] 変数を #{} などで含まない「固定」の正規表現は1回しか生成されない 1.upto(10000).each do /h/ =~ "hoge" end でも re = /h/ 1.upto(10000).each do re =~ "hoge" end でも、Regexp のインスタンス生成は1回だけ つまり、処理速度や負荷的には実質どちらでも構わないし、 厳密にはブロックの外の変数を参照するコストのぶんだけ後者が遅い
734 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:34:33 ] >>732-733 なるほど、ありがとうございます
735 名前:724 mailto:sage [2009/10/11(日) 22:15:19 ] RDBを使うほどでもないけどちょっと中間データをファイルとして永続化して おきたい(けどCSVファイルなんかは表現力が弱いので嫌な)ときに、素で Marshal.dump/load するより楽なので PStore を使っていたのですが PStore#transaction でデータ処理全体をブロックする必要があるのかないの か「実装としてありそうな気もする」ので気になっていたので、たいへん勉強 になりました、どうもありがとうございます >>729 さん
736 名前:デフォルトの名無しさん [2009/10/12(月) 19:03:31 ] rand()の範囲を指定したいのですが 10から20の間の数をランダムに発生させたいというばあい rand(10-20)とか直接与えることは出来ますか?
737 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:13:37 ] 0から10の範囲の乱数を発生させて10を加える。
738 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:18:20 ] >>737 が正解
739 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:21:25 ] 俺俺ライブラリに class Range def rand Kernel.rand(last-first+1)+first end end ってやっといて (10..20).rand するとか 標準じゃ無理
740 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:29:25 ] (10..20).to_a.sort_by{rand}.first
741 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:39:58 ] >>740 短いのですがどうもちゃんと動作しないようです。 (1..2**30).to_a.sort_by{rand}.first としましたが、結果がかえってこないのであきらめました。
742 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:07:39 ] >>741 そりゃ単に重すぎるだけだ 要素数が2**30の配列を作ってるんだから そこまで大きな数を扱うのなら、小手先なしでrandした方がいいよ
743 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:08:59 ] だから>>737 以外は実用妥当な乱数にならねえって
744 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:09:56 ] スレタイ100回読んで半年ROMっとけ
745 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:15:49 ] 乱数発生部は組み込みに任すのが完全に正しい姿だな 累乗とか使って結果的に偏らせるのも成長段階には必要という説もあるが
746 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:17:49 ] 最近/.並にゴミで埋まるようになってきたなここ。
747 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:23:23 ] >>746 2chも大差ないだろ
748 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:24:39 ] >>746 斬新な自己紹介ですね
749 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:40:35 ] こういうありきたりなループの終了条件に !=を使うのは普通ですか? count = 1 end_count = 10 while count != end_count puts count count = count + 1 end
750 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:44:09 ] へん
751 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:48:03 ] (1...10).each {|i| puts i} じゃだめなん?
752 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:50:22 ] count が増えるとは限らないのだろ loop do break if count == end_count ... end せめて break して欲しい
753 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:08:18 ] >>752 何でbreakの方を推すの? 横から見てもいまいちわからん 普通ここは、読みやすいuntilを推す流れじゃないかと思うんだけど
754 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:15:49 ] あまり使わないんですね。 気をつけます。ありがとうございます。
755 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:18:26 ] あまり使わないのか? 場合によりけりで特に使う使わないを気にする記述でもないと思うんだけど
756 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:21:14 ] >>740 単に非効率なやり方だろ 他人に教えるようなものじゃない
757 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:29:55 ] C++のSTLのイテレータに慣れてるとそう書きたくなるな。
758 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:33:38 ] 読みやすい until などというものは存在しない と思う