Ruby 初心者スレッド ..
75:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/04/16 15:23:52
ありがとう><
0001.gifから0200.gifまでとかだと
どうするとよいですか!?
0詰めは、100以下のときだけですね^^;
77:デフォルトの名無しさん
08/04/16 15:30:19
適切なファイル名を200個作って引数を200個渡す
以上
どこにどんなファイルがあるか知らんのでこれ以上はどうにもならん
汎用的な条件つけて頼めばもう一回くらいは誰か作ってくれるかも
引数として指定されたディレクトリのファイルを全てリネームするとか
78:デフォルトの名無しさん
08/04/16 20:46:32
シェル呼び出しの時間を計るにはどうしたらいいですか?
Benchmark.measure { `sleep 10` }
これだと何故か実行時間が0になってしまうのです
79:デフォルトの名無しさん
08/04/16 21:55:08
その間自プロセスはwaitしてるだけだから時間が掛かってないってことだよね。
tms = Benchmark.measure { `sleep 10` }
tms.real #=> 10.0072751045227
あと、``は結果を文字列で得たいときに使うものだから、system 'sleep 10'
のほうが行儀がよいと思う。
80:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/04/16 22:15:13
「たぶんtotalだけみとけばいいんだな」くらいの理解だと思われる。
82:デフォルトの名無しさん
08/04/16 22:33:13
>>76
ruby 連番 rename あたりでググると吉。
83:デフォルトの名無しさん
08/04/17 02:45:11
>>50
初めて見たんだがそれ有名なのか?
84:デフォルトの名無しさん
08/04/17 05:28:30
Rubyってタイプヒンティングやインターフェイスがないですが
引数にある型のオブジェクトが欲しい場合、
どうするのが普通ですか?
85:デフォルトの名無しさん
08/04/17 07:11:30
>>84
お好きなのをどうぞ
* ダックタイピングを実践する
* 自分で引数を解析し例外送出などの処理を記述する
* Sapphireがリリースされるのを待つ
* いつかrubyに実装されるのを待つ
* PHPを使い続ける
86:デフォルトの名無しさん
08/04/17 07:26:32
プログラミングRubyのダックタイピングの項を読み直してみました
ダックタイピングというのは
引数リストでフィルタせず、メソッドがあるものと前提して呼び出し、
ないときには発生する例外によってコーディングの間違いを知る
といったスタイルですね
基本ダックタイピングで、
厳格にしたいケースではメソッドの有無をたしかめる
といったあたりが現実的なところでしょうか・・
87:デフォルトの名無しさん
08/04/17 07:46:22
テンプレートメソッドを
継承でするか、mixinでするかの判断基準は
何でしょうか?
88:デフォルトの名無しさん
08/04/17 10:24:10
>>83
試してみるといい
まあ、Mechanizeしたいと考えるようなページなんて大体決まってるってことなんだろうな
引っかからない人は全く引っかからないバグだ、これ
89:デフォルトの名無しさん
08/04/17 10:32:00
>>87
勘
いやマジで
どっちも「使ったから便利明快になる」というものではない
(サンプルコードでは明快だけどな)
継承を試してわけわかめだったらmix-in用に思考を切り替えるのが一般的かもしれん
90:デフォルトの名無しさん
08/04/17 10:42:07
>>87
テンプレートメソッドパターンとかはまず置いといて、継承が妥当か否かだったら
こんなんがあるな。
URLリンク(jp.rubyist.net)
Mixinとか委譲のおかげでRubyでは比較的あんまり継承しない気がするのは俺だけ?
91:デフォルトの名無しさん
08/04/17 11:00:55
どんだけ注意深く作る(作らなければならない)かの話だな
private を書くかどうかに似た話
92:デフォルトの名無しさん
08/04/17 15:31:03
privateとか何のためにあんの?
使わないメソッドなんて使わないんじゃね?
93:デフォルトの名無しさん
08/04/17 15:39:49
>>92
うん、まあ、君の感覚はある意味正しい
ある一定規模未満の素朴なプログラムでは単にめんどくさいだけとも言える
「グローバル変数が危険とか言うけど変数の場所とか名前とか被らないようにしておけば問題なくね?」
という問題と根っこは一緒だ
94:デフォルトの名無しさん
08/04/17 17:15:17
>>77
*.gifとかならできそうですかね。ありがとうございました!
95:デフォルトの名無しさん
08/04/17 17:18:11
引数を()で囲まない
Class.method arg
という書き方をした時に、
「この書き方は今後のRubyではサポートしない可能性がある」というような
警告が出る時と出ない時がありますが
これはどういう時に出るのですか?
96:デフォルトの名無しさん
08/04/17 17:29:31
>>95
URLリンク(blade.nagaokaut.ac.jp)
> 具体的には
> 引数として与えるメソッド呼び出しの括弧を省略しない
> ということです。文法的に値と文の区別をはっきりさせようという
> 思いです。
っていうか関数型メソッド以外ではカッコ省略する必要ないじゃんという気はする
あとRiteって今で言うところのRuby2.0のことね
97:デフォルトの名無しさん
08/04/17 18:25:10
>>96
ありがとうございます
マッツの設計思想はわかりますが
引数が一つの時は()書きたくないですね
この警告抑制したりできるのでしょうか
98:デフォルトの名無しさん
08/04/17 18:27:43
ruby -W1 hoge.rb
もしかしたら W0 でないとダメかもしれん
99:デフォルトの名無しさん
08/04/17 18:54:52
eachのブロックの中からループのカウント数を知る方法があれば教えて下さい。
100:デフォルトの名無しさん
08/04/17 18:57:08
つ each_with_index
101:デフォルトの名無しさん
08/04/17 19:05:36
数値をゼロパディングする方法は
printf("%010",NUM)
以外にないですか?
102:デフォルトの名無しさん
08/04/17 19:12:44
number.to_s.rjust(width, "0")
103:デフォルトの名無しさん
08/04/17 19:19:02
>>100
こんな便利なものが
ありがとうございました
104:デフォルトの名無しさん
08/04/17 20:24:07
文法的なエラー、
たとえばendが足りなかったりすると
ファイルの最後の行を指示してエラーが出たりします。
変更箇所が多かった場合、どこで間違えたか分かりにくいです。
どこで間違えているかすぐにわかる方法があれば教えて下さい。
105:デフォルトの名無しさん
08/04/17 20:51:58
ruby/sdlをつかってプログラムを作ろうと思っているのですが
常に最前面に表示し続けることは可能でしょうか?
106:デフォルトの名無しさん
08/04/17 21:02:48
>>102
ありがとう神様
107:デフォルトの名無しさん
08/04/17 21:10:49
>>104
ブロックの開始と終了の知識を確実にした上で、
ブロックをインデントしてくれるエディタを使う
インデントが大きくなるべきでないところで大きくなってるところがあれば
そこが閉じ忘れ
同様に "" や '' や () の対応を表示してくれる(色分けしてくれる)エディタを使うと
多くの場合「閉じ忘れ」がすぐ見つかるというか閉じ忘れることがない
あと ruby -c ./hoge.rb とすると文法チェックだけをしてくれる
自信ないなら中規模な変更ごとにチェックしてもらうといい
108:デフォルトの名無しさん
08/04/17 21:24:31
>>105
たぶん不可能
ちなみにRuby/SDLの話なら、ゲーム制作スレの方がいい
スレリンク(gamedev板)
109:デフォルトの名無しさん
08/04/17 22:12:21
>>107
エディタのインデントは完全ではないから、ちょっと複雑になるとあてにならないよ。
Rubyの文法は複雑だから、エディタごときが完全にパースできるわけではない。
だからエディタに任せてもendの閉じ忘れは検出できないことがよくある
110:デフォルトの名無しさん
08/04/17 22:15:27
>>104
・classやmoduleの閉じ忘れ
最初に書け。
・defとかその中のifとかの閉じ忘れ
メソッドでけぇ。
対処法にあんまなってないけど考え方としてはこんな感じかなぁ。
111:デフォルトの名無しさん
08/04/17 22:16:11
>>109
出たな100パーセント厨
口癖は「それは完全ではない」
90パーセントの達成度の価値を認めない人間だ
112:デフォルトの名無しさん
08/04/17 22:27:51
90パーセントかどうかはともかく、8割くらいはエディタの自動インデントで見つかるよな
エディタとして何を使ってるかとRuby編集モードの出来に依存するのが難点か
Emacsのruby-modeはわりと優秀
113:デフォルトの名無しさん
08/04/17 23:31:12
>>104
URLリンク(www.logic-junction.com)
patch をあてなきゃだからちょっと敷居は高いけど。
114:デフォルトの名無しさん
08/04/18 01:10:16
>>113
これよくないですか?
なんで本体に取り込まれないんだろう
115:デフォルトの名無しさん
08/04/18 01:59:32
parse.yをいじるからじゃないの。
Ruby2.0あたりではyacc捨てたいねえとか言う話もあったんじゃなかったっけ。
116:デフォルトの名無しさん
08/04/18 02:09:29
>>113
どうでもいいが、ページの上にある「Abount」に吹いた。
117:デフォルトの名無しさん
08/04/18 02:43:58
プログラミングRubyに
ブロックの記述は、一行の場合は{}
二行以上の場合はdo〜endを使うのが
Rubyコミュニティーのコンセンサスだと書いてありましたが
ブロックは複数行になる場合も{}の方が視認性よくないですか?
すべてendだと、何を閉じるものなのか、頭を見ないと分かりませんが、
{}だと、閉じカッコを見るだけで
何を閉じているのかがだいたい推測つきますし。
endにする合理的理由ってあるのでしょうか?
118:デフォルトの名無しさん
08/04/18 02:56:59
主観的な問題
119:デフォルトの名無しさん
08/04/18 03:06:49
・whileやifとの統一性
・だいたいソースは上から読む>何を閉じるものなのか、頭を見ないと分かりません
・Hashリテラルだって}で閉じるし、%{...}文字列リテラルなんかもある
でも結局は>>118か。
120:デフォルトの名無しさん
08/04/18 04:50:55
end地獄が大嫌いだからdo〜endなんか絶対に使わない
121:デフォルトの名無しさん
08/04/18 06:09:35
ってか、
そもそもなんでendなの?
文と紛らわしいしタイプも面倒くさい。
Rubyの最大の欠点がend。
122:デフォルトの名無しさん
08/04/18 06:48:00
}地獄が大嫌いだから(複数行で){}なんか絶対に使わない
>>121
主観的な問題
123:デフォルトの名無しさん
08/04/18 06:56:24
主観で片付けるのはおかしいよ
文と紛らわしいのも、タイプ数が多いのも
定量的な問題じゃん
理性的な判断を下せる範疇にあるはずだよ
124:デフォルトの名無しさん
08/04/18 07:49:21
end
end
end
end
end
end
125:デフォルトの名無しさん
08/04/18 07:52:02
主観的な問題でないのなら
なぜ「do〜end超読みやすい! すっきりする」って人と
「do〜end読みにくい上に紛らわしすぎ」って人とに分かれるんだ
126:デフォルトの名無しさん
08/04/18 08:04:48
だって引数の記述と通常の文との違いを明確にしたいmatzだよ
その認識の延長線上には、文と紛らわしいendの否定があるはずなんだよ
endをすぐに完全に廃止しろとは言わない
試しに{}も許容するようにしたらいいんだよ
コストはそんなに高くないだろう
その小さな変化は
きっと世界中の開発者に歓迎されると思うよ。
127:デフォルトの名無しさん
08/04/18 08:07:12
・yaccの能力で、beginとcaseの文法が上手く纏められなかった
・endを使うとruby-mode.elが書けそうだった
こんな理由じゃなかったっけ。
ifやwhileのこと?
>試しに{}も許容するようにしたらいいんだよ
128:デフォルトの名無しさん
08/04/18 09:04:24
endでいいと思うけど、emacsとかで
対応するclass,def,if,forにジャンプする
機能って無いですよね?
129:デフォルトの名無しさん
08/04/18 09:16:27
>>128
あるなら俺も使いたい。
{} の方ならこれでジャンプできるけどな。
URLリンク(www.bookshelf.jp)
;; 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:デフォルトの名無しさん
08/04/18 09:43:04
M-x ruby-beginning-of-block
131:デフォルトの名無しさん
08/04/18 09:44:51
あ、>>130は「このブロックの最初」にカーソルを移動な
カーソル移動がめどいという場合には妥当な機能
132:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/04/18 11:06:13
end は予約語だから、Rubyスクリプトを読んでるという頭の中では何かと間違えることはないなあ
(むしろ bashスクリプトで doneではなく endと書いて動作不良に首を傾げる)
慣れと主観っちゃそのとおりだがそれはそれで台無しな意見だ(w
素直に着色なエディタを使うというのはどうだろう
134:デフォルトの名無しさん
08/04/18 17:11:08
モジュールの中で、
自分を読み込むクラスに実装を期待するメソッドを定義あるいは明示するには
どうしたらいいですか?
135:デフォルトの名無しさん
08/04/18 17:19:34
まにゅあるに「hogeとhageはつくってね」とかく
136:デフォルトの名無しさん
08/04/18 17:28:37
え・・
Javaでいうabstractみたいな方法はないのでしょうか
137:デフォルトの名無しさん
08/04/18 17:46:52
def hoge
raise "override me!"
end
138:デフォルトの名無しさん
08/04/18 17:46:54
実行中にメソッドを追加したり削除したりできるRubyではそもそも無理
別途ユニットテストとかでソースコード自体を検査させるべき
139:デフォルトの名無しさん
08/04/18 17:47:05
こういうのとか?
URLリンク(blade.nagaokaut.ac.jp)
140:デフォルトの名無しさん
08/04/18 18:39:10
The Ruby Way 第2版
URLリンク(www.amazon.co.jp)
おおむね今週に発売(たぶんたいていの本屋に並んでるはず)
ボリュームアップし過ぎて5千円札では足りなくなりました
141:デフォルトの名無しさん
08/04/18 19:09:25
結局実行時だけど、自分はこうしてる
def foo
bar
end
private
def bar
raise NotImplementedError
end
142:デフォルトの名無しさん
08/04/18 19:14:58
モルボル教だかのお布施額がアップしたんだろ
143:デフォルトの名無しさん
08/04/18 19:20:36
def SomeModule.included(klass)
raise unless klass.method_defined?(:foo)
end
とかやればいいんじゃね?
144:デフォルトの名無しさん
08/04/18 19:20:54
19種類のRubyテンプレートエンジンレビュー
Mini reviews of 19 Ruby template engines
URLリンク(www.hokstad.com)
19種類ってありすぎww
145:デフォルトの名無しさん
08/04/18 19:23:31
実行時にエラーが出るというのは致命的
実際にそのメソッドが使われないと、未定義かどうかのエラーが出ないんだからね
それこそ、めったに起きないエラー処理のメソッドだった場合は、
まともに動作して安心してた頃になって致命的なことになる
ソフトウェアテストでチェックすることをお勧めするよ
146:105
08/04/18 19:26:28
>>108
ありです
147:デフォルトの名無しさん
08/04/18 19:28:13
>>140
翻訳が変わってるのがすごく気になるな・・
148:デフォルトの名無しさん
08/04/18 19:39:37
rubyはスペルミスがあってもそのまま動きますから、小さいことは気にしませんw
149:デフォルトの名無しさん
08/04/18 19:48:44
>>147
同じく
クイープの翻訳は最近アテにならないからなあ
150:デフォルトの名無しさん
08/04/19 00:00:08
Ruby初心者ですアドバイスよろしくお願いします。
.txtファイルに書かれた半角スペースで区切られた単語郡を
それぞれ配列に格納するスマートな方法があればお教えいただけないでしょうか。
汎用性を持たすために、ファイルの読み込みは
ruby test.rb < gomi.txt
にしたいです。
windowsXP ruby1.8.6
151:デフォルトの名無しさん
08/04/19 00:07:20
つsplit
152:デフォルトの名無しさん
08/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
153:150
08/04/19 01:40:27
150です。早々の回答を有難うございました>151,152
二次元配列のような形にしたかったので、152さんのおっしゃるとおりです。
配列の値をActiveRecordでsqlに挿入しようと思っていました。
本当に助かりました、有難うございました。
154:デフォルトの名無しさん
08/04/19 05:12:28
スキルレベルの微妙なちぐはぐさ加減が怖い
155:デフォルトの名無しさん
08/04/19 06:21:48
emacsをruby-modeで使っています
この環境で定義済みクラスやメソッドのリストを見たり、
定義済みのメソッドを自動補完させたりすることは出来ますか?
156:デフォルトの名無しさん
08/04/19 18:18:04
mixinとコンポジットの使いわけがよく分かりません
mixinがないほとんどの言語では、mixin的なことはコンポジットで実現しますよね
どういう時にmixinを使うんですか?
157:デフォルトの名無しさん
08/04/19 18:22:53
mixin は mixin 先の実装に依存した実装を追加したい時に使う。
158:デフォルトの名無しさん
08/04/19 19:44:38
ファイルパスから親ディレクトリを取得するにはどうしたらいいですか?
159:デフォルトの名無しさん
08/04/19 19:47:52
>>158
File.dirname(file_name)
160:158
08/04/19 20:01:35
DirとかFileUtilsばかり見てました
ありがとうございます
161:デフォルトの名無しさん
08/04/19 20:05:51
ライブラリのクラスメソッドを使う場合に
それを後に書く方法があれば教えてください
たとえば
File.dirname 'hogehoge'
を
'hogehoge'.(File.dirname)
みたいな形で書きたいんです
162:デフォルトの名無しさん
08/04/19 20:10:40
>>161
そうですか
163:デフォルトの名無しさん
08/04/19 20:15:50
どっかでそんな後置の言語を見た気がする
仮にRubyで実現するとしても、それを繋ぐのは . ではないだろうな
164:デフォルトの名無しさん
08/04/19 20:22:51
気持ち悪いと思わないなら
class String
def dirname
File.dirname(self)
end
end
あとはpathnameというライブラリもある。
165:デフォルトの名無しさん
08/04/19 20:38:34
というか何のためにそうしたいのかによるな
166:デフォルトの名無しさん
08/04/19 21:08:19
class Object
def callback(method, mypos=0, *args)
args.insert mypos, self
method.call *args
end
end
p Math.sqrt(400)
#=> 20.0
p 400.callback Math.method(:sqrt)
#=> 20.0
p [1,2,3,4,5,6][2,3]
#=> [3, 4, 5]
p 3.callback([1,2,3,4,5,6].method(:[]), 1, 2)
#=> [3, 4, 5]
こんなもんでどうかな
167:166
08/04/19 21:09:58
上のは >>161 宛
168:デフォルトの名無しさん
08/04/19 21:46:47
>>165
クラスとオブジェクトとメソッドの理解がまだ足りないんだと思う
気持ちはわかるが考え方が不当
欲しいのはいわば pathenize_dirname メソッドと推測
p '/usr/local/bin/ruby'.pathenize_dirname
"/usr/local/bin/"
メソッドの引数形式を「カッコ悪い」と感じる時期に罹るハシカみたいな病気だ
169:デフォルトの名無しさん
08/04/19 22:30:45
え、>>161は見た目が気に入らないというだけ?
機能的な話かと思ったら、どうやら明後日を向いていたようだ。
そういうことであれば >>166は>>161の美意識には適うまい。
170:デフォルトの名無しさん
08/04/19 22:33:10
こんなのもありか。
class String
def to_path
Pathname(self)
end
end
p '/usr/local/bin/ruby'.to_path.dirname
171:デフォルトの名無しさん
08/04/19 22:33:40
いや、pではto_strは呼ばれないな。putsで。
172:デフォルトの名無しさん
08/04/20 15:48:07
ERBについて教えてください。
railsのテンプレートでERBが使われてますが、
これは何かのタイミングで一度rubyのクラスに変換されてからHTMLに再び変換されるのでしょうか?
例えばJavaのJSPがJSP→サーブレット→HTMLと変換されるのと同じ流れですか?
173:デフォルトの名無しさん
08/04/20 16:05:58
>>172
<%%>の中身がそのままRubyコードとして抜き出され、
それ以外は_erbout.print ... という形に変換されてから
Rubyで評価される感じです。
174:172
08/04/20 16:30:00
>>173
なるほど、jspみたいにrhtmlファイルがクラスに対応するわけではないんですね。
あまり綺麗な仕組みではないですね…。
ありがとうございました。
175:デフォルトの名無しさん
08/04/20 16:31:52
単純に、ERBの簡単な使い方勉強するとイメージしやすいと思うよ
eRubyの仕様じゃなくて、ライブラリの使い方ね
176:デフォルトの名無しさん
08/04/20 17:47:33
mixiの「メッセージ」を送信したくて、URLリンク(d.hatena.ne.jp)を参考にして、以下のように書いてみました。
基本的にeditの部分だけを変更し
def edit title, content
@id = "12345"#相手のid
@edit_page = @agent.get('URLリンク(mixi.jp)'+@id)
edit_form = @edit_page.forms.name("messageForm").first
edit_form['subject'] = title.toeuc
edit_form['body'] = content.toeuc
confirm_page = @agent.submit(edit_form)
conf_form = confirm_page.forms[0]
p @agent.submit(conf_form)
end
以下を実行しました。
def mixi_message
mdw = MixiMessage.new("hoge@hoge.com","hogehoge")
mdw.login
mdw.edit "テストタイトル", "テスト本文"
end
177:デフォルトの名無しさん
08/04/20 17:48:07
結果、次のような出力になり、メッセージは送信されていませんでした。
#<WWW::Mechanize::File:0x4b03cdc @response={"connection"=>"close", "date"=>"Sun,
20 Apr 2008 08:11:37 GMT", "x-dealer"=>"034093", "content-type"=>"text/plain; c
harset=euc-jp", "server"=>"Apache", "content-length"=>"0"}, @code="200", @uri=#<
URI::HTTP:0x2583fc0 URL:URLリンク(mixi.jp) @filename="s
end_message.pl", @body="">
送信できていない原因は何でしょうか?
178:デフォルトの名無しさん
08/04/20 17:49:28
結果、次のような出力になり、メッセージは送信されていませんでした。
#<WWW::Mechanize::File:0x4b03cdc @response={"connection"=>"close", "date"=>"Sun,
20 Apr 2008 08:11:37 GMT", "x-dealer"=>"034093", "content-type"=>"text/plain; c
harset=euc-jp", "server"=>"Apache", "content-length"=>"0"}, @code="200", @uri=#<
URI::HTTP:0x2583fc0 URL:URLリンク(mixi.jp) @filename="s
end_message.pl", @body="">
送信できていない原因は何でしょうか?
179:デフォルトの名無しさん
08/04/20 18:16:00
>>176
WWW::Mechanizeは実際にサーバから送られてきたHTMLから指定された要素を抽出して実行している
素直に読むと
URLリンク(mixi.jp)ユーザーIDというページの結果を取得し、
<form name="messageForm"> というフォームで1番最初にあるフォーム中にある、
<input name="subject"> という、type が text か何かの入力欄に引数titleの内容を日本語EUCで入力
<input name="body"> という、type が text か何かの入力欄に引数contentの内容を日本語EUCで入力
<form name="messageForm"> のsubmit ボタンを「押して」結果のページを取得する
取得した結果の中の最初の <form> の submit ボタンを「押して」結果のページを取得する
という処理なんだけど、mixiのページ構成はきちんとそのようになってるかい?
180:デフォルトの名無しさん
08/04/20 18:55:48
176です。お返事ありがとうございます。
p conf_form
としてみたところ、出力に
#<WWW::Mechanize::Form::Field:0x4ba0de8 @name="submit", @value="confirm">
があり、これは、
「確認画面」の <input type="hidden" name="submit" value="confirm"> と一致しているので、
おそらく「確認画面」までは到達していると思います。
「確認画面」では formはひとつしかなく、
<form action="send_message.pl?id=1056392" method=post>
<input type="hidden" name="submit" value="confirm">
<!--略-->
<input name=yes type=submit value=" 送 信 ">
<!--略-->
<input name=no type=submit value=" 修 正 ">
</form>
という構成になっており、submitが二つあるのが怪しいかなと思っているのですが、
指定のない場合は、先にある「送信」が押されると思うので、条件は満たしているような気がします。
ほかに問題となりそうな点は何でしょうか?
181:デフォルトの名無しさん
08/04/20 20:37:02
num++
みたいな書き方が他言語とは挙動が異なるみたいなんですが
これはどういう動作をしているのでしょうか?
182:デフォルトの名無しさん
08/04/20 20:47:58
そもそも ++ はないよ
183:デフォルトの名無しさん
08/04/20 20:48:11
rubyにそんな演算子は存在しない
184:デフォルトの名無しさん
08/04/20 23:54:38
>>182-183
ありがとうございました
なんでないんでしょうね?
実装も単純そうなのになぁ
185:デフォルトの名無しさん
08/04/21 00:08:05
ま
た
か
説明するの面倒なのでぐぐってくれ
インクリメントの実装自体は簡単なんだが、Rubyのほうそくが みだれる ので採用されない
186:デフォルトの名無しさん
08/04/21 00:12:19
かっちょええ説明法があればたぶん普通に採用されると思う
さあ頑張って
「自分を破壊し別のオブジェクトを生み出して置き換える」
メソッドの意味を説明して説得するんだ
187:デフォルトの名無しさん
08/04/21 00:18:12
モルモン教義的に不死がタブーでないのなら
Rubyでベニクラゲをモデリングしたいと言ってみる
188:デフォルトの名無しさん
08/04/21 00:23:36
ループが正常に実行した時にのみ、ある処理を実行する
というプログラムを美しく書く方法があれば教えてください。
フラグを用意し、ループを抜けてからフラグをチェックするのが
普通だと思いますが、フラグの存在が冗長な気がします
例外を使うのも、何かやりすぎのような気がします
189:デフォルトの名無しさん
08/04/21 00:56:43
do_this if array.all? {|x| ... }
とかじゃなく?
190:デフォルトの名無しさん
08/04/21 03:20:44
どこでもrescueされなかった例外を補足するには
どうしたらいいですか?
191:デフォルトの名無しさん
08/04/21 03:27:37
rescue すればいい
192:デフォルトの名無しさん
08/04/21 03:56:54
全体を囲む大きなbeginブロックを書くということですか?
視認性が悪くなるので、
前もってエラーハンドラみたいなものが登録できたらいいと思うのですが・・
193:デフォルトの名無しさん
08/04/21 04:07:33
基本的には処理はトップレベルにベタ書きすべきじゃないと思うから
(変数はなるべくローカルスコープに入れた方がいいので)、
C などの main 関数みたいに全ての処理を囲んだ関数を作って
トップレベルに記述する処理はその関数のみにしておくと良い。
そういう状態であれば、begin で囲むのもそこだけで済む。
194:デフォルトの名無しさん
08/04/21 04:18:35
ふーむなるほど…
ありがとうございました
195:デフォルトの名無しさん
08/04/21 06:16:46
Timeオブジェクトを引き算するとfloatが返ってきます
時間の差をあらわすオブジェクト(間隔オブジェクト?)が
返ってきて欲しいのですがどうしたらいいですか?
196:デフォルトの名無しさん
08/04/21 07:44:30
>>196
返って来たFloatがその間隔オブジェクト(秒.マイクロ秒)
欲しい単位が分なら (t2 - t1).to_i / 60 すればいい
197:デフォルトの名無しさん
08/04/21 10:59:01
>>186
代入演算子の一種として実装すればよい
例:a += 1
198:デフォルトの名無しさん
08/04/21 21:39:36
このへんを蒸し返してみたら?
URLリンク(blade.nagaokaut.ac.jp)
199:デフォルトの名無しさん
08/04/21 22:23:48
num++に問題があるというより
++numとnum++の挙動の違いをRubyの中に組み込むのに難があるという感じ?
200:デフォルトの名無しさん
08/04/21 22:32:18
succはあるんだから、前置++は構文だけの問題だね
後置は……
201:デフォルトの名無しさん
08/04/21 22:42:48
> succはあるんだから
ほほう
君のRubyでは
3.succ
として 3が 4になるのか?
202:デフォルトの名無しさん
08/04/21 22:43:01
馬鹿ばっかだな
演算子で終わることに自体に問題があるんだろ
203:デフォルトの名無しさん
08/04/21 22:45:52
>>201
ああ、succはsucc!じゃないよね
吊ってきます
204:デフォルトの名無しさん
08/04/21 22:59:58
で、誰が演算子で終わることを問題にしてるの?
205:デフォルトの名無しさん
08/04/21 23:51:33
Cだと 1++ で 1 が 2 になるのか。
おもしろいな
206:デフォルトの名無しさん
08/04/22 00:02:31
演算子で終わることの意味も分からない馬鹿がいるな
207:デフォルトの名無しさん
08/04/22 00:16:53
演算子で終わる云々なんて、この何回もループした議論の中で出てきたっけ?
そりゃ内部仕様は変えなきゃいかんだろうが、「演算子で終わったら駄目」な理由は?
というか採用されても、「特殊なメソッド」以上のものにはならんと思うが
208:デフォルトの名無しさん
08/04/22 00:17:20
RubyでCGI作ってみてるのですが、system(id root)とかのコマンド結果が
どうもHTTPヘッダーとして出力されてしまっているようです。
どうにか出力しない方法ってあるんでしょうか。
209:デフォルトの名無しさん
08/04/22 00:18:59
パイプ使って、標準出力/エラー出力を捨てとけ。
210:デフォルトの名無しさん
08/04/22 00:23:10
>>209
ありがとです。
211:デフォルトの名無しさん
08/04/22 01:48:37
DBIを使ってPostgresSQLと接続しようとしたのですが、上手くいきません。
環境は、
OS CentOS 5.1 64bit
Postgres 8.3.1
ruby-1.8.6-p114
ruby-postgres-0.7.1
dbi-0.2.0
です
接続しようとすると`load_driver'エラーが出ます。ruby-postgresだけだと接続出来るのですが、dbiだと駄目です。
ちなみにdbiのインストールオプションはruby setup.rb config --with=dbi,dbd_pgでインストールしました。
$ irb
irb(main):001:0> require "postgres"
=> true
irb(main):002:0> PGconn.connect("localhost", 5432, "", "", "testdb","user","wassword")
=> #<PGconn:0x2aaaaabaceb0>
irb(main):003:0> require "dbi"
=> true
irb(main):004:0> DBI.connect("dbi:postgres:testdb:localhost", "user", "wassword")
DBI::InterfaceError: Unable to load driver 'postgres'
from /usr/local/lib/ruby/site_ruby/1.8/dbi.rb:352:in `load_driver'
from /usr/local/lib/ruby/1.8/monitor.rb:242:in `synchronize'
from /usr/local/lib/ruby/site_ruby/1.8/dbi.rb:282:in `load_driver'
from /usr/local/lib/ruby/site_ruby/1.8/dbi.rb:233:in `_get_full_driver'
from /usr/local/lib/ruby/site_ruby/1.8/dbi.rb:219:in `connect'
from (irb):4
from (eval):3
よろしくお願いします。
212:デフォルトの名無しさん
08/04/22 02:42:51
広くメソッドというもの自体をオーバーライドすることは出来ますか?
メソッドすべてにフックを仕込んで、メッセージのやりとりを
ロギングしたり、そういうことがしたいんですが
213:デフォルトの名無しさん
08/04/22 02:51:19
URLリンク(doc.loveruby.net)
214:212
08/04/22 03:04:54
>>213
こんな機能があったんですね
ありがとうございました
215:デフォルトの名無しさん
08/04/22 03:21:12
RubyWay読んでたら、Stringのeachは1.9ではなくなり、
each_lineを使うようになったと書いてありました。
今書いてるスクリプトには、ファイルからの読み込み処理等で
eachが結構あります。
これは書き換えないと1.9以降では動かなくなるのでしょうか?
216:デフォルトの名無しさん
08/04/22 06:46:11
ハッシュの存在しないキーを参照してもnilが返ってくるだけでノーエラーですが
多次元配列で存在しないキーを参照すると
undefined method `[]' for nil
になります
存在しなかったとしてもエラーが出ないように参照する方法を
教えて下さい
217:デフォルトの名無しさん
08/04/22 07:11:08
def nil.[](i)
nil
end
218:デフォルトの名無しさん
08/04/22 07:42:47
ハッシュのデフォルト値を[]にするとか
219:デフォルトの名無しさん
08/04/22 08:03:40
あ、スマンぼけてた。問題は配列のほうか。
220:デフォルトの名無しさん
08/04/22 08:16:16
多重ハッシュでも存在しないキー指定したら
undefined method `[]' for nil
になるじゃん
何をしたいか明確に書けよヴォケ
221:デフォルトの名無しさん
08/04/22 10:20:15
>>216
配列じゃなくてハッシュを使う
222:デフォルトの名無しさん
08/04/22 11:25:06
多次元配列などというものはRubyには存在しません
223:デフォルトの名無しさん
08/04/22 13:57:40
class TajigenHairetsu << Hash
def [](*arg)
super(arg)
end
def []=(*arg)
super(arg[1,-1], arg.last)
end
224:デフォルトの名無しさん
08/04/22 17:41:56
rubyのコマンドからファイルの有無を確認する方法は無いでしょうか?
無ければ指定したテキストファイルを作り
あれば追記するような仕組みを持ちたいので
225:216
08/04/22 17:50:19
217さんの方法でしのぐことにしました
ありがとうございました
>>220
ハッシュか配列かではなく
nilに[]が使えないことをどうしようかという話でした
226:デフォルトの名無しさん
08/04/22 18:17:46
>>224
ファイルのことについてどうこうしたいんだからFileクラスのメソッド探してみれ
227:デフォルトの名無しさん
08/04/22 19:31:56
だからfetch(i,default)を使えと
228:デフォルトの名無しさん
08/04/22 20:24:49
問答無用に'a'でopenすればええんとちゃうの?
229:デフォルトの名無しさん
08/04/22 21:04:12
>>228
のぞんでいたどうさができました
おそらく不具合の原因は参考にしていたサイトがafile=File.new(*****)
とnewを使っていたためのようです
今まで5個ほど言語を学んできましたがrubyほどシンプルで強力な言語は
無いと感じました
本当にありがとうございます!
230:デフォルトの名無しさん
08/04/22 21:28:45
>>215
動かなくなるよ。
str.each は、str.scan(/^/).each に置き換えよう。
231:デフォルトの名無しさん
08/04/22 21:42:21
IO#eachは残ってるんじゃなかったっけ?
232:デフォルトの名無しさん
08/04/22 22:15:01
class String
unless method_defined?(:lines)
def lines
self
end
end
end
としておいて、1.8系でもstr.lines.eachと書いておくという手も…
233:デフォルトの名無しさん
08/04/22 23:06:52
irb > print "test"
この結果が
ttt => nil
と出るんですが、これはどういう意味なんですか?
irb => ttt
と出力されることを期待したのですが。
234:デフォルトの名無しさん
08/04/22 23:09:48
tttはtestのつもり?
irbの=>の後ろに出るのは、入力した式(print "test")を評価した値。
x= print "test"
とすると x = nil になるのといっしょ。
testという文字列が書き出されるのは式の評価(値を求めること)の、まぁ副作用だ。
235:233
08/04/22 23:38:04
>>234
おぉ丁寧にありがとうございます。
入力コマンドを単純に実行するのではなく評価するだけなんですね。
てか使い道あるんでしょうかね…?
236:デフォルトの名無しさん
08/04/23 00:34:45
ないよ
237:デフォルトの名無しさん
08/04/23 00:37:12
irb > print "test"
この結果が
ttt => nil
^^^~~~~~~
^:printの出力
~:irbが返り値のインスペクションを出力
コマンドって…
238:デフォルトの名無しさん
08/04/23 00:43:07
ttt => String
にはならんの?
239:デフォルトの名無しさん
08/04/23 00:51:04
たぶん出力の意味を勘違いしてるよ。
irbは「=> 返り値」を印字してるだけ。
その前のprintの出力に改行がないからそんな見た目なだけ。
もしそんな出力がされるってことは、printがStringクラスを返してるというイミフなことになるぞ。
240:デフォルトの名無しさん
08/04/23 06:24:22
RubyのIDEでおすすめは何ですか?
今はNetBeansを使っていますが、他のファイルのクラス等が
自動補完できないのでもう少し高機能なのが欲しいと思っています
241:デフォルトの名無しさん
08/04/23 09:33:10
おすすめは無い
あと1年くらいしたら便利なの出てくるぜと3年くらい前から言われてる
242:デフォルトの名無しさん
08/04/23 11:46:14
rubyらしいな
243:デフォルトの名無しさん
08/04/23 14:09:47
pythonから移ってきた人向けの入門ページとかないですか?
244:デフォルトの名無しさん
08/04/23 15:31:57
for文について質問です。
for book in book_array
end
このように配列を回すfor文の中でインデックスを取得することは出来ないのでしょうか?
245:デフォルトの名無しさん
08/04/23 15:33:59
Enumerable#each_with_index
246:デフォルトの名無しさん
08/04/23 15:53:58
>>245
ありがとうございます!できました。
java出身だとfor文でインデックス取れないって変な感じですね。
247:デフォルトの名無しさん
08/04/23 16:15:35
数値計算関係はpython
日本語処理はruby
という使い分けしようと思っててるんですが、うまくミックスする方法はないのでしょうか?
248:デフォルトの名無しさん
08/04/23 16:39:13
質問が曖昧すぎて意味不明
249:デフォルトの名無しさん
08/04/23 19:40:43
>>246
for i in (0..book_array.size)
p i, book_array[i]
end
カウンタ変数もなしにインデックスが取れるわけないだろう
250:デフォルトの名無しさん
08/04/23 20:37:16
>>249
× ..
○ ...
251:デフォルトの名無しさん
08/04/23 21:54:00
上と下ならどっちがrubyらしいですか?
if foo == ""
end
if foo.is_a? String && foo.empty?
end
252:デフォルトの名無しさん
08/04/23 22:07:13
オブジェクトの型をチェックするコードは常用するものではない。
253:デフォルトの名無しさん
08/04/23 23:04:56
>>247
全部Python
254:デフォルトの名無しさん
08/04/23 23:13:04
てかRubyの日本語処理ってNKFべっただし
PythonからRuby向けを切り出す必要があるとは思えない
Pythonで書けるなら全部Pythonで書くのがベスト
255:デフォルトの名無しさん
08/04/24 00:18:41
rubyで簡単なツールを作ろうと考えております
GUIを組むにはruby/tkとか色々種類があるようなのですが、
最もメジャーなのはどれでしょうか?
ツールの詳細としては、チェックボックスやリストで設定項目を設定し、
それによるシミュレーション結果をメッセージボックスに文字列で
順次吐き出すだけというものです
※一応Javaも少しかじってます
もし「rubyのGUIは終わってるからJavaでやれ」とかならば
それはそれで結論として構いません
256:デフォルトの名無しさん
08/04/24 00:28:07
際だって使われているGUIツールキットはないと思うが、tkは最初から
付いてくるから比較的メジャーと思われる。
自分はマカーなので、必要な場合はOSに付いてくるRubyCocoaを使う
ことになると思うけど。
Javaもかじってる人ならJRubyでSwing使うというのもアリかね。
257:デフォルトの名無しさん
08/04/24 00:31:29
>>255
FXRuby
258:デフォルトの名無しさん
08/04/24 00:35:52
railsでいいじゃん
259:デフォルトの名無しさん
08/04/24 00:38:22
>>255
URLリンク(www.gesource.jp)
おいらはApollo派
260:デフォルトの名無しさん
08/04/24 00:41:57
配布するのか、自分の特定のマシンで使うのかにもよるよな
261:デフォルトの名無しさん
08/04/24 01:00:03
漏れはRuby/Gtk2
Gnomeだからそれに合わせて。Gladeとかあって使い勝手も悪くない。
262:255
08/04/24 01:07:39
>>260
一応は仕事で補助的に使うツールです
基本は自分のPCで動けばOKですが
状況によっては周囲に配らないとも言いきれませんので
配布時のパッケージングに優れていると助かりますね
263:255
08/04/24 01:09:43
あと、OSはWindowsXPです
今更言う事でもありませんが、念の為…
264:デフォルトの名無しさん
08/04/24 01:12:18
>>255
wxRubyかFXRubyの2択だな
265:デフォルトの名無しさん
08/04/24 01:15:49
VisualuRubyはダメなのかな?
exerbでexe化もできるみたいだし。
てか、ほんと「これだ!」ってのはないと思う。
266:デフォルトの名無しさん
08/04/24 09:48:06
俺AvtiveRubyとHTA
267:デフォルトの名無しさん
08/04/24 10:24:49
HTA+ActiveScriptRubyなんて組み合わせ知ったときには
これぞ俺が今まで追い求めていたものだと直感した
GUIはHTMLで記述、中身の処理はRuby。夢のようだ
なのになんで使わなくなったんだっけ俺
268:デフォルトの名無しさん
08/04/24 13:01:03
インターフェイスはrubyになるけど中身はIEのままじゃねそれ
eachとかProcとかないんじゃ
269:デフォルトの名無しさん
08/04/24 14:45:06
>>247
>>254
xmlrpcやjsonでお互いのプログラム間で通信したらいいのかな?
270:デフォルトの名無しさん
08/04/24 17:24:55
>>255
反則っぽいけどwebrickでアプリケーションサーバを作るとか
guiとかの環境依存性も配布する必要も無い
ついでにdrbで分散処理も追加
271:デフォルトの名無しさん
08/04/25 00:47:28
>>255
>262,263の条件ならC#かJavaがいいと思う。
UNIX系でも使う可能性があるなら>264かな。
272:255
08/04/25 02:51:02
色々候補ありましたが、日本語周りに確証が欲しかったので
差し当たりVisualuRuby触ってみる事にします
皆様レス有難うございました
しかし決め手が無くて色んな種類があるという状態は
選択肢が広いとは言え、個人的には苦手だ…
273:デフォルトの名無しさん
08/04/25 04:29:00
パスが入ってる文字列のファイルセパレーター(/や\)を,
/からwindowsの\に変換するメソッドは有りますか?
274:デフォルトの名無しさん
08/04/25 05:51:48
>>273
文字の置き換えだろ?
リファレンスマニュアルでStringの項を読みなさい
275:デフォルトの名無しさん
08/04/25 23:54:28
文字列の50行目から100行目の範囲に対して、正規表現で検索をしたいのですが
今は
str.split('\n).each do |line|
cnt += 1
line =~ 〜 if(50<=cnt && cnt<=100)
end
のようにしているのですが、strはかなり長い文字列なので、無駄な処理をしている気がします
もっと上手は方法はないでしょうか?
276:デフォルトの名無しさん
08/04/26 00:22:53
>>275
とりあえず、splitする必要ないでしょ
277:デフォルトの名無しさん
08/04/26 00:31:59
>>275
ややトリッキーな方法だが
target_lines = str.split($/).slice(50..100)
if target_lines then
target_lines.each do |line|
line =~ 〜
end
end
278:デフォルトの名無しさん
08/04/26 00:39:05
>>276-277
ありがとうございます
279:デフォルトの名無しさん
08/04/26 10:18:49
>>275
str.each_with_index do |line, cnt|
next if cnt < 49
line =~ 〜
break if cnt >= 99
end
1.9なら
str.each_line.with_index
280:デフォルトの名無しさん
08/04/26 10:32:56
next unless (50..100) === cnt
281:デフォルトの名無しさん
08/04/26 12:00:36
何を無駄って考えてるかによりそう
strが巨大な配列になってるのがヤだっていうならsplitとeachは全滅だな
282:デフォルトの名無しさん
08/04/26 13:58:48
Rubyからコマンドを実行させるには、execとかsystemとかいろいろあると
思うんですけど、出力結果を文字列として取得する場合はどうすればいいんですか?
ちなみにRuby1.8.6です。
283:282
08/04/26 14:01:07
282です。
できればエラーストリームだけとれるのが望ましいです。
284:デフォルトの名無しさん
08/04/26 14:13:05
URLリンク(kazuho.exblog.jp)
>日本のオープンソース開発者の中で有名なまつもと氏のような方ですらライセンス条件について間違った解釈をしてしまうのである
ほうほう。
285:デフォルトの名無しさん
08/04/26 14:49:08
わざわざ自分のブログ宣伝して回るなよ
286:デフォルトの名無しさん
08/04/26 16:24:59
>>282
* Open3 を使う(require 'open3')
* 自分で作る(open3 は簡単だから、読んでみるといい)
* windowsでは動かないかもしれないが↓
command = 'ls /tmp'
stderr = `#{command} 2>&1 > /dev/null`
287:デフォルトの名無しさん
08/04/26 22:55:11
>>282
$stdout, $stderr を reopen して system
system のいいとこは shell を介さずに実行できるから
コマンドインジェクションを防げる。
288:デフォルトの名無しさん
08/04/27 01:40:40
単純にpopenじゃあかんの?
289:デフォルトの名無しさん
08/04/27 10:50:28
ポペン!
290:デフォルトの名無しさん
08/04/27 18:19:04
あのさ、あるクラス Foo があって、その機能強化版をつくったとき、
クラス名は何にしたらいいと思う?
AdvancedFoo とか ExtendedFoo とか考えたけど、あまりいい名前じゃないといわれた。
かといって、雑多な機能をいくつも付け加えたから、これといって名前をつけにくいんだよな。
なんかいい名前ない?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4705日前に更新/261 KB
担当:undef