1 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 03:34:28 ] オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。 Ruby Home Page www.ruby-lang.org/ja/ = 前スレ Rubyについて Part 33 pc11.2ch.net/test/read.cgi/tech/1223709050/ 過去スレ・関連スレは >>2-
29 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 15:14:09 ] この時期にピッケル本は控えたほうがいいんでは すくじゃないだろうけど、1.9対応の第三版が控えてる まあ翻訳に半年かそこらはかかるって担当の人は言ってたけど
30 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 16:08:18 ] >>29 危なかった、ピッケルやめときます 半年は長いのでとりあえずジュンク堂でオライリーとかあさってみます
31 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 16:08:28 ] >>29 翻訳に半年かかるって事だと 英語の本が春頃出たとしたら翻訳した本は年末か年明けになるの?
32 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 16:11:58 ] >>30 リファレンス嫁
33 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 16:24:38 ] >>32 オフラインで読みたい...小説感覚で ライブラリ周りはwebにたよるけど
34 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 16:57:48 ] >>30 1.9は出たばっかりでまだまだ初心者にはお勧めできない。 どうせしばらくは1.8の開発も続くし、ピッケル本でも問題ないよ。 何事も「今始める」のがやっぱ大事だよ
35 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:09:21 ] RubyのWindows用のバイナリが色んな種類出ているのはMatzんの陰謀だと思う
36 名前:デフォルトの名無しさん [2009/02/04(水) 18:11:49 ] >>24 この本よかったよ ttp://www.amazon.co.jp/dp/4844317210 古いけど
37 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:35:22 ] 勘違いしてました Mingw版でもmsvcrt-ruby191.def は mkexports.rbで生成されてました >>23 redmineって誰でも問題登録できるの? 使い方がよくわからんのですけど 極端な小心者なのでMLに報告なんてのはとてもできません そもそも普段からメールをほとんど使ってないし Maikefile の書式もちゃんとわかってない程度だし DllMainのことも検索しまくってなんとかちょっとわかったくらい などとスキルも低く、しかも英語もわからんときてるorz
38 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:46:33 ] >>37 誠意をもってちゃんと書けば誰でも余裕で登録できる。 スキルがなかったら単にrejectされるだけ。 高校の先生が全角でRUBYと書いて「動かない!バグだ!」って 登録した例もある。そこまでひどくなくても要望ぐらいなお気軽に。 オープンソースってそんなもん。
39 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:48:32 ] >>35 Perlとどっこいどっこい
40 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:50:01 ] だからWindowsなんて誰も使ってないマイナーOSの話はいいって。
41 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 19:17:37 ] >>37 Webインターフェースから日本語で報告するだけ。事前登録は必要だけど。 それさえしてあれば、>>21 をこのスレに書くのもredmineに書くのも同じ。 もっとも、もう>>21 は直されたみたいだけどね。
42 名前:デフォルトの名無しさん [2009/02/04(水) 21:03:54 ] Win32用のGem ファイルを作成しているのですが、 exec.bat みたいなファイルを c:/ruby/bin とかのパスが通ったところに置きたいのだけど、 どう書けばいいのか分かりません。c:/ruby/lib///xxx/gems/appname/bin/exec.rb とかにインストールされるようにはできたので、 最低限の基本は分かっているつもりです。 RubyGem の rubyforge のページには書いてないような気がするのですが、rake とかでは実現されているので できるはずなのです。 後ついでに、PlatFormによってコピーするファイルを切り替えられるというのもできたらうれしいです。
43 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 21:21:31 ] >>16 サンクスです >>18 ちょっと自分が知りたい情報じゃないですが、レスありがとうございます。
44 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 21:30:10 ] >>39 Rubyはすっとこどっこい
45 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 21:36:39 ] >>43 VC とは直接関係ないけど、参考までに shugo.net/article/cmagazine/3rd/ shugo.net/article/cmagazine/4th/
46 名前:デフォルトの名無しさん [2009/02/04(水) 22:18:06 ] 3927
47 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 23:18:51 ] デビアンしか動作保証してないのもどうかと思うがwww
48 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 01:02:31 ] >>36 見てみたいですけど絶版... HTML版って内容同じですか?
49 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 01:18:06 ] それはCでRubyの処理系を書く本だからスルーしておk (素晴らしい本であることは間違いないけど) というかここよりも初心者スレで聞いた方が早いよ
50 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 16:56:25 ] >>48 基本的に同じ。 執筆後のアフターフォローとかも少し入ってる。 (最新版のRubyに追従とかはしてないけどね)
51 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 17:31:45 ] CでRubyの処理系を書く本なんだけどRubyの中身が分かる モジュールとかクラスとかスコープの解釈がどうなってるのかとか 他の言語の経験があってこれから初めてRubyを学ぶなら コーディングするときにも役に立つと思うよ
52 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 22:58:09 ] >>51 おなじ様な内容を「実践rails」でも扱ってた あの本、読み物としては面白かったよ
53 名前:デフォルトの名無しさん [2009/02/05(木) 23:10:09 ] >>45 おお、それで自作クラスが呼び出せるんですね サンクスです。 もう少しで、自作クラスを呼び出す段階までいけそうです。 今rubygemsをインストールして mechanizeをインストールしようとしてるんですけど、 zlibがないって怒られてます。 これはどうしたらいいんでしょうか? とりあえずwindows用のzlibをインストールしたんですがmechanizeのコンパイルでは 依然怒られっぱなしです。
54 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:15:54 ] module M def initialize super puts "よこどりー1" end def hoge super puts "よこどりー2" end end class C include M def initialize puts "もともと1" end def hoge puts "もともと2" end end C.new.hoge これで もともと1 よこどりー1 もともと2 よこどりー2 って表示したいんだけど、どうすればいいかな
55 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:16:38 ] ttp://d.hatena.ne.jp/moro/20081022/1224636032
56 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:20:28 ] >>53 > zlibがないって怒られてます。 > 怒られっぱなしです。 状況説明できない初心者は初心者スレ行け
57 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:27:41 ] gem install mysql で入れたmysql.soが文字化けするんですが どうすれば正常に入るんでしょう? バージョンは↓です ruby v1.8.7 rails v2.2.2 mysql v5.0.67
58 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:28:50 ] > mysql.soが文字化け
59 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:36:51 ] >>54 class C でインクルードしないで class K < C ; include M ; end K.new.hoge で期待する出力は出せるけど、これじゃダメですねそうですね
60 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:41:24 ] >>54 なんかソースを素直に見る限りでは > もともと1 > よこどりー1 > もともと2 > よこどりー2 と表示されそうなんだけどな モジュールのメソッドがガン無視されるのはなんでだろう
61 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:46:10 ] >>56 分かりました。そうします
62 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:56:14 ] > モジュールのメソッドがガン無視されるのはなんでだろう C.ancestors
63 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:59:48 ] >>60 > モジュールのメソッドがガン無視されるのはなんでだろう p C.ancestors #=> [C, M, Object, Kernel] ということで、メソッド探索順がMよりCが先だから、が正解 そもそも include が [C, Object, Kernel] のCの1個上に割り込んで [C, M, Object, Kernel] とすることでメソッド追加を実現してる機能だから、 「includeで既存のメソッドを上書き」ということ自体がそもそも仕様的にできない >>59 だと [K, C, Object, Kernel] にMが [K, M, C, Object, Kernel] という順番で割り込むから、実質、MでCが上書きできてる
64 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 00:08:32 ] >>63 > 「includeで既存のメソッドを上書き」ということ自体がそもそも仕様的にできない これって「メソッドをクラスに追加します」とかいうへにょげた説明の割に微妙に不便な実際だよね 「include M はメソッド探索の上位に M を追加します」とかきちんと書いて欲しいなあ ちなみに extend ならできるが、initialize の上書きができね c = C.new c.extend M c.hoge もともと1 もともと2 よこどりー2
65 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 00:14:34 ] >「include M はメソッド探索の上位に M を追加します」 うおー自作で include 使わないから知らんかった C にないメソッドのときだけ M が探索されるのね、成程
66 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 00:38:55 ] >>57 「mysql.soが文字化け」??
67 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 00:39:41 ] >>63 なるほど その説明で今更いろいろな事が納得できた…
68 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 01:43:50 ] MySQL開発チームメンバーらと起業 MySQLの「生みの親」、サンを離れる ttp://www.atmarkit.co.jp/news/200902/05/monty.html
69 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 02:02:57 ] >>54 ,63 > 「includeで既存のメソッドを上書き」ということ自体がそもそも仕様的にできない 無理矢理だがこんなんでどうだろう class C # この段階では M を include しない def initialize ... def hoge ... end module X define_method :initialize, C.instance_method(:initialize) define_method :hoge, C.instance_method(:hoge) end class C remove_method :initialize remove_method :hoge include X include M end C.new.hoge
70 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 06:15:56 ] >>54 それclass Cの方で、メソッドの最後にsuper呼んだらうまくいくんじゃね?
71 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 11:13:41 ] それはメソッドのオーバーライド(再定義)とsuperがどういうしくみになってるかってことだな
72 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 11:26:05 ] 実際上は>>59 が妥当だな Ruby におけるメソッドの上書きは「その場」で「実際」に def を実行しないと動作しないから 既存のモジュールオブジェクトを include でがっちょんと接続しただけでは期待通りにはならないと …そもそもの include っていう名前がまずい気がしてきた add_parent とか family とかなんかそんなクラス・モジュール関係が変化するという印があったほうがよかったのかもしれない
73 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 11:30:59 ] >>72 module M; end class C; end p C.ancestors class C; include M; end p C.ancestors [C, Object, Kernel] [C, M, Object, Kernel] ↑このへんがinclude
74 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 11:38:10 ] なるほどクラスの内包関係に含むからincludeか!Ruby氏ね! Mix-inとかの実装上の都合だったのか「モジュールの内包関係にあとから割り込む機能」が欲しくてこうしたのかがちょっと興味ある
75 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 12:01:02 ] >74 お前が氏ね
76 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 13:00:03 ] つーか普通 module を include するのって抽象クラスを継承するようなイメージじゃないのか? どう考えても class で書いたメソッドの方を優先して欲しいんだが。
77 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 15:04:11 ] いや思いっきり優先されてるだろ p C.ancestors #=> [C, M, Object, Kernel] は C にメソッドがない場合にのみ M の中を探す module M def msg; "Rubyはうんこ"; end end class C def msg; "Ruby最高"; end end class C; include M; end puts C.new.msg Ruby最高
78 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 15:06:07 ] ・ 既存のメソッドと同じ名前のメソッドをincludeしたとき super がどうなるか ・ クラスを含んだモジュールをincludeしたときそもそもどうなるか というのがわかりにくいわぼけーという話だな
79 名前:76 mailto:sage [2009/02/06(金) 15:59:11 ] >>77 いやいや、実際そうなってないということではなくて、>>72 とかの「期待通り」って、 いったい何を期待しとるんだという話。 Ruby の include のイメージで >>78 の「既存のメソッドと同じ名前のメソッドをincludeしたとき」 みたいな言い方は、普通出てこないんじゃないの? と思うんだが…
80 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 16:32:17 ] >>79 つ ヒント:普通じゃない
81 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 21:31:50 ] 1.9.1文字コードがどーたらこーたらで既存のコードがうごかねー。 そういうのは2.0でやってくれよ。
82 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 21:35:47 ] 文字コードなんて1.4でやっとけよ
83 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 21:56:02 ] >>81 1.9.0では動作してたものが1.9.1では動かないというのなら姉さん事件ですのでぜひ報告を
84 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 23:02:12 ] 2.0でやってたらやってたで「3.0でやってくれよ」と言ってるんだろうな
85 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 23:02:59 ] なにいってるかわからない
86 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 23:52:48 ] なるほど ありがとうございました
87 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 00:30:26 ] どれだー どれに対する礼なんだー
88 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 00:38:44 ] きっと神にだよ。
89 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 01:33:07 ] なるほど ありがとうございました
90 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 06:13:20 ] >>84 少なくとも1.9.1でやるよりは10倍マシ
91 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 07:27:49 ] 複雑だと思うならつかわなきゃいいんじゃねーの? なんでアホはあるもの全部使わなきゃ気がすまねーの?
92 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 08:02:17 ] 誰と会話してんの
93 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 14:07:18 ] # -*- coding: utf-8 -*- を行頭に挿入すりゃいいだけだろ?何を恐れることがある
94 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 14:33:29 ] >>92 彼は今チャンピオンベルト目指して脳内キャラとスパー中です。
95 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 14:55:55 ] >>94 それってつおいの?
96 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 14:58:32 ] 昔、机の上で左手と右手を戦わせてたときのことを思い出した
97 名前:デフォルトの名無しさん [2009/02/07(土) 14:59:40 ] それなんて色川武大
98 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 15:08:03 ] きっと神とだよ。
99 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 15:08:55 ] ありがとうございました
100 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 15:26:06 ] なるほど
101 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 15:36:53 ] がんばれよ
102 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 15:57:37 ] >>90 1.9って2.0のβじゃないの? Rubyのバージョン付けはそういうルールじゃないんだっけ。
103 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 15:58:21 ] 1.9は1.10のβです
104 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:01:49 ] >>102 元々はそういうルールでしたが、1.9.1からいきなり変わりました 今は1.9.0が開発版、1.9.1が安定版 それ以降はもうよく分からない
105 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:04:26 ] >>104 なるほど、知りませんでした。 >>103 確かに。 2.0のβなら1.99でしょうね。
106 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:06:25 ] >>102 2.0が当分先になりそうだから、 つなぎとして固まった仕様だけ出したのが1.9だったよーな 破壊的な変更のコストはどんどん増える一方ということを考えると、 ブロック内変数とかも含めて、 今のうちに変更しておくという決定は一理あるとは思う
107 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:10:00 ] 1.8と2.0の掛け橋が1.9で、1.8と1.9の橋渡しが1.8.7 ライブラリ作ってるのでなければ、しばらくは1.8.7を常用するのがよい 半年もすれば1.9.1対応ライブラリもぐんと増えよう ライブラリ公開してる人はとっとと1.9.1入れて対応作業始めてくりゃれ
108 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:13:29 ] >>107 今年中に1.8.8出るよ?
109 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:14:02 ] >>108 またそんな夢みたいなことを簡単に信じるんだから
110 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:15:25 ] >>108 うん、で、そのあとに続く言葉は何? 「だから1.8.6使い続けたほうがいい」? 1.8.8が出るなら今から1.8.7勉強して慣れたほうがよくないか?
111 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:35:19 ] hpricot(why-hpricot)とmysql(elia-mysql)は githubで公開しているgemなら1.9.1に入った。 githubのgemはオーナー名が入るのが好かんのだが。
112 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:44:48 ] Hpricotの復権はあるのだろうか…
113 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:46:56 ] >>112 Nokogiri はつまるとこ lib-libxml2 なんで、そのへんの不便を突けば並列使用は可能だと思う
114 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 17:41:37 ] >>112 なんか、why の人の blog で 「nokogiri の方が速いとか言われてマジブルー。むかついたからパーサー書き直したYO!」 とかいうエントリがあがってた。試してないから速くなったのか知らんけど。
115 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 17:44:32 ] 速さ云々じゃなくてあの変態APIが(ry
116 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 17:56:02 ] hpricotがなくっても _why の多芸っぷりは憧れる
117 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 18:39:21 ] 最近似たようなこと書き込みまくってる気がするんだが module M class C1; end class C2; end end この場合、C1 と C2 に関係性を持たせることはそもそもできない? たまたま含まれるモジュールが同じだけで、「知り合い」ではない? M を改造して module M_II class C1; end class C2; end end というものを作りたいんだけど
118 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 19:17:21 ] >>110 1.8.7と1.8.8って何か変更あるの? その時の1.9.1ってどうなるの?
119 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 19:22:25 ] 1.9という奇数バージョンは開発バージョンだから 2.0まで待った方がいいよ。
120 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 19:32:46 ] 間違った知識で何を言うか
121 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 19:43:53 ] 何年も継承されてるルールを変えられると困る
122 名前:デフォルトの名無しさん [2009/02/07(土) 19:52:42 ] 文字列処理入ると1.8より遅いのか...
123 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 19:54:20 ] 不安定版を一応脱した1.9.1が出た時点で、実質「1.9は開発版」という看板は終了だ 従来動作の1.8系列と、新動作の1.9系列という2つの括りになる むしろ、次の開発版が無いのが気になる
124 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 19:56:08 ] >>117 定数とか調べてコピーを作るメソッドを自分で作れ Application.create とか あと↓見てよく考えろ。クラスも定数である事を忘れるな class A CONST = :A def pconst ; p CONST ; end def pselfconst ; p self.class::CONST ; end end class B < A CONST = :B end B.new.pconst #=> :A B.new.pselfconst #=> :B
125 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 19:57:42 ] 話をループさせるの好きなんですね、わかります。
126 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 21:13:30 ] >>117 > 「知り合い」ではない? まあ、基本的には。 ネストでも継承でもない場合、基本的に他人。 データ作成クラスとデータ構造クラスとかを知り合い関係のまま再利用させたい場合は適当にネストさせとく。 class DataMaker; end class Data; end class SubData; end という並列構造はそもそもあんましよくない。
127 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 21:21:54 ] moduleインクルードすると嬉しいことって クラスの多重継承の代わりになるってことだけですか? なんならmoduleなんて排除してクラスの多重継承許しちゃえばよかったのに
128 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 21:29:31 ] ClassクラスとModuleクラスを機能的に分けたときのついでなんじゃないかと最近思う
129 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 21:34:06 ] >>126 ネストの意味のあるクラス名考えるのがとってもめんどくさいです