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


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

Ruby 初心者スレッド Part 19



1 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:26:33 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
   【最新安定版の Ruby1.8.6 の使用を強くお勧めします】

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


52 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 17:13:37 ]
拡張モジュールをデバッグするために、-g をつけてコンパイル
したんですけど、Ruby 本体も -g をつけてコンパイルしなきゃ
いけませんか。
初心者でごめん。

53 名前:11 mailto:sage [2008/04/15(火) 17:51:13 ]
>>48
一連のレスの中でそう指摘してくださったのは >>48 さんが初めてだと思いますので、
自明というわけでもないのではないでしょうか?

54 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 18:08:51 ]
当たり前のことは誰も説明しない、というそれだけの話かもしれない。

55 名前:11 mailto:sage [2008/04/15(火) 18:20:04 ]
うーん、当り前の話でしたか・・・

まああまりこれ以上引っ張るネタでもなさそうですし、
私も今は、世界のナベアツ Golf の方に興味が行っていますので、このへんで。

56 名前:デフォルトの名無しさん [2008/04/15(火) 19:27:40 ]
指定したハッシュのキーがあればその値、
なければ指定した値を取り出すための
もっとも短い書き方を教えてください
今は
hoge = moge.has_key?(key_name) ? moge[key_name]:default_value
と書いていますがmogeとkey_nameが重複していて気になります

57 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 19:31:57 ]
hoge = moge[key_name]||default_value

とか?値が nil にも対応しないといけないんだとダメだけど。

58 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 19:34:05 ]
hoge = moge.fetch(key_name, default_value )

59 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 19:36:21 ]
h = Hash.new(default_value)
じゃだめかな

60 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 20:05:37 ]
>>57-59
ありがとうございました
fetchがそのためのものですね



61 名前:デフォルトの名無しさん [2008/04/15(火) 22:09:41 ]
Rubyの流儀ではファイルとクラスの関係はどうですか?
他言語では一ファイル一クラスが多いようですが

62 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:34:36 ]
>>52
拡張ライブラリだけ-gついてりゃ大丈夫
デバッグ情報付きのrubyがあればあったでいいとは思うけど

63 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:44:52 ]
>>61
てきとう

RoRの流儀は知らない

64 名前:デフォルトの名無しさん [2008/04/15(火) 23:40:04 ]
コンストラクタでsyslogを開いてログを取ってるのですが
デストラクタがないためcloseする場所がないです。
どうするのがペターでしょうか?

65 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 23:48:20 ]
明示的にcloseを外にさらけ出すとか、
ブロック構文にしてyieldからもどってきたらcloseするとか、
define_finalizerしといて適切にGC.Collectしてねと言い捨てるか。

66 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 23:48:28 ]
>>62
さんくす

67 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:36:00 ]
>>65
ありがとうございます
define_finalizerってやつ使うか…と思っていたのですが
syslogは複数ハンドルオープンできないんですね
コンストラクタで開いて開きっぱなしにする方法がそもそもマズいのでは
と思い直し
書く時だけオープンしてすぐ閉じるようにしました

68 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 01:16:29 ]
www.kuwata-lab.com/rubyflow-ja/

69 名前:デフォルトの名無しさん [2008/04/16(水) 03:16:58 ]
正規表現を使ったディレクトリの再帰コピーってどうしたらいいですか?
Dir.globはワイルドカードしか使えないので困ってます

70 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 04:04:40 ]
再帰関数作ればいい。



71 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 07:02:43 ]
Dir.glob("**/*")の戻り配列をgrepして処理すれば。
あ、再帰じゃねーや(w

72 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 07:56:03 ]
>>69
1. FileUtils.cp_r を参考にする
2. Find.find {|path| do_somthing_with(path)}
3. Dir.open {|dir| dir.each {|entry| do_somthig_with(entry)}}

……こんなもん?

73 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 14:45:54 ]
0001.gif 0002.gif

179.gif 180.gif
に変換したいのですが。。
ぐぐって参考にしたのですがあってますか?

require 'fileutils'

$name = ARGV.shift
$ext = ".gif"
i = 0

ARGV.each do |file|
i = i + 179
$newname = $name + sprintf("&03d", i) + $ext
print "renaming " + file + " ---> "
print $newname + "\n"
FileUtils.mv(file, $newname)
end


74 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 15:05:41 ]
>>73
require 'fileutils'

ARGV.each do |before|
# 0001.gif から拡張子 .gif を取り出す
ext = File.extname(before)
# 0001.gif からディレクトリ名を取り出す(無いので ./)
dirname = File.dirname(before)
# 0001.gif から拡張子抜きファイル名 0001 を取り出す
basename = File.basename(before,ext)
# 0001という文字列を数字にして178を足して0詰め数字3文字に
after_basename = sprintf("%03d", basename.to_i + 178)
# ディレクトリ名+数字3文字+拡張子 というファイル名に合成
after = File.join(dirname, after_basename + ext)
# リネームしまーす
puts "renaming: #{before} -> #{after}"
FileUtils.mv(before, after)
end

# 実行結果
~$ ruby rename.rb 0001.gif 0002.gif
renaming: 0001.gif -> ./179.gif
renaming: 0002.gif -> ./180.gif


75 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 15:15:53 ]
で、

# 0001という文字列を数字にして178を足して0詰め数字3文字に
after_basename = sprintf("%03d", basename.to_i + 178)

のとこだけど、178を足してる時点で数字3文字になることはほぼ確定なんで、イマイチよくわからん
もし、0900.gif が 1078.gif にリネームされてもOKなのなら、単に

after_basename = (basename.to_i + 178).to_s

とでもしてくれ
>>74のままでも4桁動くから使用上は問題ないけどな
あと、フルパスや相対パスを引数にしてもそのディレクトリでリネームされるのでよろしく

76 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 15:23:52 ]
ありがとう><
0001.gifから0200.gifまでとかだと
どうするとよいですか!?

0詰めは、100以下のときだけですね^^;

77 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 15:30:19 ]
適切なファイル名を200個作って引数を200個渡す
以上

どこにどんなファイルがあるか知らんのでこれ以上はどうにもならん
汎用的な条件つけて頼めばもう一回くらいは誰か作ってくれるかも
引数として指定されたディレクトリのファイルを全てリネームするとか

78 名前:デフォルトの名無しさん [2008/04/16(水) 20:46:32 ]
シェル呼び出しの時間を計るにはどうしたらいいですか?
Benchmark.measure { `sleep 10` }
これだと何故か実行時間が0になってしまうのです

79 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 21:55:08 ]
その間自プロセスはwaitしてるだけだから時間が掛かってないってことだよね。

tms = Benchmark.measure { `sleep 10` }
tms.real #=> 10.0072751045227

あと、``は結果を文字列で得たいときに使うものだから、system 'sleep 10'
のほうが行儀がよいと思う。


80 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 21:59:04 ]
ていうか
irb> Benchmark.measure { `sleep 10` }
#<Benchmark::Tms:0x401fae88 @utime=0.0, @cstime=0.0, @total=0.01, @cutime=0.01, @label="", @stime=0.0, @real=10.0146338939667>
これは妥当だと思うんだけど
というか user time や system time の違いってわかってもらえてるのかな



81 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 22:15:13 ]
「たぶんtotalだけみとけばいいんだな」くらいの理解だと思われる。


82 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 22:33:13 ]
>>76
ruby 連番 rename あたりでググると吉。


83 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 02:45:11 ]
>>50
初めて見たんだがそれ有名なのか?

84 名前:デフォルトの名無しさん [2008/04/17(木) 05:28:30 ]
Rubyってタイプヒンティングやインターフェイスがないですが
引数にある型のオブジェクトが欲しい場合、
どうするのが普通ですか?

85 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 07:11:30 ]
>>84
お好きなのをどうぞ
* ダックタイピングを実践する
* 自分で引数を解析し例外送出などの処理を記述する
* Sapphireがリリースされるのを待つ
* いつかrubyに実装されるのを待つ
* PHPを使い続ける

86 名前:デフォルトの名無しさん [2008/04/17(木) 07:26:32 ]
プログラミングRubyのダックタイピングの項を読み直してみました
ダックタイピングというのは
引数リストでフィルタせず、メソッドがあるものと前提して呼び出し、
ないときには発生する例外によってコーディングの間違いを知る
といったスタイルですね
基本ダックタイピングで、
厳格にしたいケースではメソッドの有無をたしかめる
といったあたりが現実的なところでしょうか・・

87 名前:デフォルトの名無しさん [2008/04/17(木) 07:46:22 ]
テンプレートメソッドを
継承でするか、mixinでするかの判断基準は
何でしょうか?

88 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 10:24:10 ]
>>83
試してみるといい
まあ、Mechanizeしたいと考えるようなページなんて大体決まってるってことなんだろうな
引っかからない人は全く引っかからないバグだ、これ

89 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 10:32:00 ]
>>87


いやマジで
どっちも「使ったから便利明快になる」というものではない
(サンプルコードでは明快だけどな)
継承を試してわけわかめだったらmix-in用に思考を切り替えるのが一般的かもしれん

90 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 10:42:07 ]
>>87
テンプレートメソッドパターンとかはまず置いといて、継承が妥当か否かだったら
こんなんがあるな。
jp.rubyist.net/magazine/?0015-CodeReview#l11

Mixinとか委譲のおかげでRubyでは比較的あんまり継承しない気がするのは俺だけ?



91 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:00:55 ]
どんだけ注意深く作る(作らなければならない)かの話だな
private を書くかどうかに似た話

92 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 15:31:03 ]
privateとか何のためにあんの?
使わないメソッドなんて使わないんじゃね?

93 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 15:39:49 ]
>>92
うん、まあ、君の感覚はある意味正しい
ある一定規模未満の素朴なプログラムでは単にめんどくさいだけとも言える
「グローバル変数が危険とか言うけど変数の場所とか名前とか被らないようにしておけば問題なくね?」
という問題と根っこは一緒だ

94 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 17:15:17 ]
>>77
*.gifとかならできそうですかね。ありがとうございました!

95 名前:デフォルトの名無しさん [2008/04/17(木) 17:18:11 ]
引数を()で囲まない
Class.method arg
という書き方をした時に、
「この書き方は今後のRubyではサポートしない可能性がある」というような
警告が出る時と出ない時がありますが
これはどういう時に出るのですか?

96 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 17:29:31 ]
>>95
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/17868
> 具体的には
> 引数として与えるメソッド呼び出しの括弧を省略しない
> ということです。文法的に値と文の区別をはっきりさせようという
> 思いです。

っていうか関数型メソッド以外ではカッコ省略する必要ないじゃんという気はする
あとRiteって今で言うところのRuby2.0のことね

97 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 18:25:10 ]
>>96
ありがとうございます
マッツの設計思想はわかりますが
引数が一つの時は()書きたくないですね
この警告抑制したりできるのでしょうか

98 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 18:27:43 ]
ruby -W1 hoge.rb
もしかしたら W0 でないとダメかもしれん

99 名前:デフォルトの名無しさん [2008/04/17(木) 18:54:52 ]
eachのブロックの中からループのカウント数を知る方法があれば教えて下さい。

100 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 18:57:08 ]
つ each_with_index



101 名前:デフォルトの名無しさん [2008/04/17(木) 19:05:36 ]
数値をゼロパディングする方法は

printf("%010",NUM)
以外にないですか?


102 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 19:12:44 ]
number.to_s.rjust(width, "0")

103 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 19:19:02 ]
>>100
こんな便利なものが
ありがとうございました

104 名前:デフォルトの名無しさん [2008/04/17(木) 20:24:07 ]
文法的なエラー、
たとえばendが足りなかったりすると
ファイルの最後の行を指示してエラーが出たりします。
変更箇所が多かった場合、どこで間違えたか分かりにくいです。
どこで間違えているかすぐにわかる方法があれば教えて下さい。

105 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 20:51:58 ]
ruby/sdlをつかってプログラムを作ろうと思っているのですが
常に最前面に表示し続けることは可能でしょうか?

106 名前:デフォルトの名無しさん [2008/04/17(木) 21:02:48 ]
>>102
ありがとう神様

107 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:10:49 ]
>>104
ブロックの開始と終了の知識を確実にした上で、
ブロックをインデントしてくれるエディタを使う
インデントが大きくなるべきでないところで大きくなってるところがあれば
そこが閉じ忘れ
同様に "" や '' や () の対応を表示してくれる(色分けしてくれる)エディタを使うと
多くの場合「閉じ忘れ」がすぐ見つかるというか閉じ忘れることがない

あと ruby -c ./hoge.rb とすると文法チェックだけをしてくれる
自信ないなら中規模な変更ごとにチェックしてもらうといい

108 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:24:31 ]
>>105
たぶん不可能

ちなみにRuby/SDLの話なら、ゲーム制作スレの方がいい
pc11.2ch.net/test/read.cgi/gamedev/1207069887/

109 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 22:12:21 ]
>>107
エディタのインデントは完全ではないから、ちょっと複雑になるとあてにならないよ。
Rubyの文法は複雑だから、エディタごときが完全にパースできるわけではない。
だからエディタに任せてもendの閉じ忘れは検出できないことがよくある

110 名前:デフォルトの名無しさん [2008/04/17(木) 22:15:27 ]
>>104
・classやmoduleの閉じ忘れ
最初に書け。
・defとかその中のifとかの閉じ忘れ
メソッドでけぇ。

対処法にあんまなってないけど考え方としてはこんな感じかなぁ。



111 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 22:16:11 ]
>>109
出たな100パーセント厨
口癖は「それは完全ではない」
90パーセントの達成度の価値を認めない人間だ

112 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 22:27:51 ]
90パーセントかどうかはともかく、8割くらいはエディタの自動インデントで見つかるよな

エディタとして何を使ってるかとRuby編集モードの出来に依存するのが難点か
Emacsのruby-modeはわりと優秀

113 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:31:12 ]
>>104
www.logic-junction.com/products/rubyend.html

patch をあてなきゃだからちょっと敷居は高いけど。

114 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:10:16 ]
>>113
これよくないですか?
なんで本体に取り込まれないんだろう

115 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:59:32 ]
parse.yをいじるからじゃないの。
Ruby2.0あたりではyacc捨てたいねえとか言う話もあったんじゃなかったっけ。

116 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 02:09:29 ]
>>113
どうでもいいが、ページの上にある「Abount」に吹いた。

117 名前:デフォルトの名無しさん [2008/04/18(金) 02:43:58 ]
プログラミングRubyに
ブロックの記述は、一行の場合は{}
二行以上の場合はdo〜endを使うのが
Rubyコミュニティーのコンセンサスだと書いてありましたが
ブロックは複数行になる場合も{}の方が視認性よくないですか?
すべてendだと、何を閉じるものなのか、頭を見ないと分かりませんが、
{}だと、閉じカッコを見るだけで
何を閉じているのかがだいたい推測つきますし。
endにする合理的理由ってあるのでしょうか?

118 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 02:56:59 ]
主観的な問題

119 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 03:06:49 ]
・whileやifとの統一性
・だいたいソースは上から読む>何を閉じるものなのか、頭を見ないと分かりません
・Hashリテラルだって}で閉じるし、%{...}文字列リテラルなんかもある

でも結局は>>118か。

120 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 04:50:55 ]
end地獄が大嫌いだからdo〜endなんか絶対に使わない



121 名前:デフォルトの名無しさん [2008/04/18(金) 06:09:35 ]
ってか、
そもそもなんでendなの?
文と紛らわしいしタイプも面倒くさい。
Rubyの最大の欠点がend。

122 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 06:48:00 ]
}地獄が大嫌いだから(複数行で){}なんか絶対に使わない

>>121
主観的な問題

123 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 06:56:24 ]
主観で片付けるのはおかしいよ
文と紛らわしいのも、タイプ数が多いのも
定量的な問題じゃん
理性的な判断を下せる範疇にあるはずだよ

124 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 07:49:21 ]
     end
    end
   end
  end
 end
end

125 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 07:52:02 ]
主観的な問題でないのなら
なぜ「do〜end超読みやすい! すっきりする」って人と
「do〜end読みにくい上に紛らわしすぎ」って人とに分かれるんだ

126 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 08:04:48 ]
だって引数の記述と通常の文との違いを明確にしたいmatzだよ
その認識の延長線上には、文と紛らわしいendの否定があるはずなんだよ
endをすぐに完全に廃止しろとは言わない
試しに{}も許容するようにしたらいいんだよ
コストはそんなに高くないだろう
その小さな変化は
きっと世界中の開発者に歓迎されると思うよ。

127 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 08:07:12 ]
・yaccの能力で、beginとcaseの文法が上手く纏められなかった
・endを使うとruby-mode.elが書けそうだった
こんな理由じゃなかったっけ。

ifやwhileのこと?
>試しに{}も許容するようにしたらいいんだよ

128 名前:デフォルトの名無しさん [2008/04/18(金) 09:04:24 ]
endでいいと思うけど、emacsとかで
対応するclass,def,if,forにジャンプする
機能って無いですよね?

129 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:16:27 ]
>>128
あるなら俺も使いたい。
{} の方ならこれでジャンプできるけどな。

ttp://www.bookshelf.jp/soft/meadow_42.html#SEC635
;; By an unknown contributor
(defun match-paren (arg)
"Go to the matching paren if on a paren; otherwise insert %."
(interactive "p")
(cond ((looking-at "\\s\(") (forward-list 1) (backward-char 1))
((looking-at "\\s\)") (forward-char 1) (backward-list 1))
(t (self-insert-command (or arg 1)))))

(global-set-key "%" 'go-to-paren)

130 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:43:04 ]
M-x ruby-beginning-of-block



131 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:44:51 ]
あ、>>130は「このブロックの最初」にカーソルを移動な
カーソル移動がめどいという場合には妥当な機能

132 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:55:22 ]
ああ、キー操作あった
C-M-p
ちなみに {} のブロックでも有効
ただ、厳密には「インデントつける」計算上のブロックの最初に移動する
だから、

File.open('hoge.txt'){|f|
f.puts data
}

の場合は { ではなく File の F に移動する

File.open('hoge.txt'){|f| f.puts data }

の場合は検知できなくて、「ひとつ上」のブロックの最初に移動する

133 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 11:06:13 ]
end は予約語だから、Rubyスクリプトを読んでるという頭の中では何かと間違えることはないなあ
(むしろ bashスクリプトで doneではなく endと書いて動作不良に首を傾げる)
慣れと主観っちゃそのとおりだがそれはそれで台無しな意見だ(w
素直に着色なエディタを使うというのはどうだろう

134 名前:デフォルトの名無しさん [2008/04/18(金) 17:11:08 ]
モジュールの中で、
自分を読み込むクラスに実装を期待するメソッドを定義あるいは明示するには
どうしたらいいですか?

135 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:19:34 ]
まにゅあるに「hogeとhageはつくってね」とかく

136 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:28:37 ]
え・・
Javaでいうabstractみたいな方法はないのでしょうか

137 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:46:52 ]
def hoge
 raise "override me!"
end

138 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:46:54 ]
実行中にメソッドを追加したり削除したりできるRubyではそもそも無理
別途ユニットテストとかでソースコード自体を検査させるべき

139 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:47:05 ]
こういうのとか?
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/15841

140 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 18:39:10 ]
The Ruby Way 第2版
ttp://www.amazon.co.jp/dp/4798115339/
おおむね今週に発売(たぶんたいていの本屋に並んでるはず)
ボリュームアップし過ぎて5千円札では足りなくなりました



141 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:09:25 ]
結局実行時だけど、自分はこうしてる
 def foo
  bar
 end

private
 def bar
  raise NotImplementedError
 end

142 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:14:58 ]
モルボル教だかのお布施額がアップしたんだろ

143 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:20:36 ]
def SomeModule.included(klass)
 raise unless klass.method_defined?(:foo)
end
とかやればいいんじゃね?

144 名前:デフォルトの名無しさん [2008/04/18(金) 19:20:54 ]
19種類のRubyテンプレートエンジンレビュー
Mini reviews of 19 Ruby template engines
www.hokstad.com/mini-reviews-of-19-ruby-template-engines.html

19種類ってありすぎww

145 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:23:31 ]
実行時にエラーが出るというのは致命的
実際にそのメソッドが使われないと、未定義かどうかのエラーが出ないんだからね

それこそ、めったに起きないエラー処理のメソッドだった場合は、
まともに動作して安心してた頃になって致命的なことになる

ソフトウェアテストでチェックすることをお勧めするよ

146 名前:105 mailto:sage [2008/04/18(金) 19:26:28 ]
>>108
ありです

147 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:28:13 ]
>>140
翻訳が変わってるのがすごく気になるな・・

148 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:39:37 ]
rubyはスペルミスがあってもそのまま動きますから、小さいことは気にしませんw

149 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:48:44 ]
>>147
同じく
クイープの翻訳は最近アテにならないからなあ

150 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:00:08 ]
Ruby初心者ですアドバイスよろしくお願いします。
.txtファイルに書かれた半角スペースで区切られた単語郡を
それぞれ配列に格納するスマートな方法があればお教えいただけないでしょうか。
汎用性を持たすために、ファイルの読み込みは
ruby test.rb < gomi.txt
にしたいです。
windowsXP ruby1.8.6



151 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:07:20 ]
つsplit

152 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:10:48 ]
a bb ccc
dddd eeeee ffffff ggggggg

というようなテキストだと仮定
「それぞれ」という言葉から、1行目の配列と2行目の配列は別だと推測
ruby test.rb < hoge.txt
でも
ruby test.rb hoge.txt
でも動作する

# 配列を格納する配列
all_arr = Array.new
# readlines は 引数のファイル、無ければ標準入力から読み込んで各行を配列にして返す
readlines.each do |line|
# chomp で line を区切って配列にする
# 区切る"文字"は 正規表現の / / にマッチするものつまり半角スペース1個
arr = line.chomp.split(/ /)
# push メソッドで arr を all_arr の要素の末尾に追加する
# all_arr を「長くする」のではないことに注意
all_arr.push(arr)
end
# all_arr の中身を表示
p all_arr






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

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

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