[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/16 09:04 / Filesize : 244 KB / Number-of Response : 847
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 23



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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

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

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






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<244KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef