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


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

Ruby 初心者スレッド Part 26



1 名前:デフォルトの名無しさん [2009/02/27(金) 18:38:24 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9.1 は従来版とは別物であり、書籍や解説やライブラリのサポートがまだありません】
   【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】
    ※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です
    ※ただし 1.8.6 より安定しているとはまだ言えないので、安定性を第一とする用途には 1.8.6 をどうぞ

関連スレや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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

2 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 18:38:55 ]
【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?

A:
プログラム作成自体の初心者なら
「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
www.amazon.co.jp/dp/4797336617/
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
「初めてのRuby」
www.amazon.co.jp/dp/4873113679/

以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください
「Rubyレシピブック 第2版 268の技」(初心者向け)
www.amazon.co.jp/dp/4797340045/
「プログラミングRuby 第2版 言語編」(初心者向け)
www.amazon.co.jp/dp/4274066428/
「Ruby Way 第2版」(脱初心者向け)
www.amazon.co.jp/dp/4798115339/
「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
www.amazon.co.jp/dp/4873113245

以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません
「プログラミング言語 Ruby」(言語として深く知りたい人向け)
www.amazon.co.jp/dp/4873113946/

3 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 18:39:59 ]
Ruby 公式・非公式便利サイト2009

Ruby Home Page 【公式、お役立ち度が微妙】
www.ruby-lang.org/ja/
Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
www.ruby-lang.org/ja/man/
www.ruby-doc.org/ 【詳しい英語版】
HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
elbereth-hp.hp.infoseek.co.jp/ruby.html
Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
www.ruby-doc.org/docs/ProgrammingRuby/
Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
jp.rubyist.net/magazine/

逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
www.namaraii.com/rubytips/
はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
d.hatena.ne.jp/keyword/Ruby

RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
www.rubyforge.org/
GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
github.com/

日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
jp.rubyist.net/

4 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 18:42:07 ]
関連スレ

本スレ
Rubyについて Part 34
pc11.2ch.net/test/read.cgi/tech/1233686068/

アンチスレ
Rubyについて(アンチ専用) Part003
pc11.2ch.net/test/read.cgi/tech/1207233348/

Railsスレ
【Ruby】Ruby on Rails Part6
pc11.2ch.net/test/read.cgi/php/1224838013/

Windows用スレ
【ActiveScript】RubyをWindowsで使うスレ【GUI】
pc11.2ch.net/test/read.cgi/tech/1155031689/

Ruby 1.9 系列スレ
魁け! Ruby 1.9.X
pc11.2ch.net/test/read.cgi/tech/1201603546/

5 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 18:42:51 ]

 


6 名前:デフォルトの名無しさん [2009/02/27(金) 18:57:27 ]
                       厂刀、            , ヘ _
            _, -‐…‐- 、___//: : : \____/: : : : >r
         _>'´: : : :_,.- " : :/弌》__: : : : : : : : : : : : : : : : : : , : : }
      , イ ̄`: : : : : : : : : :¨ ‐-、 : :\⌒>、: : : : : : : _: :-: :¨: : /
.     /: : : : : : : : /: :.,': : : : :: : : : : \ ∧     ̄ ̄フ : : : : : :/
    /:/: : : /: : :.ハ : :ト、 \: : : : \ : :Y i|      / : : : : : /
    | l: : :./: : :./ハ: :{ \j\j : : ∧, j: :|.    /: : : : :/           、
    | |: : :| : : ,`匕  `‐z匕  \ : : }K: j.     /: : : : :/          }\
     j,ハ: : |: :∧fて!  イfて)'y  Y: :jF'},ノ   ,': : : : :/              |.: :.\
      \ト、{ ハ ヒリ    ヒ::リ '  j /rソ    イ: : : : :.{              ト、: : ハ
.         j,从 " 、   ""   ム/     ,{|: : : : : ト、_______ イ: :): : :.}
           ゝ、 rっ   , イ,|_⌒    ハ: : : : : : : : : : : : : : : : : : : : : : : : /
               >-r<_/ iト、  \  \、: : : : : : : : : : : : : : : : : : 彡イ
              x<7イx公、   // \ _〉\_   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          rく  // 〉::::fゝ_イ /     |     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ .!
          ∧,  // /⌒i|  / /      i| こ、これは>>1乙じゃなくて  |
          { j { { /:::::::::| ,/ /       | ポニーテールなんだから.   j
          | | ∧∨:::::::::::レ' /    ヘ,  | 変な勘違いしないでよね!  |
                          ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

7 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 02:18:00 ]
関連スレ

Ruby>>>>>Java
pc11.2ch.net/test/read.cgi/tech/1158807229/
アラン・ケイも認めた!Ruby>>>>>Smalltalk
pc11.2ch.net/test/read.cgi/tech/1150106090/
Ruby最高や!
pc11.2ch.net/test/read.cgi/tech/1170047838/
愛国Ruby
pc11.2ch.net/test/read.cgi/tech/1233033091/
Rubyは難しすぎ
pc11.2ch.net/test/read.cgi/tech/1156496224/
Rubyの宿題教えてください。2限目
pc11.2ch.net/test/read.cgi/tech/1200175247/
【Perl,PHP】LLバトルロワイヤル4【Ruby,Python】
pc11.2ch.net/test/read.cgi/tech/1234635513/
Rubyにはプログラミング言語以上の価値があると思う
pc11.2ch.net/test/read.cgi/php/1217883614/
Ruby VS PHP 仁義なき戦い
pc11.2ch.net/test/read.cgi/php/1201783642/

8 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 15:31:03 ]
スレ立て乙

9 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 18:19:12 ]
ループ内でredoをするともう一度処理を行うと思います。
begin〜endで例外が発生したら同じ処理を行いたいのでredoを入れてみたらダメでした。
この場合はcatchを使うほかないのでしょうか。

具体的にはnet/httpを使ってるのですが、たまにタイムアウトします。
タイムアウトしたとき、例えば「3回はリトライ」するみたいにしたいです。

10 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 18:30:36 ]
そういう時は retry を使う... と思ったけど、
1.9 ではなくなったんだっけ?



11 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 18:39:07 ]
>>10
ちょー感謝です!

オライリーのプログラミング言語Ruby(出たばっかのやつ)によると、
1.8まではretryで「繰り返しを最初から行う」ことが認められていたがダメになったということです。
例外の処理に使うぶんには1.9でもいいみたいです。
この本、まだ30ページしか読んでないのでちゃんと読まなきゃですね。

ありがとうございました!

12 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 03:01:12 ]
attr_accessorって何て発音するんだい?
アターアクセサー?
そもそもattrって何の略だろう

13 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 03:04:28 ]
あとりびゅーとじゃないか?

14 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 04:31:57 ]
matz日記なんで更新されないの?

15 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 06:49:39 ]
アトリビュートアクセッサーだな

16 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 10:13:41 ]
propertyにしとけばよかったのにMatzもひねくれだなア

17 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 10:26:42 ]
概念上、プロパティでは絶対にないな
attr_accessor は冗長で書きにくいが齟齬の少ない表現だと思う

18 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 10:49:37 ]
> attr_accessor
この辺はCommon LispのCLOSが元ネタって解釈でいいのかな。

19 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 11:13:30 ]
ある程度はびっくりでがっかりだが、プロパティだと思われるよりはマシ
プロパティのように使うこともできるだけでプロパティと呼ばれたのではたまらん

20 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:23:43 ]
attributeって一般的にもコンピュータ用語的にもかなりメジャーだと思うが



21 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:50:40 ]
propertyは広く汎用的に、要素って意味で使うけど、attributeは属性という意味だからオブジェクトなどの閉じた範囲の中のpropertyってイメージを持ってるんだが。
この解釈は間違ってるの?

22 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 15:03:57 ]
要素はelementだろ

23 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 15:26:02 ]
>>16の頭の中ではattributeというのは相当にマイナーな選択である、
ということか。


24 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 15:33:14 ]
使ってきた言語によっては全く触れた機会がない可能性のある言葉ではある

25 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 16:30:24 ]
日本人は用語を曖昧に使いすぎなんだよ
attributeだって本来はちゃんとした定義がある
オブジェクト指向言語以外では使われない言葉

26 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 16:46:11 ]
XMLは?

27 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:23:33 ]
DOSのファイルのリードオンリーとかの属性がアトリビュートだったなそういえば

28 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:59:46 ]
普通に使われる単語だし当たり前だけどな
高校生向けの単語集には大抵載ってるように思うが

29 名前:デフォルトの名無しさん [2009/03/01(日) 22:43:21 ]
tar + gzip を使いたいのですが、外部コマンドに丸投げするしか
方法がないのでしょうか?

30 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 23:07:04 ]
zlibという標準添付ライブラリがあってだな
tarに関してもRubyで圧縮できるライブラリがある。ググれ



31 名前:デフォルトの名無しさん [2009/03/01(日) 23:17:24 ]
>>30
べりーさんくす

32 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 00:31:29 ]
>>28
むしろPCやってるから時々単語が分かって助かるリア高の俺
attributeも単語テストに出たかもしれない

33 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 00:45:20 ]
誰も聞いてねーよ

34 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 01:16:13 ]
andと&&の使い分けってちゃんとしてますか?
他言語の癖で&&ばかり使ってるけど特に問題にならないんだよね。

35 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 07:05:22 ]
>>34
結合度の違いを考えなければならないコードはだめなコード

36 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 08:28:36 ]
『プログラミング言語Ruby』、今まで買うつもりなかったんだけど、トークイベントの
動画見たら、買いたくなってきちゃったよ。

でもMatzはまったくといっていいほどタッチしてないんだなw

37 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 08:35:31 ]
>>34
俺の場合、&&とandは使い分けないな。常にand

でも||とorは使い分ける
なぜなら||は以下の書き方でよく使うから

var ||= 10

38 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 09:56:02 ]
>>36
その動画見たいからURL教えて

39 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 10:45:42 ]
タイミング的には初めてのPython第3版を買いたい気分なんだが
ああいう厚い本は好きだ

40 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 11:28:22 ]
>>36
>でもMatzはまったくといっていいほどタッチしてないんだなw

いや、だから買いなんだw



41 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 11:40:49 ]
その本どうして評価高いのか分からん
言語編だけ読んだが構成が滅茶苦茶で読みづらかった
相変わらずのつまらないアメリカンジョーク連発はまだ許せるにしても
所々で出る参照ページとやらの参照先が別本のライブラリ偏だったりするのでもう1冊買わないと参照できない。

42 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 11:47:32 ]
>>41
違う本と勘違いしてないか?

43 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 11:48:24 ]
>>41
それは『プログラミングRuby』
ttp://www.amazon.co.jp/dp/4274066428/
話題に出てるのは『プログラミング言語Ruby』
ttp://www.amazon.co.jp/dp/4873113946/


44 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 12:12:04 ]
プログラミング言語Rubyが出そうなときは話題になったが、出たらほとんど話題にならん。
感想の一つでもあってよさそうなもんだが、結局おまえら読んでないだろ。

45 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 12:13:04 ]
アスキーから出てる「Ruby本」は
『オブジェクト指向スクリプト言語 Ruby』

46 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 12:15:58 ]
Ruby自体がもう下火になりつつあるしな・・

47 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 12:30:14 ]
みんな王道になりたいからありきたりの名前付けるのかねw

48 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 12:37:28 ]
魔道編とかよりははるかにまし

49 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 12:57:07 ]
>>47-48
謝れ!「オウドウとも読めるよね」とかちょっと邪なこと考えたっぽい黄道編にあやm

50 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 13:19:40 ]
・プログラミング言語Ruby
・プログラミングRuby
・オブジェクト指向スクリプト言語Ruby

似たような名前の本が多すぎるのを何とかしてください
洋書と和書で別々に出てるというのは分かるけど、それにしてもややこしすぎる
Ruby WayとかたのしいRubyとか、もっとひねった名前を付けて欲しい



51 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 13:46:35 ]
オライリーのやつはハチドリが表紙だから「ハチドリ本」と名付ければわかりやすいんじゃ
「オブジェクト指向スクリプト言語Ruby」は似てないだろ

52 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 14:10:49 ]
rubyの特殊な文法でメソッドの中にメソッドを定義できるってのがありますよね。
これ実際に使う機会ってあるんですか?

53 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 14:34:54 ]
>>52
普通はない
現象上はオブジェクトの着火メソッドを実行すると使用可能メソッドがぐーんと増えるというものだが、
そんなロボットアニメみたいなことをするくらいなら他の手段を使うことを考えるべき

54 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 14:42:35 ]
>>53
進化コマンドかw
でもオブジェクトが拡張されるならまだしも、クラスが拡張されるのはキモイな。

55 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 14:45:20 ]
>>53
ありがとうございます。やっぱり無いですか。
Rubyはやたら細かい機能が多いんだけどやりすぎな感のあるメソッドなんかも多いですよね。
情報過多は逆に利用者を混乱させるという

56 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 14:46:11 ]
誰か1人が秘密のコマンドを使うと、それと同種の機体とそれの改造型全員が一気にパワーアップ

…物語的には面白いが、おおむねキモいな
シングルトンなクラスでinitializeで条件分岐するならあるいは

57 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 14:47:30 ]
>>55
多くの人は半分くらいの機能を全く使ってない
安心しろ

58 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 14:48:44 ]
>>55
一見無意味だと思われていたメソッドがとんでもない利便を生み出すこともある。
ごちゃごちゃと細かい道具がたくさんある言語はハカーにとっては発想が膨らんで楽しいのだよ。

59 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 15:09:59 ]
>>55
慣れると逆にJavaScriptとかの比較的シンプルな言語でやってるときに
「なんでこんな配列・文字列操作も一発でできないんだよ」
と憤慨するようになる。

初心者にやさしいかどうかは目標にしてないようなことをMatzは公言してたはず。
つーか利用者って言ってもアプリなんかと違って仮にも情報技術を扱う人間なんだから
多少の過多ぐらいで混乱すんなw

60 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 15:15:31 ]
まさに楽しさを追求する言語だね!



61 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 15:23:55 ]
うぜえ

62 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 16:08:52 ]
自分が使わない機能が存在することに文句を言っても仕方ない
だまって使わなければいいだけ

63 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 16:13:36 ]
>>38
オラの村へ行け

64 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 18:33:03 ]
if ってスコープ作らないんだっけ?
作らないとしたら、それはなんで?

65 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 19:14:09 ]
難しい問題だな
たまたま制御構造として定義することに決めたからスコープを作らない、という以上の回答はないんじゃないか
○○で××だから if はスコープを作らないように決めたのです、という説明はできなさそうだ

66 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:34:06 ]
説明できるだろ

if true
x = 10
else
x = 20
end

のとき困るから。

67 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:46:47 ]
ブロックが標準でローカルスコープを作ることと同じくらいに困るから

68 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:04:26 ]
>>66
別に困んなくね?

69 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:14:07 ]
まぁ、>>66程度なら
x =
if true
10
else
20
end
だからな。例が微妙。


70 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:40:32 ]
メソッドの再定義ってなにかコツとかあるんですか?
requre したライブラリのメソッドの上書きが動作しません(追加は動きます)



71 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:44:04 ]
定義してるモジュールが違うとか、
実は自分の定義よりあとで動的に再定義されてるとか、
単なるtypoとか。

もちっと具体的に。


72 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:54:38 ]
> 定義してるモジュールが違うとか
え〜、と思ったけど心当たりがあります

# require するファイル
class B
def hoge; end
end

class C <B
end

# ---------

# 自作
class C
def mage; end # 動く
def hage; end # 動いてない
end

こんな構造になって、C.new.mage は動くんですが、C.new.hage は 元の hoge が動いてるように見えます
C クラスで使う hoge の動作を書き換えたい場合は B クラスに追加しないと駄目ですか?

73 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:59:14 ]
# require するファイル
class B
def hoge; end
end

class C <B
end

# ---------

# 自作
class C
def mage; end # 動く
def hoge; end # 動いてない
end

こんな構造になって、C.new.mage は動くんですが、C.new.hoge は 元の hoge が動いてるように見えます


…が意図したい書き込みです、すいません

74 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 22:03:24 ]
それだけ見ると問題なさそうだねー。


75 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 22:08:59 ]
>>73
直接hoge呼んでそうなる?
class Bのメソッドから間接的に呼んでるとダメだった気はするけど。

76 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:02:07 ]
> 元の hoge が動いてるように見えます
そう判断した時の実行結果を貼って見れば何か判るかも。
↓の様になると思うが。

class B
  def hoge;p 1; end
end

class C <B
end

class C
  def mage; p 2;end 
  def hoge; p 3;end 
end

C.new.mage # => 2
C.new.hoge # => 3

77 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:06:14 ]
requireしてるのが公開されてるブツなら名前だしたほうが早いかもね。



78 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:16:59 ]
>>46
> Ruby自体がもう下火になりつつあるしな・・

下火になってるって
他の言語が盛り上がってるのですかね。。


79 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:19:56 ]
>>46は、CやJavaが話題にならない程度にRubyも話題にならなくなった
というのが理解できていないのさ。

80 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:28:45 ]
ホっ。勉強中なもので、僕の中では熱い言語です。



81 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 00:17:18 ]
>>73
># 自作
>class C

「class C」を「class ::C」にしてみたらどうだろう。
つまり「class C」しているつもりが知らないうちに「class Foo::C」になっている可能性があるんじゃないか。

82 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 10:42:05 ]
>>46 >>78
Rubyやってる前からRubyやってると、今は下火には見えんなw
このスレの賑わいもあるしな。

83 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 10:46:38 ]
1.4とかもう死にそうだった覚えがある

84 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 10:55:42 ]
ruby -Ke の e の部分を取得することはできる?
-K オプションが(N 以外で)指定されてることを検出したいんだけども

85 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 11:00:33 ]
>>84
$ cat test.rb
p $-K
$ ruby test.rb
"NONE"
$ ruby -Ke test.rb
"EUC"


86 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 11:07:20 ]
>>85
> Ruby インタプリタのコマンドライン情報を示す一連の変数があります。
> 形式は $-? で ? の部分にオプションの一文字が入ります。
うおー変態変数
せんきゅー

87 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 12:25:04 ]
> Ruby インタプリタのコマンドライン情報を示す一連の変数があります。
> 形式は $-? で ? の部分にオプションの一文字が入ります。
5年Ruby触ってたのに知らなかった・・・

88 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:01:59 ]
>>82
「Rubyやってる前からRubyやってる」って禅問答か?

89 名前:デフォルトの名無しさん [2009/03/03(火) 23:25:12 ]
sudoコマンドのように、指定されたユーザで操作できるライブラリが
あったらいいのにと思ったことがあるのですが、この方法は邪道ですか?

# このプログラムはroot権限で実行されます。
# 当然この操作もroot権限で実行されます。
FileUtils.mkdir("/home/foobar")

# しかし、一部の操作はある特定のユーザで実行させたい場合があります。
# 例えば:
OS.sudo("hogehoge") do
  # このブロックは一般ユーザ「hogehoge」で実行されます。
  FileUtils.mkdir_p("/home/hogehoge/something")
    #=> '/home/hogehoge' does not exist, so that this operation may be denied.
end

90 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 05:54:30 ]
>>89
スクリプトの中で個別に操作できるべきではありません
該当ユーザーの権限でスクリプトを起動するか、または、せめて、setuid するべきです



91 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 17:05:23 ]
少しお聞きしたいのですが、最近このスレか前スレかどこかで
初心者がリファレンスマニュアルの読む際に気をつけることに関するレスがあったと思うのですが
覚えていらっしゃる方はいらっしゃいませんでしょうか?

確か、:: とか # についての説明があったと思います。


92 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 18:06:02 ]
>>91
マニュアルで # がついてればインスタンスメソッド
Array#map は Array クラスのインスタンスメソッド map
Array のインスタンスに対して . でアクセスできるっていうかぶっちゃけ arr = [1,2,3] に対して arr.map の形式で書ける

マニュアルで :: で区切るのはクラス名と定数
Ruby ではクラスも定数なので原理的に クラス::クラス::定数 と クラス::クラス::クラス を区別できないが、
慣れればどうということはない
実際のスクリプトでも :: で区切って書く

マニュアルで . で区切るのはクラスメソッド
URI.parse は URI クラスのクラスメソッド parse


93 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 18:35:20 ]
Emacs で、カーソル位置のメソッド名と適当なクラス名を自動で ChangeLog に挿入してくれる elisp があったんですが、
誰か知りませんか?
vc の ChangeLog を書くときに挿入してもらいたいなーと思うんですが

94 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 18:57:25 ]
php でいうところの jp2.php.net/debug_backtrace は ruby だと何でしょうか?

95 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 19:06:54 ]
いちおうできたけどこれは酷いw
backtrace = begin; raise; rescue; $@; end


96 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 20:23:17 ]
>>94
caller かな

97 名前:94 mailto:sage [2009/03/05(木) 21:31:01 ]
>>95-96
phper なのでいじめられると思ったけど
親切にあざーす><

98 名前:デフォルトの名無しさん [2009/03/05(木) 23:45:52 ]
MacOSX 10.5.6でMacPortsからruby 1.8.7をインストールして使っています。
ruby 1.8.5と1.8.7の間での変更点についての情報は何処で確認できるでしょうか?
1.8.5で動作確認しているプログラムが1.8.7になってから動かなくなったので
おそらく何か変更がありそこがネックになっていると思うのでそこを修正したく思うので
よろしくおねがいします。
エラーメッセージは特になく一見動作しているように見えて不意に突然フリーズしてしまい
やむなくCtrl-Cで終了しています。再現性も特にないバグなので言語仕様の変化だと思います。

99 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 03:43:44 ]
>>98
-W オプションつけて実行したらどうなるよ?

100 名前:98 mailto:sage [2009/03/06(金) 09:01:30 ]
ありがとうございます、そんなオプションが有ったんですね!!
いくつかインスタンスされていない変数が見つかりました。これが原因かもしれません。
チェックしてみたいと思います




101 名前:98 mailto:sage [2009/03/06(金) 09:04:11 ]
s/インスタンスされていない/イニシャライズされていない/
すいません寝起きだったので用語を間違えてしまいました....orz

102 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 10:05:10 ]
>>92
それだ!サンクス

103 名前:デフォルトの名無しさん [2009/03/06(金) 12:08:50 ]
すいません、gemの1.3.1をruby setup.rb でソースからインストールしたんですが、gem自体をアンインストールするにはどうすればよいでしょうか??


104 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 12:19:41 ]
てさぎょう

105 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 12:23:41 ]
てか自動でアンインストールして欲しいならシステム標準のパッケージの使え

106 名前:103 [2009/03/06(金) 12:25:05 ]
どもです。
インストールしたディレクトリと/usr/bin/gem1.8 を消しましたけど、これで大丈夫でしょうか?

107 名前:103 [2009/03/06(金) 12:25:44 ]
>>105
そうですよね。apt-get install 使うべきでした。

108 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 12:33:29 ]
gems のディレクトリ削除して bin/gem 消せば誤作動はしないと思う


109 名前:109 [2009/03/06(金) 12:35:47 ]
どもです!

110 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 14:45:30 ]
すいません、昔rubyを使った事があって久しぶりに使ってみた所
いくつか忘れてしまっている所が有るのでよろしくおねがいします。
もともと引数の無いメソッド(ここではuniq)を使うとき()っているんでしたっけ?
いま、Rubyのチュートリアルを読み返して見ているのですが
uniq.mapと()はついていません、しかし検索してみるとときどきuniq().map(){hoge}という書き方を
見かけます、どちらが推奨されているのでしょうか?
よろしくおねがいします。



111 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 14:49:44 ]
>>110
推奨かどうかは知らないけど大抵、引数ないならつけない

112 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 15:10:16 ]
ありがとうございます。とくに動作に影響は及ぼさないのは明らかだと思うので
つけないほうこうで行きたいと思います、ところで皆さんはrubyのバージョンがあがって
動作しないコードが出てきたときはどのように調査していますか?
以前1.8.5で作っていたコードが1.8.7で動かなくなっていて少し困っています
うえの方でも -w オプションをつけることで糸口をつかんだ方がいらっしゃるようですが
どのような方法が一般的なのかとおもいまいして参考のためによろしくおねがいします。

113 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 16:03:08 ]
同名の変数やアクセサがあったりすると動作に影響を及ぼすこともあるかもよ。

114 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 16:05:19 ]
最初に言うと自動検知は無理

一般的には、1.8.5 から 1.8.7 にしただけで動作しなくなるスクリプトというのはそう多くない
1.8.6 feature と 1.8.7 feature を目で見てスクリプトで使われてるのをチェックするしかないな

115 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 16:44:57 ]
わかりました。
非常に参考になりました、ありがとう御座います。

116 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 17:15:37 ]
>同名の変数やアクセサ
アクセサとの重複はあり得ないんじゃ?
変数とかぶるケースも変数名をselfのメソッドと同名にしたのが悪い。
これたしかwarning出るよね。

117 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 17:24:28 ]
>>116
アクセサとの重複はありないよな。
変数とかぶるケースは、同名にするのが悪いに決まってるが、
「とくに動作に影響は及ぼさないのは明らか」という部分に対して
注意喚起してるんじゃないかね。

118 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 18:41:17 ]
Ruby 2.0 はいつ頃でますか?
1.9.1 が出たし、1, 2 年は出ない感じ?
それとも 3 年以上?

119 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 18:43:24 ]
>>118
Ruby2.0は基本的に出ない
稀に2.0が出るのを待ってRubyを始めようという人がいるけど、あれ間違いだから

120 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 18:50:10 ]
>>119
> Ruby2.0は基本的に出ない
どっかで表明していたっけ?



121 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 19:06:31 ]
そもそもRuby 1.9.5あたりでまた開発版になりそうな勢いだしなぁ
本当にこの先10年くらい2.0は出ないかもしれない

122 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 19:08:55 ]
Rubyでメソッドの引数にメソッドポインタを渡して、それを呼び出す的なことをやりたいのですが、
どのように記述したものでしょうか?

実現したい仮想的なコード:
def hoge(method)
 method.call # methodを呼び出したいつもり
end

hoge(@mage.moge)

evalで書くのもダサイし、遅い気がします・・・。
def hoge(method)
 eval(method)
end
hoge("@mage.moge")


123 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 19:11:32 ]
Ruby2.0はいつかは出るのだろうけど
まだまだ作り始めてもいないので
いったいいつごろになるのやら
さっぱりわからん
10年後くらい?


124 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 19:19:37 ]
>>122
def hoge(method)
 method.call
end
hoge(@mage.method(:moge))

125 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 19:24:05 ]
>>124
サンクス!いけました。Methodオブジェクトがポインタ的に使えますね。
ありがとうございました。

126 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 22:41:59 ]
2.0は開発者の前に吊されたニンジンということになっている。


127 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 22:45:35 ]
ニンジンいらないよ

128 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 22:48:45 ]
そんなこと言わずにどうぞ
www.rubyist.net/~matz/slides/kobe07/mgp00007.html

129 名前:118 mailto:sage [2009/03/06(金) 23:01:44 ]
Ruby 2.0 の件、いろいろとありがとうございます。
人参、面白かったです。
これから Ruby をはじめようかなーと漠然と思っていたので、
互換性のない 2.0 を出るのを待とうかとも思っていましたが、
まだまだ先みたいなので 1.9 を試してみます。

130 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 00:05:25 ]
1.9の時点で1.8とは互換性がないよ。



131 名前:デフォルトの名無しさん [2009/03/07(土) 00:07:30 ]
言語仕様ってもうちょっと安定しないの?

132 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 00:10:06 ]
安定しているのが売りの言語を使ったら。

133 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 00:12:38 ]
文句言うほど不安定だとは思わんがね

134 名前:デフォルトの名無しさん [2009/03/07(土) 00:13:24 ]
しかし最近のLinuxディストリを見ても、RubyではなくてPythonが
標準で入っているくらいだからな。

135 名前:デフォルトの名無しさん [2009/03/07(土) 00:13:38 ]
Cだったら安定してるんじゃない?


136 名前:131 [2009/03/07(土) 00:15:20 ]
すまん、昔書いたRubyスクリプトをいま実行してみたら
たくさん文句言われてうんざりした。それだけ。

137 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 00:16:39 ]
>>134
何勘違いしてるのか知らんけど、プログラミング言語は人気だからとか言う理由で採用したりしないから
その言語で作られたアプリケーションを動作させるためにインストールされるものばかりだから

138 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 00:19:20 ]
1.9になると警告だけじゃなくて実際に動作しなくなるものも少なくないので
今から手直しするなら1.9での動作もついでに確認しておいた方が良い

139 名前:デフォルトの名無しさん [2009/03/07(土) 00:20:10 ]
>>137
知ってる。
だが実際にはほとんどがPythonで書かれていて、結果としてRubyに依存関係を
もっているパッケージがほとんどない、ってこと。

140 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 00:23:58 ]
>>139
何勘違いしてるのか知らんけど、プログラミング言語は人気だからとか言う理由で採用したりしないから
その言語で作られたアプリケーションを動作させるためにインストールされるものばかりだから



141 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 00:51:26 ]
>>119
それってTeXのバージョンπみたいなものか

142 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 01:14:36 ]
まともな仕様もないものは使われません

143 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 01:21:04 ]
>>142
何勘違いしてるのか知らんけど、プログラミング言語はまともな仕様があるからとか言う理由で採用したりしないから

144 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 01:27:30 ]
perlの仕様ってどこかにある?
pythonはあったような気がするんだが……


145 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 02:21:36 ]
pyは人気が高い云々というか割と最近にPOSIX標準になったと思ったが
つまりなくてはならないもの

146 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 02:42:35 ]
>>145
ソースは?

147 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 03:15:17 ]
ググってみたがそれっぽいのがでない
思い違いのようだ
正直すまない

148 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 06:35:40 ]
>>89
亀レスだけど、Process::Sysで出来そう
WEBrick::Utils::su 参照 # webrick/utils.rb

あとスクリプトにsetuidしても所有者権限で実行してはくれないよ、アシカラズ

149 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 09:25:56 ]
>>127
コウウラキ 乙

>>145
Pythonって最近のディストロのインストーラーの一部とかに使われている敬意があるんじゃなかったけ?


150 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 10:48:45 ]
ではなぜRubyが採用されない・・・



151 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 11:58:03 ]
RubySpecってどの程度進んでるのかね……。
ttp://rubyspec.org/

152 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:25:24 ]
単にRubyが日本発だからでわないかと。日本語って外人から見たら全然意味わからんし。
Pythonは外人発のOOp言語だから英語でのノウハウがたまりやすかったってだけだと思う。


153 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:28:58 ]
>>149
FreeBSDだと、Pythonだからインストーラーに採用できないとかもあったりするねw
まあRubyよりライセンスが緩いから、だいぶいいんだけど・・・

そう言えば、Ruby on HSPはマダなの?
早くしないと日本でもPythonに負けそうな勢いだ
ライブラリとドキュメント早くなんとかしないとね

>>152
Pythonの方がコミュニティが優秀って事だろう

154 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:36:18 ]
>>153
RubyとしてはHSPに乗っかる理由がない
Tk並にGUIが分離してるなら良かったんだが

155 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:36:44 ]
>>153
>Ruby on HSP
HSPでRuby実装・・・?

156 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:39:19 ]
>>155
HSPをGUIフロントエンドとして使うという意味だろう
そんなことやってる人いないけど…
RubyとHSP間のトランスレータなら、そんなん無駄だから他のことやったほうが有意義

157 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:53:00 ]
>>155
>Ruby on HSP
HSP様の人気にのっかると言う意味です。
最低でも、あのくらいは頑張ってくれないと・・・

158 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:55:15 ]
コアとしてるユーザが違う物を比べるのか
Ruby十分人気だろ

159 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 22:00:17 ]
うん、普通に人気だと思う
業務に使われる割合が PHP よりも Perl よりも少ないというだけで、人気は普通にある

160 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:17:13 ]
File.mtime が Timeオブジェクトを返すのですが、これをDateオブジェクトに
変換する方法ってありますか?



161 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:26:22 ]
使われる分野が違うだけで、HSPより人気だと思うがw
書籍発行数だけでも、さすがにHSPより上じゃないの?

162 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:27:08 ]
HSPとかと比べても何の危機感ももたない。
もっと危機感煽るなら、AIRくらいにしとかないとw

163 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:30:46 ]
>>160
Time#yearとTime#monthとTime#dayで年月日が得られるからそれをDate.newあたりに指定するのが先決
Time#strftimeの使い方を覚えるのでもいい

164 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:32:39 ]
>>163
わかりました、やってみます。

さいしょ、Time#strftimeで文字列比較しようとしたのですが
ゲボゲボなのでやめました。

ありがとうございました。

165 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:34:17 ]
そだな
mtime = File.mtime('readme.txt')
mdate = Date.new(mtime.year, mtime.month, mtime.mday)
とするのがとりあえず初心者スレだと思う

166 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:46:29 ]
>>165
何度もすみません、
 p Date.new === Date.new(2009, 3, 8) #=> false
となってしまうのですが、これはなぜでしょうか?

ちなみに
 t0 = Date.new
 sleep 10
 t1 = Date.new
 
 p t0 === t1 #=> true
これは期待通りです(;_;)

167 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:04:01 ]
>>166
マニュアルくらい読めよ

> Date
> 日付を扱うクラスです。

> クラスメソッド
> civil([year[, mon[, mday[, start]]]])
> new([year[, mon[, mday[, start]]]])
> 暦日付に相当する日付オブジェクトを生成します。

って引数省略時の動作書いてねええええ

Date.new とだけしたときは、Time.new が現在時刻を返すのと同様、現在の年月日の Date オブジェクトを返す

168 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:07:16 ]
>>167
間違ってるぞ
Date.new は Date.new(0, 0, 0) だ
今日の日付が欲しいときは Date.today を使う
なんで Time.new と同じ動作にしなかったのかは若干謎

169 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:13:20 ]
ありがとうございます。
納得しました。

170 名前:デフォルトの名無しさん mailto:age [2009/03/08(日) 02:00:12 ]
質問です。
Rubyは標準でデータベースを持っていたり、推奨DBがあったりしますか?



171 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 03:08:56 ]
松本教祖様がGUI否定だしなあ。インストーラ採用は絶望的でしょ。

172 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 03:24:04 ]
>>146-147
これ見たんじゃない?

Linux標準にPerlとPythonが追加 − @IT
ttp://www.atmarkit.co.jp/news/200802/20/lsb.html

Rubyなんて海外じゃ全然ダメだし、どう考えても入らないよな・・・
Pythonはインストーラーやパッケージシステムなんかにも採用されているし、もう十分標準なんだろうな

173 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 07:25:33 ]
>>171
別にGUIを否定はしてないでしょ。興味ないだけで。

174 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 13:40:07 ]
同じだろ。

175 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 19:37:52 ]
>>170
標準では付いてない。PHPやPythonとは違ってなんでも詰め込んだりしない。
本格指向ならMySQL、普通の人は軽めのSQLiteにしておけばいいと思う。

松本教祖達が興味ない分野が死んでしまうのは痛いな
広めようという気がないのだから

176 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 00:07:06 ]
>>174
無関心は、否定よりも困る。
議論の対象にもならないのだから。

177 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 09:54:04 ]
sqliteを添付しようという話は何度かあった気がするんだがね。

178 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 12:53:48 ]
>>171
標準添付の Ruby/Tk のことも思い出してあげて下さい

require 'tk'
Tk.mainloop

で窓ができるんだぞ

179 名前:デフォルトの名無しさん [2009/03/09(月) 16:40:30 ]
ネットワーク系の勉強をしようと思ってRubyを触り始めたのですが
たとえばstock.2ch.net/test/view.so?bbs=tech(2証プログラム)
などログインが必要なところにアクセスしようと思ったらどうすればいいのでしょうか
参考になるURLなど紹介していただけるとありがたいです

180 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:49:52 ]
>>179
HTTPとHTMLの勉強をしてください
Rubyはそれらをほとんど抽象化しません



181 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:55:27 ]
>>180
ありがとうございます。
その辺勉強してきます。

182 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:36:26 ]
attr_accessor で定義した属性にメタ的?にアクセスするには何が早いでしょうか?
文字列とかシンボルから属性をとりだしたいってことなんですけども。

method("属性名").callでよいのかな?

↓みたいなことをやりたいのだけど。

%w(hage, mage, moge).each do|x|
 iroiroyaru(method(x + "_items").call)
end

183 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:55:06 ]
まあ、見たまま素直だと思う

184 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:57:03 ]
>>182
やろうとしてることがいまいちピンとこなくて何だけど、とりあえず
attr_accessor :foo

def foo
 @foo
end
def foo=(x)
 @foo = x
end
が等価。
だからObject#methodでもいいし、Object#sendでもいいし。

185 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:01:41 ]
>>182
ちょっと的外れだけど instance_variable_get

186 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:03:27 ]
%w{ foo bar baz }.each do |x|
puts obj.send(x)
end

とか

187 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:09:51 ]
ありがとうございます。

>>185
属性=変数の場合はそれでも十分いけますね。

>>186 >>184
実質的に、メソッドなんですね。
おお、sendで一発でいけるのか。

188 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:24:05 ]
実質的にも何も、属性というものはRubyにはない

def hoge; @hoge; end
def hoge=(v); @hoge=v; end

と書く代わりに

attr_accessor :hoge

と略記することができる、というだけに過ぎない
hoge はただのインスタンスメソッドで、スクリプト上全く特別扱いされない
これを特別扱いするのはマニュアルシステムのRDocくらいだ

189 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:40:19 ]
あれよくないよね

190 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:18:07 ]
>>187
attr_accessor の仕組みを知って、類似のメソッドを自分でも書くようになると
確実にスクリプトの変態度が増すぞw

面白いから module_eval とか調べてみれ



191 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:19:10 ]
クラスからオブジェクトを生成する時のオブジェクトを配列にしたいです。
Array等の方法で先に配列を作り、必要となる都度そこに代入するしか方法は無いのでしょうか?

普通の配列を @a = [] の様な方法で要素数を気にせず宣言するような事をしたいです。


192 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:27:59 ]
class MyData < Array
def <<(e)
self.push(e.to_s.downcase)
end
end

data = MyData.new
data << "ONE"
data << "TWO"

p data #=> ["one", "two"]


こんなん?

委譲するべきだけど、最初は小難しいだけだから配列を継承するのが簡単

193 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:31:58 ]
>>191
継承してselfに対して操作してもいいし
class Foo < Array
 def puts
  puts self
 end
end

委譲してもいい。

class Foo
 def initialize
  @data = []
 end
 def <<(x)
  @data << x
 end
end

実装がArrayそのままなら要素数の宣言はいらない。

194 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:33:27 ]
>>192は配列を継承したクラスだけど、
>>191が欲しいのは、自分の作ったクラスインスタンスの配列なのではなかろうか。


195 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:34:44 ]
説明下手ですみません。例えば、
student[0]〜student[100] があってそれぞれに
student[0].math
student[0].english
student[0].japanese

という感じの事です。
Studentsクラスだったとすると

student = []
student[0] = Students.new
student[1] = Students.new
 ・
 ・
 ・

をfor文なりでやるしかないのでしょうか?

196 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:36:12 ]
あーやっぱそっちか。

class Foo
 def initialize
  @@member ||= []
  @@member << self
 end
end

197 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:37:06 ]
for 文でも別に構わないが、 for 文は普通は使わない

students = []
100.times.do
students << Student.new
end


198 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:38:33 ]
・・・ごめんこっちかな?

class Foo
 def Foo.create(num)
  ary = []
  (0..num).each { ary << Foo.new }
  ary
 end
end

199 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:41:40 ]
>>195
作るのは>>197
配列要素各々のオブジェクトにメソッドを実行してほしい場合は単にそのように書く
students.each do |student|
puts "数学の成績は #{student.math} です"
puts "英語の成績は #{student.english} です"
puts "国語の成績は #{student.japanese} です"
end

というか、Rubyについての基礎知識が全く無いように見受けられる
本か何かで体系的な学習をしてから動くことをお勧め

200 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:45:08 ]
ありがとうございます。
まだわからない部分があってなるほど!とは思えませんが、自分で調べてみます。
最初に上手く説明できずすみませんでした。
ありがとうございました。



201 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:46:06 ]
100のStudentインスタンスを作るだけなら
students = Array.new(100) { Student.new }

202 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:48:10 ]
>>201
それはスレ的によくないと思う

203 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 14:02:58 ]
あるディレクトリ以下を全部消そうとして
FileUtils.rm("dist/*")
としたら
usr/lib/ruby/1.8/fileutils.rb:1297:in `unlink': No such file or directory - dist/*.png (Errno::ENOENT)
と言われます。
本当はどうすればいいのでしょうか?


204 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 14:07:37 ]
>>203
system("rm -R dist/*")

205 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 14:13:48 ]
>>203
適当に Dir.chdir しろ
Dir.pwd の結果がたぶん意図しないディレクトリになってる

206 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 14:19:10 ]
ありがとうございます。
そうじゃなくて FileUtils.rm("dist/*") で全部消せないでしょうか(distは消さない)?
カレントディレクトリには間違えなくdistがあります。


207 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 14:30:09 ]
じゃあ dist の中に * というファイルが無いんだろう

208 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 14:32:30 ]
>>206
FileUtils.rm とかって単独でグロブを展開できないんじゃないの?
現にエラー見る限り * が展開されてないじゃん

Dir.glob("dist/*").each do |f|
FileUtils.rm(f)
end

とかでいけるんじゃないか。

209 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 14:36:10 ]
>>207は刺激的で意地悪な回答だと思う

マニュアル眺めれば見当つくが、引数は配列だ
>>208ではなく、Dir.glob の結果をそのまま渡せばいい

210 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 14:48:25 ]
>>207は本スレに池w



211 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 19:19:38 ]
>>207はツンデレ

212 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:09:56 ]
calc_a、calc_bという二つのメソッドがありどちらも
return Integer(n) で戻り値を整数にして返します。

n = (中略) * (calc_a / calc_b)

という処理をした時に (calc_a / calc_b) の時点で小数点以下が切り捨てられてしまいます。
(calc_a / calc_b) は本来 1 より大きく 2 より小さい値にしようと思っていたのですが、どうすればよいでしょうか?

213 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:14:42 ]
Integer(n) という時点で、何かがまずそうだと思うんだが、それはさておき。
n = (中略) * (calc_a.to_f / calc_b)
でいいんじゃね。

214 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:18:23 ]
少しはマニュアル読めよ


…特に書いてねえええ

整数のメソッドの返り値は整数になってる
小数つきの値を返して欲しいなら小数つき数字のクラスの割り算メソッド使え

irb> 10 / 3
3
irb> Float(10) / 3
3.33333333333333


215 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:46:26 ]
>>213>>214
無事解決しました。
ありがとうございました。

216 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 09:05:39 ]
Float(10)
Integer(1.1)
これって何?キャスト???Ruby使ってて始めてみたw
to_fとかto_i使うもんだと思ってた

217 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 09:07:03 ]
ごめん、壮絶にマニュアルに載ってた。組み込み関数なのね。
to_f, to_iとの違いはなんだろ。
レシーバーをもつメソッドの違いとかなし

218 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 09:13:17 ]
>>217
www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#Integer
www.ruby-lang.org/ja/man/html/String.html#to_i

219 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 09:14:43 ]
>>216
ただの関数的メソッド
URI('www.example.com'') なんかも有名だが、こんなふうに作る

module Kernel
def URI(uri_str)
URI.parse(uri_str)
end
module_function :URI
end

たいていは特定のクラスメソッドや new つきインスタンスメソッドの別記だけど、
Integer() や Float() のように、特定言語のアレっぽい便利な「ちょっと違う処理」を噛ませてある場合も多い

irb> "10".to_f
10.0
irb> "a".to_f
0.0
irb> Float("10")
10.0
irb> Float("a")
ArgumentError: invalid value for Float(): "a"


220 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 09:26:53 ]
個人的には Integer() なんかの特殊処理は好きではない
素直に「そのクラスのオブジェクトへの変換メソッドのエイリアス」とだけ設定してほしかった



221 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:20:30 ]
表記が違えば挙動が変わるのはおかしいことじゃない。
関数側で未定義なクラスならto_i等を呼ぶから結果的にエイリアスとしても
振る舞うだけで、関数自体はエイリアスという位置づけでもないし。


222 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:25:33 ]
表記が違うなら振る舞いも変えておけば使い分けできて
(゚д゚)ウマー ってことじゃないの

223 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 11:35:11 ]
Integer が整ってなかったり Float が浮いてたりするように感じるのは、変換のクラスメソッドがないから
Integer.convert があってそれを Integer() 内で呼んでる、とかそういうめんどっちい構造にすべきだった
いきなり関数形式のメソッドだけ提供されても正直困る

224 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 11:43:40 ]
関数的メソッド Integer は Integer クラスとは何の関係もないんだよね
名前がたまたま同じだけの、ただの Kernel クラスのメソッド

URI() の定義を初めて見たときは激しくがっかりしたことを覚えている
クラスそのもののオブジェクトに引数を渡す方法があるのかとかちょっと期待してた俺

225 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 16:24:02 ]
割とがっかりする仕様をそのままにしとくのもなんだかなあ感はあるね。
まあ教祖が放置してるぐらいだから、信者の皆さんに不満は無いのだろうけど。

226 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 16:35:53 ]
個人的には、微妙に挙動の違う記法を
いくつか用意する方針には納得している
do endとブレース、Procとlambdaみたいなのは、使ってて確かに両方必要だと感じるので

ってかどうせ、変えたら変えたでまた批判されるでしょ?


227 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 16:51:39 ]
&&, || と and, or だってそうだしな
優先順位が同じになったら困る人が大量発生するだろうなw

228 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 17:25:54 ]
てかこれはそもそも "a".to_i みたいなのが 0 になるのがおかしい
数字じゃありませんってエラー出せよ

229 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 17:29:20 ]
まあ、今のRubyで to_i や to_f のメソッドを作ったら例外ブロックとか例外処理引数とかつけると思う
文字列と数値の処理は変なの入れるとRubyスクリプト全体が遅くなるから嫌がられそうだが

230 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 17:36:44 ]
人のソースを解読しながらの作業なんだけど
変数が宣言されてないのが凄く違和感ある
何かオブジェクトがあった時に中身が何なのかわからないんだよね
慣れればなんとかなるもの?



231 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 17:45:05 ]
>>230
宣言は = で代入と同時に行われている
これ以外の方法で変数が宣言されることはない(配列の要素とかは別だけど)

で、変数の中身がわからなくて困るというのは、おおむね、変数名つけた人間のセンスがねえ
クラス名から類推されるオブジェクトの名前を変数に付けるのがセオリー

変数が何のオブジェクトか知りたければ、「右辺」の返り値を調べるといい
マニュアルでも、「○○を返します」というのだけは意識的に書かれてるはずだ

これまた稀にマニュアルなのに「××します」とだけ述べてて返り値のクラスについての情報がない奴がいるが、
アホ認定でよし

232 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 17:51:50 ]
>>228
何を許容し、何をおかしいとするかは言語によるでしょ
少なくとも一様ではない
複数の判断があるからこそ、Rubyでは#to_iとInteger()の二つを用意してあるんでは?

Cのatoiは0を返す
JavaのInteger#parseIntは例外を投げる
Common Lispのparse-integerはデフォルトでエラーを通知するが、
:junk-allowedパラメータによっては多少の不正形式も許容し、それでもダメならnilを返す

233 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 18:01:31 ]
>>232
いや to_i と Integer() には関連性はないから

234 名前:デフォルトの名無しさん [2009/03/11(水) 18:05:44 ]
testfile = "/tmp/testfile"
FileUtils.chown(1000, 1000, testfile)

  #=> /usr/lib/ruby/1.8/fileutils.rb:987:in `fu_get_gid': can't convert
      Fixnum into String (TypeError)
    from /usr/lib/ruby/1.8/fileutils.rb:926:in `chown'
    from test.rb:6

あれ?と思って何度もドキュメントを読み直してみたんだけど、どうしても
わからなくてFileUtilsのソース読んでみたんだが、

  def fu_get_gid(group)   #:nodoc:
    return nil unless group
    if /\A\d+\z/ =~ group

ここでマッチするかを調べる前に、group = group.to_s するのを忘れていませんか?
すぐ上にdefされているfu_get_uid()はStringに変換してあるのに・・・

235 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 18:42:26 ]
>>231
右辺を見る、まず変数なのかメソッドなのかわからん
どちらにせよ何を返すのかが重要だからそれを調べるために
メソッドが定義されてる部分か変数に代入されている部分を探す
探した先でも代入されてたりして再び右辺を知る必要が生じる

しかも同じ変数を複数の用途に使ってたりするから
直前にアクセスしてるのはどこかを見つけ出して
直前を知る為に分岐で使われる変数の中身を知る必要があって
変数の中身を調べるために代入されている所から右辺を辿って

という状況が3重ぐらいにネストされてる
ってただの愚痴になっちった
俺が慣れてないせいもあるだろうし、スルーでおkです

236 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 19:30:46 ]
>>235
副作用の少ないスクリプトなら、デバッガ使うか
デバッグプリント書き込んで実行しちゃうのが手っ取り早い。

あとはその変数(オブジェクト)をレシーバにしてるメソッドから類推するとか。
これはduck typingと呼ばれる概念の延長だけど
Stringのメソッド使ってるならStringかそれに似せたオブジェクトだろう、ということ。


237 名前:234 [2009/03/11(水) 19:56:51 ]
ちょっと無視しないでよー
もしかして僕がバグなんですか?

238 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 20:09:14 ]
数値で指定できるの初めて知った
ずっと文字列だったから

239 名前:234 [2009/03/11(水) 20:14:24 ]
>>238
ええ、ただ僕の場合はユーザID、グループIDで指定する習慣となっているので
ちょっと困ります。

FileUtils#chown のユーザIDは大丈夫なのに、グループIDだとエラーが出るので
、それを手がかりにしてソースを読んでみたのです。
初心者なもので、バグかどうかはわかりませんが、fu_get_uid() と
fu_get_gid()を比較してみると、バグなのかな?という疑問もあります。

240 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 20:20:20 ]
あん、"1000" で通るだろ



241 名前:234 [2009/03/11(水) 20:24:29 ]
>>240
やだよ。

つかEtcとかFile#Statで得たユーザID、グループIDを
いちいちto_sでStringに変換するくらいだったら、自分でfileutils.rbを修正しちゃうね。
(自分で修正したものを/usr/libに置くのはキモいけど)

242 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 20:28:40 ]
そういうことをやると、環境構築のたびそこに修正が入るわけだが
ひとりシステムで将来的にも引き継ぎなしとかならいいけど

243 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 20:34:19 ]
require 'fileutil'
module FileUtils
 alias org_fu_get_gid fu_get_gid
def fu_get_gid(group)
  org_fu_get_gid group.to_s
 end
end

>>234>>237もバグだと思うけど、>>241をやるぐらいなら
モンキーパッチのほうがマシ。動くかはシラネ。

244 名前:234 mailto:僕はバグです [2009/03/11(水) 20:43:53 ]
じゃあ /usr/lib/ruby/1.8/fileutils.rb を適当な場所にコピーして
自分で修正!

def fu_get_gid(group) #:nodoc:
return nil unless group
group = group.to_s # fu_get_uid() にならって、この部分を追加!
if /\A\d+\z/ =~ group
then group.to_i
else Etc.getgrnam(group).gid
end
end
private_module_function :fu_get_gid

これで解決だよw
つーか、この程度のバグも報告されていないとは、実はRubyユーザって
少ないんじゃないの?ww

245 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 20:47:29 ]
あーはいはいそうだねすごいね

246 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 20:49:08 ]
少ないけど、何か?

247 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 20:52:59 ]
>>244
そんなRuby使うのやめちゃったらいいよ
折れは使うけど

248 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 21:07:41 ]
[#15907] Patch for FileUtils#chown (specifically: FileUtils#fu_get_gid)
ttp://rubyforge.org/tracker/index.php?func=detail&aid=15907&group_id=426&atid=1700

249 名前:234 [2009/03/11(水) 21:15:23 ]
>>248
そのパッチが公開されたの2007年じゃんワロタww
いつになったら適用されるんだろうね

250 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 21:31:57 ]
redmineに移行して忘れ去られていると見た。




251 名前:234 mailto:僕はバグです [2009/03/11(水) 21:35:44 ]
じゃあ誰か報告してあげなよ。

俺はたいして英語が書けない読めない喋れない聞き取れない
現役高校生だし、当然職業プログラマでもないからやめておくが・・・

252 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 21:37:42 ]
日本語でおk
なんだが。



253 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 21:56:37 ]
報告してあげた。
redmine.ruby-lang.org/issues/show/1270

254 名前:234 mailto:僕はバグです [2009/03/11(水) 22:03:30 ]
なんだよー、日本語でいいのかよ。

だったら実名で報告しておけばよかったなー。
そんで俺が有名になって、クラスの女の子たちから告白されて
スーパーハカーになっちゃったりして、んでもって将来かわいいお嫁さんと結婚したら
君たちは嫉妬しちゃって鳴門大橋から飛び降りることだろうw

まあとにかく>>253さんありがとう!

255 名前:234 mailto:僕はバグです [2009/03/11(水) 22:04:38 ]
# FIXME

256 名前:デフォルトの名無しさん [2009/03/11(水) 22:12:29 ]
フィールドがタブ区切りで、行区切りがCrのデータを処理するときなんですが,
csv = CSV::open('data.csv', 'r')
csv.each{|r|レコード処理その1}
としたあと
csv.each{|r|レコード処理その2}
をしたくてもデータがnilとなっていて,うまく処理できません。
今は,改めてcsv = CSV::open('data.csv', 'r')で再オープンしているのですが
io.rewindみたいなもっといい方法はないですか?
処理の都合上csv.each{|r|レコード処理その1;レコード処理その2}はできません。
(ようするに最後のレコードまでいって,もう一度はじめからの処理が必要)

257 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 22:37:52 ]
open_readerの定義を参考に
CSV::Reader.parse(io, fs, rs) do end
io.rewind
CSV::Reader.parse(io, fs, rs) do end
とでもやるしかなさそうな気がするが、
CSV再オープンと大して変わらないかな。


258 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:08:07 ]
fastercsvのソースにはrewindがあったけどどう使うかは知らん

259 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 02:32:42 ]
class C
 def initialize
  @n = 50
 end
 def n
  return @n
 end
 def n=(n)
  @n += n - self.n
 end
end
c = C.new
b = c
b.n = 20
p c.n

これを実行すると20と表示されます

c = 50
b = c
b = 20
p c

これは50と表示されます
ここの辺り、それぞれの結果に差が出る理由などが漠然としか理解できていないのですが
上手く解説してるサイト等ご存知でしたら教えてください

260 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 02:54:22 ]
# C インスタンスを生成し c に代入
c = C.new
# c のインスタンスに b からもアクセス出来るようにする
b = c
# b(==c) の内部変数に 20 を代入する
b.n = 20
# b と c は同じオブジェクト(C インスタンス)

# 変数 c に 50 を代入 : b=nil c=50
c = 50
# 変数 b に c の値を代入 : b=50 c=50
b = c
# 変数 b に 20 を代入 : b=20 c=50
b = 20
# b と c は別のオブジェクト(20 : 50)



261 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 03:00:52 ]
センスって都合のいい言葉だな。
でもそのセンス大事な言語仕様なら、もうちょっと厳密に固めた方がいいと思う。今の再利用の際に謎解きが必要な仕様では、オブジェクト指向のメリットである再利用が阻害されるだけ。

262 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 04:16:25 ]
>>261
《厳密》に動作してるよ
お前のプライドを満たすために言語があるわけじゃない

263 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 04:24:33 ]
Javaでスパゲティが作れてしまった時点で人類は認識を改めなければならなかった
プログラミング言語側に責任を負わせるのは誤りなのだと

264 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 08:21:55 ]
>>263
どんだけ、敷居を下げた言語つくってもスパゲッティコードは量産されるの法則

265 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 08:54:49 ]
質問があります。
RubyでExcelのスプレッドシートを扱う簡単なライブラリでオススメはないでしょうか?
通常はOLE直で使うものなんでしょうか?

266 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 09:10:11 ]
>>263
頭の中がスパゲッティなら出てくるものもスパゲッティw
これ真理

267 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 10:07:20 ]
>>265
gem install spreadsheet-excel


268 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 10:11:05 ]
>>259
どういう動作をするほうがいいと思った?

269 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 10:32:03 ]
やっぱプログラマも免許制にした方がいいな。
質の悪いプログラマがいつまでも駆逐できない。


270 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 10:32:13 ]
>>267
License: GNU General Public License (GPL) version 3 (´・ω・`)

納品する時に rubyscript2exe で固めたらGPLの影響受けますよね、やっぱ・・・

ライセンス問題なさそうなのなら、これでいけるかな・・・
RAA - spreadsheet
raa.ruby-lang.org/project/spreadsheet/




271 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 23:55:38 ]
>>270
ソース公開しちゃいなよw

272 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 00:29:08 ]
ソース公開したらパクって一儲けします。

273 名前:デフォルトの名無しさん [2009/03/13(金) 03:07:30 ]
gem の再インストールをしようと思ってるんですが、今までgemでインストールしたライブラリを全部一気に削除するにはどうすればいいでしょうか?
やはり gem uninstall で一個ずつ手作業?それともgemのディレクトリ削除するだけでgemでインストールしたライブラリも全部削除したことになるのでしょうか?

274 名前:デフォルトの名無しさん [2009/03/13(金) 04:23:04 ]
d.hatena.ne.jp/kitamomonga/20080402/ruby_www_mechanize_form
このページの最初のサンプルを参考に
agent.get('search.yahoo.co.jp/')
の所を
agent.get('www.google.co.jp/')
にしてみら
undefined method `field_with' for nil:NilClass (NoMethodError)
というエラーが出ました、何が原因なでしょうか?

275 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 04:36:20 ]
>>274
参照ページの処理がYahooのページ構造に依存しているだけ
googleに対応させたければGoogleのページ構造に合わせて
スクリプトを修正する必要がある

276 名前:デフォルトの名無しさん [2009/03/13(金) 04:40:55 ]
>>275
具体的にはどこをどうすればいいのでしょうか。
取りあえず、いろいろ試しているんですが分かりません。

277 名前:276 [2009/03/13(金) 05:43:48 ]
すみません自己解決です、今のところ理由は不明ですが
agent.user_agent_alias = 'Windows IE 7'
を入れてたら動きました、これから理由を探っていきます
ありがとうございました。

278 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 07:50:36 ]
>>273
gem list | awk '{print $1}' | xargs sudo gem uninstall -a
とかどうだろう
gem のディレクトリを消しても /usr/local/bin とかにスクリプトファイルがインストールされているからね。rakeとか。

279 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 16:24:22 ]
railsなどrubyで書かれたソースを読むのに便利なツールはないでしょうか?
Cでいうところのgloboe,phpのphpxrefのようなツールがあると最高です。

280 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 16:36:49 ]
ソース読んだほうが早いということになってる



281 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 16:39:19 ]
Railsは「Rubyではない」ので、Rubyとは別に考えてください

282 名前:276 [2009/03/13(金) 16:53:46 ]
たびたびすみません
require 'rubygems'
require 'mechanize'
require 'nokogiri'
require 'kconv'
agent = WWW::Mechanize.new
agent.user_agent_alias = 'Windows IE 7'
page=agent.get(URI.parse('www.google.co.jp/'))
puts page.forms[0]

だときちんとformが表示されるのですがアドレスを
be.2ch.net/test/login.php
にするとnilといわれます、該当ページのbodyを表示しても
きちんとformは存在しているのでどこかがまずいはずなのですが
分かりません、よろしくお願いします。

283 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 17:28:52 ]
>>282
あはは、libxml2 は来るなって HTML に書いてある
これは libxml2 がパースできないタイプの HTML の書き方だ

自前で POST するか、あるいは Hpricot を使う

require 'rubygems'
require 'mechanize'
require 'hpricot'
require 'kconv'
WWW::Mechanize.html_parser = Hpricot
agent = WWW::Mechanize.new
agent.user_agent_alias = 'Windows IE 7'
uri = URI.parse('be.2ch.net/test/login.php')
agent.get(uri).form_with(:action =>'/test/login.php'){|f|
f.set_fields('m' => ['mail_address'], 'p' => ['password'])
}.click_button

284 名前:276 [2009/03/13(金) 18:33:26 ]
>>283
ありがとうございます。
まだ良く理解できていないと思いますが精進します。

285 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 19:13:24 ]
わーい、Mechanize の質問だ

>>283
残念惜しいこれパースできます

>>282
で、はっきり言うと WWW::Mechanize 0.9.2 のバグです(Nokogiri は悪くないです)
Mechanize 内部で UTF-8 に強制変換している可能性をすっかり忘れて、
元の HTML の文字エンコーディングを Nokogiri に渡しています
日本語のサイトで Mechanize を使う場合は、しばらく

agent.get(uri){|p| p.encoding = "utf-8"}

というように、HTML のエンコーディングを UTF-8 に強制指定してください
(irb でも動作するので、この書き方がいちばん楽です)

UTF-8 に変換されない組み合わせというのも確かにあるんですが、
こんなのいちいち覚えるのは無駄なので、とりあえず UTF-8 で試して、失敗したら変更するようにしましょう
Nokogiri との組み合わせを見捨てて、 >>283 のように Hpricot を使うようにしてももろちん構いません

286 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 19:23:50 ]
Emacsでruby-modeを使うと、if や do を入力すると勝手に end が入力されてうっとおしいのですが
これをやめさせるにはどうしたらいいですか。
do のあとにスペースをいれるとendが入るのに、doの直後で改行するとendが入らないとか
中途半端な仕様なのでやめたいです。

287 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 19:27:34 ]
>>286
それは ruby-electric の担当であって ruby-mode の仕事じゃないんじゃね

(add-hook 'ruby-mode-hook
'(lambda () (ruby-electric-mode nil)))

これでどう
ruby-electric 自体をやめてしまってもいい

288 名前:276 [2009/03/13(金) 20:09:05 ]
>>285
ありがとうございます。
>WWW::Mechanize 0.9.2 のバグです
最初に自分で調べていたらそれっぽいなと思いましたがよく分からなかったので放棄してました
有名なライブラリでもバグとかあるんですね、分からずに使ってる身としては早く直って欲しいです。

289 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 20:26:23 ]
正直なとこ、これに関しては直る可能性はかなり薄いです
開発版で直る機会があったんですが、あっさりエンバグして 0.9.2 になりました
日本語サイトの一般的な利用法に関する知識を持った(そして英語で議論できる)人がいないんです

290 名前:286 mailto:sage [2009/03/14(土) 00:37:13 ]
>>287
やってみたんですけど変化なしでした。
デフォルトでruby-mode-hook に (ruby-electric-mode t) が設定されているようで、
自分の設定よりもデフォルトの設定のほうが優先されているようです。
(setq ruby-mode-hook
(append ruby-mode-hook '(lambda () (ruby-electric-mode)))
としたほうがいいでしょうか。




291 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 00:59:26 ]
>>286
ruby-electric-mode の方にその手のことを制御する変数があったと思うけど

(add-hook 'ruby-mode-hook
(lambda()
(inf-ruby-keys)
(require 'ruby-electric)
(ruby-electric-mode t)
;; (setq ruby-electric-newline-before-closing-bracket t)
))

この設定例における変数 ruby-electric-newline-before-closing-bracket に
類するものが他にもあるはずなのでスクリプトを調べてみるべし

292 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 01:45:47 ]
質問です。RubyにはSQLiteなどが、標準搭載されることはないのでしょうか?
レンタルサーバーや、自分以外の管理の場合に不便です。

293 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 02:16:37 ]
要望の説得力によってはありえるかもしれない。
過去にreadlineやopensslのラッパーが標準付属になったりしたわけだし。




294 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 04:54:59 ]
松本尊師が拒否したら無理だろうな。GUIのように。

295 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 10:09:53 ]
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/24721
最重要はコレ * メンテナは確保できるか

296 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 10:54:46 ]
TMail でいいじゃん

297 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 11:42:35 ]
>>296
脊髄反射乙

298 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 12:08:23 ]
質問

クラスファイルの中に、いい例が思いつかないんですがたとえば

%w(hoge hage mage).each do |param|
eval("def get_#{param}; @#{param}; end")
eval("def set_#{param}=(v); @#{param}=v; end")
end

のように、全く動的でない固定の5個くらいの文字列から20個くらいメソッドを作る処理を書くのって無駄ですよね?
メソッドを書くスクリプトの処理結果をベタ張りするべきですよね?
RDocにも拾ってもらえないしいいとこなしですよね?

299 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 12:24:43 ]
そいや、sqlite3-rubyは最近開発者が燃え尽きた(burned out)ような。
weblog.jamisbuck.org/2009/2/25/net-ssh-capistrano-and-saying-goodbye

300 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 13:25:12 ]
>>298
それが規約や共通処理的なものであるならプロジェクトに
よっては意味があるかもしれない
元の処理が何故そう書かれたのかを確認すればいいだけの話じゃないの?



301 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 14:16:13 ]
>>294
少しはPythonを見習って欲しいな

>>299
丁度いい機会だから、SQLiteくらいは組み込んで欲しいよな
誰がメンテしてくれるのかは、知らないが・・・

Railsとかどうなるんだろう?最悪引き取ってくれるのかな?

302 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 14:37:40 ]
JRubyでJavaのオブジェクトを明示的にキャストするにはどうしたらいいんでしょうか?
具体的にはGraphics型をGraphics2D型にダウンキャストしたいです。

303 名前:302 mailto:sage [2009/03/14(土) 16:13:30 ]
すみません、自己解決しました。
JRubyでは内部的にSunGraphics2D型になっているようでした。

#僕自身は解決したんですが、JRubyの型指定ってどういう風にやってるんですかね。
#Javaは素人なんですが、明示的に型指定できなくても(Java側で)困る状況にならないってことなのかな。

それと、JRubyの質問ってここでしても良かったんでしょうか?
スレ違いだったなら申し訳ないです。


304 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 17:36:53 ]
Class ClassA
def initialize
b = ClassB.new
c = ClassC.new
end
end

Class ClassD
def initialize
e = ClassE.new
c = ClassC.new
end
end

a = ClassA.new
d = ClassD.new

if (何か)
n = a.b
else
n = d.b
end


このような状態で、nを使ってcにアクセスするにはどうすればよいでしょうか?

305 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 17:43:00 ]
ミスとインデントを修正しました。すみません

Class ClassA
 def initialize
  b = ClassB.new
  c = ClassC.new
 end
end

Class ClassD
 def initialize
  e = ClassE.new
  c = ClassC.new
 end
end

a = ClassA.new
d = ClassD.new

if (何か)
 n = a.b
else
 n = d.e
end


306 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 17:48:24 ]
>>305
一般的に、a や d を持って来るべき

hoge(v)
# v は n であり、n から c を呼び出して何かする
end
hoge(n)

ではなく

hoge(v, n)
 …
end
hoge(a, n) または hoge(b, n)

または

hoge(v)
 # n = v.b または n = v.e
 …
end
hoge(a) または hoge(b)

という構造にすることを真っ先に考えるべき

307 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 18:10:59 ]
私もそれがベストだとは思うのですが…
>>305から
c = ClassC.new を行っている2行を除いたのが元の状態で
それに手を加えて c = ClassC.new の追加と、nからの参照をしたい、という状況です

他が色々出来上がってしまっているので
hoge(v)をhoge(v, n)に修正するのは1から作り直すのと同じような状態です


308 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 18:22:03 ]
あまりスマートではないけど、
Class[B,C,E]にルートオブジェクトを示す変数を入れて、
ルート側のinitializeで初期化するようにしたらどう?

309 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 18:25:40 ]
ありがとうございます。
ひとまずそれでやってみます。

310 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 18:26:17 ]
相互参照にする
b = a.b
c = b.a.c

クラス B E に C への参照を持たせる
c = a.b.c

可変引数を使う
def hoge(*args)
 case args.size
 when 1 ...
 when 2 ...



311 名前:デフォルトの名無しさん [2009/03/14(土) 19:28:50 ]
質問させてください。
以下のようなコードを書いたのですが、

File::open(ARGV[0], "r") { |f|
f.each {|line| print line }
}

このコードに
・このプログラムの実行時に引数がなかった場合(ARGV[0]がnilだった場合)に適切なエラーメッセージを標準入力に表示させる処理
・ファイルオープンに失敗した場合に適切なエラーメッセージを標準入力に表示させる処理
の二つを加えたいのですが、ruby的に一番スマートな書き方を教えていただきたいのです。
ifとかelseとかを多用するのはruby的には美しくないのかな?と・・・

ご教示頂けると嬉しいです。

312 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 19:31:21 ]
勝手にしろ

313 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 19:39:41 ]
> 標準入力に表示させる処理

かなり高難易度な気がする・・・

314 名前:デフォルトの名無しさん [2009/03/14(土) 19:40:17 ]
例外をキャッチキャッチキャッチして
スタンダードエラーアウトプットにプットプットプット!!!!

315 名前:311 [2009/03/14(土) 19:54:35 ]
すいません間違えました。標準出力です。

316 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 20:09:12 ]
>>312がFAではある

raise "引数を指定してください" unless ARGV[0]
begin
File::open(ARGV[0], "r") { |f|
f.each {|line| print line }
}
rescue Errno::ENOENT => ex
raise "#{ARGV[0]} が存在しません"
end

基本はこんなんだと思う
あとは好きに改造なり省略なりしれ

317 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 20:16:35 ]
あ、最初の例外は ArgumentError であるべきという話もあるが好きにしてくれ

raise(ArgumentError, "引数を指定してください") unless ARGV[0]

RuntimeError 以外の例外は「第三者がrescueするかどうか」でとりあえず決めていい
誰も rescue しない例外で自作例外クラスを作ったりするのは自己満足以外の何物でもない

318 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 23:47:02 ]
>>311程度の条件なら例外で振り分けることも出来る(おすすめはしない)
begin
 open(ARGV.fetch(0),'r') {|f| ... }
rescue IndexError # ARGV[0]がnil
 puts "引数を指定してください"
rescue # その他ファイル周辺の例外
 puts $!
end

rubyに限らずオブジェクト指向言語なら多態性を利用する事で
制御構造部分の記述を削減できるけど、311に適用出来る所はないね
普通にif文使って事前チェックをするのが正しいと思う

319 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 23:59:09 ]
>>311
コマンドライン引数の処理はoptparse使え、常考。
ttp://www.ruby-lang.org/ja/man/html/OptionParser.html

320 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 03:20:31 ]
折角だからWindowsXPに1.91を入れようと思っているんですが、
ワンクリックでインストールできるRubyとかないんでしょうか。
コンパイルとかできんし。



321 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 05:41:50 ]
>>320
ワンクリックとはいかないが1.9.1のバイナリならこの辺
www.artonx.org/data/asr/
www.garbagecollect.jp/ruby/mswin32/ja/download/release.html

322 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 07:00:27 ]
>>319
引数を受け取るだけの仕事にoptparseを持ち出すのはただの馬鹿

323 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 09:52:13 ]
>>321
どうもです。早速試してみます。楽しみ楽しみ。

324 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 12:57:21 ]
class G
 attr_accessor :a
 def initialize
  @a = []
  @m = M.new(@a)
  @a = [5]
 end
end

class M
 def initialize(a)
  @b = a
 end
 def output
  p @b
 end
end

g = G.new
g.m.output

このプログラムの結果は 5 ですよね?
その後 g.a を変えると output の結果も変わると思います
ところが g = G.new から g.m.output の間に
何をしているのかよくわからないんですが色々な処理が挟まっていて
g.a を変化させても(変化しているのに)結果が 5 のままになっています

間でどのような処理が行われている可能性があるんでしょうか?

325 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 13:02:41 ]
>>324
> このプログラムの結果は 5 ですよね?
rubytest.rb:20: undefined method `m' for #<G:0xb7c4e638 @m=#<M:0xb7c4e598 @b=[]>, @a=[5]> (NoMethodError)

空気を読んで G の attr_accessor に :m を追加した結果

[]



326 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 13:11:46 ]
簡略化したつもりが間違ってたみたいです
すみませんでした

どこがどうなってるんだろう…

327 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 13:11:49 ]
前回書こうと思って面倒になって消したんだが、Rubyの変数は名札だ
メソッドが普段直接参照してるのは、変数の名前ではなく、オブジェクトID
変数はオブジェクトIDをわかりやすく書き手とメソッドに伝える名札に過ぎない

  @a = []
  @m = M.new(@a)
  @a = [5]

は、
「@a が [] になって M.new の引数に渡されて、さらに [5] に変化した(ので M.newに渡したものも [5] になっている)」
と見るのではなく
「[] というオブジェクトを @a という名前で呼ぶ、
 @a という名前のついたオブジェクトを M.new に渡す、
 [5] という(先の [] とは別物の)オブジェクトを @a という名前で呼ぶ」
と見るのが正しい

ということで、やりたいことは

  @a = []
  @m = M.new(@a)
  @a.push(5)

とすればいい
これなら @a は最初から最後まで同じオブジェクトを指すことができる

328 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 13:21:22 ]
class G
def initialize
@a = []
p @a.object_id
@a.push(5)
p @a.object_id
@a = [5]
p @a.object_id
end
end
G.new

結果

-605095318 (最初)
-605095318 (同じ)
-605095348 (違う)

@a = で2度目の代入が行われた時点で、 1回目で [] だったオブジェクトを@a という名前で使うことはできない

329 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 13:22:18 ]
>>325>>327>>328
ありがとうございます
おかげで少し理解できてきました

>>324の @a = [5] はこっちに書くときのミスで実際は @a[0] = 5 でした
これなら出力も 5 になると思います
そして>>324の質問の答えは『@aの参照先が変わる処理が行われた』ですね

再び質問なんですが、@aの参照先が変わろうとも、常に@aと同じものを参照する変数を用意する事はできますか?

330 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 13:31:20 ]
変数とはデータを入れる箱である、というメタファーは Ruby では完全に誤りで誤解の元
箱ごと移動できそうに見えてしまうからね
オブジェクトが厳然と存在していて、それに補助的にぺたっとつくのが変数という名前のラベル

a = []
b = a
c = b
d = c

は、
「d の中に c があってその中に b が、 その中に a があってそれの中に [] という空の配列データが入ってる」
という状態ではなく
「配列オブジェクト [] に、変数名ラベルの a、b、c、d がぺたぺた貼られていてどの名前を使っても参照できる」
という状態

>>329
参照先が変わって困るような変数の場合はその名前を使い回してはいけない
オブジェクトには複数の変数名を持たせることができるから、適当な別名をつければどうとでもなるよ



331 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 13:38:24 ]
@a = 初期値
b = @a
@a = 別な値
p b #=> 初期値

> 参照先が変わって困るような変数の場合はその名前を使い回してはいけない
が正しいな
@a をあとで使うのなら、@c = 別な値 とでもすべき
本来のスクリプトでどういう構造になってるかにもよるから、別にいいんだが

332 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 13:38:36 ]
>>322
うるせー馬鹿
引数にオプション渡されたらどうするんだよハゲ
適切なエラーメッセージを出したいって言ってるだろう?
あと、vやhオプションを実装しろっていう暗黙の命令

333 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 13:41:21 ]
>>330>>331
わかりました
詳しい説明ありがとうございました

334 名前:デフォルトの名無しさん [2009/03/15(日) 13:41:59 ]
> このリファレンスマニュアルは、Ruby 1.9 に関して、言語仕様、組み込みライブラリ、
> 標準添付ライブラリのいずれにもまったく対応していません。信用してはいけません。

(´,_ゝ`)プッ

335 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 13:44:18 ]
>>334
文句あるならオフィシャルのマニュアル使って下さい

336 名前:デフォルトの名無しさん [2009/03/15(日) 13:48:58 ]
> 執筆者募集中

(´,_ゝ`)プッ

337 名前:デフォルトの名無しさん [2009/03/15(日) 15:06:30 ]
        ∧_∧
  (⌒⌒ヽ ( ・ω・)  あ、ワリ、屁こいちゃった
 (  プッ!! ゝ∪   )
  丶〜 '´  (___)__)

338 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 15:27:29 ]
1.9って思いきって名前変えれば良かったのにな。
ruby vista 1.0とか。

339 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 15:29:08 ]
それは 2.0 の役目です
1.9 シリーズはただの橋頭堡

340 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 16:40:53 ]
1.10は?



341 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 17:15:56 ]
>>339
橋頭堡というか里程標というか

342 名前:デフォルトの名無しさん [2009/03/15(日) 23:47:47 ]
誰か教えて

f(a,b) = a^b
但し a, b は実数 (実際は有限桁です)

を100桁ぐらいの精度で出したいんだけどどうすればいいですか?
bigdecimalとか使ってもうまくいかない

343 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 23:56:52 ]
「うまくいかない」なら「しかたがない」だろ

344 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 00:03:47 ]
まず自分がどうやって、
どううまくいかなかったか書かなきゃダメだろ

345 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 02:49:37 ]
そもそもその精度に意味が有るのか検証したほうが。
つ有効桁数

346 名前:デフォルトの名無しさん [2009/03/16(月) 07:14:52 ]
ちょっと解釈がわからないところがあるので質問させてください。

以下のようなコードを実行した場合

$KCODE = 'n'
print 'あいう'.match(/\W+/), "\n" #結果 => あいう
$KCODE = 's'
print 'あいう'.match(/\W+/), "\n" #結果 => nil

右のコメントにあるような結果になってしまうのですが
これはどういう事なんでしょうか?
マルチバイト文字を認識可能にすると
何故正規表現の「\W」が機能しなくなるのでしょうか?
$KCODE='n'の時に「\W」が機能しないという逆の状態なら納得できるのですが…

347 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 07:30:35 ]
>>346
\w の意味は? \W はその補集合だよな? な?

348 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 07:41:37 ]
>>347
やっと意味がわかりました。

文字コードを指定する事でマルチバイト文字も
「\W」の認識形式に含まれるという事ですね。
文字コードを指定した場合の「\W」は
「英数文字+マルチバイト文字『以外』の文字」という事になるのですね。
つまりそこに引っ掛かる文字は主に「記号」になると。

この認識でいいですか?

349 名前:訂正 mailto:sage [2009/03/16(月) 07:43:07 ]
× 「\W」の認識形式に含まれるという事ですね。
○ 「\w」の認識形式に含まれるという事ですね。

350 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 09:13:48 ]
>>342
1.23**4.56 => 2.5702023016193 <----これでは足りないという事なら
123**456 => (ry
↑の結果をMath.logを使って元の値を求める。



351 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 09:40:15 ]
>>348
\w は「単語構成文字」
何を単語を構成する文字とみなすかは文脈によって変わるってこと


352 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 09:45:01 ]
>>348
「詳説 正規表現」っていう本を読んでみるといいお

353 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 09:48:32 ]
irb> puts 'あいう'.tosjis.inspect
"\202\240\202\242\202\244"
irb> puts 'あいう'.tosjis.match(/\W/n).inspect
#<MatchData "\202">
irb> puts 'あいう'.tosjis.match(/\W/s).inspect
nil
irb> puts 'あいう'.tosjis.match(/\w/s).inspect
#<MatchData "\202\240">


354 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 09:57:02 ]
正規表現は関係なくて、日本語マルチバイト文字とはなんぞやという話だな

puts '表示'.tosjis.match(/\w/s).inspect
#<MatchData "\225\\">

355 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 17:15:40 ]
nitems って何の略ですか?

nil items?

356 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 17:18:06 ]
number of items だと思う。
ていうかどういう場所に現れたのかわからないと答えようがない。

357 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 17:30:33 ]
Array#nitems なら Number of ITEMS で項目数
Ruby 1.9 では無くなったメソッドだ
nitem という言葉自体はプログラミングでは一般的な略語で項目数を表す

358 名前:355 mailto:sage [2009/03/16(月) 17:42:13 ]
>>356-357
ありがと!
そうか、1.9 ではなくなったんですね。

359 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 18:59:04 ]
こんなとき、nitem いいですか。

360 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 19:01:24 ]
好きなだけ nitem いいよ



361 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 20:15:18 ]
ここは nitem 持っとかないと

362 名前:311 [2009/03/16(月) 20:26:10 ]
レスありがとうございます。参考にさせて頂きます。m(_ _)m

363 名前:じゃなくて311 [2009/03/16(月) 20:27:51 ]
レスありがとうございます。参考にさせて頂きます。m(_ _)m


364 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 16:11:43 ]
少しお聞きします。
文字列が空文字列(nilではない)かどうか?を調べる一般的な方法(定石、慣例)というのはないのでしょうか?

例:
s = ""
do_hoge if s != ""

こんなんでいいの?if s だと駄目みたいだし。(""はRubyではfalseにならない)

365 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 16:19:25 ]
>>364
String#empty? ってのがある。

366 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 16:22:13 ]
通常の処理 unless str.empty?

if str.empty? then 何かエラー処理 end

というのがイディオム的ではある

367 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 16:50:20 ]
str が nil のときでも str.empty? は呼べますか?

368 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 16:52:41 ]
$ ruby -e 'str = nil ; str.empty?'
-e:1: undefined method `empty?' for nil:NilClass (NoMethodError)

369 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 16:54:26 ]
>>367
あ、そうか
str が nil である可能性が幾ばくかでもある場合は

str && !str.empty?

とか書く
途端にめんどくさい感じになって、俺はあまり好きではない

370 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 16:58:55 ]
>>369
「nil を empty と同一視したいとき」だな
nil は 0 や "" と違う扱いを受けるべき



というのが理想論



371 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 17:04:16 ]
どうせ俺専用スクリプトだ!てことで

class NilClass
def empty?
true
end
end

とかって邪道?

372 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 17:08:57 ]
>>371
駄目

373 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 17:17:19 ]
RailsならObject#blank?

374 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 17:20:16 ]
組み込みクラスの拡張は、既存の動作に影響を及ぼさない限りにおいてのみ是
str.empty? が NoMethodError で例外を出して終了することを前提にしているライブラリがうまく動作しなくなるから、
>>371は「やってはならない」

というか、is_empty? とかそういう関数的メソッドを定義したほうがなんぼか素直だと思われる

375 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 17:28:09 ]
>>369
なんかそれキモイw

str.nil? or str.empty?

376 名前:371 mailto:sage [2009/03/17(火) 17:46:47 ]
なるほど、ためになりました。

377 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 21:41:00 ]
Object#tryは正式採用されるだろうか。


378 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 00:49:36 ]
nil には nil? があって
すべての object にも nil? があるのですね

379 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 00:57:31 ]
NilClassを含む全ての基底クラスであるObjectのメソッドだしねぇ

380 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 01:01:29 ]
と書いてふと思った。
「一切の例外なくObjectを継承してる」と断言していいんだっけ?



381 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 01:03:05 ]
つ BasicObject (1.9)


382 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 01:03:43 ]
BasicObjectが出来たので駄目

383 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 01:05:58 ]
>>380
1.8ではOK

384 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 01:15:15 ]
なんぞそれw
調べてみるサンクス

385 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 01:33:52 ]
doc.loveruby.net/refm/api/view/class/BasicObject
説明としてはこのへんかね。



386 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 03:03:54 ]
なんでそんなひどいことしたの

387 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 03:07:17 ]
>>386
>通常のクラスは Object またはその他の適切なクラスから派生すべきです。
>真に必要な場合にだけ BasicObject から派生してください。

基本的に使うなってことだから大丈夫

388 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 04:30:12 ]
でもあるから使っちゃえで、どうにも成らなくなる気がする。

389 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 04:40:02 ]
ActiveSupportあたりがメソッドもりもり追加しそう

390 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 04:41:17 ]
Objectに追加すべき



391 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 04:42:07 ]
数年後にSuperBaseObjectが出来るんですねわかります

392 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 08:15:56 ]
というか、わざわざBasicObjectを選んでメソッドを追加するメリットは特にない

393 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 08:19:36 ]
BasicObjectは、Objectに定義されているメソッドがundefでも動作に邪魔だという場合に使う

394 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 08:46:27 ]
BasicObject継承してなにかするのは面倒だから
気軽に使えるモノではない。

当たり前だが、インスタンス作るだけで
irb> BasicObject.new
NoMethodError: undefined method `inspect' for #<BasicObject 0x3e40cc>
なんだぜ。


395 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 08:57:41 ]
>>394
それは irb で実行しているからだ

396 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 09:02:23 ]
irbだと最後に評価した式をinspectするから、
irb> x = BasicObject.new; nil
=> nil
とかすればいいな。

まあ、作っただけじゃHashのキーにすら出来ないんだが。


397 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 09:04:09 ]
というかメソッドを追加せずに BasicObject.new するというシチュエーション自体が無茶設定

398 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 09:27:56 ]
だから簡単には使えないよ、ていう話なんでしょ?


399 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 09:41:31 ]
メソッド定義すれば普通に使える
Railsにお墨付き与えたようでちょっとやーな感じだな

400 名前:デフォルトの名無しさん [2009/03/18(水) 09:50:45 ]
使わないものをなんで作っちゃったんだろう



401 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 10:24:12 ]
delegateとかその手のやつのため

402 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 10:50:09 ]
むしろRailsがBasicObjectを直接継承したオレクラスを使いまくってくれれば、
Objectを継承してるかどうかでRails由来かどうか判定できて嬉しいかも。

403 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 10:54:35 ]
なんだ隔離Objectなのか

404 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 11:01:06 ]
どうせならRailsObjectにしちゃえば良かったのにね。
他にも追従するアプリが出てくるかも。

405 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 11:11:27 ]
Objectは結構いろんなメソッドに自分で反応しちゃうんで、
例えば、「どんなメソッドも全部リモートに投げるデレゲート」を作るとか、
そういう時に不便、とかそういう理由で作られた。

ttp://www.rubyist.net/~matz/20050406.html#p02
ttp://www.rubyist.net/~matz/20050407.html#p02
ttp://www.rubyist.net/~matz/20050413.html#p03

406 名前:364 mailto:sage [2009/03/18(水) 11:13:04 ]
ありがとうございます。理解が深まります。

>>365-366
String#empty?ってあるんですね!
irbで試した時、ないよーって言われたからないものだと思ってた。多分スペルミスだ・・・

>>375-378
nil判定はいつも
hoge if nil_obj
と言う風にやってたよ。nil_obj.nil?使うようにするよ

407 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 11:54:24 ]
いや、if の条件にオブジェクト1個どっかんと置くのは有効だし一般的だ
複合条件で「nil かどうか」を調べたいときには nil? を使うとわかりやすいことがあるというだけの話

408 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 11:56:56 ]
>>374
>str.empty? が NoMethodError で例外を出して終了することを前提にしているライブラリがうまく動作しなくなるから、

こんな書き方しているライブラリのほうがまずいだろ


409 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 12:04:35 ]
rdoc が Hash#method_missing を定義したせいで net/imap がうまく動かなくなったとか色々あるじゃん

410 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 14:06:27 ]
rdocの分際でそんなもん定義したのかよ。
というか、なんでrdocのせいでnet/imapに影響が出るんだ?



411 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 14:36:50 ]
>>409
method_missingのことなんか知らねーよ
empty?の例をだせよ

412 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 14:40:37 ]
Rubyつながりじゃね?

413 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 14:41:36 ]
method_missing を定義された場合にトラップできなくなる例外の第一番目は NoMethodError

414 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 15:08:04 ]
ふと思ったんだが、オープンクラスを利用したクラス拡張って
厳密にはリスコフの置換原則に違反してる?
method_missingその他の振る舞いを微妙に変えちゃうので

415 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 15:18:35 ]
>>414
オープンクラス云々ではなく、method_missingを使ったクラスの
サブクラスが(定義時点だろうと)メソッドを増やす時点で
反してるんだと思う。

なんつーかmethod_missingって奥の手の一つでしょ?

416 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 15:24:44 ]
言語べったりの特殊機能
OOPとかそういうのとは別の次元の存在

417 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 16:01:36 ]
理想と現実の乖離始まったか。

418 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:10:36 ]
どこのObjective-C

419 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 03:14:22 ]
rubyもメモリリーク地獄に陥るのか。

420 名前:デフォルトの名無しさん [2009/03/19(木) 03:26:48 ]
シンボルの存在意義がイマイチわかりません。
ハッシュのキーにシンボル使うと速度出るんですか?



421 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 03:41:17 ]
ハッシュ値の生成式の違いから、相対的には早くなるかもしれんが、
速度目的で使うことはないと思うよ。
lispとかやってりゃシンボルのほうが自然だと思えるケースも理解できる
と思う。


422 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 04:00:55 ]
例えば :hello というシンボルはプログラム内で唯一のインスタンスになる
同じ内容の文字列は複数生成されるけど、シンボルはされない

def put_str_id ; puts 'hello'.__id__ ; end
def put_sym_id ; puts :hello.__id__ ; end
3.times { put_str_id }
#=> バラバラの数値が出力される == 呼ばれる度にインスタンス生成
3.times { put_sym_id }
#=> 同じ値が出力される == 常に同一のインスタンス

記述される場所が違っても同一のインスタンスが使われるので
メモリ消費が少ない、インスタンス生成コストが無い、という利点はある

423 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 04:12:05 ]
× インスタンス生成コストが無い
◯ 初回以外インスタンス生成コストが無い

424 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 04:37:35 ]
シンボルだとエディターの色分けで、文字列と別色になって便利だから使ってる

425 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 05:54:06 ]
Symbol って Fixnum と同じで即値じゃなかったっけ?
オブジェクトのための構造体をヒープに割り当てたりとかはしないはずなので
文字列より生成コストは低いと思うよ

評価される度に新しいインスタンスを生成する文字列リテラルより
ほんちょっと精神衛生にもよい気がする

426 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 06:01:14 ]
シンボルとは何か
i.loveruby.net/ja/rhg/book/object.html

今でも通用するのか知らんけどw

427 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 09:19:51 ]
>>420
・Fixnumと同じく即値なので、生成がきわめて軽い
・書くのが楽

ただし濫用すると「あれここStringだっけSymbolだっけ」という混乱が発生する諸刃の剣

428 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 09:23:03 ]
で、とりあえずメソッドの頭で to_sym と

429 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 10:13:37 ]
Symbolに数値を割り当てることは可能ですか?

430 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 10:16:23 ]
irbでやってみれ



431 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 10:57:35 ]
>>420
Yugui著『初めてのRuby』p.75より
「文字列同士は、内容が同じであっても一般には同一のオブジェクトとは限らない」
「シンボルは、内容が同値であれば必ず同一のオブジェクト」
「シンボル同士は文字列同士に比べて高速に同値生を判定できます」


432 名前:431 mailto:sage [2009/03/19(木) 10:58:12 ]
>>431
同値生→同値性

433 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 11:01:32 ]
勉強になった

434 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 11:07:04 ]
ただし、シンボルの元となった文字列はずっとメモリ中に残るので、
調子に乗って長大な文字列をばんばんシンボル化すると
えらいことになる。

435 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 11:21:10 ]
というか、文字列の代わりにシンボルを使うことはない
シンボルは、シンボルとしての用途を外れることはない
ハッシュ引数のキーとか、
{:title=>"タイトル1", :author=>"著者1", :isbn=>"ISBN1"} というデータがどっさり入ってる配列とか

to_s や to_sym を使う必要がないような場所、というのが目安なんじゃないかと思う

436 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 12:02:17 ]
p :hoge


437 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 12:12:35 ]
個人的にはスクリプト内部で完結して、かつStringとしての性質が
不要な時に使ってる。

Cなんかで定数を列挙しておいて、コード上では名前だけど
実装的にはその数値で処理を行うような場面がSymbolの用途まんまだと思う。

438 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 12:13:26 ]
個人的な判断の仕方ね。
同じような使い方をしてる人は多いっていうかそれ以外はまず見ない。

439 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 12:19:47 ]
なぜシンボルなのかを聞かれてメモリー上の効率が云々言ってたらプギャーしていい

440 名前:420 [2009/03/19(木) 14:07:41 ]
皆様ありがとうございました。
とても勉強になりました。



441 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 15:32:04 ]
>>429
Symbolがそもそも数値なのだが

442 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 15:53:05 ]
ユーザーがシンボルと文字列、どちらを渡してもいいように
内部では to_sym が俺のジャスティス

443 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 16:37:24 ]
>>441
Symbol が数値なのはわかりますが
:fuga という Symbol があったとして
それに 5 を割り当てることは出来ますか?
という意味ですよ

>>437
任意の数値を割り当てられる訳ではないから
>コード上では名前だけど実装的にはその数値で処理を行うような場面
ではあるけど列挙型やマクロと完全に同一視は出来ない
また違ったものでしょう

444 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 16:40:29 ]
>>443
シンボルはただのオブジェクトだぞ
それは "str" が 5 になりますか、という質問と同じだ

445 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 16:47:59 ]
10 / 3
10.div 3
の結果に絶望した

446 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 16:52:17 ]
>>445
Integer のメソッドの返り値が Integer であることに何の不整合があろうか、いや、ない


直感的でないことには異論を待たないが

447 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 16:55:09 ]
self と引数の両方を自動で Float にして計算するメソッドとかがあってもいいのにな〜とは思わなくもなくもない

448 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 16:56:00 ]
>>444
10 に 5 を割り当てられますか? の方がニュアンス的には近いとオモ

>>443
> 列挙型やマクロと完全に同一視は出来ない

まあ、割り当てた値を使ってビット演算したりする場合はそうだろうけど、
単に他の値と区別できたらいいという局面ではシンボルがラクだろうな

449 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 16:56:18 ]
>>443
だからスクリプト内部で完結する場合って言ってるじゃんw


450 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 16:59:46 ]
>>445
その結果がIntegerじゃなかったら破綻するプログラムもいっぱいあるだろう

>>447
fdiv とか fmod とか?



451 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 17:31:42 ]
>>443のわかってないっぷりにワロタw

452 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 17:48:17 ]
何が割り当てられるか分からないのに
何かを割り当ててどうこうしようという発想が馬鹿ぽい

453 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 18:03:17 ]
OOP自体、メモリの使用効率考えたら負け。

454 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 18:06:34 ]
んなこたない

455 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 18:58:53 ]
メモリの使用効率なんかどうでもいい
 ↓
スラッシング多発
 ↓
クソプログラム

456 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 19:33:14 ]
×OOP自体、メモリの使用効率考えたら負け。
○Rubyでメモリ効率や実行効率を考えると空しくなる

457 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 19:33:31 ]
正規表現を外の設定ファイルに出す、うまいソリューション(笑)はありませんか?

今はyamlで、

hage_check_pattern: /hogemage/i

と書いて、

yaml = YAML.load("my_settings.yml")
hage_check_pattern = eval(yaml["hage_check_pattern"])

としているのですが、evalるのがちょっと不安です。
外のファイルは外からいじられない前提なので問題ないっちゃーないんですが、もう少し安心な方法がないかと思いまして。

458 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 19:35:02 ]
そうは言ってもシンボルはGCされないので,
リテラル以外でシンボル作るのは怖いなあ

459 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 19:36:44 ]
>>457
そもそも外部入力は一律で信用できない
外部ファイルを読み込むと決めた時点で、不安とか言っちゃ駄目

460 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 19:38:13 ]
>>457
ためしに 正規表現リテラルをto_yamlしてみるといいよ。




461 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 19:39:02 ]
お掃除必須なほどシンボル使うってどんなプログラムだよ

462 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 19:48:05 ]
>>457
to_yamlはやってもらうとして、別解としてはMarshal(PStore)とか

463 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 19:48:56 ]
>>457
Regexp.new(yaml["hage_check_pattern"]) かな
正規表現に限定できるだけ、evalよりは安全

464 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 19:49:49 ]
>>462
エディタで編集できないと駄目なんだと思う
というか、そうでなければ正規表現を書き出す理由がない

465 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 19:57:25 ]
>>464
すまん、設定ファイルかw

>外のファイルは外からいじられない前提なので
「スクリプトの外」・・・自分もいじらないんだと解釈してた


466 名前:デフォルトの名無しさん [2009/03/19(木) 21:29:01 ]
Python の re.compile() に相当するメソッドはありますか?

467 名前:466 [2009/03/19(木) 21:31:26 ]
自己解決しました。

468 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 00:15:26 ]
Rubyでothelloをつくりたいのですが
何から始めればよいでしょう

469 名前:デフォルトの名無しさん [2009/03/21(土) 00:18:07 ]
>>468
まず僕とバトルしませんか?

470 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 00:24:27 ]
>>468
コンピュータとの対戦なのか、対人戦なのか。

コンピュータ戦ならアルゴリズムの本。
対人戦ならネットワークの本。
言語は問わない。

画面をどう作るかみたいな話は後でいい。




471 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 00:57:00 ]
人対人のネットワーク戦にしたらいい
思考する部分は作らなくて良い

472 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 00:59:03 ]
>>468
作りたいものがオセロってはっきり決まってるんだから、画面から入るってのも一つの方法だとは思う。
例えば、
 1.盤面の状態保持
 2.出力
 3.入力と、それによる盤面操作。
の順番で、「形だけ」つくってイメージをするとか。

ここまではそれがオセロでも将棋でも対して変わらないけどな。
また、vs人間でもvsコンピュータでも変わらない。
んでゲームフローとしての入力手番のループとか、ルールに従った入力チェックや盤面操作処理、勝利条件の判定などを後付け。
最後に入力方法や出力や、やりたければコンピュータの思考ルーチンに凝りまくって完成、でいいのでは。

とりあえず、できる所からステップを踏んでやっていくのがいいかと。
各ステップごとにいろんな手法があるだろうし、それを調べ考えるのが楽しいんじゃないかと思う。
そこまで行って初めて、Rubyに関する質問も出てくるだろうしなw

473 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:08:40 ]
ttp://www.panda21.com/game/panda_othello.html
画面はここのママパンダみたいなかわいいのにしたいです

474 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:18:03 ]
本人なのか本気なのかもよくわからんが、とりあえずゲーム部分は最初は文字で作れ
●と○と でなんとかなる

475 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:18:56 ]
>>473
アプレットでGUIかよw どこまでがネタなのかわからんw
とりあえず、

 A B C D E F G H
1++++++++
2++++++++
3++++++++
4+++○●+++
5+++●○+++
6++++++++
7++++++++
8++++++++
→ Black ? : C4_

こんなのから始めれwww

476 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:21:58 ]
+の交点に石を置くイメージはなんか違和感がありますね

477 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:23:02 ]
>>476
お前プログラミング向いてない

478 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:23:14 ]
喧嘩売られてるよママン;o;

479 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:28:11 ]
>>476
必要は発明のマザー、という格言があってだな

480 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:30:16 ]
>>477
うん、多分駄目だろうね…



481 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:37:47 ]
おまえらかかってこいや〜!

 A B C D E F G H
1++++++++
2++++++++
3++++++++
4+++○●+++
5+++●●+++
6++++●+++
7++++++++
8++++++++

482 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:37:56 ]
RubyはGUIと処理速度がネックだからオセロは向かないな。
というのはさておき、あっちのスレでも言われてるように475的にまずはテキスト使った簡単な表示で
オセロを作ってからグラフィック使ったものに作りかえるという手順でやればいい。
具体的なサンプルコードを含めて手取り足取りというのを期待しているなら参考文献はないに等しい。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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