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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
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
130 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 16:23:28 ] 最初の分厚い黄色い本に何か書いてあるかも 例外機構については適当に導入したんだと思う
131 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 16:54:01 ] アスキーから出てた奴だよね。チャンスがあれば読んでみる。ありがとう
132 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 19:08:35 ] >>123 raise "message" -> raise RuntimeError, "message" raise XxxError.new -> raise XxxError raise XxxError -> raise XxxError 2番目は例外オブジェクトを渡す形式。 なんかどっかに取っておいてある例外を raise @ex みたいに挙げるとか。 例外を挙げる前にアクセサを呼んで情報をセットするときとか。 一番使われてるのは3番目じゃね? raise XxxError, "message" -> raise XxxError.new("message") と同じ。 1番目の形式は3番目の形式の省略形と言えるけど、これに合わせて rescueでも例外クラスを省略するとRuntimeError以下を捕捉する。 捕捉するな、ヤバいことになったぞ、ってときはExceptionとかRuntimeErrorよりスーパークラスな もの挙げたほうがいいと思う。
133 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 21:50:27 ] >>125 >1行目は捕捉しても意味がないエラー(エラーが出たこと自体がまずいとき) うそつけ。 raise "message" は単にエラークラスを省略しただけであり、「捕捉しても意味がない」なんてことはない。 >2行目は捕捉して回復処理を行えうる例外 >3行目は捕捉可能でユーザーにも情報を与えたいとき 逆だろ。 ユーザに情報を与えるなら raise XxxError じゃなくて raise XxxError.new("message") のほう。 初心者スレでこんなウソを垂れ流さんでくれ。初心者が間違って覚えてしまうだろうが。 それともなんかの工作員か?
134 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 21:59:28 ] >>132 >rescueでも例外クラスを省略するとRuntimeError以下を捕捉する。 ウソつけ。 rescue =< ex で捕捉されるのはStandardErrorだ。 >捕捉するな、ヤバいことになったぞ、ってときはExceptionとかRuntimeErrorよりスーパークラスな >もの挙げたほうがいいと思う。 ひどい日本語だな。「ExceptionやRuntimeErrorより...」と読み間違えてしまうじゃないか。 「捕捉するな、ヤバいことになったぞ、ってときは、Exceptionのような StandardErrorよりスーパークラスなものをあげたほうがいいと思う。」 「捕捉するな、ヤバいことになったぞ、ってときは、StandardErrorより上位の例外クラスを使ったほうがいいと思う。」 自分の日本語力のなさを「2chだからどうこう」と言い訳すんなよ?
135 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 22:15:39 ] >>133-134 が一体何にそんなに怒ってるのかが理解できない
136 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 22:55:54 ] Ruby使ってる人間であれば、普通に怒るべきところだと思う
137 名前:132 mailto:sage [2008/12/02(火) 01:54:41 ] >ウソつけ。 >rescue =< ex >で捕捉されるのはStandardErrorだ。 フォローthx、ふつーに間違えた。 でもrescue => ex だと思う。肩の力抜けよ。 >ひどい日本語だな。「ExceptionやRuntimeErrorより...」と読み間違えてしまうじゃないか。 いいじゃん、Exceptionより上の例外クラスないし。
138 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 02:18:02 ] そもそも raise Exception とか書いたら rescue Exception => ex とか書く奴が絶対出てくると思うんだが
139 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 02:27:28 ] けどライブラリのバグとかを教えるのにException挙げるぐらいしか手がないんだもんよん。 Rubyスクリプトからfatal触れないし。 JavaでError(だっけ?)系統の例外を捕捉するのがいい顔されないみたいに、やったら叱るしか ないんじゃないのかなぁ… irbみたいなのを書けるように、そう書けること自体は多分必要だし。
140 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 06:04:02 ] >>135 その人にとってRubyは神聖なものでRubyしか取り柄がないのですよ だから普通の指摘ができない
141 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 11:16:08 ] 2chだからといって出鱈目過ぎる奴はどうかと思うがな
142 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 11:22:58 ] >>140 間違ったことをしたり顔で書いてる人にいわれてもなあ・・・
143 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 11:24:47 ] >>139 >けどライブラリのバグとかを教えるのにException挙げるぐらいしか手がないんだもんよん。 どういう意味?
144 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 11:39:19 ] 普通に指摘できないのは壊れてる証だとは思う MLでも時々見る 記名でできるのはある意味凄いが真似したいとも思わん
145 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 15:54:47 ] >>143 Cではassertマクロを使うような場所というか… case value when :hoge ... when :piyo ... when :foo ... else #絶対に来ないはずの分岐 raise Exception, 'must not happen' end みたいな。るびまで読んで使い出した。
146 名前:デフォルトの名無しさん [2008/12/02(火) 16:35:17 ] さいきんやっとREXML::Document関連の使い方をうっすら覚えた程度の初心者ですが、 get_elementsで要素ごとに引っ張り出すようにしたら その数が20個くらいに膨れ上がりました。 その処理が終わるまでものすごく遅くなる(終了まで10秒程度)ですが、 何か高速に行なう方法とかないですか? 通常要素ね具体的には特定のタグ名ごとに特定の変数に入れる処理を一番高速にやるにはどのようにするのが一番いいでしょうか。
147 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 16:45:40 ] gem の Hpricot などの C で書かれた高速なパーサを利用してるライブラリを使う REXML は「全部 Ruby で書かれてる! Ruby 最高!」という人が使うライブラリ 遅いなと思ったら(そしてプログラムのインストールが可能な環境なら)即っと乗り換えてよし
148 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 17:12:48 ] Speed Comparison libxml vs. rexml in seconds libxml rexml opening 0.003954 0.104750 attribute_add 0.001895 0.011114 subelems 0.000585 0.004729 xpath 0.013269 2.981499
149 名前:デフォルトの名無しさん [2008/12/02(火) 20:11:30 ] >>147 無料のレンサバってインストールできるでしょうか?
150 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 20:22:07 ] 最近のレンタルサーバってインストールするものなのか? >>149 そのレンタルサーバサービスでrubygemsのユーザーインストール実績があればたぶん可能 まあ、つまり、無料レンタルサーバではきっと無理だろうな 俺はRubyスクリプトを外部使用するためだけにさくらインターネットの年5千円プラン使ってる
151 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 20:29:02 ] REXMLは遅くなってしまう処理はどう足掻いてもとことん遅い Ruby以外の外部プログラムにぶん投げて結果を置換してevalしたほうが速いとかマジキチ
152 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 20:42:06 ] >>146 SAXライクなAPIがあったと思うので挑戦してみては REXML SAX でぐぐったらそれなりに引っかかるようだ
153 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:21:20 ] evalの中で「evalをする」を記述することはできる? eval(<<EOS) def hello(person) eval "Hello, #{person}!" end EOS これはエラーになるよね > NameError: undefined local variable or method `person' for main:Object
154 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:41:36 ] そこで2重にする意味が分からんけどこういうこと? eval(<<EOS) def hello(person) "Hello, \#{person}!" end EOS
155 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:45:27 ] >>153 そもそも2重evalで何がやりたいのかを詳しく そのサンプルコードでは、意図がよく分からない
156 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 23:03:12 ] それはさすがに見たままなんじゃね def hello(person) return eval("Hello, #{person}") end という。eval文の入ったメソッド定義そのものをeval文で書きたいのだろ
157 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 23:05:29 ] EOSは何もくくらないと、"EOS"と同じ扱いになる つまり文字列全体をダブルクオートでくくったのと同じ状態になるので、展開が起きる 外側のevalに渡された文字列を評価する時点で#{person}が展開されちゃって、変なことになってる 展開を抑制するのが楽な回避法。'EOS'とすべし helloメソッドは文字列を返したいのかもしれないけど、 それだと内側のevalにも括弧が足りない eval <<'EOS' def hello(person) eval %q[ "Hello, #{person}!" ] end EOS print hello("Ruby") # => Hello, Ruby!
158 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 23:08:58 ] それは展開されないと困るんじゃないかなあ 変数展開がないならメソッド定義をevalで書く必要なくね?
159 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 23:41:34 ] rubyでnet/sshを使おうとしてるのですが、標準入力の使い方がわかりません それっぽいのがここしかないけど webos-goodies.jp/archives/51357031.html 他にないですか? やりたいのはsshで他サーバーに接続して、suでパスワードを入力し、 grep + パラメータを実行しその結果をブラウザに出力したいです 初めてrubyを使って無謀なことをしてる気もしますが、標準出力はどうにかなりましたが、 入力がどうもうまくいかず net/sshのリファレンスページもみましたがいったいどこを探せばメソッド載ってるのかわからない です
160 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 20:05:45 ] >>159 net-ssh.rubyforge.org/ssh/v1/chapter-5.html rubyforge.org/forum/message.php?msg_id=32802
161 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 22:56:25 ] >>160 うおおありがとう!まさに求めていた物だ!
162 名前:デフォルトの名無しさん [2008/12/04(木) 07:14:05 ] Rubyで書かれたblog用のCGIってないですか?
163 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 07:21:24 ] >>162 その質問には、熟慮の末に「ない」と答えるのが妥当な気がする
164 名前:デフォルトの名無しさん [2008/12/04(木) 07:25:21 ] >>163 ということは、あるにはあるけど使えないとか、そんな感じですか?
165 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 07:25:57 ] 「ぶろぐようのしーじーあいありますか?」という質問に応えられるレベルのものはないな 素直にPHPかPerlの使っとけ
166 名前:デフォルトの名無しさん [2008/12/04(木) 08:37:00 ] >>165 一応名前だけでも教えてください。
167 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 09:48:40 ] >>162 tDiary、Pinky:blog、lily もしかして普通に名前挙げた俺、空気読めてない?
168 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 10:00:59 ] 「ぶろぐようのCGI」というものを求めてる人には結構アレなシロモノだと思う Rubyをやりたいんじゃなくてブログシステムが欲しいんだろうし
169 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 10:16:04 ] tDiaryより設置しやすく使いやすい軽快なものを作ろうとしてるのかもしれないじゃないか 日本における Perl の隆盛は Perl でカウンタと掲示板が作られたことだからな 「なんかごっつい Rails だけじゃない Ruby」を推進するなら今しかない