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


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

Ruby 初心者スレッド Part 35



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+)/){"&#x#{$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){"&#x#{$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| "&#x#{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"]







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

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

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