1 名前:デフォルトの名無しさん [2010/03/04(木) 11:00:57 ] プログラミング言語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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
357 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 21:52:41 ] >>356 違う Rubyには型は存在しない クラスは型ではない >>353 は誤り
358 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 21:56:58 ] タコツボここに極まれり、か
359 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 22:01:38 ] そもそも型とかいう考え方は即ごみ箱に捨てろ
360 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 22:08:36 ] 型(Type)だな 一時期オブジェクトの説明に間違って使われたタイヤキの鋳型(flask)が後を引いて…はいないか
361 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 22:11:13 ] >>360 あれは「型」という字にはタイプとテンプレートと鋳型の3つがあるということを失念した例示だったと思う… タイプやテンプレート相当のものを持った言語を中途半端に習った人大混乱
362 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 22:15:51 ] この流れはすごいなあ というかたのしいRubyってタイヤキの例え使ってなかったか
363 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 22:25:27 ] >>362 うん使ってる 言われてみれば言葉の選び方的にあまりよくないな 鯛焼きのカタという言葉は「変数の型」を想起させて混同させる可能性があるのか 第3版が出ようかというときに新しすぎる知見だろそれ 鋳型ならいい?
364 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 22:34:09 ] タイヤキの型って、まさしく鋳型じゃない? >>363 の言葉選びのポイントがよくわからん
365 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 22:44:17 ] >>363 型ってのはそもそも値の集合と操作の集合なので 別にRubyに使ってもなんもおかしくない んでクラスとインスタンスは英語で言うところのaとtheの関係なので タイヤキの鋳型とタイヤキでなんも問題ない
366 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 22:51:37 ] 数学的な話ではなく、変数の型とクラスの型の2つの混同で クラスを従来の変数の型のようなものとして誤解してしまう可能性があるという話では >>356 のように
367 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 23:02:35 ] それは「変数に型があるかデータに型があるか」の話 型ってそもそもなによって話とは無関係
368 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 00:09:45 ] >>336 Windowsならスレッドがちゃんと動くが他のプラットフォームだと動かない、 とかいう罠があったりしたこともあるので、なかなか侮れない。
369 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 00:13:40 ] Unicode の U+2295 みたいな表記を Ruby1.8 で該当バイナリ文字列に変換する方法はありませんか
370 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 00:24:07 ] >>369 「U+2295」が文字列という前提で (0.入力文字列の書式をチェックします。) 1.分割します。 U+ … ポイ 22 … 1バイト目 95 … 2バイト目 2.1バイト目と2バイト目をごにょごにょします。Array#pack() 、かなあ?
371 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 00:27:09 ] >>369 require 'nkf' s = 'U+3042 U+3044 U+3046' puts NKF.nkf('-w, --numchar-input', s.gsub(/U\+(\d+)/){"#{$1};"})
372 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 00:32:54 ] >>371 > /U\+(\d+)/ 16進数じゃない? /U\+([0-9a-fA-F]{4,6})/ でいける?
373 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 00:37:46 ] >>371 間違ってるぞ puts NKF.nkf('-w, --numchar-input', s.gsub(/U\+([\da-f]+)/i){"#{$1};"})
374 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 00:52:39 ] 1.8では、量が多くない場合はNKFに頼るのが間違いないと思う 1.9だと簡単なんだけど
375 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 01:20:47 ] $ cat a.rb require 'nkf' sikaru = NKF.nkf('-w, --numchar-input', %w(20B9F).map{|s| "#{s};"}.join) p sikaru puts sikaru $ ruby -Ku ./a.rb a.rb:2: [BUG] Segmentation fault ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux] うひょう
376 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 04:18:36 ] 本来はiconv使うべきとは思うが、実用的なのはnkfだしなあ。
377 名前:デフォルトの名無しさん [2010/03/13(土) 05:37:51 ] >>369 "U+20B9F".gsub(/U\+([0-9A-Fa-f]{4,6})/){[$1.to_i(16)].pack("U*")} >>371 -w, の , が余計
378 名前:66 mailto:sage [2010/03/13(土) 05:57:18 ] > File.expand_path('あ', '/'.force_encoding(Encoding::ASCII)) Encoding::CompatibilityError: incompatible character encodings: UTF-8 and US-ASCII となるのですが、これはバグ? ちなみに実際やりたいことは、Tempfile.open('あ') です。 環境:fedora11、ruby 1.9.2dev (2010-03-06 trunk 26825) [i686-linux]
379 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 06:46:02 ] ライブラリのインストールに滅茶苦茶時間掛かるんだが なにこれ
380 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 10:12:06 ] gem search -r hoge searchっていちいち入力するの面倒いだけど、searchの短いオプションって無いの?
381 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 10:50:10 ] スレのバージョンお勧めに従わない人間は自業自得なのでスルー >>379 そりゃ君のパソコンがプア過ぎるのだよ 気になるなら -V をつけて gem install -V hogehoge すると固まったような時間帯に何してるのか見える "Building native extensions. This could take a while..." はCで書かれたファイルをコンパイル中(ものによっては遅い) ごっついライブラリだと定番ライブラリを10個くらい追加インストールするからどんなマシンでも一見とても遅いぞ 来週くらいに gem -V update しても遅いならまたおいで >>380 sea なにこれ超中途半端 正確には先頭から文字列にマッチするコマンド探してるので、s と se では複数マッチしてエラー $ gem s mechanize ERROR: While executing gem ... (RuntimeError) Ambiguous command s matches [search, server, sources, specification, stale] $ gem se mechanize ERROR: While executing gem ... (RuntimeError) Ambiguous command se matches [search, server] $ gem sea mechanize *** LOCAL GEMS *** mechanize (1.0.0, 0.9.3)
382 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 11:01:06 ] 質問ですが、 PythonのPython Image LibraryみたいなRubyの画像処理ライブラリってありますか?
383 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 11:13:21 ] >>382 ありません ImageMagickインストールしてgem install rmagickするしかないねえ
384 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 11:13:50 ] 用途にもよるけど、既存のCで書かれた画像処理ライブラリを Rubyから呼び出して使うことが多いと思う。 RMagick(ImageMagickのライブラリを使用) Ruby/GD2(GD2を使用) Rcairo(cairoを使用) など。 ImageMagickは機能過多だ、サムネが作りたいだけなんだという 人向けにImageScienceというのもあるな。サムネ作成専用。
385 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 11:15:29 ] >>381 スレの勧めないバージョンインストールしておきながら お勧めなら引っかからない基本的エラーで文句言うような人はスルー というのが正しいかと思う お勧めでなくても入り口以外で引っかかってるなら質問どうぞ
386 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 11:19:17 ] >>378 バグっぽい気がしたのでチケット切ってみた。 #2955
387 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 11:21:38 ] >>383-384 なるほど、ありがとうございます。 画像出力より入力の機能の方を重視したいので PILと同程度のライブラリとなるとImageMagickをつかないといけないんですか・・・ FFIするならGIL辺りが良さそうですね。 参考になりました。
388 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 11:23:54 ] 春休みスレ
389 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 11:32:34 ] >>388 間違ってるならあとから正せばいい 質問者には数時間くらいは待ってもらえるといいかもしれん
390 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 11:55:34 ] >>380 俺は面倒だから工夫してる。何度も同じコマンドうつのはDRYじゃあるめえ Windowsなら以下の内容をgems.batとしてパスが通ったところに置いておき、コマンドラインで gems hoge で検索 gem.cmd search --details --both --all %* Unix系でbashなら、~/.bashrcに以下を書いておいて gems hogeで検索 alias gems="gem search --details --both --all" あくまで例なのでコッチのほうがいいとか指摘してください
391 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 11:58:15 ] あんまりコマンドのエイリアスは設定しない方がいいって 誰か言ってなかった?
392 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 12:03:40 ] * 別の環境に移ったときになんぞこれってなるからエイリアスすんな派 * 自分好みに環境をカスタマイズしてこそUNIXのシェルだろJK派 どっちを選ぶも自由
393 名前:66 mailto:sage [2010/03/13(土) 12:03:56 ] >>386 ありがとうございます! 文句を言いたいわけじゃなく、バグなのか仕様なのか自分の勘違いなのか自信が持てないから、 このスレを利用させてもらっちゃったんですが、相応しくなかったみたいですね。 すみません。 もう書くの止めときます。
394 名前:380 mailto:sage [2010/03/13(土) 12:46:52 ] >>381 seaね、ありがとう >>390 linuxを使っているならaliasを使うけど、 今はwindowsを使っているからそんな方法があるなんてわからんかったよ
395 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 12:55:19 ] >>393 1.9.1だったなら俺も>>385 に同意だけど、1.9.2devは本スレが妥当じゃないかな
396 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 12:55:54 ] ライブラリが全然整理されてない印象<Ruby
397 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 13:11:18 ] うおお、ライブラリが全然整理されてない印象さんがRubyと喋ったぞ
398 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 13:45:08 ] <Rubyでなくて>Rubyだと思う 固定された意味はないけど 質問 エンコーディングプラグマ、通称マジックコメント、は、 該当するマルチバイト文字のようなもんが書かれてないようなライブラリを 自作して公開する場合はつけないほうがいい?
399 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 13:45:51 ] あ、>>398 は1.9.1の場合ね
400 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 13:48:35 ] require 'Qt4' app = Qt::Application.new(ARGV) hello = Qt::PushButton.new('Hello World!') hello.resize(100, 30) hello.show() app.exec() テストコード(コピペ)を動かそうとしているんだけど、動かない >C:\Ruby\lib\ruby\gems\1.8\gems\qtruby4-2.1.0-x86-mswin32\lib\ はちゃんとあるんだけどね 環境変数が問題なのかな?
401 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 13:52:19 ] >>400 動かないのならエラーメッセージを貼っておくれ スクリプトをダブルクリックして実行したのなら コマンドプロンプトから実行して
402 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 13:59:36 ] おー、WindowsでQtライブラリ使ってる人初めて見た
403 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:08:03 ] rubygemsでインストールしたパッケージのヘルプってどうやって見れますか?
404 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:09:59 ] >>398 書かない場合は US-ASCII を指定したのと同義。 ASCII文字しかないなら書いても書かなくても結果は同じ。 8ビット目が立ったシングルバイト文字は入れてないよね?
405 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:12:27 ] >>403 riかrdocか。 gem server を起動して localhost:8808/ でも読める。
406 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:13:09 ] 正規表現の動作が変わるんじゃなかったか
407 名前:400 mailto:sage [2010/03/13(土) 14:14:30 ] >>401 test.rb:1:in `require': no such file to load -- Qt4 (LoadError) from test.rb:1 見てのとおりライブラリの読み込みに失敗しています let-your-heart-soar.txt-nifty.com/blog/2008/07/qtqtrubywindow_82d9.html この通りにやって、C++のチュートリアルは動くようになっています でも、こんな事をやってqtrubyに関係あるのか疑問 >>402 ruby gtk2を使おうかなと思ったけど、gtk+のライブラリ全然わかんないから linuxでもqtrubyが動けば、linuxで開発してwindowsでexeを作ろうかな〜と それに、2週間くらい前にこんな本を買ったし >入門 Qt 4 プログラミング >ttp://www.oreilly.co.jp/books/9784873113449/
408 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:15:52 ] >>403 gemディレクトリ/ruby/1.8とか/doc/ の中にファイルが入ってるので好きなときに読め ActiveSriptRubyの場合はC:\Program Files\ruby-1.8\lib\ruby\gems\1.8\doc\
409 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:17:57 ] >>407 require 'rubygems' require 'Qt4'
410 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:25:42 ] >>406 US-ASCIIなソースにUS-ASCII以外のマジコメを書く場合?
411 名前:400 mailto:sage [2010/03/13(土) 14:26:51 ] >>409 文法を覚える前にテストをするもんじゃないですねwww 助かりました、ありがとうございます
412 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:44:08 ] >>403 HTMLファイルでいいならシェルから gem environment した出力の - GEM PATHS: の1行目(になかったら2行目)の場所の doc ディレクトリの中に
413 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 16:20:07 ] #=>って習慣なの?
414 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 16:25:32 ] >>413 doc.okkez.net/187/view/help
415 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 16:26:05 ] 習慣かどうかはしらん ふつうコメントの直後にスペースをひとつ挟むから # => value だよな はちどりのRuby本もそうなってる
416 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 16:39:23 ] 個人的にはあまり好きではない まあ、書籍向けの表現だと思う
417 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 17:23:40 ] gem install -r XXXX ERROR: could not find gem XXXX locally or in a repository 何これ?
418 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 17:33:32 ] 文字通り。
419 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 17:33:47 ] >>417 その質問に至った経緯をまず聞こうか
420 名前:413 mailto:sage [2010/03/13(土) 17:37:04 ] >>419 linuxでそう入力しただけだけど 得にそれ以外に何もしていない
421 名前:420 mailto:sage [2010/03/13(土) 17:37:46 ] 名前を間違えた >>417 ね
422 名前:420 mailto:sage [2010/03/13(土) 17:39:28 ] ごめん、ただのスペルミスですたorz
423 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 17:39:54 ] まずはgem search- rを使うんだ、でその結果から選ぶがよろし 自分で入力せずに素直にbash,zshの補完機能に頼った方がいいと思う
424 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 21:46:53 ] 他の言語のisXXXメソッドは、XXX?とrubyではなってるみたいですね 三項演算子とかと一緒に使うと読みにくいと思います お前らはどうやっていますか? return windows.visible? ? 値A : 値B
425 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:07:58 ] それほどでも・・・ return (windows.visible?) ? 値a : 値b
426 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:10:57 ] ぶっちゃけ、うっかり window.visible? A : B と書いて怒られることはよくある。
427 名前:424 mailto:sage [2010/03/13(土) 22:13:57 ] そんなもんですか そんじゃ気にしないようにしますわ
428 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:20:29 ] 条件演算子はぶっちゃけそれほど使わない 不自然感を感じてるうちにifとかに書き換わるのでむしろラッキー
429 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:03:17 ] include Enumerable した場合、自分のクラスで each を定義しますが def each @array.each do |e| yield(e) end end def each(&block) @array.each(&block) end どちらが好ましい書き方なんでしょうか?
430 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:27:40 ] 後者 irb1.9> class C; include Enumerable; def initialize; @a=[1,2,3]; end; def each(&b); @a.each(&b); end; end irb1.9> p C.new.each #<Enumerator:0x931483c> irb1.9> class C; include Enumerable; def initialize; @a=[1,2,3]; end; def each; @a.each{|e| yield(e)}; end; end irb1.9> C.new.each LocalJumpError: no block given (yield)
431 名前:429 mailto:sage [2010/03/13(土) 23:43:14 ] >>430 なるほど、ありがとうございます。
432 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:00:43 ] 前者は昔の名残だね。
433 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:10:16 ] 前者は return @array.to_enum unless block_given? を最初 にやればよさそうだけど、今回は無理に使うこともないな。
434 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:16:42 ] javaかC++のプログラマのための、Ruby入門のサイトを教えてください
435 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:19:42 ] www.google.co.jp/search?q=Ruby%E5%85%A5%E9%96%80&ie=UTF-8
436 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:21:15 ] C++やJavaの特有事情は忘れて勉強したほうが習得はうまくいきそうな気がする それこそBasicの制御構造レベルの知識だけある人のほうが吸収早そう
437 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:44:12 ] >>424 return windows.visible?? a : b 疑問符を二個つなげてすげー疑問って雰囲気を醸し出す
438 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:48:41 ] >>386 のチケット、 r26909 で修正された。 $ ruby -ve "puts File.expand_path('あ', '/'.force_encoding('US-ASCII'))" ruby 1.9.2dev (2010-03-13 trunk 26909) [x86_64-darwin10.2.0] /あ
439 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 02:15:40 ] >>430 前者の書き方しか知らなかった。
440 名前:66 mailto:sage [2010/03/14(日) 07:03:08 ] >>395 今度から本スレに書きます。 >>438 ありがとうございました。 確認しました。
441 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 08:44:47 ] 春休みで盛況だなw
442 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 11:49:30 ] moduleってパッケージとMixinを、実現するための予約語なんだよね Mixinは実装を持ったインターフェイスみたいなもんだから、 moduleはmoduleを継承する事ができるの?
443 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 12:18:51 ] >>438 乙乙!!
444 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 12:24:46 ] >>442 > moduleはmoduleを継承する事ができるの? そもそも文法的に継承できない(module M2 < M1 は SyntaxError) メソッド検索順位のひとつ上にモジュールをぶちこむ include を使う module M1; def m; "M1!"; end; end module M2; include M1; end # M2 の上に M1 module M3; include M2; end # M3 の上に M2 module M4; include M3; end # M4 の上に M3 class C; include M4; end # C の上に M4 p C.new.m p C.ancestors # 継承とインクルード込みの検索優先順位を表示 結果 "M1!" [C, M4, M3, M2, M1, Object, Kernel] 検索順位的には継承と同じなので実用上の問題はない class C1; end class C2 < C1; end class C3 < C2; end p C3.ancestors #=> [C3, C2, C1, Object, Kernel]
445 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 12:40:44 ] じゃあ継承でいいじゃん
446 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 12:46:49 ] >>445 よくねー 人間を継承した俺がいたとして、翼が欲しいと思ったら class 俺 < 翼 end するのか? 俺は翼の一種なのか? 俺は翼の子分か? 人間且つ翼の俺って何? 翼って機能だろ class 俺 機能追加 翼 end とするのが筋だろ、わかりやすいし、渾然一体になる継承よりは機能外すのも簡単そうだ だから翼はモジュールにして、includeで追加する 実際は 俺 = 人間.new(params) 俺.extend(翼) とするのが妥当ではあるがまあ細かいこと気にするな禿げるぞ
447 名前:442 mailto:sage [2010/03/14(日) 13:12:23 ] >>444 ,>>446 ありがとう >>445 なりすましっぽく見えるレスだな
448 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:18:08 ] ○引数で複数のディレクトリパスを与える ○与えられたディレクトリに対して再帰的にファイルを全て削除する ○ただし.txt拡張子が付くファイルのみ削除しない プログラミングに不慣れながらこんなスクリプトを書こうと思い、以下のようになりました。 #!/usr/bin/ruby require 'fileutils' ARGV.each do |i| FileUtils.rm(Dir.glob(i + '**/*[^(txt)]'), :force => true) end 突っ込みどころなどありましたら教えていただけないでしょうか。 簡単なテストをすると意図したように動くのですが少し不安なので質問させていただきました。 自分で怪しいと思ってる箇所は以下の2箇所です。 @ i + '**/*[^(txt)]' こんな指定の仕方でいいのだろうか AそもそもFileUtilを使うべきなのか 宜しくお願いします。
449 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:25:51 ] >>448 他のスレから飛ばされてきたなら、 飛ばされましたって書かないとダメだよ
450 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:39:50 ] >>448 死んでいいよ
451 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:41:46 ] Dir.globのワイルドカードはあまり知らんが(Windowsユーザーなもので) 否定形なのはRubyでやったほうが無難だと思う Dir.glob(i.sub(/\/?$/,'/**/*')).reject{|e| test(?d,e) or e =~ /\.txt$/i}
452 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:43:52 ] i ってなんだろう? そもそもグロブでいいのか。
453 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:45:01 ] require 'fileutils' noop = verbose = ARGV.include?(':noop') ARGV.each do |s| pathlist = Dir.glob(File.join(s, '**/*')) pathlist.delete_if{|path| File.extname(path) == '.txt'} pathlist.each do |path| FileUtils.rm(path, :force => true, :noop => noop, :verbose => verbose) end end $ ruby ./del.rb tgtdir :noop
454 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:45:48 ] *[^(txt)] は、 最後の文字が 開き括弧 でも t でも x でも t でも(アゲイン) 閉じ括弧 でもない という意味になるんじゃないか?
455 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:48:11 ] >>453 next ですっ飛ばしていいと思う require 'fileutils' noop = verbose = ARGV.include?(':noop') ARGV.each do |s| Dir.glob(File.join(s, '**/*')).each do |path| next if File.extname(path) == '.txt' FileUtils.rm_r(path, :force => true, :noop => noop, :verbose => verbose) end end
456 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:48:38 ] >>454 それはない
457 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:56:02 ] $ ls x.c x.doc x.tex x.txt $ ruby -ve 'p Dir.glob("*[^(txt)]")' ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0] ["x.c", "x.doc"]