1 名前:デフォルトの名無しさん [2009/10/24(土) 06:18:12 ] プログラミング言語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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
37 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 03:16:32 ] RubyってPHPやPerlほどwebで使われてないと思うけどなんで。
38 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 03:38:03 ] Perlほど昔から使われてたわけじゃないし、 PHPみたいにWeb専用言語でもないからじゃないか? 使えるアプリもそれほど多くないと思うし
39 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 04:18:53 ] >>37 PHPやPerlで用が済むから
40 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 04:38:57 ] ていうか Ruby のバージョンによらず何事もなければ each_with_index が出るのが普通 これで間に合わない場合にのみほかの手段を講じる
41 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 07:38:33 ] >>32 1.8.6だと require 'enumerator' p %w(a b).enum_with_index.map{| v,i | [v,i] } # => [["a", 0], ["b", 1]]
42 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 07:44:14 ] これってバグになりますか? test = [] test[0] = "aa" test[1] = "bb" test[99] = "cc" t = Array.new(3) t[99]= 88
43 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 08:06:38 ] test = [] test[0] = "aa" test[1] = "bb" test[3] = "cc" t = Array.new(3) t[6]= 6 p test p t #=> ["aa", "bb", nil, "cc"] [nil, nil, nil, nil, nil, nil, 6]
44 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 08:12:43 ] 動くのは知ってるんですが 仕様上、この構文が許されてるのかどうかを知りたいんです 特に、Array.newなんて関数が用意されてるのに t = Array.new(3) t[6]= 6 こんなことできるんじゃArray.newの立場はどこへ?
45 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 08:13:18 ] #!/usr/bin/ruby -Ku print "Content-type: text/html\n\n" begin a=0 if a==0 #end puts "OK" rescue Exception => e bt = e.backtrace puts "#{bt.shift}: #{e.message} (#{e.class})<br />" puts bt.map{|s| ">>from #{s}"}.join("<br />") end ブラウザで「Internal Server Error」が表示されます。 エラーを捕捉できないのでしょうか?
46 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 08:26:23 ] >>45 できるはずだけど、もし自分でできないならCGIExceptionをインストールしてみたら? ttp://cgi-exception.rubyforge.org/
47 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 09:35:13 ] >>44 Array.new は関数ではない 揚げ足取りではなく本当に学習的な意味で、それを関数と捉えてはいけない Array.new は Array クラスの インスタンス(オブジェクト)を生成する Array オブジェクトの [] メソッドは内部領域にデータを追加する そんだけ
48 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 09:38:59 ] インストールしてみましたが、シンタックスエラー?は表示されませんでした。 >>45 もシンタックスエラー?以外は捕捉できます。
49 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 09:55:24 ] (eval内は別として)文法エラーは、「実行前」に検出されるもの。 検出する処理さえ実行される前だから、当然捕捉できない。
50 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 10:22:42 ] >>44 ある程度大きな配列で、サイズが事前にわかっているなら 動的にちまちまと拡張するよりは最初にサイズを予約したほうが効率的 なんだけど普通は気にしなくていい
51 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 10:32:17 ] ある程度大きな配列ったって1000や1万では話にならんけどな なおかつインデックスで要素追加をすること前提
52 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 12:41:05 ] >>47 Array オブジェクトの []= メソッドはオブジェクトの内部領域にデータを追加する だと思う
53 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:57:56 ] >>47 newは演算子でしたね でもスクリプトの場合って コンパイルするわけじゃないし演算子も関数も違いないような気がしますけど 構文的はOKなんですね (ちょっと かいたスクリプトが途中で落ちてしまうのでバグの箇所を探しています・・) >>50 なるほど、やっぱりその程度の使い方なんですね
54 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 18:26:28 ] >>53 Rubyだとnewは演算子でもなんでもなく、Classクラスから継承したインスタンスメソッド doc.okkez.net/187/view/method/Class/i/new
55 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 18:37:40 ] 関数だと考えるとわからなくなるというのは「クラス→インスタンス」モデルを考えれということなんだと思う 呼び名が用語的に間違っているから正しい呼び方をしろという意味ではない、たぶん Array.new は Array クラスのインスタンス(オブジェクト)を返す Array.new(引数つき) は Array オブジェクトを作成し、引数に応じた状態に変更してから返す Arrayオブジェクト[インデックス]=値 は Arrayオブジェクトの []= メソッドに引数 (インデックス, 値) を渡し、 メソッドに規定された状態変更等を行ってから Array オブジェクトを返す 地の文の [] は Array.new を簡単に書けるようにわざわざ組み込まれたもので、Array.new と同じものを返す
56 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 18:41:06 ] インスタンスの状態なり情報を内部領域って言うのはなんか怖いな
57 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 18:42:44 ] クラスもまた、オブジェクト(Classクラスのインスタンス)で表される、ということが JavaとかC++からの連想だとわからないよね。
58 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 18:58:58 ] >>56 C で書かれてる Array や Hash の場合は格納されたデータ本体を外部から触れないからなー どこに格納されてると説明する?
59 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 19:07:46 ] >>58 まさにそういうCレベルで意識させることに「内部領域」という言葉の怖さを見てとったんだけど それが目的なら仕方ないとしか
60 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 19:09:24 ] >>48 >インストールしてみましたが、シンタックスエラー?は表示されませんでした。 require 'cgi' require 'cgi-exception' eval <<'END_OF_SCRIPT' # ... # ここにコードを書く # ... END_OF_SCRIPT というふうにすれば、シンタックスエラーも表示されたりしないかな。
61 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 19:21:13 ] >>59 URI は、インスタンス変数に URI データを格納してるじゃん Net::HTTP も、インスタンス変数にサーバからのデータを格納してるよな でも Array とか String とか Hash とか Regexp とかは、インスタンス変数があるわけじゃないよな
62 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 19:24:24 ] >>53 Array.new自体の存在意義を問うてる? 並のユーザーから見たこいつの心髄は、第二引数によるデフォルト値の設定だと思う > ary = Array.new(3, "hoge") => ["hoge", "hoge", "hoge"] > ary[5] => nil > ary[5] = "fuga" => "fuga" > ary => ["hoge", "hoge", "hoge", nil, nil, "fuga"] まあこれといいHash.newといい、迂闊に触ると火傷するけどね > ary[0][1] = "a" # ary[0]の二文字目を上書き > ary => ["hage", "hage", "hage", nil, nil, "fuga"] >>60 スクリプト本体を別ファイルにしてloadなりrequireすれば 問題のスクリプトに触れる前にbeginブロックが実行されるから捕捉できる begin load "example.rb" rescue Exception => e bt = e.backtrace puts "#{bt.shift}: #{e.message} (#{e.class})<br />" puts bt.map{|s| ">>from #{s}"}.join("<br />") end
63 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 19:25:11 ] あ、CGIだっけ?content-type吐き出すの忘れてた
64 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 19:25:52 ] >>61 Rubyのインスタンス変数は原則プライベートだから インスタンスがどういう情報の持ち方をしていようが何の興味もないよ
65 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 19:51:01 ] >>45 もしApacheを使ってるなら Apacheの設定次第で、エラーの内容をログファイルに出すこともできる どうしても表示されないなら試してみるのもいいかも
66 名前:45 mailto:sage [2009/10/25(日) 21:37:48 ] スクリプト本体を別ファイルにしてloadすれば、 シンタックスエラーが表示されました。 今回はこの方法を使わせていただきたいと思います。 ありがとうございました。
67 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 21:40:23 ] 一回 ruby -wc でシンタックスチェックしてみろよ
68 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 21:43:03 ] というか手元に Ruby 実行環境がないのだろ
69 名前:デフォルトの名無しさん [2009/10/25(日) 22:56:40 ] twitterのbotを勉強目的で作ろうとしてるんだが、こんなエラーが発生して対応できない。 誰か解決策を教えてください。twitterのライブラリは入れてあるつもりなのですが。。 エラーメッセージは下です。 # ruby ./aaa.rb./aaa.rb:2:in `require': no such file to load -- twitter (LoadError) from ./aaa.rb:2 環境はこうなっています。 # gem list *** LOCAL GEMS *** actionmailer (2.3.4) actionpack (2.3.4) activerecord (2.3.4) activeresource (2.3.4) activesupport (2.3.4) crack (0.1.4) hoe (2.3.3) httparty (0.4.3) json_pure (1.1.9) mash (0.0.3) oauth (0.3.6) rack (1.0.1) rails (2.3.4) rake (0.8.7) ruby-hmac (0.3.2) rubyforge (2.0.3) twitter (0.6.15)
70 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 22:59:13 ] gem なら require 'rubygems'
71 名前:69 mailto:sage [2009/10/25(日) 22:59:32 ] 実行したいソースは↓です。 #require 'ruby gems' require 'twitter' require 'time' USERNAME = 'bot' PASSWORD = '!@#QWE' client = Twitter::Base.new( Twitter::HTTPAuth.new( USERNAME, PASSWORD )) client.update( Time.now)
72 名前:69 mailto:sage [2009/10/25(日) 23:02:09 ] 参考に観てたblogのソースだと空白が仕込まれてたみたいです。。 >>70 さん ありがとございました。
73 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 23:14:53 ] require 'rubygems' は書くべきではない、という指摘もあったな。 1.9なら不要だし、1.8では、ない場合はどうせエラーにするだけだし、 あるならRUBYOPTにセットしとけ、みたいな感じ。
74 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 23:24:43 ] >>73 君は使いもしないライブラリを読み込むべきだと考えるのかね
75 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 23:30:38 ] RUBYOPT は自分のために自分の環境で設定するもの 他人に強制したり期待したりするものではない
76 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 23:43:48 ] RUBYOPT構想は結局失敗だったな
77 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 23:47:28 ] そもそも環境変数自体が失敗
78 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 23:57:39 ] 使いもしないライブラリとやらが組み込まれてやんのw
79 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 23:58:47 ] うるせぇエビフライぶつけんぞ
80 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 00:03:54 ] 一度でも読み込んだライブラリは二度読み込まないようにすればいいのではないだろうか
81 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 00:53:10 ] >>80 それはそうなってるから。
82 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 02:34:52 ] Ruby-mswin32版の1.9.1をインストールしたら gemが入ってたので、ssleay32.dllとzlib.dllをbinフォルダにいれて パスとおして gem update --system ってコマンド打ったら Updating RubyGems Updating rubygems-update Successfully installed rubygems-update-1.3.5 :0:Warning: Gem::SourceIndex#search support for String patterns is deprecated Updating RubyGems to 1.3.5 Installing RubyGems 1.3.5 D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-update-1.3.5/lib /rubygems/config_file.rb:39:in `new': wrong number of arguments (5 for 4) (Argum entError) from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd ate-1.3.5/lib/rubygems/config_file.rb:39:in `<class:ConfigFile>' from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd ate-1.3.5/lib/rubygems/config_file.rb:12:in `<top (required)>' from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd ate-1.3.5/lib/rubygems/gem_runner.rb:8:in `require' from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd ate-1.3.5/lib/rubygems/gem_runner.rb:8:in `<top (required)>' from setup.rb:25:in `require' from setup.rb:25:in `<main>' ってかんじで怒られた、どっか間違ったか?
83 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 06:20:08 ] p0で失敗しても文句は言えんな
84 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 07:12:57 ] うひょう、ruby1.9.1-p0 と ruby1.9.1-p243 で Win32API の initialize の引数の数が違う p0 def initialize(dllname, func, import, export = "0") p243 def initialize(dllname, func, import, export = "0", *rest) rubygems-update-1.3.5 の記述 if RUBY_VERSION > '1.9' then SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'PLPLP', 'L', :stdcall SHGetFolderPath.call nil, CSIDL_COMMON_APPDATA, nil, 1, path else SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'LLLLP', 'L' SHGetFolderPath.call 0, CSIDL_COMMON_APPDATA, 0, 1, path
85 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 08:15:39 ] Ruby1.9.1 の Windows 用でそれをするとはいろいろな意味でチャレンジャーというか煽り屋というか
86 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 08:20:42 ] そんなんただのラブレターだろ 「いますぐRuby1.9.1の最新版パッチのWindowsバイナリを公開しろ、 さもなくば基幹的デファクトスタンダードライブラリのアップデート不能を以ってRubyの価値を減じる」 というラブコール
87 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 08:26:30 ] 最新版のWindowsバイナリー! 早く来てくれー! 俺もコンパイルに成功すれば、Windowsバイナリ公開したいのに make test-allがなかなか通らない…… メンテナの方々はどんな作業をやってるんだろう
88 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 08:33:12 ] ttp://rubyforge.org/frs/?group_id=167 ruby-1.9.1-p243-i386-mingw32 は一応ないわけでもない
89 名前:12 mailto:sage [2009/10/26(月) 10:14:19 ] >>13-18 Thanks rspecはちゃんとck(cygwin)でも色分けできるんですけどね・・・。 TERMはcygwinでした。export TERM=xtermとかにもしてみたけど駄目ですタ(この辺よく理解してないです) >>17 ついでにPower Shellも入れてみたんですが、UTF-8対応して中田 orz nkfでUTF-16にしても化けるし意味わからんちん
90 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:49:19 ] とりあえず ruby が糞だということは良く伝わりました 本当にありがとうございました
91 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:57:45 ] ラブレターなら直接相手に言わないと伝わらないんじゃないか
92 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:07:20 ] >>91 リア充は帰れ ラブレターってのは 「○○って△△さんのこと好きなんだって」 「えーうそー△△ちゃん可哀想〜」 みたいに周りからじっくり攻めていくのが正しい姿
93 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:10:00 ] 明らかに周りからも祝福されてねーじゃねーか
94 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:24:46 ] なにごとも一度でうまくいくことはそうそうないよ 突然話を振るよりも事前のネゴとコネと日頃のコミュニケーションが大事
95 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:33:47 ] >>92 > 「えーうそー△△ちゃん可哀想〜」 やめろ
96 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:57:09 ] クソワラタwww
97 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 04:59:52 ] ruby1.8.7をcheckinstallでRPMパッケージを作成してインストールしたのですが、 ri -cコマンドを打っても標準ライブラリのクラスが表示されません。(Railsのクラスのみ表示される) ri GCと打ってもNothing known about GCと出力されるのです。 これはrubyのriドキュメントがインストールされてないということでしょうか? RPMパッケージでインストールせずにconfigureでオプション付けたりしないといけないのかな。
98 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 05:51:33 ] >>97 checkinstallはよくわからないけど、自前でコンパイルするときは ./configure make sudo make install sudo make install-doc # ドキュメントのインストール が必要だった気がする
99 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 05:59:15 ] 質問です。Mershall使ってインスタンスの状態を保存しているのですが 一度インスタンスをnewしてdumpした後、その後オブジェクトを変更して 追加されたor削除されたクラス変数を検知して初期化したいです どのようにしたらいいでしょうか 以下のようなソースです class DataObj attr_accessor :cnt def initizalize @cnt=0 end end class SaveData attr_accessor :data def initialize(file_name) load(file_name) end def load(file_name) if File.exist?(file_name) @data = File.open(file_name, "rb"){|f| Marshal.load(f) } else @data= DataObj.new() end end def save File.open("test.dat", "wb"){|f| Marshal.dump(@data, f) } end end
100 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:35:07 ] よーわからんが、Marshalはオブジェクト全体の復元しかできない 復元してからオブジェクトが同一かどうかチェックするしかないな
101 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:52:34 ] >>100 そうですね、Marshalだとかそういうライブラリは、この際あまり関係なかったですね 保存時のオブジェクトが復元時のインスタンスのオブジェクトと違う場合を許容したい場合は どのような処理をすればいいでしょうか、ということみたいです クラス変数が一つ一つ存在するかチェックして、なければ初期化、しかないでしょうか イメージとしては クラス変数にし対して obj.each{|i| i=0 if !i.exist? } という配列処理っぽいことがやりたいです (もちろん配列じゃないのでこの操作は不適ですが)
102 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:22:48 ] クラス変数は @@ で始まる @ で始まるのはインスタンス変数 初期化の意味がわからない 特定の条件の場合にオブジェクトを同一とみなして欲しいというときは 適宜 == メソッドを再定義して new == old を行う class C def initialize(params=nil); @params=params; end def ==(other) self.instance_variables.all? do |e| self.instance_variable_get(e) == other.instance_variable_get(e) end end end c1 = C.new('a') c2 = C.new('b') p c1 == c2 #=> false c3 = C.new('a') p c1 == c3 #=> true ('a' == 'a' が true なので) default = C.new c4 = C.new [c1, c2, c3, c4].each do |c| if c == default then puts 'default!' else puts 'modified' end end # => modified, modified, modified, default!
103 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:29:36 ] >>101 >クラス変数が一つ一つ存在するかチェックして、なければ初期化、しかないでしょうか よーわからんけど、オブジェクトにバージョン番号をつける方法じゃだめかな。 バージョン番号が違っていれば初期化、とか。
104 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:29:49 ] ===
105 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:43:32 ] 質問です。 1. プラットフォームがwindowsかどうかを判定する方法は、どうするのがいちばんいいでしょうか。 RUBY_PLATFORM をチェックするのが王道だと思いますが、そのチェックの仕方で悩んでいます。 2. windowではバイナリファイルの読み書きにはFile.open(file, 'rb')のように'b'をつけないといけませんが、 これはcygwinでも同じでしょうか。 ('b'が必要なプラットフォームが何かを知ろうとしています)
106 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:58:24 ] fopenの仕様を読みましょう
107 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:04:18 ] 皆さんありがとうございます ・・・恥ずかしながらインスタンス変数とクラス変数を勘違いしていました >>103 氏のいうようなバージョン管理でやろうとすると class DataObj attr_accessor :ver,:a,:b,:c def initialize(obj) # @ver=0 @a,@b,@c=0,1,2 end end class DataObj_1 < DataObj attr_accessor :d,:e,:f # 変数を追加 def initialize(obj) super @ver=1 @a,@b,@c=obj.a,obj.b,obj.c @d,@e,@f=3,4,5 end end current_version=1 a=load("save.dat") a=Data_Obj_1 if a.ver == current_version # あるいは a === DataObj_1 かな? ということでやりたいことは、できそうです スマートな方法とは言い難いですが・・・
108 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:08:23 ] すいません、最後は a.ver が 0 のとき if a.ver < current_version の間違いですね
109 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:13:30 ] >>105 1. は ttp://jp.rubyist.net/magazine/?0017-CodeReview#l17
110 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:32:33 ] >>109 その記事にある「Win32API.soがrequireできるかどうか」は、 1.9だと全部ダメとか、1.8でもWINE環境でrequireできちゃう とかあるので注意。 2の方は、いわゆるDOSISHなプラットフォームが該当する。 具体的にはcygwin以外のWindows、DOS(djgpp)、 x68000(human68k)、OS/2(emx)
111 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:37:09 ] 自動で判断するぶんには RUBY_VERSION =~ /mswin|mingw/ でいいんじゃね クラス変数とかに結果入れておいてユーザーが変更可能にしておくとかすれば喜ばれそう
112 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:52:38 ] バイナリ扱う時に環境判断せずに「とりあえずbつけとけ」ではだめなんだっけ?
113 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:55:16 ] ミリ秒の差が数千万円になるようなエッジな環境では命取り
114 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:55:44 ] >>112 それが望ましいっす。
115 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 10:32:51 ] >>107 Marshalで保存したオブジェクトは自分のクラスを記録してるから 別のクラスのインスタンスとして復元する事は出来ない Hashを中間データとして使う方法をすすめる ついでにmarshal_dumpとmarshal_loadについて調べておくといい
116 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 10:39:58 ] >>102 で用が済むと思うのだが
117 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 11:09:13 ] 質問します。 ディレクトリ内にあるhtmlファイルの読み込みで、Data/a/1.htmlを読み込ませたあと Data/b/1.html→Data/c/1.html・・・とずらずらとディレクトリ違いの同じ名前のhtmlファイルを 読み込ませるにはどうしたらいいですか?
118 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 11:12:47 ] それに必要なのはなんだと思う? というようなとこから考えて欲しいと思った とりあえずいちばん簡単なの dirs = ['a', 'b', 'c', 'd', 'e', 'f', ...] dirs.each do |dir| File.open("#{Data/#{dir}}/1.html"){|f| f.read} end
119 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 11:13:36 ] >>117 Dir.glob("Data/*/1.html") do |file| ... end
120 名前:117 mailto:sage [2009/10/27(火) 11:24:16 ] 即レスどうもです! とても参考になります! ちょっくら試してみます。 ありがとうございました!
121 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 22:59:08 ] しつもーん! どこからも参照されなくなったオブジェクトは GC によって破棄されるだよね? loop { /正規表現オブジェクト/ } この場合 /正規表現オブジェクト/ はループのたびに生成されるの?
122 名前:中田 mailto:sage [2009/10/27(火) 22:59:18 ] >>89 Power ShellのUTF-8対応なんてしらん
123 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:04:27 ] >>121 いいえ、固定の正規表現リテラルはパース時にチェックされ、スクリプト内で1回だけ生成され保持参照されます ただし、変数を #{ } などで含んでいる場合は毎回変数を参照して新規作成される 最初の1回だけにしたい場合は //o と o オプションをつける この理屈で言うと、/re/ がたくさんあるとメモリ食う
124 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:19:19 ] >>123 なるほど、ありがとうございました。
125 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:23:51 ] >>12 cygwin1.5系や素のcmd.exeは未だにCP932だから、UTF-8はそのままだと表示できません。 考えられる方法はだいたい以下の通り。 (1)素のcmd.exeにて、nkfでCP932に変換して表示 (2)cmd.exe にて chcp 65001 によって UTF-8 モードにして UTF-8 を表示 (挙動妖しい) (3)cygwin 1.5 にて、nkf で CP932 に変換して表示 (4)cygwin 1.7 (デフォルト UTF-8) にて UTF-8 で表示 (開発途上) まぁ、どれもろくでもないんで、cucumberだったらHTMLにでも書き出して、 ブラウザで見た方がいいんじゃないですかね。
126 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:31:54 ] そーいえば、PowerShellはシェルとしてはcmd.exeとしては同レベルです。 コネがある方がいらっしゃいましたら、ちゃんとUnicode通るようになんとかしてやってください
127 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 00:05:56 ] WriteConsoleWでがんばってください
128 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 09:30:42 ] "123.6"をdecimalの123.6に変換するメソッド(例えばto_iのようなもの)はないでしょうか?
129 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 09:39:40 ] decimalではなくてfloatでした。すいません。
130 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 09:56:03 ] >>128 マニュアル嫁 文字列だから String のマニュアルを読む ttp://www.ruby-lang.org/ja/man/html/String.html
131 名前:12 mailto:sage [2009/10/28(水) 09:59:20 ] ロックマンが海外で『Mega Man』の名称に変更された理由とは… - Game*Spark gs.inside-games.jp/news/196/19696.html 1993年に発行されたGame Playersマガジンのカプコン副社長Joseph Morici氏のインタビューによると、 当時日本で作られたロックマンのローカライズを検討していたMorici氏は、“Rockman”というタイトル名が単純に気に入らなかったそうです。 ”あのタイトルは酷すぎました。そこでMega Manという名前を思いついたんです。 するとそのアイデアは気に入られて北米版で使われることになりました。ゲーム内容は日本版と全く同じでしたけどね。” ↓ パッケージ画像 gs.inside-games.jp/_files/images/9696.jpg ___ / ||Mega|| ∧_∧ |.....||Man || ( ) どうしてこんなことに… | ̄ ̄\三⊂/ ̄ ̄ ̄/ | | ( ./ /
132 名前:12 mailto:sage [2009/10/28(水) 10:00:08 ] 誤爆
133 名前:12 mailto:sage [2009/10/28(水) 12:03:40 ] 変なもん誤爆しちゃった… >>12 の件ですが、結論から言いますと、 --color を引数に明示的に指定することで解決しました。 コマンドプロンプトでは色づけされる、んならすでに指定してたんじゃないんかい!と言われそうなのですが、 実際には指定しておらず、 .featureファイルに以下の記述をして「i18nで日本語を使う」とcucumberに知らせていた場合にだけ、 何故かコマンドプロンプトのみ色付けされるようでした。 # language: ja --colorの指定は、ルートディレクトリにcucumber.ymlファイルを置いて、 default: features -f pretty --color -l ja のように記述することで、デフォルトの引数を指定できました。 とりあえず、解決ということでありがとうございました。
134 名前:12 mailto:sage [2009/10/28(水) 12:04:50 ] 連投スマソ >>125 ありがとうございます。 もっとロクでもない方法(?)として、以前はRUBY_PLATFORMがwin32でTERMがnilのときだけ、 $stdout.writeでSJISにnkfで変換する方法も使ってました。 Railsスレあたりに投下した覚えがあるので検索すればでてくるかも。 cygwinはUTF-8化用のDLLを入れてあり、ターミナルソフトのck.exeでUTF-8を表示できるのですが、 cygwin上でwin32のautotest使うと、テストが再実行しようとCtrl+Cを押すと何故かされず、即終了してしまうんですよね。 最近は、coLinuxのUbuntuを入れて、かなり普通にあたりまえに動くしUTF-8も問題ないので、それでもいいか、という気がしています…。
135 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 12:19:05 ] cygwinのttyはWindowsのコンソールとは見なされないからね。 それはもうcygwinとmswin32を組み合わせるのが悪いとしか言いようがない。
136 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 15:05:18 ] 拡張モジュールの中で struct FRAME や struct RNode を触りたいんですけど、ruby.hには含まれていなくて困っています。 今はnode.cから extern strct RNode { ... }; を自分のソースにコピーしていますが、 もっといい方法があると思うので、ぜひ教えてください。
137 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 15:42:49 ] rbbrのツリーってタブおしたら落ちない?再現率100%なんだけど