1 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 08:39:14 ] プログラミング言語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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
66 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:53:29 ] 式展開じゃないとダメか #{nil}はnilになるのかと思ったら""なのね。何で? nil要素は作れない?
67 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:57:08 ] 要素が文字列である配列を作る記法だからでしょう またレスかぶりそう
68 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:05:56 ] 了解。みんなありがと
69 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:11:45 ] >>66 irb(main)> "#{nil}" => ""
70 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:25:58 ] >>58 いろいろあったんだが、Windowsの場合は自分だけMinGW32にしても意味がない、という結論に至った 配布されてるバイナリのバージョンと揃えておいて、同じようにエラー出したり同じように変な動きしたりするほうがいい
71 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:30:02 ] 普段CをMinGWでコンパイルしていて Rubyの拡張ライブラリもMinGWでコンパイルしたいんだもん という人がRubyをMinGWでコンパイルしているんだと思う。 あとメンテナか。
72 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:36:41 ] これからMinGWにしてこうぜー、という動きがあるのはある気がするが 「よくわかんないいっぱんゆーざー」がわざわざコンパイルしてまで使用するようなもんでもない ただしMinGWの知識がある人はどんどん使って色々言ってくれ
73 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:09:14 ] class NiseArray < Array; end a = NiseArray.new p a.class #=> NiseArray b = a.map{} p b.class #=> Array bがワナビーNiseArrayなんだがドゥーしたらいいんだ? オレにティーチしてくれよ。
74 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:25:11 ] セルフのクラスのオブジェクトをリターンするようにデファインされてないんだよな 継承を考慮してないもともとのクラスのデザインのミステイクではある
75 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:31:20 ] Enumerableはeachさえあれば配列じゃなかろうと動くようにしてあるんだから仕方ない ArrayのメソッドならちゃんとNiseArrayが返すはず
76 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:36:39 ] ビルトインクラスは普通のオブジェクトと微妙に構造が違うから継承すんなボケ、 っつーかお前のそのクラスはビルトインクラスを継承するだけの動作をするのか、あー? という怖い感じのが一応スタンス メソッドが欲しいだけなら普通は委譲を使う
77 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:39:33 ] 委譲遅いじゃん はい論破
78 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:41:22 ] 委譲とかあのへんは遅いよね 継承を使いたくなるくらい遅いというのは実効上の説得力がない
79 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:41:44 ] この例に限って言えば dup/clone してから map! すりゃいいんじゃね
80 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:44:04 ] >>78 ディスパッチテーブルを もう一回引く程度のコストが許容できないなら その問題にRubyは使えないんじゃないかね
81 名前:73 mailto:sage [2010/01/30(土) 00:17:48 ] Arrayオリジナルのメソッドでcollect/mapとselectはNiseArrayではなくArrayを返す。 ほかはNiseArrayを返す。 あとEnumerableは基本的にArrayを返す。 これらは継承では全滅ということでOKですか? delegateに馴染みがないので軽いサンプルをいただけると助かります。 もちろん自分でリファレンスマニュアルを読んでみます。
82 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 01:32:52 ] >>81 自作ライブラリのコード漁ってたらこんなの出てきた でも、正直これは設計ミスだったと思ってる %w{ find_all reject select sort sort_by }.each do |method| class_eval %{ def #{method} self.class.new(super) end } end %w{ & * + - grep }.each do |method| class_eval %{ def #{method}(arg) self.class.new(super) end } end
83 名前:82 mailto:sage [2010/01/30(土) 06:10:54 ] 話の流れ上 delegate のサンプルを貼るべきところだったな、ごめんw 継承するとこうなるぞってことで
84 名前:73 mailto:sage [2010/01/30(土) 10:50:29 ] #-----hoge1.rb class NiseArray < Array instance_methods.each do |method| define_method(method) do |*args, &block| result = super(*args, &block) result.class == Array ? NiseArray.new(result) : result end end end p NiseArray.new.map{}.class #=> NiseArray #-----hoge2.rb require 'delegate' class NiseArray < DelegateClass(Array) def initialize super(Array.new) end end p NiseArray.new.map{}.class #=> Array #なんでノットNiseArrayなのかミーにはホワイなんです><
85 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 14:01:51 ] class A def initialize(a=Array.new); @a=a; end def method_missing(*arg, &block); A.new(@a.__send__(*arg, &block)); end def to_a; @a; end def to_ary; @a; end end irb> a = A.new([1, 2, 3, 4, 5]) irb> a.delete(5) irb> p a #<A:0xb7cf21c0 @a=[1, 2, 3, 4]> irb> p a.map{|e| e*2} #<A:0xb7cecb30 @a=[2, 4, 6, 8]> irb> p a.class A irb> p a.to_a [1, 2, 3, 4] irb> p Hash[*a] {1=>2, 3=>4}
86 名前:73 mailto:sage [2010/01/30(土) 14:46:42 ] おおお素晴らしい 鮮やかに委譲してますね。 しかも直感的でわかりやすい。 #all?など返り値が委譲先のオブジェクトでないメソッドも少し手直しすれば動きそうです。 勉強になりました。参考にさせてもらいます。
87 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 17:55:24 ] $KCODE='u' 'あ' =~ /\xe3/ #=> 0 'あ' =~ /[\xe3]/ #=> nil となります。 $KCODEを指定しないとどちらも同じ挙動になるんですが。 これは意図した動作なんでしょうか。 手元の環境は ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] です。
88 名前:デフォルトの名無しさん [2010/01/30(土) 18:58:31 ] $KCODEのデフォルトは n なので、 $KCODE を設定しないということは 'あ' はただのバイト列として 0xe3 と比較される。
89 名前:デフォルトの名無しさん [2010/01/30(土) 19:11:04 ] おや、'u'のとき前者がマッチするのか…
90 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 22:20:20 ] p BasicObject === BasicObject #=> true p Class === Class #=> true p Module === Module #=> true p Object === Object #=> true p String === String #=> false p Array === Array #=> false p BasicObject.class #=> Class p Array.class #=> Class p Kernel === Kernel #=> true p Enumerable === Enumerable #=>false p Kernel.class #=> Module p Enumerable.class #=> Module なんで?教えてえらい人!
91 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 22:52:30 ] >>90 Module#===の定義をリファレンスで読むといいよ selfがモジュールとすると「obj.kind_of?(self) が true の場合、 true を返します」だとさ
92 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:00:03 ] 驚き最小!
93 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:21:41 ] >>90 ===
94 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:22:47 ] ミスったw === が再定義されているから case value when Integer when String end みたいに書けるんじゃないか
95 名前:デフォルトの名無しさん [2010/01/31(日) 00:08:03 ] Proc#===の定義は見ただけでは何を意図したものか分からなかったな…
96 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 07:39:30 ] ||= って何なんでしょう? 代入文みたいに a ||= {} 使うみたいな 辞書の割り当てとかでしょうか?
97 名前:デフォルトの名無しさん [2010/01/31(日) 07:55:53 ] Marshal.dumpでsingleton can't be dumpedというエラーになって悩んでます objの中身はライブラリから返されたもので詳細はわかりません p obj.class #=> Hash p obj.is_a? Singleton #=> false Marshal.dump(obj) #=> TypeError: singleton can't be dumped 以下はエラーになりませんでした obj.each {|k,v| Marshal.dump([k,v])} #=>エラーなし
98 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 08:13:23 ] >>97 そのエラー分かりにくいよね 特異メソッド(およびそれが定義されているオブジェクト)はダンプできませんよって意味 dupしたものをダンプするようにするか、自分で言ってるように中身だけ出すのが正解
99 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 08:40:37 ] >>96 これ書いてる解説少ないんだよな a がNameErrorを返すか、変数 a が存在して偽を返す場合、 a = {} を実行する という程度の意味 実際のスクリプトでは大量に使われているが、初心者用文法解説ではほとんど言及されていない謎の記述
100 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 09:18:07 ] >>96 a += 1 a = a + 1 a ||= {} a = a || {} a が偽と評価される場合に限り a = {} となり、それ以外のときは a = a 変数の初期化を保証するために使われることが多い
101 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 09:23:09 ] >>100 だいたいの意味はそうだからいいんだけど、厳密には a || (a = b) ってことになる ||= と &&= だけちょっと特殊 ってようなのをどっかで見た
102 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 11:13:45 ] >>101 doc.okkez.net/187/view/spec/operator#selfassign まあobj.foo = obj.fooに副作用がある設計のほうがどうかと思うけどな
103 名前:デフォルトの名無しさん [2010/01/31(日) 14:11:36 ] >>98 ありがとうございます objは再帰的なHashなようでdumpできないオブジェクトが入っている場所は一定ではないようです またTrueClassなどdupできないものも含まれているようです 一気に特異メソッドを取り除いてdumpする方法はないでしょうか?
104 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 14:26:44 ] 初めてRubyいじる必要が出てきて,このスレに来てみたが ここ初心者レベルじゃないね。 初心者抜け出して中級者に手が届こうとしてる人たち向けの 初心者脱出スレだな。
105 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 14:29:35 ] >>104 いや別に puts と p はどう使い分けるんですかみたいな質問でも構わないよ 全く知らないと小難しそうな領域に踏み込めるようになるまでの時間が短い言語だとでも思ってくれ 実行速度がスクリプト言語として普通なレベル(つまり速いわけではない)という点以外は初心者にやさしいほうだと思うけどね
106 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 14:41:46 ] 初心者の質問にでも 初心者抜け出して中級者に手が届こうとしてる人たちも含めていろんな人が答えるスレでしょ 初心者の質問がなけりゃそのちょっと上の会話になるさ
107 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 14:44:02 ] >>103 ライブラリ提供者が提供してないのなら目視で取り除くしかないよ 普通は dump というメソッドを作ってあったりするもんなんだけどね
108 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 15:15:55 ] >>104 大丈夫、そういう場合は自分のような脱初心者(+ニート)が回答するから。 ただ、2chだから超初心者質問には悪態をつく人間がいることは覚悟しておいたほうがいいかも。
109 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 16:12:23 ] 相手は人間だから、あんまり馬鹿っぽい質問じゃねえ。 それなりに調べて来ないと駄目でしょ。 思考停止して単位欲しいとかなら pc12.2ch.net/test/read.cgi/tech/1200175247/ Rubyの宿題教えてください。2限目 とか。
110 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 16:22:38 ] 自分の質問が馬鹿っぽいかどうかが分かるなら、 既にそいつは上級者だろw まあ確かに、自力で最低限ぐぐるくらいのことはしてほしいとは思う
111 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 16:26:38 ] 最近の質問はちょっとレベル高かったからなー むしろ私にも答えられるような初歩的な質問キボンヌ
112 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 16:33:04 ] >>103 Marshalじゃなくてyamlか何かでダンプするようにするのが一番楽
113 名前:デフォルトの名無しさん [2010/01/31(日) 18:48:05 ] オブジェクトの中身をろがーに吐かせたいんだけど inspectじゃなくてppみたいに見やすく文字列化してくれるやつない?
114 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 19:23:46 ] >>113 require 'StringIO' require 'pp' h = { 1=> '1234567890'*5, 2=> '1234567890'*5 } sio = StringIO.new PP.pp(h, sio, 79) # 79文字までは改行しない sio.rewind puts '========================' puts sio.read puts で表示されてるのがわかるかと思う
115 名前:デフォルトの名無しさん [2010/01/31(日) 19:28:48 ] pretty_inspect
116 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 05:34:01 ] Rubyは今後10年使われますか?
117 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 06:17:43 ] >>111 てかRuby初心者スレは実質「Ruby質問スレ」と言ってもいい 超初心者からRubistまで、幅広く質問を受け付けるスレって感じがする …てか、もうスレタイ変えちゃって良いんじゃないか、ここ…?
118 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 11:38:19 ] 変えた途端に>>117 が業務上のプログラムの質問する事にでもなるのか?
119 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 11:43:54 ] アホが暴れたら高度な話題は本スレでと誘導できるからこのままでいいんだよ
120 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 20:18:47 ] 超初心者〜中級にちょっと届かない初心者 ぐらいしか質問してないだろう
121 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 20:38:06 ] 人の振り見て我が振り直せ。
122 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:02:33 ] Rubyっぽくして def sum key = nil sum = 0 while line = gets a = line.split(",") if key !=a[0] if key print "#{key} #{sum}\n" end key = a[0] sum = 0 end sum += a[2].to_i end print "#{key} #{sum}\n" end
123 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 22:15:25 ] 1時間経ってもスルーされてた理由をなんとなく理解
124 名前:デフォルトの名無しさん [2010/02/01(月) 22:56:47 ] >>123 たぶんその理解は間違い。
125 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 23:02:24 ] 実際に試した人→>>123 実際に手を動かさなかった人→>>124
126 名前:デフォルトの名無しさん [2010/02/01(月) 23:06:22 ] こういうのはRubyっぽいのか?? $stdin.lines.map {|l|l.chomp.split(/,/).values_at(0,2)}. group_by(&:first). each {|k,a|puts"#{k} #{a.map(&:last).map(&:to_i).inject(&:+)}"} >>123 がソート済みかどうかを考慮しているのかどうか疑問が残る。
127 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 23:45:31 ] group_by初めて知った。旧リファレンスに無くて悲しくなった。 メモリ喰いっすね
128 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:10:11 ] Ruby/GTK2 でグラフをプロットするアプリケーションを作りたいと考えています。 ruby-gnome2.sourceforge.jp/ja/hiki.cgi?gtk2-tut-itemfactory-example ここにあるようなメニューとウィンドウを作ることはできたのですが、例えば month = [1, 2, 3, 4, 5, 6, 7, 8, 9 ,10, 11, 12] temp = [6.8, 7.8, 10.0, 15.7, 20.1, 22.5, 26.3, 26.6, 23.0, 19.0, 13.5, 9.0] というデータがあったときに、横軸に month を縦軸に temp をとったグラフをウィンドウの中に、直接表示するためにはどうすればよいのでしょうか? Windows XP ActiveScriptRuby環境です 最終的にはもっと長い(1000-10000点ほど)データがプロットしたいと考えています
129 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:37:22 ] >>128 良く使われる手法は 1.グラフ画像を生成してウインドウに貼る 2.描画可能なコンポーネントにプログラムで描画する の二つ 1.のグラフ画像生成は、画像処理ライブラリを使って自力でグラフを書くか グラフ生成ライブラリを使うかする 2.はruby/gtk使った事無いからリンク先から関係ありそうなところ > ttp://ruby-gnome2.sourceforge.jp/hiki.cgi?Gtk%3A%3ADrawingArea > ttp://ruby-gnome2.sourceforge.jp/hiki.cgi?Gdk%3A%3ADrawable
130 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:41:47 ] Tkの知識はあるんだよね
131 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:43:29 ] TkじゃなかったGTKだた どっちにしても指示をRuby上からやる、という以上のものではないんで GUIパーツの使い倒し方を知ってるのがけっこう前提
132 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:58:08 ] >>129 ありがとうございます 素人考えですがポイント数が増えると 2. の方がいいのかなという気がするので、リンク先を読んでみます >>130 Tk もわかりません…
133 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 01:05:03 ] グラフはQwtがマジおすすめ qwt.sourceforge.net/ RubyのQtバインディングがあればRubyからも使えるはず 俺はPyQtからしか使った事ないが
134 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 01:27:16 ] >>129-131 128 です ウインドウへの直接描画 - Gdk::Drawable ruby-gnome2.sourceforge.jp/ja/hiki.cgi?%A5%A6%A5%A4%A5%F3%A5%C9%A5%A6%A4%D8%A4%CE%C4%BE%C0%DC%C9%C1%B2%E8%282%29+-+Gdk%3A%3ADrawable こちらを見落としていたようで、先ほどのリンクと一緒に参照しながらやっていきたいと思います 確かに gtk そのものを学ぶ必要があるのだろうとは感じています。ありがとうございました >>133 ありがとうございます Qwt のスクリーンショットはかなりイメージに近いです
135 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 02:28:19 ] irb の文字入力が悲しいくらい重いです カーソル移動は問題ないです irb --noreadline とすると入力は普通になりますが使いにくいです ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-mingw32]
136 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:15:30 ] PCのスペックは?それ書いてくれないと判断できないのだが
137 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 08:07:16 ] プロッターを1から作るのは全くおすすめできない 133のQwtであればAPIで簡単に実現可能な 描画領域の拡大・縮小やドラッグ、凡例表示なんかを実装するのは よっぽどモチベーションが高くないと無理
138 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 10:52:05 ] >>136 単なるローカルエコーであるはずのirbでの文字入力だけが重くなるという時点で スペックとか関係ない問題だと思う…
139 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 15:08:41 ] 「単なる」っておまえReadlineを知らんのだろ
140 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 17:42:37 ] io = File.open 'text.gz' #俺様専用! gz = Zlib::GzipReader.new io gz.close io.closed? # しまった! IOクラスのインスタンスを要求するライブラリで、closeを呼ぶと 上流のIOがcloseされてしまう仕様は、何か理由があるのですか? 内部でIOを複製してそれを使えばいいじゃないですか、と思うのですが。
141 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 18:33:36 ] >>140 一緒に閉じたほうが使いやすいから Zlib::GzipReader の close 時に io を一緒に閉じて欲しくないのなら Zlib::GzipReader#finish を使う これだと wrap 使ってブロックで書ける File.open('text.gz'){|f| Zlib::GzipReader.wrap(f){|gz| # なんか gz.finish } p f.closed? #=> false }
142 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 18:36:10 ] >>141 ホントだ。 何か技術的な理由でそのような仕様になっているのかと思った。 どうもありがとう。
143 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 18:43:30 ] と思ったら、IOストリームの位置が進められているよ。 やっぱり内部で複製していないのか。 とりあえず io.rewind で戻せるからいいけどさ。。
144 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 18:52:49 ] >>143 gz.rewind で GzipReader オブジェクトが作成された時点のファイルポインタ位置に戻せるよ 自動でやらないのは細かい制御したいときに込み込みでやられると発狂するからだと思う File.open('text.gz'){|f| Zlib::GzipReader.wrap(f){|gz| # なんか gz.rewind gz.finish } p f.closed? #=> false } IO オブジェクトを複製しない理由はなんか偉い人が教えてくれるんじゃないかな
145 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 19:34:14 ] >>143 f = File.open file f.read f.dup.seek 0 f.pos そもそも副作用の代表格であるIOにまともな複製なんて不可能じゃない?
146 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 21:02:46 ] IOのeachとlinesってまったく同じ?
147 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 22:41:29 ] 同じ
148 名前:デフォルトの名無しさん [2010/02/03(水) 06:52:22 ] Ruby on Rails 3.0 Release Notes guides.rails.info/3_0_release_notes.html
149 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:23:18 ] >>138 Windows版Rubyはirb立ち上げておくとなんか変なプロセスが一緒に走って重いよ。 デュアルコアならさして問題ないが1コア占有するんでね。 csrss.exeだったかな。システム絡みのが。 いつまで立っても直らないのは、CPU占有率を常に見ている人が少ないのと、 誰も公式に言わないからだろうと
150 名前:149 mailto:sage [2010/02/03(水) 10:27:00 ] 今試したら、 クアッドコアのマシンでruby 15%、csrss 8%ぐらい合わせて1コア分くらいだな。 ちょっと違ってたスマソ とりあえず、Windowsではirb重い。 少なくとも開発中に立ち上げっぱなしはムリポw 俺はcoLinuxとかで立ち上げるからさして問題ないけど
151 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:29:19 ] えっ BusyLoopなの?
152 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:36:22 ] 今しばらくmswin32版rubyのirbで色々やってみてるけど 触らなければCPU0%だなあ もっと時間かけると占有するようになる?
153 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:38:15 ] ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-mingw32]
154 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:39:56 ] お、mingwの話かスマソ
155 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 13:11:46 ] 教祖がウィンドウズ使ってないから仕様。
156 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 14:50:51 ] パッチレベルをp388に上げてみるとか Readlineのdllを最新のものにしてみるとか ちなみに ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32] のirbは軽い csrss.exeの占有率はせいぜい0%~1%くらいか。 CPUはPentium M 1GH ttp://gnuwin32.sourceforge.net/packages/readline.htm
157 名前:デフォルトの名無しさん [2010/02/03(水) 15:20:42 ] Windows上でMechanizeを使おうと考えており下記のスクリプトを試しましたが下記のような結果となりました 何がおかしいのか見当つかないのでどなたかアドバイスいただけないでしょうかよろしくお願いいたします * 環境 >ruby -v ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32] >gem list *** LOCAL GEMS *** hpricot (0.8.2) mechanize (0.9.3) nokogiri (1.4.1) * テストスクリプト require 'rubygems' require 'mechanize' agent = WWW::Mechanize.new page = agent.get('www.google.com/ ') puts page.forms puts page.forms.with * 結果 >ruby -d hoge.rb Exception `LoadError' at C:/PROGRA~1/ruby-1.8/lib/ruby/vendor_ruby/1.8/rubygems.rb:1112 - no such file to load -- rubygems/defaults/operating_system Exception `NoMethodError' at C:/PROGRA~1/ruby-1.8/lib/ruby/1.8/rational.rb:78 -undefined method `gcd' for Rational(1, 2):Rational Exception `LoadError' at C:/PROGRA~1/ruby-1.8/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:31 - no such file to load -- mechanize #<WWW::Mechanize::Form:0x381a3a0> Exception `NoMethodError' at C:/PROGRA~1/ruby-1.8/lib/ruby/1.8/pp.rb:214 - undefined method `with' for #<Array:0x381a4e0> hoge.rb:7: undefined method `with' for #<Array:0x381a4e0> (NoMethodError)
158 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 15:24:15 ] >>157 Mechanizeのメソッドの使い方を単に間違ってる ここ全部読め ttp://d.hatena.ne.jp/kitamomonga/20081209/kaisetsu_for_ver_0_9_ruby_www_mechanize
159 名前:デフォルトの名無しさん [2010/02/03(水) 16:59:18 ] puts ["hoge"][0] とやると「hoge」が出力され、0以外だと「nil」が出力されるのですが この構文自体がどういうものなのか分かりません。 なにかの省略形とかなのでしょうか?
160 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 17:07:50 ] >>159 そんなへちょい例文作ったとこどこよお母さん一言文句言っちゃるわ a = ["hoge"] puts a[0] つまり配列の 0 要素目
161 名前:159 [2010/02/03(水) 17:14:43 ] >>160 やはり配列でしたか…。こういう記述も許されるんですね。 ありがとうございます。
162 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 17:16:58 ] > こういう記述も許されるんですね。 というか配列リテラルで直接要素参照する意味はまずない むしろ嫌がらせに近い
163 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 17:28:30 ] pc12.2ch.net/test/read.cgi/tech/1155031689/ 661 デフォルトの名無しさん [sage] 2009/09/04(金) 08:12:26 ID: Be: Windows用Rubyは MinGW版が速いと聞いてRuby on Railsで試してみた - yuum3のお仕事日記 d.hatena.ne.jp/yuum3/20090805/1249452345 antoniocangiano.com/wp-content/uploads/2009/08/mri_kri_total_runtime.png mingw版のほうが速いんだってさ 664 デフォルトの名無しさん [sage] 2009/09/06(日) 21:15:00 ID: Be: Rails遅いのかーバージョン下げるかなー 665 デフォルトの名無しさん [sage] 2009/09/06(日) 22:06:08 ID: Be: 913 nobodyさん [sage] Date:2009/09/06(日) 14:23:30 ID:??? Be: >>905-907 本当だ。なんだこれ? mswin32版のRuby 1.8.7-p160が遅すぎる件 - 那由多屋 開発日誌 d.hatena.ne.jp/nayutaya/20090601/1243848756 L'eclat des jours(2009-04-22) www.artonx.org/diary/20090422.html (コメ欄) 666 デフォルトの名無しさん [sage] 2009/09/06(日) 23:28:30 ID: Be: 何年も前から言われてることに反応して欲しいのかな 667 デフォルトの名無しさん [sage] 2009/09/06(日) 23:53:35 ID: Be: 何年も前じゃないだろ 670 デフォルトの名無しさん [sage] 2009/09/07(月) 06:40:46 ID: Be: >>666-667 >>665 がその前もコピペしないからわからないが、どうやら、p160にうpだてすると、 Railsのviewの処理が100倍遅くなるらしい。今年に入ってからの話。
164 名前:デフォルトの名無しさん [2010/02/03(水) 18:15:37 ] >>158 どうもありがとうございました このサンプルで動いている環境もあったので混乱していましたが 使っているバージョンが違っておりました
165 名前:デフォルトの名無しさん [2010/02/03(水) 22:07:55 ] はてなブックマーク(エクスポートしたデータ)から タグを指定して、一部を抽出するプログラムを書きたいです。 require 'rubygems' require 'hpricot' require 'open-uri' doc = Hpricot(open("dump.htm")) (doc/:a).each do |para| if para.attributes['tags'] = "microsoft" puts para end までは書いたのですが、別のファイルに保存する方法が分かりません。 よろしくお願いします。
166 名前:デフォルトの名無しさん [2010/02/03(水) 22:14:09 ] open('output', 'w') do |out| ... end の中に最後の4行をまるごと入れて、puts を out.puts に。