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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
488 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 15:14:22 ] >>485 > それと初心者スレでるりまとは呼ばない方がいいよ なんで?
489 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:05:56 ] というかるりまるびまってなんですか?
490 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:18:20 ] ここは大喜利すべきか
491 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:21:11 ] まあ、マニュアルという認識でいいよ chm形式のマニュアル読んでれば十分
492 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:24:11 ] >>488 マイナーな専門用語は避けるべき。初心者スレだし。
493 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:25:13 ] >>488 まさにこの流れが理由 るびまと区別がついてないならなおさら
494 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:50:12 ] 何やら貢献できたようで何より 1.9.1は初心者向けじゃなかったのかー 今まさにダブルクリッコするところだったぜー ここに来てよかった ってことでActiveScriptRubyなるものをダウソしてきます
495 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:51:41 ] ここIDないのね 494は489の人てことでw
496 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 17:31:53 ] 質問です エクセルで書かれた名簿を整理して出力するプログラムを書いているのですが、 名前、郵便番号、住所の分離が上手くいきません 与えられた名簿は半角or全角スペースで区切られているのでsplitを使おうと試みているのですが、 例えば以下のように記述すると"―"や"県"が消えてしまいます puts '山田 太郎 〒0000−0000 山田県山田333-333-333-333'.split(/[ 〒]+/) 何か良い知恵があればなにとぞご教授お願いします ちなみに元のプログラムではputsせず、分離後にある配列に入れています
497 名前:496 mailto:sage [2010/03/15(月) 17:34:18 ] 追記失礼します rubyはver1,87を使用しております
498 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 17:48:49 ] >>496 Excelってことなので、WindowsでSJISのソースコードとして、 スクリプトの先頭に #! ruby -Ks もっと推奨の方法があったかもしれない
499 名前:496 mailto:sage [2010/03/15(月) 17:51:44 ] >>498 ご教授いただいたとおりにしたところ速やかに改善されました! ありがとうございます
500 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 17:53:59 ] Rubyが取り扱う文字のエンコーディングを指定しなければASCIIとして扱われてしまうのでそういうことになる Ruby 1.8まででは 1 Ruby起動時にスイッチで -Ks とかで指定する 2 スクリプト先頭に #!ruby -Ks とか書いておくとスクリプト実行時にそのスイッチが考慮される 3 $KCODE を設定する 4 個々の正規表現のオプションでエンコーディングを指定する ただし1,2はスクリプト自体のエンコーディングと正規表現の振る舞いの両者を変更するが 3,4だと正規表現の振る舞いを変えるだけなので スクリプトがシフトJISで書かれていると p "表" # エンコーディングを正しく指定しないと 文字列リテラルが終了してないことに("\225\" と同じ扱い) とかのいわゆるダメ文字(2バイト目が\)問題にぶち当たる UTF-8やEUC-JPだとそのような問題は起きない(のかな?)
501 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:05:26 ] るびまってRubyのマニュアルのことだったの? Ruby Magazineの事だと思ってた
502 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:15:09 ] >>491 どもです 礼するの忘れてやした
503 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:16:09 ] るびま:Rubyist Magazine るりま:Ruby reference manual Ruby Magazineだと思いこんでると、無関係な記事が多すぎるように映るかもね
504 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:16:29 ] >>501 どっちでもいいよ いやよくはないが 初心者的にはるびまは読むべきではない 古くて有害な情報が渾然一体となっている
505 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:19:31 ] >>503 それ、テンプレに入れたらどうかね?
506 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:24:13 ] Rubyinstか。失礼。 上のほうよく見たらるびまとるりまの区別が付いてない(人がいる)って話だったのね 読み違えてたわ
507 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:27:44 ] まだ間違ってるぞw
508 名前:496 mailto:sage [2010/03/15(月) 18:29:54 ] >>500 亀ですが、ありがとうございます これを気に文字コードにも意識を向けてみます
509 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 19:16:01 ] くっ Rubyist
510 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 19:51:11 ] includeは名前空間を使えるようにするものってことで、おk? C++@namespaceみたいな感じ
511 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 19:53:43 ] なんというか include はふつうに include だと思うのだが 既存言語の機能になぞらえないと理解し難いほど複雑難解な概念なのだろうか
512 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 20:00:50 ] includeの動作的には本当に>>444 だよね メソッドを探す順番の指定をする方法のひとつ
513 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 20:07:50 ] モジュールの存在理由のほうがムズカシイかもしれない
514 名前:510 mailto:sage [2010/03/15(月) 20:34:24 ] 読んでいた記事が間違えていたらしい 本当の使い方は、結局なんなんだろ? Mixinを実現するためにしか使わないのか
515 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 20:39:59 ] モジュールは、メソッドを用途ごとにまとめるためのしくみ メソッドがあるだけで、オブジェクトには依存しない機能のカタマリ 共通の機能をメソッドから追い出して別途メソッドを作るのと同じように、 共通の機能をクラスから追い出して別途モジュールを作る(でincludeする)というのも妥当
516 名前:デフォルトの名無しさん [2010/03/15(月) 20:45:11 ] Mixinのためと単なる名前空間のため両方に使われる
517 名前:510 mailto:sage [2010/03/15(月) 20:54:21 ] >>515-516 thx
518 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 22:17:04 ] プロパティも実装されていない糞言語
519 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 22:27:30 ] それで遊んでくれるのはPythonスレぐらいだぞ ここは意外とDRY
520 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 22:52:35 ] クラスインスタンス変数とは、そのクラスオブジェクトの特異クラスに属する インスタンス変数という理解で正しいですか?
521 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 23:00:11 ] ごめん、さっき違うスレで質問したけど理解してなかったorz 3 class Hoge 4 def self.set 5 @hoge = "dynamic" 6 $hoge = "static" 7 end 8 9 def self.out 10 puts @hoge 11 puts $hoge 12 end 13 end 14 15 Hoge.set 16 Hoge.out 実効結果 dynamic static $hogeと@hogeって何が違うのさ?
522 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 23:12:55 ] 理解してたらああは言わん クラスインスタンス変数はクラスオブジェクトが存在する限り存在する Hoge と書くことで定数 Hoge に Class クラスのインスタンスが Ruby によってセットされる (同名のクラス定義がなかった場合は定数とみなされ、事前に代入されてない未定義定数でエラー) で、Hoge.set を実行することでインスタンス変数 @hoge がインスタンスの中でふつうに設定される それが属するインスタンスとは Class クラスのインスタンスで、つまり定数 Hoge が指すものだ だから、無理矢理 Hoge の内容を nil にするとインスタンス変数 @hoge はスコープごと失なわれる irb> class Hoge; def self.set; @hoge='hoge'; end; end irb> Hoge.set irb> p Hoge.instance_variable_get(:@hoge) "hoge" irb> Hoge = nil (irb):4: warning: already initialized constant Hoge irb> p Hoge.instance_variable_get(:@hoge) nil
523 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 23:22:49 ] 特異メソッド上で書くからわかりにくい? class Hoge @hoge2="hoge2" end p Hoge.instance_variable_get(:@hoge2) は "hoge2" を返すよ
524 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 23:38:33 ] "プログラミング言語 Ruby" のp.326のなかほどに クオート文字列にマッチすることを意図した正規表現の例が以下のように 載ってるんだけど,文字集合内で番号指定後方参照ってできたっけ? /(['"])[^\1]*\1/ わがRuby1.9.1ではこうなった re = /(['"])[^\1]*\1/ p %('\1')[re] #=> nil p %('hoge'hoge')[re] #=> "'hoge'hoge'" いちおう念のために言っておくと クオート文字列にマッチする正規表現を求めているわけじゃなくて 文字集合内で後方参照や部分式呼出しができるか否かの確認ね
525 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:23:29 ] >>457 が何でそうなるのか解説求む
526 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:27:01 ] >>525 >>454
527 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:28:31 ] globってワイルドカードでも正規表現でもないのか なんでこんな面倒なもん作ったんだ
528 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:31:15 ] いや、zshの**を取り込んでるくらいで、 ワイルドカード(UNIXシェルの、だが)だよ。
529 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:31:34 ] ああ勘違いしてたわ txtだけはじかれてるのかと思った
530 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:32:09 ] ほぼワイルドカードじゃね?
531 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:32:50 ] あら遅レス失礼した
532 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:33:41 ] globにlsコンパチの引数受け付けるようにしてくれ
533 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:34:20 ] >>532 UNIXで誰がファイル名展開をやってるか知ってるかい?
534 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:44:33 ] えっ? 誰かがやってるなんてことあるわけないでしょう?
535 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 03:16:47 ] echo *
536 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 03:27:47 ] もうshellの機能をrubyに組み込むべきだなw login shellを/bin/rubyshにできていいかもしれないw
537 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 07:53:49 ] RubyShell って面白そうだな。 誰も使わないだろうけど。
538 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 07:55:47 ] RashだかRushってシェルがなかったっけ
539 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 08:46:18 ] イラネ
540 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 09:30:18 ] とある人のウェブページに、perlをログインシェルとして使ってみた報告があるぞ。 一度読んでおくといい。
541 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 09:33:51 ] いやRushが既にあるから
542 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 11:51:29 ] コマンドライン引数は定数じゃないの? 普通に文字列を代入できるんだけど
543 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 12:01:40 ] >>542 Rubyの定数は、警告 warning: already initialized constant ARGV は出るけど代入自体はできる。 あ、あと、 ARGV << 'hoge' なんてのは「定数への代入」じゃないからな。
544 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 12:03:05 ] $ ruby -e "ARGV=nil" -e:1: warning: already initialized constant ARGV いやきちんと定数として警告出ますが というかただの定数に過ぎない Rubyはこれを起動時から用意してるだけで、用意したあとは特別扱いをしない ただの配列を指す定数で、配列としての動作に従う 配列だから、要素を弄る限りはオブジェクトIDが同一で、定数としての適正を失わない irb> arr = [1, 2, 3] irb> arr[0] = 'one' irb> ARGV[0] = 'one'
545 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 12:18:43 ] 代入はできるけど、データのコンテナとして ARGV を使うのはおすすめはしない ただ、これは グローバル変数と定数を使う→ クラス変数を使う→ インスタンス変数だけを使う→ 全部引数での受け渡しにする→ 引数の数が大量になって鬱陶しいのでアクセサメソッド経由のインスタンス変数と引数の併用にする というような変遷をどうしてもみんな辿るので今はまだ気にしなくてもいいとも言える
546 名前:542 mailto:sage [2010/03/16(火) 12:25:44 ] とにかくコマンドライン引数には入れるなってことでしょ
547 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 12:47:18 ] def hoge= この=って何?
548 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:00:04 ] >>547 そのまんま 「hoge=」 という5文字の名前のメソッド ただ、末尾に = があるメソッド定義を Ruby は特別に扱うので、引数つきで定義しておいたほうがいい あと、foo.hoge = と = の前に空白があっても、Ruby はとりあえず foo のメソッドの中から hoge= を探す foo.set_hoge(v) とするよりも foo.hoge = v と書けたほうがなんかわかりやすくね、という理由で特別扱いされてる
549 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:07:59 ] 「プログラミングRuby 第2版 言語編」ですが、今から読むには 古すぎますか?それとも第3版が出て、絶版になる前に読んでおく べき? たのしいRuby、Well-Grounded Rubyist、初めてのRuby は読みました。
550 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:08:28 ] >>548 理解した、ありがとう
551 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:16:29 ] >>548 >「hoge=」 という5文字の名前のメソッド 通常の方法では代入文でしか呼べないから、ただのメソッドではなく演算子定義の一種と見た方がいい 一応引数無しでも定義できるけど__send__使わないと引数なしでは呼べない
552 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:17:42 ] >>551 Rubyの演算子はメソッドですよ
553 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:24:32 ] Rubyのユーザーは学生と暇人が多いのか? C/C++のスレには全然書き込みが無いんだけど Rubyは簡単だから、学生に人気があるのかな
554 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:29:41 ] 最近質問が多いね、春休みなんじゃないの? まあ俺も春休みだけど。。
555 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:30:46 ] 去年からずっとやすm
556 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:31:17 ] 仕事探せ
557 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:32:16 ] >>555 勝った!
558 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:33:11 ] >>557 お前は必死に仕事探せ
559 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:35:25 ] 学生と暇人とニートがいないとプログラミング言語は成長致しませぬゆえ
560 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:37:43 ] 学生と暇人なんて放っておいても沸いてくるんだから 無職連中はとりあえず生活基盤作れ
561 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 13:39:35 ] 暇な香具師を無料で奉仕させてこそオープンソースだしな。
562 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 14:18:15 ] >>549 初めてのRuby(yugui本)を読んで自分のものと出来たのなら 好きに進んでいいよ。
563 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 14:43:10 ] Rubyはいつになったら仕様が固定されるの? 安心して使えない
564 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 14:48:04 ] 1.8 は少なくともあと5年は使えるな。
565 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 15:06:10 ] >>562 レスどうも。 ツール作りでもしてみます。
566 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 15:08:40 ] 本の内容が新しいかどうかという話なら、新しくはない 1.8.7の1.9新機能入りプログラミングができないというのはなんとも歯痒い が、それはWebの情報でアップデートできる程度なので問題はなさそうかも むしろ最初からこれ教えたら混乱しそう
567 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 16:19:22 ] >>563 固定化されることはないと思う
568 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 16:22:33 ] >>563 はそもそも使わないからどうでもいい
569 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:52:28 ] ちなみに今から使い始めるならどのバージョンがお勧めなんだ
570 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:58:53 ] >>569 はテンプレも読まないからどうでもいい
571 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:58:54 ] 始めるだけなら 1.8.7 の最新だと思うが、 最新(p249)はString#inspectで最後の多バイト文字が文字化けするという デバッグや実験中に微妙にイラッとするバグがある。 気になるなら p174 で。 1.9系は夏に1.9.2が出るのでそのときまた判断だな。
572 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:16:27 ] やっと1.9sp2が出るのか。
573 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:18:21 ] それはまだ 1.9正式が出ただけ sp1が今度出る
574 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:22:45 ] >>571 $KCODE を設定した上で p で日本語を表示しようとした場合に最後の文字がバイト列のままになる だ p で日本語を表示しようとさえしなければ問題はないし、俺は表示しようと思ったこともない というかむしろ p を使うような事態のときは1.9でもデフォルトでバイト列表示しろやわかりにくいわぼけー どういう日本語を普段扱ってるかで違うんだろうな、このへん
575 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:25:49 ] p の意義からしてエンコーディングを考慮するほうが正当 ShiftJIS 文字列とか表示されて端末乱れるのはイラッとくるが
576 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:34:14 ] オブジェクトを機能拡張するためにモジュールで拡張したんだけど さらに状態の保持が必要な機能追加がしたくなった モジュールへの修正じゃ対応できないの?
577 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:35:16 ] require 'Hoge' include Hoge なんで、requireにはシングルクォートを付けないと怒られるのに includeには付けなくても怒られないの? たまたま、そうなっただけなのかな〜
578 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:41:28 ] >>577 require は基本的にはファイルパス 実際のファイルの大文字小文字が考慮される (が、あまりにも面倒なのでファイル名の時点で小文字だけにしようという取り決めがある) include の引数はモジュール名、つまり定数
579 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:44:08 ] >>576 すれば include はするたびにその順番に機能する
580 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:44:15 ] require 'Hoge' は主ファイル名だからじゃね?
581 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:46:41 ] >>578-580 ありがとう
582 名前:576 mailto:sage [2010/03/16(火) 19:47:24 ] >>579 (and all) どうすれば状態を保持できますか?
583 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:51:32 ] 状態って何
584 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:52:35 ] >>577 requireも単なる関数的メソッドとして実装されているのも理由の一つ Hogeというキーワードはrequireの実行を終える前には当然定義されていないし 予約語でもないから、リテラルを使うしか渡す方法(requireメソッドを実行する方法)がない 「Hogeをrequireしろ」「Hogeってなんだ?」 「Hogeを読めばわかる」「だからそのHogeって何だよ」 NameError: uninitialized constant Hoge Symbolでもよさそうだけどそのへんは>>578 なんだろう
585 名前:576 mailto:sage [2010/03/16(火) 20:01:14 ] もともとのオブジェクト以外に追加の情報を保持したいんですが たとえば配列クラスに最大値を保持するなど
586 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 20:22:21 ] >>585 エスパー発揮で obj = [1,2,3] obj.instance_eval{ @mymax = self.max } obj.define_singleton_method(:mymax){ @mymax } p obj.mymax なんか頭の悪そうなコードですまん
587 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 20:25:30 ] >>585 本当にしたいことを書いたほうがいいと思う include ではクラスにもともとあるメソッドを上書きすることができる でも、おそらくはそれが解決方法ではないと思われ 組み込みや標準添付のクラスを拡張することは好ましいこととは考えられてない(オープンクラスのくせに) 自分でクラスを作ってインスタンス変数とかにオブジェクトを保持するほうがいい オブジェクトの操作は自作のクラスのメソッド経由で行う class HogeData def initialize(a) raise ArgumentError, 'must be Array' unless a.kind_of?(Array) @hogedata = a end def <<(e) return if @hogedata.size > 2 @hogedata << e end def data; @hogedata; end end irb> hoge = HogeData.new([1,2]) irb> p hoge.data [1, 2] irb> hoge << 3 irb> p hoge.data [1, 2, 3] irb> hoge << 4 irb> p hoge.data [1, 2, 3]
588 名前:576 mailto:sage [2010/03/16(火) 21:18:59 ] では言い直します。 自分で書いたクラスのオブジェクトに追加の情報を持たせるには、 継承したり別のクラスに包含すれば可能だけど、すでにModuleで拡張しているので そこはできるだけ触らずにModuleに少し書き足す程度で実現できないか? Module内でインスタンス変数的な情報を保持する何かを定義できないか?