1 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 08:21:23 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 ★注意★ Ruby 1.9.1 は初心者には時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。 (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に未対応であるためです。) なお 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 で勉強すれば将来スムーズに 1.9 系に移行できるでしょう。 関連スレやURLは>>2-5 あたりを見てください。Ruby on Rails の質問は Webプログラミング板の 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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
270 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 04:43:35 ] 的確なレスもできないくせにコテうぜえ
271 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 05:30:04 ] ナツノオモイデ君はどこでも厄介だ >>265 本当に何も考えていないWindows用スクリプトなのなら日本語はShiftJIS決め打ちだろ 入力する日本語を全部ShiftJISにして$KCODE相当もShiftJISにしてみ
272 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 06:01:39 ] >>245 arr = Array.new p arr[3] #=> nil これを「nil ではなく 0」にしたいのだと推測 できません 「arr[3] が nil なら 0 を代入」という手順を経るのが通例です この明示的な動作で要素3までの配列が確定され、「空」だった要素にはnilが代入されます 配列の自動初期値設定というのはあったらあったで便利っぽい機能なんですが、おそらくは 「nil以外のオブジェクトが勝手に若い要素全てに代入される」 という動作が Ruby 添付クラス的にキモいということで嫌われたのでしょう もし必要なサイズがあらかじめわかっているのなら、その大きさの配列を作って Array#fill で埋めるか arr = Array.new(5) arr.fill{ 0 } p arr[3] #=> 0 p arr #=> [0, 0, 0, 0, 0] あるいは new のときにやっちゃってください arr = Array.new(5){ 0 } p arr[3] #=> 0 p arr #=> [0, 0, 0, 0, 0] [] メソッドで参照しただけで若い要素が 0 で埋まる配列クラスと言うのを自作しても構いませんが、多分動作遅いと思われます
273 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 11:00:07 ] >>245 Rubyの配列にはそういう機能がないです。残念でした。 代替案としては arr[x] で参照するかわりに (arr[x] ||= 0) とするとか。 たとえば arr = [1, 2, 3] puts (arr[5] ||= 0) + 1 みたいな。 あとは Array#[] を上書きすればいいのかなー class Array def [](x) val = super(x) val = self[x] = 0 if val.nil? return val end end とか。
274 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 11:12:08 ] >>231 めんどくせぇソース全文うpってくれ
275 名前:203 mailto:sage [2009/08/19(水) 11:43:54 ] >>263 遅くなってすいません。こうですか? require 'pp' ary=%w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4) window =6 hout=Hash.new ary.size.times{ |i| hin=Hash.new(0) b= ary[i+1,window].select { |word| word =~ /[^#{ary[i]}]/ } b.each {|count| hin[count] +=1} #hout[ary[i]] = hin hin.each do |key, value| hout[ary[i]][key] += value end } pp hout 実行すると at.rb:12: undefined method `[]' for nil:NilClass (NoMethodError) from mat.rb:11:in `each' from mat.rb:11 from mat.rb:5:in `times' from mat.rb:5 となってしまいます。
276 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 12:01:02 ] >>275 自分で考えてほしいからエラーのヒントだけ >hout=Hash.new >#hout[ary[i]] = hin >hout[ary[i]][key] += value >at.rb:12: undefined method `[]' for nil:NilClass (NoMethodError)
277 名前:203 mailto:sage [2009/08/19(水) 12:32:53 ] >>276 hout[ary[i]][key] Hashが二つ[][]を取っているのが気持ち悪いですし、それがundefined method `[]' for nil:NilClass (NoMethodError) を起こしているのだと思いますが・・・・。そうだとしても解決がわからないです。
278 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 12:44:23 ] >>277 >hout[ary[i]][key] k = ary[i] x = hout[k] y = x[key] と同じ で、このときのxはなんだとおもう?
279 名前:203 mailto:sage [2009/08/19(水) 12:50:17 ] >>278 xはhout[ary[i]]ですか? ということはhout[ary[i]]が一つのハッシュでhout[ary[i]][key]だとそれのキーということですか?
280 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 12:58:15 ] なんどめだナウシカ ハッシュの h[key] は、「ハッシュ機構」という特殊なものがあるわけじゃなくて 「オブジェクト h の [] メソッドに引数 key を渡している」 という処理を簡単に表記できるように特別扱いされたものに過ぎない h = {'one' => 1'} p h['one'] #=> 1 p h.[]('one') #=> 1 つまり、h['one']['two'] という表記があったなら、それは h.[]('one').[]('two') というメソッドチェーンを表しているに過ぎない メソッドチェーンだから、[]('two') のレシーバ、つまりドットの前の、h.[]('one') の返り値、 が nil だと普通に NoMethodError になる そんだけ
281 名前:203 mailto:sage [2009/08/19(水) 12:58:33 ] あぁ、hout[ary[i]][key]はhout[ary[i]]のkeyがkeyの時のvalueですね
282 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 13:14:39 ] これを一括ダウンロードするのってどうやるの? www.boostermp3.com/audio/index.php?search=perfume
283 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 13:27:56 ] うぜえからダウンローダー使うなってページ構造に書いてあるな まあ知識がないなら手作業でやりゃいいんじゃねえの
284 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 13:34:11 ] JavaScriptのリンククリックするだけのように見えるから JavaScriptのリンクをクリックできるライブラリ使えばできそうな気はする 内容が内容だけにこれ以上は自力でやれとしか
285 名前:203 mailto:sage [2009/08/19(水) 14:03:15 ] >>280 すいません。ハッシュ機構というものがあるような感じで書いていました。 メソッドチェーンということはと思って hin.eachの前で p hout[ary[i]]をしたところ返り値がnilでした. ということは hout=Hash.newのところが問題になってくるのでしょうか?
286 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 14:09:22 ] >>285 そりゃ唯一の代入をコメントアウトしちゃったらnilしか返ってこないわな
287 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 14:22:23 ] よし、ではハッシュの初期値を使うのは禁止だ 理由は、全く理解していないから 望ましい処理を自力で一度書け どういう時にどうなっていて欲しいかを if で条件分岐しろ
288 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 14:25:13 ] なんかみんなを混乱させているようだね。 >>275 >at.rb:12: undefined method `[]' for nil:NilClass (NoMethodError) これを説明すると、まずat.rbの12行目でエラーが起きている。 エラーの内容は、nilに対して '[]' というメソッドを実行しようとしているため。 つまり nil[i] のようなことをしている。 at.rbの12行目がなにかわからないけど、hout[ary[i]][key] だとしたら、 ・aryがnilのせいで ary[i] がエラー ・houtがnilのせいで hout[ary[i]] がエラー ・hout[ary[i]]がnilのせいで hout[ary[i][key] がエラー のどれかが原因。 あとは自分で調べて。
289 名前:231 mailto:sage [2009/08/19(水) 14:52:04 ] >>274 遅くなりましたが>>231 .255.258.259.265のソースの全文です。。 ttp://2sen.dip.jp/cgi-bin/upgun/up1/source/up31158.zip
290 名前:チンパンジー愛ちゃん [2009/08/19(水) 15:17:23 ] 初心者が混乱しているときは大抵教え方が悪いと思っていたけどやっぱりそうだった。 ごめん、答えだけ書くね。大体>>220 と同じ出力になるよ。"w5" => {...}だけ違うけど。 require 'pp' ary=%w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4) window =6 hout=Hash.new ary.size.times{ |i| hin=Hash.new(0) b= ary[i+1,window].select { |word| word =~ /[^#{ary[i]}]/ } b.each {|count| hin[count] +=1} #hout[ary[i]] = hin if hout[ary[i]].nil? hout[ary[i]] = hin else hin.each do |key, value| hout[ary[i]][key] += value end end } pp hout
291 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 15:24:45 ] 的確なレスもできないくせにコテうぜえ
292 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 15:25:05 ] >>289 やっぱsixamoかよ、なんでわざわざ名前伏せるんだw でもこれ微妙に改変されててバージョン情報に偽りが・・・まあこの際どうでもいいか とりあえずホンモノ使っときゃいいんじゃね yowaken.dip.jp/sixamo/
293 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 15:32:10 ] >>292 本物はRubyのバージョン的に動かないって書いてあったので・・。 動かしてみた感じでは本物は受け答えできず。 改変版は数行実行したのちエラー。 ログのTXTファイル空にしたらまた動くので、文字コードとか?文章作成あたりでエラーになってると予測。 本物より動きそうなんですがね。。
294 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 15:42:14 ] 厳しい言い方だが、 あなたがただのユーザーなら、Rubyで動作するプログラムは現存しないので諦めれ あなたがプログラミングを行う者なのなら、あなたが自力で全体修繕して作れ どっちか
295 名前:203 mailto:sage [2009/08/19(水) 15:58:50 ] >>286->>288 ,>>290 ご指摘ありがとうございます。 各クラスのメソッドの知識がないみたいなのでそこを勉強して出直してきます。 また、初期値なども勉強してきます。 昨日からいろいろな人に教えていただきましてまことにありがとうございます。
296 名前:チンパンジー愛ちゃん [2009/08/19(水) 16:15:54 ] mecab坊やはどうなったの?解決したの?
297 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 16:28:45 ] 的確なレスもできないくせにコテうぜえ
298 名前:デフォルトの名無しさん [2009/08/19(水) 16:48:22 ] ここまで全部読み飛ばした。 寝る。
299 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 17:02:48 ] とりあえず みんな おつかれ
300 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 18:36:53 ] >>293 Ruby1.9なら1.8を もし引数無しで起動したならリンク先ちゃんと読め
301 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 19:09:17 ] 1.8w
302 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 19:48:41 ] >>290 >初心者が混乱しているときは大抵教え方が悪い 名言だな。こんどから>>1 に追加してほしいくらいだ。
303 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 20:06:36 ] 本人が言うから名言なんであって もし質問者側からそんなこと言われたらたまったもんじゃないな
304 名前:チンパンジー愛ちゃん [2009/08/19(水) 21:29:48 ] 教える側は常に心の奥底で思っていないといけないことですよ。 独りよがりの教えほど迷惑なものはありませんから。
305 名前:191 [2009/08/19(水) 22:21:17 ] すまん、俺が変な野郎(>>192 )を呼び込んでしまったようだ orz... あとは俺に任せてくれ。
306 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 22:30:23 ] どっちもサルに見えるのだが
307 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 03:35:31 ] 逆引きRuby誰か書き足してくれ
308 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 07:19:18 ] >>307 どっちの逆引き?
309 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 08:08:59 ] とりあえず、逆引きRubyという話題を振る時は、 どちらの逆引きか、逆引きの方か、逆引きの方かはっきり囲うな?
310 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 08:12:14 ] 日本語でおk
311 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 08:58:41 ] レシピブック初版にはお世話になったけど 最近いろいろあるから次買うとき迷うな >>309 書き足すっていうぐらいだからWikiのほうだろう
312 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 13:38:05 ] Emacs の ruby-mode で =begin と =end がインデントされてたいそう困ってるんだけど これって困ってる人いないのかな
313 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 14:06:37 ] >>304 そこまで自覚があるなら、さっさと消えろよ
314 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 17:19:03 ] >>312 あー,それ確か俺も愕然とした記憶が。 「=begin, =end は使わないことにする」で解決!
315 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 10:58:26 ] シリアルポートからデータをgetsで読んでます。 データは一行ずつ出力されるので問題は生じません。 しかし、特殊な設定情報だけは複数行出力で、行数が不定です。 このような何行か分からない出力を受け取るにはどのような手法が適しているでしょうか?
316 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 11:09:32 ] 行とい考え方を無くせばいい ただの改行文字だろ
317 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 11:10:20 ] 設定情報用の一時変数を確保しておいて、 設定情報1行目だったら通常の処理飛ばしてそこに溜めるようにすれば?
318 名前:315 mailto:sage [2009/08/21(金) 11:26:15 ] ありがとうございます。 とりあえず、一行ずつ << 演算子で設定情報用の配列の末尾に追加していくことにしました。 EOFがないので終了条件をどうするか悩んでみます。
319 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 11:40:13 ] >>318 EOFって全体の? 終了データが流れてこないとかpingみたいな定期送信がないなら 手動停止させるのが普通だと思う 可変長データなのにサイズ情報も終端情報もないのだとしたら 次の通常のデータが送られてきた時にバッファ吐き出して設定処理するとか
320 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 11:43:57 ] そりゃデータフォーマットがわからにゃなんとも
321 名前:315 mailto:sage [2009/08/21(金) 11:58:57 ] >>319 全てのデータを受信できるまで、timeoutモジュールを使って少し待ってからgetsの待ちを解除してみます。
322 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 13:43:36 ] 自作のスクリプトがあります libディレクトリを作ってファイル分けしてみたら10ファイルくらいになりました んで、これを日常で使いたいと思います 「開発ディレクトリ」と「実行ディレクトリ」を分けなければなりません (動作しない状態であることが多い開発中のスクリプトをcronなどで触らせたくない) どこか適当なディレクトリに「インストール」してバージョンを維持するのがいいと思ってます 最初は rubygem パッケージにすることを考えましたが、 require 'rubygems' で1秒近くかかる環境なので正直あまりやりたくありません (たぶん、スクリプト本体の実行時間のほうが短い) これ以外になにかてきとーな方法はありませんか?
323 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 13:52:21 ] >>322 subversionあたり使うとか
324 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 13:59:42 ] >>322 rake install で超適当なディレクトリに超適当に上書きするような rake スクリプトを書く 要は実行可能なときにファイルをコピーしておきたいってことだろ ファイルをコピーするという行為だけ rake で書け バージョン戻すという行為が簡単にできないのだけが難点だが、 まあ実行用ディレクトリを適当に圧縮でもしてバックアップしとけ
325 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:25:22 ] 質問です。 ary = [5, 2, 3, 3, 3, 4, 2, 2] のような配列を [5, 2, 3, 4, 2] のようにする、つまり、「隣り合った」同値の要素を uniqにまとめた配列を得る方法を求めています。 ary = [5, 2, 3, 3, 3, 4, 2, 2] prev = nil result = [] ary.each do |n| result << n if prev != n prev = n end result #=> [5, 2, 3, 4, 2] とするより、良い方法はないものでしょうか? これに限らず、配列処理で直前(または 直後)の要素を参照しながら 進めていくスマートな方法があれば教えていただきたいのですが・・・。
326 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:32:32 ] prev = nil result = ary.select{|v| v == prev ? false : (prev = v) }
327 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:33:18 ] 前後を参照するほうが注目だったか、スマン出直してくる
328 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:33:53 ] Enumerable#each_cons
329 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:51:43 ] >>326 selectをこういうふうに使えるのは知りませんでした。 関数型言語みたいで格好いいなあ。 >>328 こういうのを探していました。ありがとうございます。
330 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 20:16:48 ] デバッガ使ってる? 使いこなせてないからかもしれないけども,まだ自分にはpとかppで十分かな. どんなレベルからデバッガつかってんの?
331 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 21:20:08 ] みんななにで開発してるんだろう? IDE?エディタ+コンソール?
332 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 22:31:20 ] >>331 エディタ+コンソール派 軽くて良いIDEがあったら、そっちに乗り換えるつもり
333 名前:デフォルトの名無しさん [2009/08/21(金) 23:22:01 ] デバッガ使ってもバグ直ってないニダ。 謝罪と賠償ニダ。
334 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 23:24:21 ] RDEがもっと使いやすかったらいいのにな・・・
335 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 00:53:03 ] netbeansで書いて、家ではemacs+putty
336 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 02:00:36 ] EclispeからNetbeansに行ってemacsかな。日曜PGなんで結局自分が良く使うエディタがいいや。
337 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 02:03:57 ] Aptana+Eclispe はじめたばっかりですけど
338 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 08:22:51 ] ソースコード上でデバッグできるのは? NetBeansがいいんかな?
339 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 08:29:08 ] 正直どれもイマイチ 言語仕様的問題だとは思うんだが
340 名前:デフォルトの名無しさん [2009/08/22(土) 09:44:00 ] >325 result = ary.zip([nil]+ary).select{|x,y| x!=y}.map(&:first)
341 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 09:53:39 ] >>340 each_consが提示された時点で問題外 オナニー以下
342 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 13:45:35 ] 色んなやり方が紹介されるのは,初心者スレでは意味があるんじゃないかな。 悪例だったらダメだけど,>>340 は「へーこういうのもあるんだ」的な 例にもなってると思うし。
343 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 15:15:49 ] data = ハッシュまたは適当な格納系クラス Target.new(param).hoge(data) data #<= Target に関する情報が追加されている という処理をします hoge というメソッドにわかりやすい名前を付けたいのですが、なんかいい案ありませんか 凝ってもアレだし update とか register でいいですかね
344 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 15:17:19 ] >>342 普通に悪例だと思うが
345 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 15:23:30 ] ようそが nil いっこだけのはいれつがかいてあるじてんでかっこわるくてあたまぐるんぐるんぐるんします
346 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 16:12:11 ] >>343 Hoge#dup_to(data) とか updateならHashにならってHoge#update(Target)にすべき 後は hoge = Target.new(param).to_hoge とか hoge = Hoge.new(Target.new(param))
347 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 16:27:30 ] >>343 「自分の内容で引数のデータオブジェクト(自分とは別構成)を更新する」というメソッドに update は似合わない Ruby の update は自分と引数が同類であるべき 引数に現在のインスタンス変数の内容を適宜コピー、というメソッドは…なんだろうね 動作としてはこんなんだろ h = Hash.new Foo.hoge(h) Bar.hoge(h) Baz.hoge(h) p h で、h が {'foo' => …, 'bar' => …, 'baz' => …} になったり {111 => {:foo => …, :bar=> …, :baz => …}, 222 => {:foo => …, :bar=> …, :baz => …}, ...} になるって奴
348 名前:346 mailto:sage [2009/08/22(土) 17:09:40 ] 間違えた ×Hoge#dup_to(data) ○Target#dup_to_(data) dup_to(data)じゃなくてdup(type=nil)にして typeがクラスならデータ格納したインスタンスを生成、 インスタンスならそれに情報をコピー、nilならsuperとかどうだろう
349 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 18:04:05 ] きめえ ObjectやModuleの基本メソッドは上書きすんな
350 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 18:08:08 ] dupの存在を知らないだけかもしれないじゃないか irb> a = [] irb> b = a.dup irb> a << 1 irb> p b []
351 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 18:35:05 ] >>349 > ObjectやModuleの基本メソッドは上書きすんな なんで? inspectとか==とかto_*とか普通上書きするだろ、最たるものはinitialize それにdupに引数与えなければ以前と同じ動作をするんだから互換性も問題無い
352 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 18:51:28 ] >>343 自分なら Target.new(param).hoge は Hash あたりを吐き出すようにして data側が自分で取り込むようにする たとえばdata = {} なら data.update( Target.new(param).hoge ) だから名前は、ある種のアクセサとして吐き出すデータに見合った名前か 主要なデータをまるっと吐くなら to_h とか >>351 機能はそのままに、そのオブジェクトに見合うよう上書きするのと 機能自体を拡張するという違いがあるからなぁ ダメだと思わないけど積極的にやるのも微妙な感じ
353 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 19:14:29 ] Ruby Best Practicesは良い本ですか?
354 名前:デフォルトの名無しさん [2009/08/22(土) 20:24:17 ] Ruby Best Practicesは(どうでも)良い本です。
355 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:35:37 ] 初歩的な質問ですいません。 Linuxで、シェル(bash cshなど)よりrubyの方が優れているところは何でしょうか?
356 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:42:46 ] >>355 シェルスクリプトでめんどくさい処理も簡潔に書ける めんどくさいと思った経験が無いならシェルスクリプト使っとけ
357 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:48:58 ] >>356 すいません、シェルは結構使うんですが、Rubyは勉強しだしたばっかりであまりよくわかってないんです。 なので自分で比較ができないんですが、具体的にはどんなところがRuby優位なのでしょうか?
358 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:01:29 ] 例えば指定したディレクトリとそのサブディレクトリを巡回して ファイルのサイズを集計してどのフォルダが何%消費しているかを 大きい順にソートして上位50個表示。 なんてユーティリティを書くと差が出てくるかな。
359 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:01:56 ] >>357 アプリ一つ書いてみればわかるんじゃないだろうか。 WEBアプリなら敷居が低いから、とりあえず掲示板でも。 また例えば、CSVのパースとかしたくなったときに、シェルスクリプトで どうやったらいいのかちょっとすぐには思いつかない。
360 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:06:49 ] シェルスクリプトってものがどういうものかっていう知識不足 だからどんなレスしても、理解できない
361 名前:355 mailto:sage [2009/08/22(土) 21:14:54 ] シェルでもcpとかrmしかつかってないんで、 難しいことわかりません。 理解できませんので失礼します。
362 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:37:01 ] >>358 du -h | sort で用が足りそうな気もするな
363 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 22:54:42 ] CSV処理やらディレクトリ走査はシェルスクリプトの得意分野じゃねえの。 シェルスクリプトを覚える必要がないならrubyで良いと思うけども。
364 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 01:53:06 ] 多次元配列の重複要素削除の仕方がわかりません Cでいうところの、 a[3][5] = {[1,2,3,4,a], [2,3,4,5,b], [2,3,4,5,a]} って、あったら、aが重複してるので、 [1,2,3,4,a], [2,3,4,5,b] だけにしたい a.uniq{|x| x[4]} ってのは間違い??
365 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 03:01:15 ] >>364 Array#uniqはブロックを取らないはず a[x][4]の値が既出の配列は捨てるってことだよね? a = [[1,2,3,4,"a"], [2,3,4,5,"b"], [2,3,4,5,"a"]] tmp = {} a.select{|v| tmp[v[4]] ? false : (tmp[v[4]] = true) } どこかで見たと思ったら>>326 と似てた
366 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 04:55:14 ] >>364 多次元配列など存在しません ネストした配列とお呼び下さい で、まあ、ネストしただけの配列なので普通にイテレーションして exists = Array.new a.delete_if{|arr| if exists.include?(arr[4]) then false else exists << arr[4]; true end} とかすればいいんじゃね Rubyでコレクションをぐるぐるすること厭っちゃダメ
367 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 05:22:40 ] 【レス抽出】 対象スレ:Ruby 初心者スレッド Part 30 キーワード:select 抽出レス数:11 これ全部同じ奴なんだろうな、とか思う
368 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 05:47:02 ] select が条件全体抽出なのは混乱する、という人は少なくなさそうだな collect select reject detect inject と map find_all reject find inject なら後者のほうがまだマシにも思えるが、あ〜、でもどうだろう このへんは出身言語にもよるんだろうけどさ find/map 派と detect/collect 派は結構昔から揉めてる気がする find と find_all が紛らわしいとか、そんなんセレクトとデテクトのほうが紛らわしいわボケとか あと、古い ActiveRecord は find_all が上書きされるから新しいの入れて ActiveRecord#all で書け
369 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 12:23:18 ] >>364 > a.uniq{|x| x[4]} > ってのは間違い?? 1.9 ならそれで動くよ。
370 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:04:54 ] 1.8はそろそろ分離してスレ立ててほしいな 【まだまだ】Ruby1.8.x 初心者スレ【現役】 とか