1 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 04:30:21 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 【Ruby1.9 は不安定な開発版であり初心者には全く向きません】 【最新安定版の Ruby1.8.7 の使用をお勧めします】 ※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。 1.9 の新機能の一部が利用可能なので初学者にお勧めです。 ※ただし十分安定しているとは言えないので プロダクション環境での利用にはお勧めしません。 関連スレやURLは>>2-8 あたりを見てください。Ruby on Railsの質問は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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
29 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 00:44:54 ] >26 俺もそこを紹介しようとしてた。 >28 読め。
30 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 02:24:39 ] HTMLをopenuri等で取得してhead部分だけを抜き出そうとしました。 #!/usr/bin/ruby #html => openuriで取れた値。値が入っていることは p html で確認済み html = "<html><head>AA 2バイト文字とか改行とかいろいろ</head><body></body></html>" /<head>(.+)<\/head>/ =~ html p $1 ::Console:: nil まったくわかりません。 よろしくお願いします。
31 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 02:26:29 ] すいません、訂正です。 × /<head>(.+)<\/head>/ =~ html 以下どちらのパターンも同じ結果です。 ○ /<head>(.+)<\/head>/imo =~ html ○ html =~ /<head>(.+)<\/head>/imo
32 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 03:11:58 ] >>30 irbにコピペしたらちゃんと動いたよ? irb(main):001:0> html = "<html><head>AA 2バイト文字とか改行とかいろいろ</head><body></body></html>" => "<html><head>AA 2バイト文字とか改行とかいろいろ</head><body></body></html>" irb(main):002:0> /<head>(.+)<\/head>/ =~ html => 6 irb(main):003:0> p $1 "AA 2バイト文字とか改行とかいろいろ" => nil
33 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 06:15:54 ] >>27 そうか、FastCGIの必要性はあんまり無かったな じゃあメリットはミドルウェアだけか
34 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 09:08:58 ] >>30 ん?>>31 で動くパタンを自分で書いているけど、以下じゃ動かない理由を知りたいってこと? /<head>(.+)<\/head>/ =~ html 答えは正規表現リテラルの m オプション。//imo の m ね。 m をつけるとピリオドが改行にマッチするようになる。 つけないと「AA 2バイト文字とか改行とかいろいろ」の「改行とか」にマッチしない。 www.ruby-lang.org/ja/man/html/_A5EAA5C6A5E9A5EB.html#a.c0.b5.b5.ac.c9.bd.b8.bd.a5.ea.a5.c6.a5.e9.a5.eb Regexp.MULTILINE も参照。
35 名前:30 mailto:sage [2008/11/22(土) 12:51:43 ] 色々試していただいてありがとうございます。 >>32 すいません、何故かnilなんです >>34 >>30 に書いたとき、実際に付けているimoオプションを書き込み付け加えるのを忘れていて、訂正として>>31 に追加しました。 >>31 のプログラムでもマッチしない状態です。 こんな感じで動かしても、htmlには取得したHTMLがちゃんと表示されていますが、$1はnilになります。 #!/usr/bin/ruby response = (〜net/httpで取得したやつ〜) html = response.body #net/httpのbody部分を取得 p html #取得したURL先のHTMLファイルが正常に表示される html =~ /<head>(.+)<\/head>/imo header = $1 p header #-> nil なんです。改行とか文字コードの違いとかって落ちかなと思っているのですが 不特定多数な文字コードからUTF8に統一する、ってことできますか?
36 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 13:15:28 ] >>35 require 'net/http' html = "" Net::HTTP.start("www.yahoo.co.jp", 80){|http| html = http.get("/").body } html =~ /<head>(.+)<\/head>/imo header = $1 やっぱ動くって。 ruby -vと、変な省略をしない最小のコードを提示して。 ちなみにこっちは ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
37 名前:30 mailto:sage [2008/11/22(土) 14:07:35 ] #ruby -v #ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] website ={ "protocol" => "http", "hostname" => "e-words.jp", "parameter" => "", "pathname" => "/w/EZweb.html" } require 'net/http' Net::HTTP.version_1_2 port = 80 resp = "" Net::HTTP.start(website["hostname"], port) {|http| resp = http.head(website["pathname"] + website["parameter"]) if resp['content-type'] =~ /text/i resp = http.get(website["pathname"] + website["parameter"]) end } p resp.body resp.body =~ /<head>(.+)<\/head>/imo head = "<html><head>#{$1}</head></html>" p head #-> "<html><head></head></html>"
38 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 14:08:16 ] こんな感じです。 hostname => "www.yahoo.co.jp", pathname => "/" では正常に動きます。
39 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 14:10:57 ] あれ、そういえば正規表現に引っかからないときは p resp.body が取れてないことに気づきました。 どうも正規表現にとらわれすぎて視野が一直線になってしまっていたようです。 すいません。
40 名前:デフォルトの名無しさん [2008/11/25(火) 01:03:09 ] sortメソッドより、sort_byメソッドを使った方が、効率が良いらしいですが、 じゃあ、sortメソッドは何の為に存在するのでしょうか?
41 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 01:21:31 ] 数値や文字列などプリミティブなデータをソートする時
42 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 02:20:09 ] collection.sort{|x, y| x.foo <=> y.bar } とか。
43 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 02:28:07 ] >42 x.foo==y.foo ? x.bar<=>y.bar : x.foo<=>y.foo とかも書くね
44 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 03:19:53 ] def sort_by map{|e| [e,yield(e)]}.sort{|a,b|a.last<=>b.last}.map(&:first) end
45 名前:デフォルトの名無しさん [2008/11/25(火) 12:07:52 ] 質問です。 Rubyって1000分の1秒単位でsleepするにはどのように書くのでしょうか?
46 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 12:29:51 ] nanosleepってないんだっけ。 じゃあPOSIXな環境ではselectのようなタイムアウトを ミリ秒などで指定できるシステムコールを使うのが 常套手段かな。 Windowsだとどうするのか知らないけど。
47 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 12:42:17 ] sleep(0.001) とかじゃダメ?
48 名前:デフォルトの名無しさん [2008/11/25(火) 17:27:58 ] 質問します。 配列をCSVに書き込む際、配列の要素数がわかっていて例えば3個の場合は csv << [ array[0], array[1], array[2] ] とすれば大丈夫だったのですが、 要素数がその時々で変わる場合はどうすればいいんでしょうか?
49 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 17:54:49 ] >>48 難しく考えちゃってるんだろうけど、Arrayクラスで渡せばいいんだから csv << array
50 名前:デフォルトの名無しさん [2008/11/25(火) 18:19:17 ] >>49 そのまま渡せばいいだけだったんですね 場所指定が必要なものだと思い込んでいました。 ご返答ありがとうございました。
51 名前:デフォルトの名無しさん [2008/11/25(火) 22:53:39 ] >>47 100分の1の指定はできるですね。 1000分の1の指定は出来ないですね。 >>46 無料のレン鯖で動かす時に使うつもりです。
52 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 23:22:19 ] >>51 いや、普通に指定できるでしょ? ただ、期待した長さで帰ってこないだけじゃないの? 1000分の1秒単位で正確にsleepさせたいときはOS選びから始めるしかないよ。
53 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 00:04:03 ] マザボ選びからだと思うよぅ
54 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 00:07:16 ] Rubyの文法上は可能だが、Rubyがsleepを依頼するOSのライブラリがサポートしてるかどうかまでは保証できない
55 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 06:53:36 ] OS選びっつーか、レンサバでは無理だ。 1000分の1秒単位でCPUのタイムスライスもらえるわけないでしょ。 ざらに1秒返ってこない。
56 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 10:12:58 ] ぶっちゃけ、ナニをさせるつもりなのかがちょっとだけ気になる
57 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 16:16:51 ] Windowsでsetpriorityやgetpriorityが使えない。 NotImplementedErrorで突っ返される。代替案はないの?
58 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 18:20:05 ] OpenProcessしてSetPriorityClass・GetPriorityClass
59 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 19:29:07 ] >>58 Win32APIの使い方がまったく分からんorz MSDNを読むとOpenProcessのプロトタイプ宣言がこれだから HANDLE OpenProcess( DWORD dwDesiredAccess, // アクセスフラグ BOOL bInheritHandle, // ハンドルの継承オプション DWORD dwProcessId // プロセス識別子 ); どう指定しろと
60 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 19:45:54 ] ttp://msdn.microsoft.com/ja-jp/library/aa383751(en-us,VS.85).aspx あとは根性で
61 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 20:04:12 ] >>60 定数の値が分からん\(^o^)/
62 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 20:23:46 ] >>61 Platform SDKを手に入れてヘッダの中を探すんだ
63 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 21:36:30 ] >>61 ぐぐれ
64 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 10:43:40 ] windows-prをgemで入れれば、↓こんな感じでいけるかな? gist.github.com/29658
65 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 13:13:54 ] CSVってクラスでCSV読み込みが出来るけど CSVのエンコーディングを明示的に指定したいときは、 一回KConvかまして$KCODEで指定したエンコードに変換後に CSVクラスへ渡すしかないかな?
66 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 18:42:36 ] Rubyを勉強しようと思い(超初心者) www.moongift.jp/2008/11/ruby_on_rails_portable/ からダウンロードした RailsPortable っていうフォルダを PCのハードディスクに展開すると170MB程度の大きさなのですが そのフォルダをUSBメモリにコピーすると900MBを超える大きさになります なぜでしょう? ちなみにこのアプリでRubyの勉強をすることは可能ですよね? 自宅外(自分専用のPC持ってません)のPCを使って学習出来ればと思いまして
67 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 18:44:13 ] >>66 見てないけどクラスタギャップじゃないの?
68 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 18:56:22 ] RubyやRailsは小さいファイル多いからな 本体は1KBしかなくてもディスク上は4KB占有するとかそんなんだろ あとRubyの勉強をしたいならRailsには触れたら駄目 RailsはRubyの機能を使っただけの全くの別物
69 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 19:02:37 ] Railsは「黒魔術の塊」と称されるほどに 強力だがRuby的には怖いフレームワーク 入門に勧められるかは微妙な所
70 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 20:31:46 ] いや、そもそも不可だろ それがRubyなのかRailsなのか分けることができない Rubyを知っている人間がRailsをやるからパワフルに使えるんだ 素直にRubyだけを使っておけ Ruby + rubygems でたいていの用事は済む
71 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 20:35:55 ] 超初心者というのがRubyの初心者なのかプログラムの初心者なのかによるんじゃないか?
72 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 20:37:16 ] >>64 ありがとうございます
73 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 20:45:32 ] gemsは重すぎて使えない
74 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 20:47:45 ] gemは動作が重い上に、進行状況を表示してくれないのが困る 今どの辺まで作業が進んでるのか分からないから 余計に待ちが長く感じてしまう
75 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 20:51:14 ] aptくらいさくさくいけないのか
76 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 20:51:19 ] gem のインストールは Rubygems のバージョンが古いと遅いよ 無理してでも最新版入れれ 一晩経っても終わらなかったインストールが1分で終わるぞ
77 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 20:54:16 ] 一晩経っても終わらなかったってのは、そもそも動いてたのか?
78 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 21:04:34 ] その「動いているかどうか」を判りやすくするために >74 が「進行状況」と言ってるんだよね
79 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 21:08:21 ] >>76 ほんとだ。 Ubuntu Hardyのaptで入れられるrubygemsパッケージのは 0.9.4とかで糞重かった。 1.3.1だと軽かった。 けど、>>74 の言う通りなーんも進行状況がでなかった。 合ってるかどうかはほっといて 0xcc.net/ruby-progressbar/ これとかでプログレスバーでも出してくれればいいかもかも。
80 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 21:10:36 ] 例の10MBくらいのYAMLの話だな 展開のために必要なメモリのないパソコンでは動作しない極悪仕様 しかもrubygem開発者たちのモンスターマシンではさくさく動いてるから誰も問題に気づけなかった >>77 原理上は動いてはいたはず メモリとスワップ全部使い切ってるから動いてるように見えないだけで >>78 だから rubygems のバージョン 1.1 だか 1.2 だかで解消されたって あの最初の YAML 展開時間を待てないパソコンはスペック的に重症だぞ
81 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 21:28:14 ] いいこときいた。サンクス。 メモリ200M台の古いノートでgemが実質上使い物にならなくて パッケージインストールめんどくさいなと思ってたんだけど oneclick installer 186-26も0.9.4で古いものだったんだなぁ。
82 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 21:35:10 ] >>80 俺のPCだと、今のrubygemsでもパッケージインストールまで20秒〜30秒くらい デカい奴だと1分ぐらいかかることもある(RDocやriのインストール時間は除く) その間、ほとんど進行表示がないのは辛い
83 名前:66 mailto:sage [2008/11/28(金) 06:51:49 ] >>67 〜71 遅くなりましたが レスありがとうございます 自分はプログラムの初心者なのでRails(フレームワーク?)のことは よく解らないのですが、RailsPortableって言うのはPCにインストールせずに Rubyが動くみたい?な事と、実際に起動してRubyのコマンドを入力すると Rubyが返ってきてる気がするので、素直にRubyの構文の勉強に使う事も 可能なのかなと思いまして それにUSBメモリ安いですし それにしても『黒魔術の塊』ってのはカッコ良いですね
84 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 11:03:56 ] >83 カッコイイ響きかも知れんが、その意味するところは 「あまり良くない方法を沢山使っちゃってる」 って話だと思う
85 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 11:41:04 ] RailsはWebアプリを作る道具としてはよくできてるが、 Rubyライブラリとしては最低の作りだろ。
86 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 15:28:58 ] あるメソッドがどのクラスやモジュールで定義されているかを調べる方法ってありますか。 たとえば Array#collect は Array ではなく Enumerable で定義されているということを、 Ruby の機能を使って検出したいです。 ここで、もし Array#collect が Array クラスで再定義されていたら、もちろん「Arrayで定義されている」ということを検出します。
87 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 16:07:30 ] …何に使うん?
88 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 16:31:11 ] そのものずばりの機能は知らんなあ 自分ならancestorsを一つ一つinstance_methods(false)で検査すると思う もうオブジェクトがあるならObject#methodのinspect見るのも楽
89 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 16:33:25 ] どっちにしてもそもそもがあまりスジのいいものではないね ほかの方法を検討するほうがうまくいくかもしんない
90 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 17:41:18 ] 「あるメソッド」っていうのが何かによるかな。 ほんとにただ名前を知ってるだけっていうなら、それこそ同名のメソッドなんてあちこちにあるわけで。 MethodとかUnboundMethodオブジェクトしてもう既に手元にあるなら、 RUBY_VERSION >= '1.8.7' なら #owner っていうメソッドがある。
91 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 18:29:50 ] jruby -v と入力すると、「ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。」 というエラーが出力されるのですが、原因は何でしょうか?jrubyは普通に使えて コンパイルもできます。
92 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 19:43:07 ] >>88 instance_methods() にfalseを渡すと、親クラスをたどらないようになるんですね。 知らなかったです。 これで希望のことができそうです。 ありがとうございました。
93 名前:83 mailto:sage [2008/11/29(土) 07:41:48 ] 少しばかしRails(フレームワーク)のことを調べてみたのですが 自分がやろうとしているのは、核ミサイルさえ搭載可能な ジェット戦闘機を使って 自動車(AT)の運転を学ぼうとしている ようなものなのかな?と思いました けどRailsPortable以外に RubyをPCにインストールせずに動かすアプリとか 環境とか無いですよね?
94 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 08:19:34 ] あまりないな Railsガン無視でRuby部分だけ使うことは可能だから、意識してRubyだけ使うぶんには問題なかろう
95 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 08:59:07 ] >>93 ドライブ文字が決め打ちできるなら USBメモリにruby本体を入れて、NYAOSなんかのコマンドラインシェルから PATH環境変数を上書きするように設定すれば RubyPortable的なこと(=インストールなしで動かすこと)ができる 俺はこの方法で実際にRubyPortableを作ろうとしたけど、ドライブ文字の検出方法が思いつかずに断念した
96 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 09:01:33 ] 意外とこれで間に合ったりして ttp://tryruby.hobix.com/
97 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 09:43:33 ] >>95 ディレクトリ構成は既知なんだからNYAOSを使わなくても、バッチで Ruby 自体を立ち上げて system 'cd \\' drive_name = `cd` とかすればいいんでないの?
98 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 09:56:37 ] >>97 %~d0 でバッチファイルがあるドライブ文字が取れるよ。 ちなみに %~p0 でバッチファイルがあるディレクトリ %~dp0 でドライブ文字+ディレクトリ
99 名前:デフォルトの名無しさん [2008/11/29(土) 16:29:14 ] ファイルセパレーターの変換って一般的にどうやってます? path.gsub!(/\//, "\\") とやると、/が\\になってしまうのですが。 \になるようにするにはどうすれば良いんでしょうか?
100 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:31:09 ] >>97-98 ありがとう、おかげで念願のRubyPortableが完成した (ファイルサイズを軽くするために、98のバッチファイル方式を採用させてもらいました)
101 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:32:10 ] >>99 > puts "path/file".gsub("/", "\\") path\file
102 名前:デフォルトの名無しさん [2008/11/29(土) 16:34:49 ] >>101 obj = 'j:/test/obj' obj.gsub!("/", "\\") p obj "j:\\test\\obj" となってしまいます。\\でも良いのかなぁ?コンソールの仕様?
103 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:36:59 ] >>102 ダブルクォーテーションもついてるぞ
104 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:37:10 ] pだから。
105 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:37:19 ] >"j:\\test\\obj" "j:\test\obj" なんてソースに書いたら問題あるのはわかるよね? pの出力っていうのはそういう仕様、だから>>101 ではputs使ってる。
106 名前:デフォルトの名無しさん [2008/11/29(土) 16:38:53 ] なるほど。ありがとうございました。
107 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 19:18:03 ] 自分のメソッド名を取得する方法ってないですかね? 具体的には def hoge p 自分のメソッド end hoge #=> "hoge" というのが欲しいんですが
108 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 19:25:10 ] caller(0)をチェックしてみるとか
109 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 19:30:46 ] ttp://d.hatena.ne.jp/secondlife/20051013/1129210792 class Object def current_method begin raise StandardError rescue StandardError => e e.backtrace[1].scan(/`(.*)'/).to_s end end end ぐぐってみたらこんなので可能ではあるけど 標準ではできないかなぁ
110 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 20:26:14 ] 自分自身の名前を知ることなく再帰呼び出しをしたいとかいう話なら Yコンビネータでぐぐるとよろし。
111 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 21:45:32 ] RUBY_VERSION >= '1.8.7' だと __method__というのが。
112 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 00:39:57 ] __METHOD__はRubuniusだっけ?
113 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 07:17:47 ] extractcontentを使っている人いませんか? ブログから本文のみを抜き取りたいのですが・・・・。 gemで入れたんですけど、作者のブログにあるサンプルが実行できません。 ttp://labs.cybozu.co.jp/blog/nakatani/2008/03/_rubyforge.html エラーは extract.rb:7: uninitialized constant ExtractContent::Extractor (NameError) なんですけども。
114 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 11:42:01 ] Hashについて教えていただきたいのですが rubyのHashはどのぐらいの容量を保持できるのでしょうか? メモリが許す限りの容量を代入していけるのでしょうか? 環境:MacOSX10.4 ruby 1.8.7 よろしくお願いいたします。
115 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 15:46:52 ] >>113 サンプルコード動いたけど。 $ ruby -v ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux] $ gem -v 1.2.0 $ gem list | grep extractcontent extractcontent (0.0.1) >>114 メモリが許す限りだけど、どのくらいメモリがあるかは感知しないので、 物理メモリを超えて使おうとすればスラッシングして涙目に。
116 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 19:34:07 ] >>113 $ ruby --version ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32] $ gem --version 1.3.1 でも動作した。 エラーからして、ExtractContentは定義されてるけどExtractorまでは定義されてないってことになるが 妙だな。1ファイルに収まるライブラリなのに。
117 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 19:57:18 ] カレントディレクトリにextractcontent.rbってテストで作っててその中でモジュール定義してるとか
118 名前:113 mailto:sage [2008/11/30(日) 19:58:20 ] >>115 >>116 自分も動きました。 一度間違ってrootでないアカウントでgemインストールしてしまい、 それを消して、再度rootで入れました。そのときに~/.gemができてそれ以下を読みに行こうとしてたっぽいです。 どこの設定に.gem以下を読みに行くかわからないのでユーザ作り直して、そこで実行するときちんと動作しました。
119 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 10:57:38 ] 書籍「Ruby レシピブック第二版268の技」のP.289のスクリプトを動かしたんですが、 結果がちょっとおかしいです。 class Numeric def round_n(nth) num = self*(10**(-nth)) return num.round()*(10**nth) end end num = 438.1728 p num.round_n(-3) #=> 438.173 結果は↓ Rational(438173, 1000) 何がいけないんでしょうか?よろしくお願いします。
120 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 11:14:40 ] >>119 何がどうおかしいと思うの?
121 名前:119 mailto:sage [2008/12/01(月) 11:26:11 ] >>120 本来"438.173"と表示されるはずが"Rational(438173, 1000)"と表示される辺りです。 Rational(438173, 1000)と表示されるのが正しいのでしょうか?
122 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 12:08:37 ] >>121 それは、実行前のどこか (irbで前に実行したスクリプトか、あるいはrequireで読み込んだ野良ライブラリのどこか)で require 'rational' をしている 何もしてない状態ではFloatが返る
123 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 12:26:28 ] raise "message" と raise XxxError.new("message") と raise XxxError の 違いがわかりません。どう使い分けるべきでしょうか。
124 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 12:28:03 ] >>121 なるほどそう読むのか。 Rational で返ってくるということはどこかで Rarional を require してるんだよな? そうすると、こんな具合↓に演算子が再定義されるとのこと。 doc.loveruby.net/refm/api/view/library/rational
125 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 13:39:45 ] >>123 見たままそのまんまです 例外というシステムはユーザーに情報を伝えることだけが主目的じゃないわけで ユーザーに情報を伝えるだけなら旧来の 「スクリプト○○行目の○○メソッドで引数○○がエラー起こしましたので終了します(・ε・)プップクプー」 と表示して即終了するだけでいいんだしさ 1行目は捕捉しても意味がないエラー(エラーが出たこと自体がまずいとき) 2行目は捕捉して回復処理を行えうる例外 3行目は捕捉可能でユーザーにも情報を与えたいとき 組み込みの例外のうちどんなものをどんなときに使うか、というのは特に定まってないので好きに悩め 引数が間違ってるからといって必ず組み込みの ArgumentError を使わなければならない (オリジナル例外もこれを継承しなければならない)というわけではない
126 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 13:49:58 ] 自分で例外クラス作るのは公開する気のあるモジュールだけだな 作ってる最中は全部 raise "message" になってる 中間的な一時的変数の名前考えるのめんどくさいという話に少し似ている
127 名前:119 mailto:sage [2008/12/01(月) 14:58:03 ] >>122 ,124 rubyを始めた頃にirbでやったみたいです。(単品で動かしてもRationalになるため) 戻し方が分からないので.to_fで対応しておきました。 ありがとうございました。
128 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 15:33:05 ] ここで出る例外をキャッチできればこっちでなんとかするのに、と思えるモジュールほどRuntimeErrorしか出さない 例外を使いこなすのははセンスが要るねえ
129 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 15:38:30 ] Matzが例外について熱く語ってる記事とかない? C#の中の人だとこういうのがあるんだけど ttp://www.artima.com/intv/handcuffs2.html