1 名前:デフォルトの名無しさん [2008/01/16(水) 17:41:27 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 関連スレやURLは>>2-7 あたりを見てください。Ruby on Railsの質問はWebProg板の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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
830 名前:828 mailto:sage [2008/02/14(木) 02:41:52 ] >>828 自己解決しました 思いっきりスタイルの設定部分見落としてたわ… 失礼しました
831 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 07:29:33 ] 正規表現でこういうのは無理? p "X(1)((2)Y)Z".gsub(/\([0-90-9]+\)/g, '') やりたいこと ・(1)(2)を両方取り除く わからんこと ・gオプションって無い? ・全角0-9の指定は無理? ※cygwin版ruby
832 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 07:30:27 ] ↑全角がまじっちゃったけど、( )は全て半角
833 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 07:36:47 ] jcodeかなんかrequreする必要があったような無かったような・・・ gオプションってマッチを1回で止めない、ってperlのおぷそんだったけ? それならデフォルトでそうなんじゃなかったっけか。
834 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 07:37:15 ] sub gsub
835 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 07:47:34 ] さんくす >>833 jcodeじゃgsubないっぽい [0123456789]て書かないと駄目くさい >>834 そうだった、gは必要ないな
836 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 10:51:43 ] >>831 jcodeをrequireして、 str.tr("0-9", "0-9").gsub(...) ただ他の関係ない全角数字も巻き込まれる :-)
837 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 11:00:58 ] >823 ありがとう。 結局、rubyバインディングをインストールするには Win用のCaboChaバイナリのほかに UNIX用のCaboChaとSWIGを落としてきて自分でmakefileしないと いけないようですね。
838 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 11:20:26 ] 全くカボチャやらメカブやらチャセンやら・・・ ズイキはないのっ!?
839 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 11:40:53 ] >>831 半角開きカッコ・半角または全角数字・半角閉じカッコ の並びを消去したいなら、正規表現はそれで問題ないぞ (たしかにgオプションは存在しないのでつけたら駄目だが) もし動作しないというなら、それは単に文字コード指定の問題だろう 対象文字列がShift_JISやらCP932やらならsを、日本語EUCならeつけろ irb> p "X(1)((2)Y)Z(3)45".gsub(/\([0-90-9]+\)/e, '') "X(Y)Z45"
840 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:16:13 ] >>839 確認してみたら通ったよ。 何が悪かったかといえば、コマンドラインで-Kオプションつけずに ネイティブでないエンコード使ってたからぽい だからコンパイル時にエラーになってた。
841 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 15:26:24 ] Rubinius で、Ruby にインクリメント演算子モドキを実装 - sumim’s smalltalking-tos ttp://d.hatena.ne.jp/sumim/20080214/p1 …バイトコードを探して加算するという力技
842 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 16:26:06 ] コンテキストがべたべたに見えてるのか、 Rubyはなぜかそれをやらなかったんだよね、 フレームのオブジェクト化。
843 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 16:26:39 ] rubyは、か。
844 名前:デフォルトの名無しさん [2008/02/14(木) 16:54:11 ] >>843 matzは、か?
845 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 16:59:21 ] >>842 しないほうがいいんじゃね?>>841 なんてどうかんがえても力業だし
846 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 17:07:43 ] この手のイントロスペクションが可能だと、デバッガを強化できるんだがな。
847 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 17:15:38 ] ドコに力点を置くかだよね 特に悪影響がないのなら導入すればいいわけで
848 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 18:33:31 ] ruby/SDLの日本語表示の質問してた者です 何度も何度も済みません… ttfのフォントで半角英数文字列を出力すると 全角幅で出てしまうんですが、何か調整する機能は無いのでしょうか? 一応ゴリ押しすれば、 文字列を各文字に分割して文字幅取りつつ各個表示 という風に行けそうではありますが…
849 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 19:45:01 ] >>848 何を言ってるのかよく分からないのですが、とりあえず mono.kmc.gr.jp/proj/rubysdl/?Works にある作品で、該当しそうなことをやってるものの ソースを読んでみたらどうでしょうか。 高橋メソッドとか文字表示に特化してそうだし、 ソースをちょっと見てみた限りTTF使ってるみたいだし、 実行してみてないので想像ですが、半角/全角が 区別されずに表示されるという事もないんじゃないかなあと思います。
850 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 20:27:32 ] >>848 俺の環境ではそういった現象は起こっていない(半角は半角幅で出力される) もう少しkwsk
851 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 20:35:06 ] フォントによってはそうなるよ ruby/sdlではなくfreetypeの仕様っぽい プロポーショナルなフォント使えば大丈夫だったと思う
852 名前:848 mailto:sage [2008/02/14(木) 20:49:34 ] ソース出した方が早そうですね フォントはIPAゴシックです SDL.init(SDL::INIT_EVERYTHING) screen = SDL.set_video_mode(SCREEN_W, SCREEN_H, 16, SDL::SWSURFACE) SDL::TTF.init font = SDL::TTF.open("IPAFont/ipag.ttf", 24) font.style = SDL::TTF::STYLE_ITALIC font.draw_blended_utf8(screen, "abc", 0, 32, 255, 255, 255) これで全角幅で出ます(Pゴシックも同じ) 「abc」でなく「a b c」という感じ
853 名前:848 mailto:sage [2008/02/15(金) 03:47:05 ] レスどうもです 色々試しましたがどうもフォント依存の問題みたいですね Arialだと普通に間合いが詰まってましたし …しかし日本語フォントで サイズ一定以下にすると表示がバグるとか不具合もあるようで これ本当にゲーム作れるのか…?
854 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 04:07:32 ] >>835 ここで愚痴るより作者にメールを送れYO! 反応のある確率はここより低いかもしれんが、 もしあった場合より的確な答が返ってくるだろうし パッチも当たるかもしれないじゃん。
855 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 04:33:18 ] 追試してみたけどそもそも文字が出ないw なにがわるいんだろ?
856 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 15:31:04 ] かなり亀だが >>797 case h when h.has_key?(:param1) ... これって期待通りの動作しなくね?
857 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 16:07:58 ] h === h.has_key?(:param1) って何が起こるの?
858 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 16:10:42 ] あ、逆か。 h.has_key?(:param1) === h って何が起こるの?
859 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 16:43:47 ] そのまんまだよ h が === 的に true と同一なら true、同一でないなら false が返る Hash は TrueClass に属してないから常に false だね
860 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 16:46:09 ] 変な書き方だった Hash は TrueClass にも FalseClass にも属してないから結果は常に false だね に変更
861 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 19:22:31 ] 休刊になったLinux Magazine全部入りDVDを入手 Matz御大による、初等Ruby講座(と探訪Ruby)の 存在を知り拝読(中) しっかし、なんつーわかりやすさなんでしょう なんでもないと思ってたとこでも 目からうろこが、ぽろぽろぽろぽろ… 開発者自身の手でここまでやさしく書かれた ドキュメントがあったなんて!と ちょっと感動しました 過ぎるほど今更ですみません
862 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:21:59 ] >>858 逆じゃないよ。(when式)===(case結果)で合ってる。
863 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:33:48 ] >>862 だから>>858 はそう書いてるんじゃないか?
864 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:49:36 ] case h じゃなくて case なんだろうね。
865 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:13:01 ] gem install したときに 所有者 root でインストールしようとするのを止めさせることはできますか? $ gem install --no-ri --no-rdoc hpricot make cc -I. -I. -I/usr/local/lib/ruby/1.8/i386-freebsd6 -I. -fPIC -O2 -fno-strict-aliasing -pipe -fPIC -c hpricot_scan.c cc -shared -Wl,-soname,hpricot_scan.so -L'/usr/local/lib' -Wl,-R'/usr/local/lib' -o hpricot_scan.so hpricot_scan.o \ -Wl,-R -Wl,/usr/local/lib -L/usr/local/lib -L. -lruby18 -lc -lcrypt -lm -pthread -lc make install /usr/bin/install -c -o root -g wheel -m 0755 hpricot_scan.so /home/俺/rubygems/gems/hpricot-0.6/lib/i686-linux install: /home/俺/rubygems/gems/hpricot-0.6/lib/i686-linux/hpricot_scan.so: chown/chgrp: Operation not permitted *** Error code 71
866 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 00:35:29 ] 原因が絞られたので再質問します Ruby1.8.5にて、ユーザー権限でgem install hpricotしようと思いました。 しかし、root権限でインストールしようとしてしまってうまくいきません。 /usr/bin/install -c -o root -g wheel -m 0755 hpricot_scan.so レンタルサーバ(さくら)なので rbconfig の CONFIG の INSTALLキーに /usr/bin/install -c -o root -g wheel という文字列が入ってしまってるからのようです。 これを変更した上でgem install を実行させることはできますか?
867 名前:866 mailto:sage [2008/02/16(土) 01:25:16 ] あーできたー。っていうかこれ罠っぽい… さくらインターネットでrubygemsのインストールでコケる場合の対処 /usr/local/lib/ruby/1.8/i386-freebsd6/rbconfig.rb を見ると > CONFIG["INSTALL"] = ENV['RB_USER_INSTALL'] ? '/usr/bin/install -c' : '/usr/bin/install -c -o root -g wheel' とかいう記述がある よって setenv RB_USER_INSTALL true とかコマンドラインで入力してから rubugemsをインストールすればいい (試してないけどたぶんrubygemsのインストール時1回のみでおk) あーもう寝る
868 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 02:52:50 ] >>861 宗教じみてるので釣りかと思った
869 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 02:58:43 ] >>861 そんなに分かりやすいのか・・・買う価値ありかね?
870 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 03:48:49 ] 初めて知ったが、そもそもLinux Magazineぜんぶ入りが買いじゃね? >>866-867 さくらの共有?Railsまともにうごきます?
871 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:21:29 ] でももう2年前の話だしなぁ・・・休刊。 まだVineが人気の時代じゃね?
872 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 10:07:47 ] >>870 FastCGI入ってないけどそれでもよければ
873 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 10:16:34 ] Webサービスとして使うのは問題外ってことだな 自分用かバックグラウンド動作用か
874 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 11:15:37 ] % time python -c 'range(0,10000000).sort' 0.769u 1.022s 0:01.79 99.4% 0+0k 0+0io 0pf+0w % time ruby -e '(0...10000000).sort' 3.170u 0.259s 0:03.42 100.0% 0+0k 0+0io 0pf+0w
875 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 11:58:20 ] >>872 まともに使えない上に、同じ鯖の人に迷惑になりそうな(´・ω・`)
876 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:02:23 ] どっかのページで、CGI版でも高速動作させるって方法があったけど、 結局、プロセスをしばらく立ちあげといてって方法なので、レンサバだと無理そうだった・・・ CGIでRailsをまともに動かす - 古橋貞之の日記 d.hatena.ne.jp/viver/20080209/p1
877 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:00:28 ] 以前からずううううっと気になってたんだけどさ file = open('test.txt','r').read とか file = File.open('test.txt','r').read ってしたときって、test.txtを開いたときに使ったIOオブジェクトってcloseされてる? readの中で実はブロックとか使っててcloseしてるとか
878 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:06:30 ] >>877 close はしてないので File.read("test.txt") を使ったほうがいい。 バイナリモードの指定ができないくそインターフェイスだけど。
879 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:18:18 ] あるいは、長くなってもいいなら content = open(...) {|io| io.read }
880 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:26:21 ] File.open(path).read は「動くけどあまり好ましくない書き方」のひとつだな
881 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:47:03 ] 参照カウンタの方がスクリプト言語にはあうね
882 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:52:34 ] やっぱり、そんなには知られていなかったんですね>Matzの連載 私も知らずに手に入れたんですけど 初等講座が190ページ、探訪が96ページ 雑誌連載ならではの密度(基本2段組でビッシリ)ですので これ目当てで買っても損はないかと思います。 ただ、PDFの2段組は読みづらいです。 私はスレタイどおりの初心者なので 正直、中盤以降はナナメ読みになりましたが ハッシュと正規表現の置換のところで そう書いてくれればわかる!という開発者ならではの 曇りのない記述に出会えたので これだけで個人的には得した気分です。
883 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:04:34 ] 何の本の話ですか?
884 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:05:15 ] >>861 じゃね?
885 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:05:32 ] 861 デフォルトの名無しさん [sage] Date:2008/02/15(金) 19:22:31 ID: Be: 休刊になったLinux Magazine全部入りDVDを入手 Matz御大による、初等Ruby講座(と探訪Ruby)の 存在を知り拝読(中)
886 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:06:09 ] ありがとう 失礼しました
887 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:07:33 ] >初等講座が190ページ、探訪が96ページ >雑誌連載ならではの密度(基本2段組でビッシリ)ですので >これ目当てで買っても損はないかと思います。 ここだけ出版される予定はないの?
888 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:08:06 ] 出たら買うかも
889 名前:デフォルトの名無しさん [2008/02/16(土) 14:16:30 ] 生 ruby-sapporo.org/live
890 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:18:56 ] >>861 の感想とかこのところ荒みっぱなしのMatzに読ませてやりたいな
891 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 15:51:50 ] Hpricotを半日いじった結果、 「そのサイト専用の正規表現使ってHTMLからdivやtable単位でscanで切り出して配列にしさらに正規表現で切り出す」 ということをしたほうが速いということに至った もっと一般的なことするまでさよならHpricot
892 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:33:24 ] 初等Ruby講座 第1回 はじめの一歩 第2回 条件判断とループ 第3回 オブジェクトと変数 第4回 配列 第5回 ハッシュ(または連想配列) 第6回 文字列の操作 第7回 パターンマッチ 第8回 入出力 第9回 数と電卓 第10回 CGI 第11回 Rubyで作るCGI 第12回 CGIの道具箱 第13回 ファイル処理 第14回 ネットワークプログラミング 番外編 Rubyカンファレンスレポート 第15回 プロセスとフォーク 第16回 スレッド(その1) 第17回 スレッド(その2) 第18回 データの保存 第19回 XMLとYAML 第20回 XMLとYAML(その2) 第21回 エクストリーム・プログラミング 第22回 独習Ruby 第23回 再入門オブジェクト指向 最終回 ここからのRuby
893 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:34:31 ] 探訪Ruby 第1回 Rubyの国へようこそ 第2回 テスト第一主義 第3回 Wiki Wiki 第4回 Blogの世界 第5回 アスペクト指向 第6回 RubyとEmacs 第7回 Instiki 第8回 テンプレート 第9回 DBM 第10回 tDiary 第11回 Webアプリケーションの基礎 第12回 Webアプリケーションの基礎(その2) 第13回 Webアプリケーションフレームワーク 第14回 マークアップ・マークダウン 第15回 ダイコン 最終回 ネタのタネ
894 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:25:28 ] >>891 WWW::Mechanizeもそうだけど、ドキュメントがないからどうやったら早いのかわかりずらいよね。 俺も苦労した。 ただいっておくけど、 > 「そのサイト専用の正規表現使ってHTMLからdivやtable単位でscanで切り出して > 配列にしさらに正規表現で切り出す」 ってのが楽にできるのが、Hpricotですよ。
895 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:28:24 ] 楽さか速度のどっちを選ぶかだね。
896 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 05:08:19 ] >>894 でいかにもな感じで勧めてみたのだが・・・ >>891 みたいな、「それ今知っている技術でやった方が早いよ」と思う人にはやはり勧められない。 文句言うだけなので、やめておいた方がいい。 Hpricotは、半分は「おおーすげー」って感動するためにあるようなものでし、 基本この手のライブラリは、ソース読まないとまともに使えないし、 とにかく早く(速くじゃないよ)やりたいなら、 導入コストがでかいので、gemで入るような既存のライブラリを使うことは勧めない。
897 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 05:30:32 ] rubyでXMLを扱うのに速度の速いライブラリはありますか? rexmlを使うと10秒近くかかるので 最低限の機能としてはXPATHが使えればいいです。
898 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 05:43:42 ] Hpricotはここ見れば簡単にわかるだろう mono.kmc.gr.jp/~yhara/rubyscraping/?Hpricot
899 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 09:38:02 ] そんなお前らに超オススメ scrAPI wota.jp/ac/?date=20070115#p01
900 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 10:57:19 ] Hpricotは「抜き出したい範囲の終わりの文字列」が特徴的で自明なときは非効率 html.scan(/<table class="nested"><tr><td>(.+?)<\/tr><\/td><\/table>\r\n<div class="box1/) みたいな感じ 「どう言っても対応する</div>だとしか言えない」とかいう場合はHpricotのようなパーサの出番 あとHpricotを使っておきながらto_htmlしたものとかを正規表現でscanしたら負けなのでよろしく
901 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 11:03:30 ] >>892-893 Rubyの記事だけ抜き出してうんこpdfの段組をばらして htmに変換してついでにHTML Help形式にもコンバートして売って欲しい・・・
902 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 11:08:50 ] >>897 HpricotのXMLモードかlibxml-ruby
903 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 11:44:50 ] >>897 Hpricotが拡張ライブラリ使ってるから早いんじゃね? 使ったことはないが
904 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:20:46 ] expect.rb は標準で入っているんですか? ActiveSriptRuby で入れた ruby 1.8.6 には入っていないようです。
905 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:55:12 ] >>902 Hpricotインストールしてみたけどまだ5秒ぐらいかかる。 libxml-rubyはgemでインストールしようとしたらエラーが出たので挫折。 ただHipricotより圧倒的に速そうだ。
906 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:12:42 ] >904 pty拡張の一部なので(ext/pty/lib/expect.rb)、 ptyのないシステムには入っていないかも知れない。
907 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:04:17 ] Rubyをシュミで使うくらいには初心者から片足抜けたんだけど、 お勧めの面白そうな言語ある? PerlとCとJavaは除外で
908 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:05:34 ] Python
909 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:11:07 ] 最近はlispをたしなむのが流行らしい。
910 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:18:30 ] Schemeあたりに触れて「面白いけど使えねー」と嘆き Haskellあたりを食い散らかして「作れるもんねーよ」と嘆く そしてRubyに戻ってくると…「俺こんな汚いコードや粗悪なアルゴリズム書いてたのか!」 とりあえずはLisp系列か関数型言語のどっちかだろ
911 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:58:41 ] Pythonは変な意味で被らないか
912 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:28:38 ] すいません、教えてください。 @one, @two, @three, @four, @five ... とインスタンス変数をたくさん持ったオブジェクトAがあり、 @one, @two, @three というように上の一部に対応するインスタンス変数(のみ)を 持ったオブジェクトBがあります。 Bのインスタンス変数すべてが対応するAのそれと同じ対象を 参照していればtrue、そうでなければfalseを返すメソッドが ほしいのですが、どうすればキレイに書けるでしょうか?
913 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:29:32 ] TOOWTDIな世界に触れてみるのは悪くないと思う
914 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:33:31 ] >>913 なんかの書き間違いかと思ったら、パイクソかよ。
915 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:53:00 ] >>912 そういう全比較の結果に頼らなければならないこと自体が何か非常にまずい
916 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:57:00 ] >>912 よくわかんないけど、Object#instance_variables とか Object#instance_variable_get とか使えばいいんじゃないか。 a = A.new b = B.new b.instance_variables.each do |varname| val = b.instance_variable_get(varname) if val != a.instance_variable_get(varname) puts "b.#{varname} != a.#{varname}" break end end
917 名前:912 mailto:sage [2008/02/17(日) 23:09:35 ] >>915 自分もそんな気はしてたんですが、アプリの終了時に 上書き保存のダイアログを出すかどうか調べる方法として、 こんなへたれロジックしか思いつきませんでした・・・。 >>916 これ、いただきます。感謝です。リフレクション系のメソッドが なかなか自然に浮かんできません。修行します・・・。
918 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 00:08:57 ] >>917 もっといい方法があるはず リフレクション無しでやれないかどうか、頭を捻って考えるべき どうしても思いつかないなら、ここでソース(or具体的なクラス構成)を提示して 「どんな方法があるか」を質問すればいい
919 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 01:34:54 ] AとBで共通に参照してる変数群が表す情報は オブジェクトで表現してみるとか。比較一つでいいし。 関係ないこと纏めてもしゃーないからやっぱ 設計しだいだけど
920 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 05:45:53 ] >>917 変更した時にフラグを立てることは出来んの?
921 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 09:10:09 ] >>916 カプセル化の意味ねー。
922 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 09:11:50 ] MIX-INってどうなったの。 rubyといえばMIX-INって記憶してるんだけど。
923 名前:912 mailto:sage [2008/02/18(月) 09:37:09 ] >>918 リフレクション無しでというのが基本なんですよね。 もいっかい考えてみます。またよろしくです。 >>919 オブジェクトで表現して比較というのは考えたんですが、 どうやったら同一性を定義できるのかわからなくなって とりあえず変数比較でお茶をにごした次第です。 >>920 undo/redoを実装していて、どっちみちオブジェクトの状態を 保存しておく必要があってフラグにはしませんでした。 でもやっぱりあったほうがいいのかも。
924 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 10:05:24 ] 同一性は==でいいと思うんだが…
925 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 10:14:38 ] >>924
926 名前:912 mailto:sage [2008/02/18(月) 11:24:18 ] >>どうやったら同一性を定義できるのかわからなくなって オブジェクト自体じゃなくて変数の参照先の同一性の間違いです。 が、考えてみると普通に一個一個見ていけばいいだけですね。 そうすると面倒くさくなってやっぱり916がいいような気が。
927 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 11:42:06 ] そんなん==を再定義すればいい。 instace_variable_get使うつもりだったのをオブジェクトにして、 アクセサつけてprotectedにして。
928 名前:デフォルトの名無しさん [2008/02/18(月) 11:42:18 ] 文字化けします。助けて ・出力結果 news23.org/pict/news7342.jpg ・環境 OS Windows 2000 使ったライブラリ raa.ruby-lang.org/project/ruby-amazon/ ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] ・文字コード ソースの文字コード sjis コマンドプロンプトの文字コード 932(sjis) ・出力メソッド print、puts、pでほとんど同じ ・実行 ruby -Ks amazos.rb (ソース中に文字コード指定なし)
929 名前:デフォルトの名無しさん [2008/02/18(月) 11:52:25 ] >>928 自己解決しました require 'nkf' 出力したい文字列.tosjis
930 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 19:52:14 ] Unicode を SJIS で出力してる風な文字化けだなあ