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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
730 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 10:10:36 ] susie/susie
731 名前:デフォルトの名無しさん [2008/02/09(土) 10:21:37 ] exec() や system() メソッドで、 コマンド実行後に独自の入力プロンプト(入力待ち)状態になるコマンド(ftp, sqlplus 等)を実行したあとに、 さらに、そこへ入力を続けるようなことはどうすれば出来るでしょうか。 以前、どこかのサイトでその方法を見かけて、使ったことがあったのですが、 そのコードが手元に残っていなく、サイトを探してもみあたらなかったため、 質問させて頂きました。 よろしくお願いいたします。
732 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 11:00:53 ] >>731 標準で付いてるexpect.rbが使えるケースかも?
733 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:16:41 ] POPFileというベイジアンフィルターソフトの設定画面が、ローカルにたてたhttp鯖に接続して行う形になっています。 スパムを誤認したメールがたまりまくって手動では無理なため、一括で、教育しなおしたいのですが、 httpのPOSTを簡単に扱えるライブラリはないでしょうか? hpricot的にお手軽にPOSTしたいのですが・・・
734 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:25:44 ] net/http のどのへんがダメなのか教えてくれると代替案があるかも
735 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:29:23 ] 自己解決した! WWW::Mechanize というのを発見しました。 お騒がせしました。ありがとうございました。 > net/http んーなんていうか、httpを意識しないといけない、低レイヤーっぽい感じがします。 hpricot使ったら他に移れないくらい便利だったので、 似たような高レベルなラッパーがないかな、と。
736 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:32:55 ] require 'rubygems' しなければならないのがどうにもなあ いや、贅沢なこと言ってる自覚はあるが >>735 WWW::Mechanizeが利用できる環境なのならそれ使うといいぞ
737 名前:735 mailto:sage [2008/02/09(土) 19:00:00 ] 環境変数RUBYOPT を -rubygems にしておくとgem関連は楽っすよ
738 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:50:45 ] >>737 は問題を理解してないと思った
739 名前:735 mailto:sage [2008/02/09(土) 21:18:13 ] あ、ええと、レンサバとかRubyGemsをインスコできない環境とかの話かな? それなら失礼しますた
740 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:48:52 ] 本家のヘルプ以外のライブラリなどのドキュメントを見ようと、 コマンドラインのドキュメントヘルプを試したのですが、いまいちどれがどうなのかわかりません。 ri:標準。英語ドキュメント。サンプルソースなどもしっかり refe:gem install refeで入る。日本語ドキュメント。全然少ない。メソッド名の部分一致検索ができる。 rdoc:標準。エラーでて動かず riは、詳細が載っていてわかりやすいのですが、 検索しずらい・・・ refeみたいに、部分一致だったらいいのに
741 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:18:25 ] gemしかないならともかく、tar玉あるんだから $HOMEでもどこでもすきなようにインストールすればいいじゃん。
742 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:38:10 ] >>740 > rdoc:標準。エラーでて動かず rdocはriのデータを作るコマンド。
743 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:51:39 ] >>724 なにそのめちゃくちゃ端折った説明 現状は「英語でいいならri、日本語がいいならReFe」という住み分けになっとる ReFeの内容がヘナチョコなのは日本語マニュアルがヘナチョコだからだな むしろ俺はRDocとかRDとかのマニュアル用書式がわからん 何のときに == で書くのかとかさっぱりだ
744 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:57:07 ] あれだ、もうちょっとMatzがユーザ愛を持って、マニュアルに全身全霊を 傾ければ、Rubyはもっと愛されると思う。願望だけど。 「そんなの面白くない」とか「Matzは開発を優先すべきで、他の人が やったほうがいい」という反論は重々承知だが。
745 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:00:05 ] 優秀な言語開発者が優秀な初心者向けマニュアルを記述できるとは限らないのは 例の分厚くて黄色くて背が硬い本で痛いほどわかっただろうに
746 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:02:37 ] >>745 いやでもな、とてつもなく優れたオープンソース開発者が、とてつもなく 優秀なドキュメントを提供する人間である例が目の前にあるとさ。 すごい!と思ってしまうのよね。Vimの開発者のことだけど。
747 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:03:35 ] 日本語マニュアルがイマイチなのの原因は何なのよ 今のRubyユーザー数ならWikiシステムあたりを使って一斉に取り掛かれば 1年くらいで今の倍くらいのボリュームにならんかね
748 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:05:30 ] >>747 RDだかRDocだかで記述しないと取り込めないからRDだかRDocだかで書いてね、というのがかなり壁 PukiWiki互換で書いていいよと言われたら一気に進みそうな気がする
749 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:09:04 ] まぁMatzはEmacs信者で、Bramのことなんかよく知らないだろうけど。
750 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:24:35 ] マニュアル内容の改定に関しては計画はあるんだし参加しようよ doc.loveruby.net/
751 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 02:39:04 ] 例のデイトレ男に一億くらい恵んでもらってフルタイムのドキュメント書きを雇えばいいんだよ
752 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 02:57:58 ] なんで、ここで B・N・Fこと小手っちゃんがww
753 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 04:51:26 ] いやもうmatzは開発しなくて良いよ。 MLのやり取り見てると、正直もう1.8+αで良いと思うし。
754 名前:デフォルトの名無しさん [2008/02/10(日) 05:15:38 ] >>741-743 ありがとう マニュアル用のコマンドとして使えるのは ri と refe なのね。 gemsに fxri っつーri GUIフロントエンドがあったから入れたら、まだ使いものにならなかった orz ・起動が遅い ・riのエントリーの読み込みに20分近くかかる(全部よんでると20000エントリくらいになる) ・全部読みこまないと、検索できないw ・検索中に、カラムをクリックすると落ちたwwww ・読み込んだ データ をキャッシュしないので、次回起動時もまた20分かか(ry 読み込んだ後は、リアルタイムに部分一致検索できるし、 irbが立ち上がっててすぐ試せるので、すごく理想的! いいのにもったいない!! そして今気づいたのですが、rubyのdocディレクトリに Programming Ruby のHTMLヘルプがついているんですね。 英語だけど、サンプルコードはあるし、入門にはよいですね。
755 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 11:15:30 ] ドキュメントは文句だけいって手を動かさない人が多いから進まない
756 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 11:33:43 ] >>755 >>750 読め
757 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 11:40:12 ] オフィシャルにする気マンマンなとこが敷居高いのは仕方あんめえ 変なのが混じりにくいわけでむしろそれ自体は頼もしいとも思うぞ この調子だといつ完成するのかわからんのが難だが
758 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 11:53:10 ] 19株売れよwwww
759 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:08:04 ] >>743 自作のクラスのマニュアルとか作れたらRRSEで楽だろうなと思うんだけどね メソッドにカーソルが当たったらEmacs下部のミニバッファに1行マニュアル表示
760 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:36:18 ] 特に意味のないサンプルコードなんだけど、 require "Kconv" puts "隕".toutf8.tosjis とかするとなんも表示されなかったりするんだけどなんでだ? ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]に標準添付のヤツ
761 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:23:41 ] >>760 puts "隕".toutf8 の時点で空文字列が返っているのなら kconv が文字コードの判定に失敗してる。
762 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:32:17 ] require "Kconv" require 'nkf' p "隕".toutf8 p "隕".kconv(Kconv::UTF8,Kconv::SJIS) p NKF.nkf('-Sw',"隕") # 結果 "\356\242\246" # 誤り "\351\232\225" # 正しい "\351\232\225" # 正しい
763 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 22:44:27 ] 漢字一文字なんて、どうやってエンコーディングを判別するというのだ(w
764 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:40:14 ] Rubyの正規表現で前方不一致(否定後読み?)を指定するにはどう書けばよいでしょうか? 秀丸やEmEditorにおける(?<!pattern)です。 具体的にしたいことは、"B"の前に"A"が来ないときだけ "A"の前に"_"を加えるという処理を行いたいのです。 CB #=> C_B AB #=> AB
765 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:54:13 ] 1.8: string.gsub(/(\A|[^A])B/, '\1_B') 1.9: string.gsub(/(?<!A)B/, '_B')
766 名前:764 mailto:sage [2008/02/10(日) 23:54:36 ] 訂正 × "A"の前に"_"を ○ "B"の前に"_"を
767 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 00:03:08 ] >>763 勘 あるいは 運
768 名前:764 mailto:sage [2008/02/11(月) 00:03:10 ] >>765 すみません。間違いに気づいて訂正を書いている間にレスをいただいたようです。 ありがとうございました。 1.9では実装されているのですね。
769 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 05:02:35 ] >>762 把握した >>763 いや、"隕"が入ってるときにおかしくなるなぁつー話だったさサンプル悪かったごめん
770 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 07:15:07 ] シフトJISの半角カタカナ偶数個かEUCか、は同じバイト列だったりするから、 エンコーディングは可能な限り明示的にすべきと思うけどね。
771 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 09:27:46 ] toutf8とかtoeucとかtosjisみたいなのは、本当は「selfを○○に変換する」という動作じゃないんだよな 「selfのエンコーディングが△△だと推測した上で○○に変換する」という動作をしてる だから、△△であろうという部分の推測がコケると変な文字列になる 元の文字列のエンコーディングは指定しておくべき 10文字くらい余分に書かないといけないが、そのほうが動作も確実に速い
772 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 11:54:23 ] >>759 検索できるマニュアルって自分で追加して作れるの?
773 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:12:22 ] 無理なんじゃない? いや、やってやれなくはなさそうだけど
774 名前:デフォルトの名無しさん [2008/02/11(月) 21:27:24 ] >>771 テキストエディタでも、全角文字少ないと誤認するのと一緒だよなあ
775 名前:655 mailto:sage [2008/02/11(月) 22:46:06 ] >>719 Amrita使ってる人って少ないのかな(´・ω・`) >>723 なるほど、そう書くんですね! …ということは tr の属性値を項目ごとに変えるのはできないわけですよね、、 amrita-altered を試してみることにします
776 名前:デフォルトの名無しさん [2008/02/12(火) 00:47:19 ] 常にUTF8として ENV['PATH_INFO']を受け取りたいのですが うまい方法はないでしょうか? 下のコードで大体はうまくいくのですが 例にあげてるように短めのカタカナは判別、変換に失敗してしまいます $KCODE="UTF8" require "cgi" require 'nkf' class String def to_utf8 NKF::UTF8 != NKF::guess(self) ? NKF::nkf("-w", self) : self end end print "Content-type:text/html;charset=utf-8\n\n" print ENV['PATH_INFO'].to_utf8 #アテレコ NG #アテレコテ OK #アテレコア NG #アレコテ OK #テレアコ NG
777 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:52:23 ] % 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
778 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 01:13:47 ] >>776 「UTF8以外で送ってきたら頃す」とCGIを使うページのトップに朱書きする
779 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 01:31:27 ] >>777 そのコード違うぞ ボトルネックはこれだ $ time ruby -e '(0...1000000).to_a' real 0m2.535s user 0m2.040s sys 0m0.490s Range#to_aは内部的には以下と似たようなことをしてて、 数値が大きくなるとこれが非常に遅い arr = Array.new range.each do |i| arr.push(i) end return arr
780 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 01:44:25 ] >>778 が最善策 「9 27 45 81」は3の倍数でしょうか9の倍数でしょうか? という問いに近い これは「6」や「3」や「321」が含まれない限り同定できない
781 名前:776 mailto:sage [2008/02/12(火) 02:01:17 ] >>778 >>780 無理なもんなんですか…。 wikiとかで似たような処理をしてるかと思ってたんですが 基本的に違う処理なんですね。 >>778 の方法だと法律上ややこちらが不利な気がするので guessで判断できないときは別の処理にまわすことにします
782 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 02:08:50 ] >>781 Webブラウザ経由の場合はUserAgentを見るという手も… UTF-8なページからPOSTさせるとか
783 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 02:16:44 ] Ruby/SDLでWindows向けゲーム作ろうと思うんですが Windows標準フォントを引っ張るのってどうやればいいでしょう? 例えばTTFフォント指定で"MS ゴシック"と指定すると、 どのコンピュータでも一意にMSゴシックを引っ張るという事です
784 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 02:27:26 ] ダミーで既知な文字列をhideen-inputなフィールドに埋め込んでおいて、 そいつがどういうバイナリになってるかを調べる手があったはず。
785 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 02:37:26 ] >>784 おーちょっと感動した 覚えとこ >>783 全く使ったこともなければ実行環境もないが > font = SDL::TTF.open('sample.tff', 24) という表記方法から考えて、どうしかして%WINDIR%\Fonts\msgothic.ttcにアクセスすればいいんじゃね とここまで書いてTTCじゃダメだろと思った TTCはTTFのカタマリだけど、TTFしか読めませんというやつはTTCは普通読めない Ruby/SDLには「いくつか埋め込み用フォントがあるようだけど、それでは用足りない?
786 名前:デフォルトの名無しさん [2008/02/12(火) 04:26:23 ] Miyakoが、MSゴシックとかメイリオに対応してた Miyakoのソースでも見たらどうかな?
787 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 08:37:53 ] >>783 ttp://www.kmc.gr.jp/~ohai/fontlist_rb.html ちなみにTTCは、Ruby/SDLのリファレンスでは読めることになっているが 俺の手元で試した限りでは成功しなかった Miyakoではどうやってるんだろう……
788 名前:デフォルトの名無しさん [2008/02/12(火) 16:28:42 ] コード生成機能を持たないフレームワークプリーズ
789 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 17:51:40 ] Webサーバ上の巨大ファイルをダウンロードしたいんですが、 ダウンロード状況を「30%」など表示するにはどうしたらいいですか? TCPSocket#readで数バイトずつチマチマ取得するしかないでしょうか?
790 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:00:13 ] 数バイト単位はアホすぎます
791 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:04:00 ] #readの引数に合わせただけです
792 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:05:13 ] >>789 ttp://0xcc.net/ruby-progressbar/ あとはopen-uriでopenするときに :content_length_proc で 最初のサイズ設定 :progress_proc で進捗伝達 をさせるようにすればいい
793 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:17:14 ] require 'open-uri' uri = URI.parse('gems.rubyforge.org/yaml ') total = 0 count = (0..100).to_a open(uri, :content_length_proc => lambda {|n| total = n; puts "#{n}バイトいきます"}, :progress_proc => lambda {|n| pc = (n.to_f/total*100).to_i if pc == count.first then puts "#{pc}%終了" count.shift end }).read # ===================================== $ ruby ./progress.rb 16047764バイトいきます 0%終了 1%終了 2%終了 3%終了
794 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:48:25 ] メソッドの引数にハッシュを取りたいです。 とり得るキーが多めにあった場合とか、うまく処理する方法ってありますか? キーは1個の場合も4個の場合もあり、複数のキーが互いに必須なこともあります。
795 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:53:08 ] >>792-793 なるほどこりゃ便利ですね open-uriのライブラリを掘り下げてみましたら なるほどキモになってる部分は Net::HTTPResponse#read_body {|str| .... } ですね ありがとうございました
796 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:55:43 ] うまく処理する方法とは? まず、まずい処理がどんなものか説明してもらおうか。
797 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 19:00:04 ] >>794 素直にやるとこうだと思うぞ def hoge(h) case h when h.has_key?(:param1) ... when h.has_key?(:param2) && h.has_key?(:param3) ... else raise "引数が不正です" end end :param1と:param2は背反でないと処理上困るのになぜか同時に指定されてる、 とかいうエラーへの対処は無視しろめんどくさくなるから 「同時に指定したら死刑」とかいう立て札でも立てとけ
798 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 19:01:42 ] >>794 質問の意味が良く分からないが・・・ >キーは1個の場合も4個の場合もあり、 case hash.size when 0 when 1 ・・・ >複数のキーが互いに必須なこともあります。 if hash.key?(foo) && hash.key?(bar) こんな感じじゃないか?
799 名前:デフォルトの名無しさん [2008/02/12(火) 21:35:04 ] >>792-793 open-uriってお手軽なだけかと思ったら、意外に融通利いてびっくりだ
800 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:13:34 ] もう見てないかもしれないが >>310 >>316 今北なので、亀レスで申し訳ない nowrite(true)、verbose(true) メソッドを使えばそれ以降 :noop=>true、:verbose=>true がデフォルトで設定される…はずなのだが Rakeのバグでshとruby以外のメソッドに適用されない つづく
801 名前:800 mailto:sage [2008/02/12(火) 22:15:10 ] 修正するには rake.rb に以下のパッチを当てればおk Index: rake.rb =================================================================== --- rake.rb (revision 639) +++ rake.rb (working copy) @@ -871,8 +871,8 @@ module FileUtils RUBY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name']) - OPT_TABLE['sh'] = %w(noop verbose) - OPT_TABLE['ruby'] = %w(noop verbose) + OPT_TABLE['sh'] = [:noop, :verbose] + OPT_TABLE['ruby'] = [:noop, :verbose] # Run the system command +cmd+. If multiple arguments are given the command # is not run with the shell (same semantics as Kernel::exec and @@ -970,10 +970,10 @@ FileUtils::OPT_TABLE.each do |name, opts| default_options = [] - if opts.include?('verbose') + if opts.include?(:verbose) default_options << ':verbose => RakeFileUtils.verbose_flag' end - if opts.include?('noop') + if opts.include?(:noop) default_options << ':noop => RakeFileUtils.nowrite_flag' end
802 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:28:06 ] 既出でしたらすみません。トップレベルのインスタンス変数、selfについて質 問です。 クラス・モジュール定義内ではインスタンスメソッドの外に定義したインスタ ンス変数はクラスオブジェクト(Klass)のインスタンス変数になり、インスタン スメソッドとはselfが異なるのでアクセスできません。 class Klass @a = 1 <-- def foo \ @a <-----+-- 別物(selfが異なる) end end Klass.new.foo => nil しかし、トップレベルで定義したインスタンス変数はトップレベルで定義した メソッドからselfが同一なのでアクセスすることができます。 @a = 1 <-- def foo \ @a <-----+-- 同一(selfが一緒) end foo => 1 なぜトップレベルではメソッド定義内のselfとメソッド定義の外のselfが同一 になるのでしょうか。 rubyインタプリタが起動時に Object.new.instance_eval { *ここがトップレベル* } のようにしてトップレベルを作っていると解釈すればよいのでしょうか。
803 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:39:00 ] $ cat top.rb p self def hoge p self end hoge p self.class $ ruby top.rb main main Object
804 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:07:32 ] >>803 さん、ありがとうございます。 トップレベルのselfはObjectのインスタンスで評価するとmainというものが返っ てくるというのは理解できるのですが、トップレベルがどのようにして作られ てselfが設定されているのかがわかりません。 あと、なぜトップレベルのselfはmainという表記で#<Object:0x294dc>みたいな 表記にならないのでしょうか。 そういう言語仕様なのでしょうか...
805 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:24:52 ] >>804 トップレベルをオブジェクト指向として悩むのはあまりよくないぞ ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/8965 まあ、Module#privateされたでっかいObjectクラスの中身だと考えられなくもないけど
806 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:39:52 ] "main"と返るのはそう定義されてるから。(object.c) RubyのCソースは一部の例外を別にすれば見やすいから追いかけてみるとよい。
807 名前:804 mailto:sage [2008/02/12(火) 23:58:30 ] >>805 さん、>>806 さんありがとうごぜいます。 >>805 さん bladeのスレッド読んでみました。確かにEiffelやJavaよりもいきなり制御を書 けてしまうrubyのほうがありがたい気がします。 そういえば質問する前にbladeでnamazu検索してみたのですが、結果のリストが 表示されませんでした。壊れているんでしょうか? >>806 さん そうですね。rb_internあたりで萎えてしまうのですが。頑張って読んでみます。
808 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:01:03 ] あ、それ俺も気づいた。bladeの検索は死んでる。 今じゃgoogle site:使ってるなあ
809 名前:804 mailto:sage [2008/02/13(水) 00:24:48 ] そうかgoogle site:を使えばよかったのかー。頭悪いな > オレ >>806 さん、ソース読んでみました。 main_to_s rb_define_singleton_method(ruby_top_self, "to_s", main_to_s, 0); 拍子抜けしました。Init_Objectあたりをもっと深く読んでみようと思います。 ありがとうございました。
810 名前:783 mailto:sage [2008/02/13(水) 02:49:21 ] レスくれた方有難うございました。 確かにttcは読み込めなかったので Miyako入れる方向で探っていく事にします それにしてもruby/SDLの文字表示がこんなに弱いとは…
811 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 04:33:24 ] >>779 釣られてるよ。 >>777 のpythonのコードは、sortに()が付いてないから実際にはソートしてない。
812 名前:デフォルトの名無しさん [2008/02/13(水) 07:53:37 ] $ irb irb(main):001:0> l=[100,101,102,103,104,105,106,107,108,109] => [100, 101, 102, 103, 104, 105, 106, 107, 108, 109] irb(main):002:0> l.each_with_index do |item,idx| irb(main):003:1* puts "hit #{item}" irb(main):004:1> l.delete_at idx if 0==item%2 irb(main):005:1> end hit 100 hit 102 hit 104 hit 106 hit 108 => [101, 103, 105, 107, 109] irb(main):006:0> 意図したとおり奇数だけ残せたのですがhitの表示がなぜ偶数だけになっているか分かりません delete_atするより前でputs "hit #{item}"してるので全要素がputsされると思ったのですが。。。
813 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:07:34 ] 消す度にずれてるから p l とか puts "hit #{item} at #{idx}" にして見れば分かる delete_ifを使えばいいよ
814 名前:812 mailto:sage [2008/02/13(水) 08:28:52 ] 理解できました ありがとうございます delete_if使ってみます
815 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 09:05:53 ] >>811 python -c 'range(0,10000000).sort' real 0.0859320 user 0.0468750 sys 0.0312500 python -c 'range(0,10000000).sort()' real 0.0771435 user 0.0312500 sys 0.0468750 >>779 ruby -e '(0...10000000).sort' real 2.1707595 user 1.6875000 sys 0.1406250 ruby -e '(0...1000000).to_a real 0.3525165 user 0.2500000 sys0.0937500
816 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 09:10:38 ] 桁が違うとか紛らわしい ruby -e '(0...10000000).to_a real 1.6034130 user 1.4531250 sys 0.1406250
817 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:14:36 ] 10000000 を 10_000_000 とか 1000_0000 とか書けることは意外と知られてないし使われてないな irb> p 10_000_000 10000000
818 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:41:43 ] >>810 でもMiyakoでは特に変なことしてないみたいだぞ? api/font.rb を「TTF」で検索してみ
819 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 14:09:52 ] Pythonのマージソートは部分整列を利用してほげほげとかクックブックに書いてあったから range(0,10000000).sort() のソートにほとんど時間がかからないはず。 (参考:svn.python.org/view/*checkout*/python/trunk/Objects/listsort.txt ) Rubyはどうなのよ
820 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:29:39 ] マージソートなのか。 rubyはクイックソートだから、整列済みのものには不利だな。
821 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:34:42 ] >>820 それもあるけど、1.9だとシステム提供のqsortでなく割と高速なqsort実装を使っているので、その例だとPythonとほぼ互角の速度になる。
822 名前:デフォルトの名無しさん [2008/02/13(水) 18:19:53 ] "ID;本文"という形式のcsvファイルを読み込み、 本文だけを文節単位でわかち書き(半角スペースを挿入する)して 返すスクリプトを書きたいと思っています。 そのため、RubyからCaboChaにテキストを渡して処理しようと CaboCha0.53をインストールしたのですが、 肝心のCaboChaの呼び出し方がさっぱりわかりません。 CaboCha公式サイト(chasen.org/~taku/software/cabocha/libcabocha.html ) には「詳しくは, ruby/README…をご覧ください.」と書いてあるのですが そのruby/READMEがCaboChaインストールフォルダ内に見つからず… どなたか、インストール方法とRubyからの呼び出し方を 教えていただけますでしょうか。 ●実行環境 WindowsXP SP2 ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] ※One-Click Installer - Windows 1.8.6-26 Final Release 使用 CaboCha 0.53(Binary package for MS-Windows)
823 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 19:18:25 ] >>822 CaboCha というのは全く使ったことがないけど、 そのページから落せるソース cabocha-0.53.tar.gz には ruby/README は入ってたよ。 中を読むとさらに test.rb を読めとあって、test.rb 内には コメントとかまったく書いてないんだけど、まあその辺は C ライブラリの 方を見て予想しろってことなんじゃないかと。 あ、Windows での tar.gz の伸長には適当になんかフリーソフトを探してくれ。
824 名前:デフォルトの名無しさん [2008/02/13(水) 20:44:51 ] Cgi = CGI.new ip = ENV['REMOTE_ADDR'] host = '' begin host = Socket.gethostbyname(ip)[0] rescue host = ip end Cgi.out{host} これでちゃんとリモホ名に変換出来る鯖と 出来ない鯖があるんですが、鯖の問題なんですよね?
825 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 20:52:30 ] rescueでエラー殺しておいてそういう質問するな SocketError: host not found が出るという話ならRubyのバージョンが悪いとかなんとかいうことになってた気がする エラー時にコマンドラインから外部コマンド使うとなんとかなるかも
826 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:08:44 ] >>825 すみません… 助言ありがとうございました!
827 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:31:37 ] require 'cgi' require 'socket' cgi = CGI.new begin cgi.out{Socket.gethostbyname(ENV['REMOTE_ADDR'])[0]} rescue cgi.out{CGI.escapeHTML($!.inspect)} end う〜ん、こうやっても特に例外は出てない様です… 変換出来ない鯖のRubyのversionは1.8.5でした…
828 名前:783 mailto:sage [2008/02/14(木) 02:31:38 ] ruby/SDLの日本語表示の質問した者ですが IPAフォントというフリーのttfを見付けたので Miyakoを入れずとも日本語表示は出来ました ただ、新たな問題としてボールドとイタリックの書体設定が出てきました 見る限りSDLやMiyakoにそういう機能は無いようですし… そもそもこういう書体設定はどういう理屈でやってるんでしょうか
829 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 02:35:27 ] >>827 とりあえず何かのファイルにENV全体を書き出してみたら? CLIENT_IPとかX_FORWARDED_FORとかVIAとかなら取れるかもしれない。
830 名前:828 mailto:sage [2008/02/14(木) 02:41:52 ] >>828 自己解決しました 思いっきりスタイルの設定部分見落としてたわ… 失礼しました