トップページ⇒tech
1001コメント357KB

Ruby 初心者スレッド Part 23

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん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つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
 ・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0067デフォルトの名無しさん2008/11/27(木) 18:44:13
>>66
見てないけどクラスタギャップじゃないの?
0068デフォルトの名無しさん2008/11/27(木) 18:56:22
RubyやRailsは小さいファイル多いからな
本体は1KBしかなくてもディスク上は4KB占有するとかそんなんだろ

あとRubyの勉強をしたいならRailsには触れたら駄目
RailsはRubyの機能を使っただけの全くの別物
0069デフォルトの名無しさん2008/11/27(木) 19:02:37
Railsは「黒魔術の塊」と称されるほどに
強力だがRuby的には怖いフレームワーク
入門に勧められるかは微妙な所
0070デフォルトの名無しさん2008/11/27(木) 20:31:46
いや、そもそも不可だろ
それがRubyなのかRailsなのか分けることができない

Rubyを知っている人間がRailsをやるからパワフルに使えるんだ
素直にRubyだけを使っておけ
Ruby + rubygems でたいていの用事は済む
0071デフォルトの名無しさん2008/11/27(木) 20:35:55
超初心者というのがRubyの初心者なのかプログラムの初心者なのかによるんじゃないか?
0072デフォルトの名無しさん2008/11/27(木) 20:37:16
>>64
ありがとうございます
0073デフォルトの名無しさん2008/11/27(木) 20:45:32
gemsは重すぎて使えない
0074デフォルトの名無しさん2008/11/27(木) 20:47:45
gemは動作が重い上に、進行状況を表示してくれないのが困る
今どの辺まで作業が進んでるのか分からないから
余計に待ちが長く感じてしまう
0075デフォルトの名無しさん2008/11/27(木) 20:51:14
aptくらいさくさくいけないのか
0076デフォルトの名無しさん2008/11/27(木) 20:51:19
gem のインストールは Rubygems のバージョンが古いと遅いよ
無理してでも最新版入れれ
一晩経っても終わらなかったインストールが1分で終わるぞ
0077デフォルトの名無しさん2008/11/27(木) 20:54:16
一晩経っても終わらなかったってのは、そもそも動いてたのか?
0078デフォルトの名無しさん2008/11/27(木) 21:04:34
その「動いているかどうか」を判りやすくするために >74 が「進行状況」と言ってるんだよね
0079デフォルトの名無しさん2008/11/27(木) 21:08:21
>>76
ほんとだ。

Ubuntu Hardyのaptで入れられるrubygemsパッケージのは
0.9.4とかで糞重かった。

1.3.1だと軽かった。
けど、>>74の言う通りなーんも進行状況がでなかった。

合ってるかどうかはほっといて
http://0xcc.net/ruby-progressbar/
これとかでプログレスバーでも出してくれればいいかもかも。
0080デフォルトの名無しさん2008/11/27(木) 21:10:36
例の10MBくらいのYAMLの話だな
展開のために必要なメモリのないパソコンでは動作しない極悪仕様
しかもrubygem開発者たちのモンスターマシンではさくさく動いてるから誰も問題に気づけなかった

>>77
原理上は動いてはいたはず
メモリとスワップ全部使い切ってるから動いてるように見えないだけで

>>78
だから rubygems のバージョン 1.1 だか 1.2 だかで解消されたって
あの最初の YAML 展開時間を待てないパソコンはスペック的に重症だぞ
0081デフォルトの名無しさん2008/11/27(木) 21:28:14
いいこときいた。サンクス。
メモリ200M台の古いノートでgemが実質上使い物にならなくて
パッケージインストールめんどくさいなと思ってたんだけど
oneclick installer 186-26も0.9.4で古いものだったんだなぁ。
0082デフォルトの名無しさん2008/11/27(木) 21:35:10
>>80
俺のPCだと、今のrubygemsでもパッケージインストールまで20秒〜30秒くらい
デカい奴だと1分ぐらいかかることもある(RDocやriのインストール時間は除く)
その間、ほとんど進行表示がないのは辛い
0083662008/11/28(金) 06:51:49
>>67〜71
遅くなりましたが
レスありがとうございます

自分はプログラムの初心者なのでRails(フレームワーク?)のことは
よく解らないのですが、RailsPortableって言うのはPCにインストールせずに
Rubyが動くみたい?な事と、実際に起動してRubyのコマンドを入力すると
Rubyが返ってきてる気がするので、素直にRubyの構文の勉強に使う事も
可能なのかなと思いまして それにUSBメモリ安いですし

それにしても『黒魔術の塊』ってのはカッコ良いですね
0084デフォルトの名無しさん2008/11/28(金) 11:03:56
>83
カッコイイ響きかも知れんが、その意味するところは
「あまり良くない方法を沢山使っちゃってる」
って話だと思う
0085デフォルトの名無しさん2008/11/28(金) 11:41:04
RailsはWebアプリを作る道具としてはよくできてるが、
Rubyライブラリとしては最低の作りだろ。
0086デフォルトの名無しさん2008/11/28(金) 15:28:58
あるメソッドがどのクラスやモジュールで定義されているかを調べる方法ってありますか。
たとえば Array#collect は Array ではなく Enumerable で定義されているということを、
Ruby の機能を使って検出したいです。
ここで、もし Array#collect が Array クラスで再定義されていたら、もちろん「Arrayで定義されている」ということを検出します。
0087デフォルトの名無しさん2008/11/28(金) 16:07:30
…何に使うん?
0088デフォルトの名無しさん2008/11/28(金) 16:31:11
そのものずばりの機能は知らんなあ
自分ならancestorsを一つ一つinstance_methods(false)で検査すると思う
もうオブジェクトがあるならObject#methodのinspect見るのも楽
0089デフォルトの名無しさん2008/11/28(金) 16:33:25
どっちにしてもそもそもがあまりスジのいいものではないね
ほかの方法を検討するほうがうまくいくかもしんない
0090デフォルトの名無しさん2008/11/28(金) 17:41:18
「あるメソッド」っていうのが何かによるかな。
ほんとにただ名前を知ってるだけっていうなら、それこそ同名のメソッドなんてあちこちにあるわけで。
MethodとかUnboundMethodオブジェクトしてもう既に手元にあるなら、
RUBY_VERSION >= '1.8.7' なら #owner っていうメソッドがある。
0091デフォルトの名無しさん2008/11/28(金) 18:29:50
jruby -v

と入力すると、「ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。」

というエラーが出力されるのですが、原因は何でしょうか?jrubyは普通に使えて
コンパイルもできます。
0092デフォルトの名無しさん2008/11/28(金) 19:43:07
>>88
instance_methods() にfalseを渡すと、親クラスをたどらないようになるんですね。
知らなかったです。
これで希望のことができそうです。
ありがとうございました。
0093832008/11/29(土) 07:41:48
少しばかしRails(フレームワーク)のことを調べてみたのですが
自分がやろうとしているのは、核ミサイルさえ搭載可能な
ジェット戦闘機を使って 自動車(AT)の運転を学ぼうとしている
ようなものなのかな?と思いました

けどRailsPortable以外に
RubyをPCにインストールせずに動かすアプリとか
環境とか無いですよね?
0094デフォルトの名無しさん2008/11/29(土) 08:19:34
あまりないな
Railsガン無視でRuby部分だけ使うことは可能だから、意識してRubyだけ使うぶんには問題なかろう
0095デフォルトの名無しさん2008/11/29(土) 08:59:07
>>93
ドライブ文字が決め打ちできるなら
USBメモリにruby本体を入れて、NYAOSなんかのコマンドラインシェルから
PATH環境変数を上書きするように設定すれば
RubyPortable的なこと(=インストールなしで動かすこと)ができる

俺はこの方法で実際にRubyPortableを作ろうとしたけど、ドライブ文字の検出方法が思いつかずに断念した
0096デフォルトの名無しさん2008/11/29(土) 09:01:33
意外とこれで間に合ったりして
ttp://tryruby.hobix.com/
0097デフォルトの名無しさん2008/11/29(土) 09:43:33
>>95
ディレクトリ構成は既知なんだからNYAOSを使わなくても、バッチで Ruby 自体を立ち上げて
system 'cd \\'
drive_name = `cd`
とかすればいいんでないの?
0098デフォルトの名無しさん2008/11/29(土) 09:56:37
>>97
%~d0 でバッチファイルがあるドライブ文字が取れるよ。
ちなみに %~p0 でバッチファイルがあるディレクトリ
%~dp0 でドライブ文字+ディレクトリ
0099デフォルトの名無しさん2008/11/29(土) 16:29:14
ファイルセパレーターの変換って一般的にどうやってます?
path.gsub!(/\//, "\\")
とやると、/が\\になってしまうのですが。
\になるようにするにはどうすれば良いんでしょうか?
0100デフォルトの名無しさん2008/11/29(土) 16:31:09
>>97-98
ありがとう、おかげで念願のRubyPortableが完成した
(ファイルサイズを軽くするために、98のバッチファイル方式を採用させてもらいました)
0101デフォルトの名無しさん2008/11/29(土) 16:32:10
>>99
> puts "path/file".gsub("/", "\\")
path\file
0102デフォルトの名無しさん2008/11/29(土) 16:34:49
>>101
obj = 'j:/test/obj'
obj.gsub!("/", "\\")
p obj

"j:\\test\\obj"

となってしまいます。\\でも良いのかなぁ?コンソールの仕様?
0103デフォルトの名無しさん2008/11/29(土) 16:36:59
>>102
ダブルクォーテーションもついてるぞ
0104デフォルトの名無しさん2008/11/29(土) 16:37:10
pだから。
0105デフォルトの名無しさん2008/11/29(土) 16:37:19
>"j:\\test\\obj"

"j:\test\obj"
なんてソースに書いたら問題あるのはわかるよね?
pの出力っていうのはそういう仕様、だから>>101ではputs使ってる。
0106デフォルトの名無しさん2008/11/29(土) 16:38:53
なるほど。ありがとうございました。
0107デフォルトの名無しさん2008/11/29(土) 19:18:03
自分のメソッド名を取得する方法ってないですかね?
具体的には

def hoge
 p 自分のメソッド
end

hoge #=> "hoge"

というのが欲しいんですが
0108デフォルトの名無しさん2008/11/29(土) 19:25:10
caller(0)をチェックしてみるとか
0109デフォルトの名無しさん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

ぐぐってみたらこんなので可能ではあるけど
標準ではできないかなぁ
0110デフォルトの名無しさん2008/11/29(土) 20:26:14
自分自身の名前を知ることなく再帰呼び出しをしたいとかいう話なら
Yコンビネータでぐぐるとよろし。
0111デフォルトの名無しさん2008/11/29(土) 21:45:32
RUBY_VERSION >= '1.8.7' だと
__method__というのが。
0112デフォルトの名無しさん2008/11/30(日) 00:39:57
__METHOD__はRubuniusだっけ?
0113デフォルトの名無しさん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)
なんですけども。
0114デフォルトの名無しさん2008/11/30(日) 11:42:01
Hashについて教えていただきたいのですが
rubyのHashはどのぐらいの容量を保持できるのでしょうか?
メモリが許す限りの容量を代入していけるのでしょうか?

環境:MacOSX10.4
ruby 1.8.7

よろしくお願いいたします。
0115デフォルトの名無しさん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
メモリが許す限りだけど、どのくらいメモリがあるかは感知しないので、
物理メモリを超えて使おうとすればスラッシングして涙目に。
0116デフォルトの名無しさん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ファイルに収まるライブラリなのに。
0117デフォルトの名無しさん2008/11/30(日) 19:57:18
カレントディレクトリにextractcontent.rbってテストで作っててその中でモジュール定義してるとか
01181132008/11/30(日) 19:58:20
>>115>>116
自分も動きました。
一度間違ってrootでないアカウントでgemインストールしてしまい、
それを消して、再度rootで入れました。そのときに~/.gemができてそれ以下を読みに行こうとしてたっぽいです。
どこの設定に.gem以下を読みに行くかわからないのでユーザ作り直して、そこで実行するときちんと動作しました。
0119デフォルトの名無しさん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)

何がいけないんでしょうか?よろしくお願いします。

0120デフォルトの名無しさん2008/12/01(月) 11:14:40
>>119
何がどうおかしいと思うの?
01211192008/12/01(月) 11:26:11
>>120
本来"438.173"と表示されるはずが"Rational(438173, 1000)"と表示される辺りです。
Rational(438173, 1000)と表示されるのが正しいのでしょうか?
0122デフォルトの名無しさん2008/12/01(月) 12:08:37
>>121
それは、実行前のどこか
(irbで前に実行したスクリプトか、あるいはrequireで読み込んだ野良ライブラリのどこか)で
require 'rational'
をしている

何もしてない状態ではFloatが返る
0123デフォルトの名無しさん2008/12/01(月) 12:26:28
raise "message" と
raise XxxError.new("message") と
raise XxxError の
違いがわかりません。どう使い分けるべきでしょうか。
0124デフォルトの名無しさん2008/12/01(月) 12:28:03
>>121
なるほどそう読むのか。
Rational で返ってくるということはどこかで Rarional を require してるんだよな?
そうすると、こんな具合↓に演算子が再定義されるとのこと。
http://doc.loveruby.net/refm/api/view/library/rational
0125デフォルトの名無しさん2008/12/01(月) 13:39:45
>>123
見たままそのまんまです
例外というシステムはユーザーに情報を伝えることだけが主目的じゃないわけで

ユーザーに情報を伝えるだけなら旧来の
「スクリプト○○行目の○○メソッドで引数○○がエラー起こしましたので終了します(・ε・)プップクプー」
と表示して即終了するだけでいいんだしさ

1行目は捕捉しても意味がないエラー(エラーが出たこと自体がまずいとき)
2行目は捕捉して回復処理を行えうる例外
3行目は捕捉可能でユーザーにも情報を与えたいとき

組み込みの例外のうちどんなものをどんなときに使うか、というのは特に定まってないので好きに悩め
引数が間違ってるからといって必ず組み込みの ArgumentError を使わなければならない
(オリジナル例外もこれを継承しなければならない)というわけではない
0126デフォルトの名無しさん2008/12/01(月) 13:49:58
自分で例外クラス作るのは公開する気のあるモジュールだけだな
作ってる最中は全部 raise "message" になってる
中間的な一時的変数の名前考えるのめんどくさいという話に少し似ている
01271192008/12/01(月) 14:58:03
>>122,124
rubyを始めた頃にirbでやったみたいです。(単品で動かしてもRationalになるため)
戻し方が分からないので.to_fで対応しておきました。
ありがとうございました。
0128デフォルトの名無しさん2008/12/01(月) 15:33:05
ここで出る例外をキャッチできればこっちでなんとかするのに、と思えるモジュールほどRuntimeErrorしか出さない
例外を使いこなすのははセンスが要るねえ
0129デフォルトの名無しさん2008/12/01(月) 15:38:30
Matzが例外について熱く語ってる記事とかない?
C#の中の人だとこういうのがあるんだけど
ttp://www.artima.com/intv/handcuffs2.html
0130デフォルトの名無しさん2008/12/01(月) 16:23:28
最初の分厚い黄色い本に何か書いてあるかも
例外機構については適当に導入したんだと思う
0131デフォルトの名無しさん2008/12/01(月) 16:54:01
アスキーから出てた奴だよね。チャンスがあれば読んでみる。ありがとう
0132デフォルトの名無しさん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よりスーパークラスな
もの挙げたほうがいいと思う。
0133デフォルトの名無しさん2008/12/01(月) 21:50:27
>>125
>1行目は捕捉しても意味がないエラー(エラーが出たこと自体がまずいとき)

うそつけ。
raise "message" は単にエラークラスを省略しただけであり、「捕捉しても意味がない」なんてことはない。

>2行目は捕捉して回復処理を行えうる例外
>3行目は捕捉可能でユーザーにも情報を与えたいとき

逆だろ。
ユーザに情報を与えるなら raise XxxError じゃなくて raise XxxError.new("message") のほう。

初心者スレでこんなウソを垂れ流さんでくれ。初心者が間違って覚えてしまうだろうが。
それともなんかの工作員か?
0134デフォルトの名無しさん2008/12/01(月) 21:59:28
>>132
>rescueでも例外クラスを省略するとRuntimeError以下を捕捉する。

ウソつけ。
rescue =< ex
で捕捉されるのはStandardErrorだ。

>捕捉するな、ヤバいことになったぞ、ってときはExceptionとかRuntimeErrorよりスーパークラスな
>もの挙げたほうがいいと思う。

ひどい日本語だな。「ExceptionやRuntimeErrorより...」と読み間違えてしまうじゃないか。

「捕捉するな、ヤバいことになったぞ、ってときは、Exceptionのような
StandardErrorよりスーパークラスなものをあげたほうがいいと思う。」
「捕捉するな、ヤバいことになったぞ、ってときは、StandardErrorより上位の例外クラスを使ったほうがいいと思う。」

自分の日本語力のなさを「2chだからどうこう」と言い訳すんなよ?

0135デフォルトの名無しさん2008/12/01(月) 22:15:39
>>133-134が一体何にそんなに怒ってるのかが理解できない
0136デフォルトの名無しさん2008/12/01(月) 22:55:54
Ruby使ってる人間であれば、普通に怒るべきところだと思う
01371322008/12/02(火) 01:54:41
>ウソつけ。
>rescue =< ex
>で捕捉されるのはStandardErrorだ。
フォローthx、ふつーに間違えた。
でもrescue => ex だと思う。肩の力抜けよ。

>ひどい日本語だな。「ExceptionやRuntimeErrorより...」と読み間違えてしまうじゃないか。
いいじゃん、Exceptionより上の例外クラスないし。
0138デフォルトの名無しさん2008/12/02(火) 02:18:02
そもそも raise Exception とか書いたら
rescue Exception => ex とか書く奴が絶対出てくると思うんだが
0139デフォルトの名無しさん2008/12/02(火) 02:27:28
けどライブラリのバグとかを教えるのにException挙げるぐらいしか手がないんだもんよん。
Rubyスクリプトからfatal触れないし。
JavaでError(だっけ?)系統の例外を捕捉するのがいい顔されないみたいに、やったら叱るしか
ないんじゃないのかなぁ…
irbみたいなのを書けるように、そう書けること自体は多分必要だし。
0140デフォルトの名無しさん2008/12/02(火) 06:04:02
>>135
その人にとってRubyは神聖なものでRubyしか取り柄がないのですよ
だから普通の指摘ができない
0141デフォルトの名無しさん2008/12/02(火) 11:16:08
2chだからといって出鱈目過ぎる奴はどうかと思うがな
0142デフォルトの名無しさん2008/12/02(火) 11:22:58
>>140
間違ったことをしたり顔で書いてる人にいわれてもなあ・・・
0143デフォルトの名無しさん2008/12/02(火) 11:24:47
>>139
>けどライブラリのバグとかを教えるのにException挙げるぐらいしか手がないんだもんよん。

どういう意味?
0144デフォルトの名無しさん2008/12/02(火) 11:39:19
普通に指摘できないのは壊れてる証だとは思う
MLでも時々見る
記名でできるのはある意味凄いが真似したいとも思わん
0145デフォルトの名無しさん2008/12/02(火) 15:54:47
>>143
Cではassertマクロを使うような場所というか…

case value
when :hoge
 ...
when :piyo
 ...
when :foo
 ...
else
 #絶対に来ないはずの分岐
 raise Exception, 'must not happen'
end

みたいな。るびまで読んで使い出した。
0146デフォルトの名無しさん2008/12/02(火) 16:35:17
さいきんやっとREXML::Document関連の使い方をうっすら覚えた程度の初心者ですが、
get_elementsで要素ごとに引っ張り出すようにしたら
その数が20個くらいに膨れ上がりました。
その処理が終わるまでものすごく遅くなる(終了まで10秒程度)ですが、
何か高速に行なう方法とかないですか?
通常要素ね具体的には特定のタグ名ごとに特定の変数に入れる処理を一番高速にやるにはどのようにするのが一番いいでしょうか。
0147デフォルトの名無しさん2008/12/02(火) 16:45:40
gem の Hpricot などの C で書かれた高速なパーサを利用してるライブラリを使う

REXML は「全部 Ruby で書かれてる! Ruby 最高!」という人が使うライブラリ
遅いなと思ったら(そしてプログラムのインストールが可能な環境なら)即っと乗り換えてよし
0148デフォルトの名無しさん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
0149デフォルトの名無しさん2008/12/02(火) 20:11:30
>>147
無料のレンサバってインストールできるでしょうか?
0150デフォルトの名無しさん2008/12/02(火) 20:22:07
最近のレンタルサーバってインストールするものなのか?

>>149
そのレンタルサーバサービスでrubygemsのユーザーインストール実績があればたぶん可能
まあ、つまり、無料レンタルサーバではきっと無理だろうな
俺はRubyスクリプトを外部使用するためだけにさくらインターネットの年5千円プラン使ってる
0151デフォルトの名無しさん2008/12/02(火) 20:29:02
REXMLは遅くなってしまう処理はどう足掻いてもとことん遅い
Ruby以外の外部プログラムにぶん投げて結果を置換してevalしたほうが速いとかマジキチ
0152デフォルトの名無しさん2008/12/02(火) 20:42:06
>>146
SAXライクなAPIがあったと思うので挑戦してみては
REXML SAX でぐぐったらそれなりに引っかかるようだ
0153デフォルトの名無しさん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
0154デフォルトの名無しさん2008/12/02(火) 22:41:36
そこで2重にする意味が分からんけどこういうこと?

eval(<<EOS)
def hello(person)
"Hello, \#{person}!"
end
EOS
0155デフォルトの名無しさん2008/12/02(火) 22:45:27
>>153
そもそも2重evalで何がやりたいのかを詳しく
そのサンプルコードでは、意図がよく分からない
0156デフォルトの名無しさん2008/12/02(火) 23:03:12
それはさすがに見たままなんじゃね

def hello(person)
 return eval("Hello, #{person}")
end

という。eval文の入ったメソッド定義そのものをeval文で書きたいのだろ
0157デフォルトの名無しさん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!
0158デフォルトの名無しさん2008/12/02(火) 23:08:58
それは展開されないと困るんじゃないかなあ
変数展開がないならメソッド定義をevalで書く必要なくね?
0159デフォルトの名無しさん2008/12/02(火) 23:41:34
rubyでnet/sshを使おうとしてるのですが、標準入力の使い方がわかりません
それっぽいのがここしかないけど
http://webos-goodies.jp/archives/51357031.html
他にないですか?

やりたいのはsshで他サーバーに接続して、suでパスワードを入力し、
grep + パラメータを実行しその結果をブラウザに出力したいです

初めてrubyを使って無謀なことをしてる気もしますが、標準出力はどうにかなりましたが、
入力がどうもうまくいかず

net/sshのリファレンスページもみましたがいったいどこを探せばメソッド載ってるのかわからない
です
0160デフォルトの名無しさん2008/12/03(水) 20:05:45
>>159
http://net-ssh.rubyforge.org/ssh/v1/chapter-5.html
http://rubyforge.org/forum/message.php?msg_id=32802
0161デフォルトの名無しさん2008/12/03(水) 22:56:25
>>160
うおおありがとう!まさに求めていた物だ!
0162デフォルトの名無しさん2008/12/04(木) 07:14:05
Rubyで書かれたblog用のCGIってないですか?
0163デフォルトの名無しさん2008/12/04(木) 07:21:24
>>162
その質問には、熟慮の末に「ない」と答えるのが妥当な気がする
0164デフォルトの名無しさん2008/12/04(木) 07:25:21
>>163
ということは、あるにはあるけど使えないとか、そんな感じですか?
0165デフォルトの名無しさん2008/12/04(木) 07:25:57
「ぶろぐようのしーじーあいありますか?」という質問に応えられるレベルのものはないな
素直にPHPかPerlの使っとけ
0166デフォルトの名無しさん2008/12/04(木) 08:37:00
>>165
一応名前だけでも教えてください。
■ このスレッドは過去ログ倉庫に格納されています