1 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:21:25 ] プログラミング言語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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
65 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 19:03:00 ] >>63 普通のRubyはCで書いてある Cで書いてあるので拡張ライブラリはCで作るとよく動く 現在のCのバイナリはだいたい同じように動作することが期待できるのでRubyスクリプトを一度書けばどこでも動く JRubyはJavaで書いてあるというかJavaで動くというかJava仮想マシンJVM上で動作する Javaで書いてあるので拡張ライブラリはJavaで作ると普通に動く おまけにJavaプログラムの一部として埋め込むことも実行することもJavaのライブラリを呼ぶこともできる 通常のRuby(Cで書かれているので区別のためにCRubyと呼ぶ)と同じように動作するように作ってあるものの たまーに動作が違う部分が混じってることもないわけではないんだが いちいちスクリプトレベルで対処するのも面倒だしそれこそ煩雑なので無視 本質的にはJVMのぶんだけJRubyのほうが遅い ただ、JVMを常に起動してる場合は遜色ないか、JRubyのほうが処理が速いこともある
66 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 06:11:28 ] ,―ヽ____、― ,/ ノ ヽ ~\ / ノ IPA ヽ ~\ / ノ ヽ、 `ヽ | ノ / ̄\ / ̄~ヽ ヽ i | ノ | ノ \ | <●> <●> ( ) \ | | | i / | / ヽ レ i (●_●) / i、 ,-――-、 ・ / i、 <(EEEEE)> ∵/ まピョーん☆ IPA Rubyをこれからもよろしく i、 \___/ _/ \ ,ノ ,,.....イ.ヽヽ、ー-―一ノ゙-、. : | '; \_____ ノ.| ヽ i | \/゙(__)\,| i | > ヽ. ハ | ||
67 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 10:43:59 ] おまえら1.9.1更新しろー ttp://sourceforge.jp/magazine/09/12/08/1011230 と思ったがインストーラつきを公開してる人はまだいないのね
68 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 10:47:19 ] みんなに広まってからアップグレードする どうせチェックにしか使ってないし、自分だけ「みんなと違って最新」だと意味ないし
69 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 11:01:47 ] >>68 安心しろ 1.9.1を普段使ってる奴は普通にアップグレードするし、 1.9.1を自分のスクリプト用のチェックにしか使ってない奴は 「この人のスクリプト俺の1.9.1-p0(しかもmswin32)だと動かないんすけどー」とか言ってきたりはしない とっととアップグレードすれ
70 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 11:14:16 ] head使いには関係ないしな。
71 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 11:19:29 ] というか、パッチレベル0を鬱陶しいと思ってる人にこそ、 「1.9.1は最新版でしかチェックしてません」と公言するのをお勧め そうしないといつまでたってもだらだら残るぞ 自分のサイトに最新版へのリンクでも張っとけ
72 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 11:25:34 ] ~/work/source/ruby-1.9.1-p243$ make uninstall make: *** ターゲット `uninstall' を make するルールがありません. 中止. ぬう てか前回のconfigureにどんなオプションつけたか忘れたしどこにインストールされたか調べるのめどい
73 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 11:45:58 ] 「引数はHashの入ったArrayにしろ」って英語の警告でどう言えばいい?
74 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 11:54:23 ] raise ArgumentError, "invalid argument, RTFM"
75 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 12:12:55 ] ArgumentError を出したなら「引数が不正です」は言う必要なくね
76 名前:デフォルトの名無しさん [2009/12/09(水) 12:35:33 ] >>73 スレ違い。 このへんで聞け。 pc12.2ch.net/test/read.cgi/tech/1193554741/
77 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 12:37:03 ] URLを間違えた。こっちだ。 pc12.2ch.net/test/read.cgi/tech/1224696505/
78 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 12:44:01 ] >>73 Hashを要素にしたArrayって英語でなんて言うんだろうね よく使われるんだから呼び名がありそうだけど
79 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 12:45:27 ] >>78 Hashを要素にしたArrayって日本語でなんて言うんだろうね よく使われるんだから呼び名がありそうだけど
80 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 12:55:43 ] >>78 Hashed Array
81 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 13:25:14 ] 初心者以前の入門者の質問で申し訳ないのですが Rubyの絵本で勉強を始めましたところ 「配列要素の代入と参照」の項のサンプルコードで躓きました。 n cats = [] = 1 cats[0] = "Kuro" cats[1] = "Tama" cats[2] = "Mike" cats[3] = "Tora" puts cats[n] cats[0] = "Shiro" このサンプルの1行目で以下のようなエラーが出てしまいます hello.rb:1: syntax error n cats = [] = 1 ^ ググりまして「syntax error」が文法だということは分かりましたが 文法はまだ「文字列表示」と「変数」と「文字列」しか学習出来ていません 本の通りに入力しただけで、この1行目について本には一切説明がないので どのように文法が違うのかも分からない状態です この1行目がどのような意味なのか教えていただけないでしょうか よろしくお願いいたします 環境 CentOS 5.3 ruby 1.8.5 (2006-08-25) [x86_64-linux]
82 名前:81 mailto:sage [2009/12/09(水) 13:28:11 ] >n cats = [] = 1 >^ スペースが省略されて「^」の位置がずれてしまいました 「^」は=と1の間にあるスペース部分を指しています
83 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 13:31:59 ] 本書くとき間違えたんだろうな 売れてないのか何なのか正誤表にはとくに載ってない おそらくこれが正しい n = 1 cats = [] cats[0] = "Kuro" cats[1] = "Tama" cats[2] = "Mike" cats[3] = "Tora" puts cats[n] cats[0] = "Shiro" putsでは cats[1] の Tama が表示されるはず
84 名前:デフォルトの名無しさん [2009/12/09(水) 13:38:25 ] 質問 メソッドの中から、そのメソッドを呼び出しているメソッドの名前を知りたいのですが、 Kernel#caller以外の方法はありますか? 現在、caller が返す配列の中身に大してパターンマッチングを行って メソッド名を切り出しているのですが、もっとよい方法がありそうな気がしまして
85 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 13:42:44 ] 個人的には、空の配列に添え字代入のサンプルを書く本はあんまし好きじゃない せっかくのRubyなんだからもっとコレクションとしての扱い方から見せたほうがいいと思うなあ cats = [] cats << "Kuro" cats << "Tama" cats << "Mike" cats << "Tora" p cats puts cats[1] cats[1] = "Shiro" p cats こっちのほうがきっと驚いてもらえるぞ 「配列ってなんかざくざく入るんだね!」みたいな
86 名前:81 mailto:sage [2009/12/09(水) 13:43:10 ] >>83 ありがとうございます 無事Tamaを表示することができました。
87 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 13:58:35 ] >>80 うそをいうな。
88 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 14:02:07 ] >>87 では真実を
89 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 14:20:00 ] Hashed Array = Associative Array = rubyのHash
90 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 14:20:08 ] array of hashes じゃないの?
91 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 14:57:30 ] array containing hash
92 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 14:59:57 ] 泣きながらF5連打してたらこまるので >>84 それが普通の手段
93 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 15:03:04 ] >>84 ,92 1.8.7以降を使ってるなら、__method__で。
94 名前:93 mailto:sage [2009/12/09(水) 15:04:07 ] あ、ごめん、見間違えた。 呼び出し元を知るには、当然callerですね。
95 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 05:12:13 ] 独習Rubyってどうよ?
96 名前:デフォルトの名無しさん [2009/12/10(木) 08:41:52 ] Googったんですけどわかんなかったんで教えてくださいおながいします。 「AはBクラスのインスタンスである」ってのは A === B って書きますが、「AはBクラスの インスタンスでない」ってのはどう書けばいいでしょうか?
97 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 09:16:33 ] === の否定はないから全体を !
98 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 09:20:24 ] > 「AはBクラスのインスタンスである」ってのは A === B って書きますが いいえ a.kind_of?(B) とでも書いてください 特定クラスのインスタンスでないということをチェックしたい場合は unless a.kind_of?(B) と書くか、または if !a.kind_of?(B) と書きます
99 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 09:22:57 ] >>96 A === B というのはA(レシーバ)の持つ===というメソッドに引数としてBを渡すということ(A.===(B)と同じ) メソッド===はレシーバのクラスによって意味が違う ttp://www.ruby-lang.org/ja/man/html/Object.html#self.3d.3d.3d Classクラス(の親クラスであるModuleクラス)の===メソッドは以下の意味 ttp://www.ruby-lang.org/ja/man/html/Module.html#self.20.3d.3d.3d.20obj だから「AはBクラスのインスタンスである」を書くとするならBのメソッドなので B === A としなければならない 目的のはinstance_of?の否定かkind_of?の否定か ttp://www.ruby-lang.org/ja/man/html/Object.html#instance_of.3f
100 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 09:37:35 ] >>99 初心者に instance_of? を勧めるのは正直あまりお勧めしない irb> p 12.instance_of?(Integer) false irb> p 12.instance_of?(Fixnum) true irb> p 10000000000.instance_of?(Fixnum) false irb> p 10000000000.instance_of?(Bignum) true irb> require 'uri' irb> p URI.parse("example.com/ ").instance_of?(URI) false irb> p URI.parse("example.com/ ").instance_of?(URI::HTTP) true 間違ってないけどー 動作合ってるけどー でもー
101 名前:96 [2009/12/10(木) 09:50:45 ] みなさんありがとう。Googり方が悪いんだよカス!とか言われると思ってました。
102 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 09:52:57 ] === が検索できるようになってたら罵倒されたと思う
103 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 09:53:39 ] >>101 いちいちスレあげんなカス!
104 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 09:57:37 ] >>65 分かりやすい解説ありがとうございました。 イメージがつきました。
105 名前:デフォルトの名無しさん [2009/12/10(木) 14:00:10 ] >>103 うるせーバカ
106 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 16:30:19 ] 2chブラウザ使っている人で、スレッドの位置を気にしている人はいるの? 俺は履歴とかブックマークからスレッドにたどり着いているので、板一覧とか 見ていないし、スレッドの位置も特に気にしていない。 そもそも、こういう掲示板のage/sageって自由であるべきで 他人が強制するものではないと思う。
107 名前:デフォルトの名無しさん [2009/12/10(木) 19:27:14 ] aというハッシュのキーにclassがあったらその値に " button"を追加して、なかったら"button"だけ、という記述を 下記のように書いたのですが、 もうちょっといい書き方ないもんでしょうか? [{}, {:class => "hoge"}].each do |a| a[:class] = (a[:class] ? a[:class] + " ": "") + "button" #←ここをなんとかしたい p a end
108 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 19:48:10 ] マジレス if a[:class] a[:class] += ": button" else a[:class] = "button" end ネタレス a[:class] = [a[:class], "button"].compact.join(": ")
109 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 21:16:51 ] デフォルト値が設定されてるとおかしなことになりそうな気が…
110 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 21:19:23 ] デフォルト値を設定すること自体がおかしいだろ
111 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 21:27:35 ] 二時間近く>>108 に突っ込む奴がいないわけだが 年末でいつもの人は忙しいのかw
112 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 21:53:53 ] デフォルト値は設定しちゃダメなの?
113 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 23:00:34 ] 配列aとbが対等な関係にある場合に、 a.zip(b) とするのは対称でなくて見た目が悪いと思うのですが、どう思いますか?
114 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 23:03:00 ] それ感じたことがある。けれど代替案が見つからない。
115 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 23:03:18 ] 別にどうも思いませんが まあ気になるならArrayクラスのクラスメソッドにでもしてしまうとよろし Array.zip(a, b) みたいなのなら問題あんめえ
116 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 23:04:58 ] >>115 それいいね。それなら、3項間以上でもすっきりかけるね。
117 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 23:05:20 ] Array.zip(a, b) みたいな形だとどう?
118 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 23:05:42 ] ついでにEnumeratorを返すようにしてほしいと思いませんか?
119 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 23:08:22 ] つーとむしろ Enumerator.zip(a,b) なんか変か?
120 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 23:34:04 ] >>107 [{}, {:class => "hoge"}].each do |a| a[:class] &&= a[:class]+" button" a[:class] ||= "button" p a end [{}, {:class => "hoge"}].each do |a| begin a[:class] += " button" rescue a[:class] = "button" end p a end def space_add h,s return nil if h.nil? h.replace( h+" "+s ) end [{}, {:class => "hoge"}].each do |a| space_add(a[:class],"buttom") || a[:class] = "button" p a end
121 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 23:53:39 ] >>113 ですが、新しいメソッド付加するほどでもないと思っていたら困ったことに・・・ ちなみに本当にほしいものは、長いほうに合わせて [[3, 1], [4, 2], [5, 2], [6, 2]] です。メソッド追加しないと無理ですかね? ################################ irb(main):005:0> a = [1,2] => [1, 2] irb(main):006:0> b = [3,4,5,6] => [3, 4, 5, 6] irb(main):007:0> a.zip(b) => [[1, 3], [2, 4]] irb(main):008:0> b.zip(a) => [[3, 1], [4, 2], [5, nil], [6, nil]]
122 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 00:02:14 ] 追伸: しかも欲しいものは配列じゃなくてEnumeratorです。 > zip(a,b).each{|e| p e} [1,3] [2,4] [2,5] [2,6] みたいに。
123 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 00:08:32 ] twitterとかで、投稿時刻を HH:MM:SS ではなく、「約15分前」「約2時間前」というふうに表示してますけど、 これをやってくれるRubyのライブラリはありますか。 ついでにJavaScriptのライブラリもあるとうれしいです。
124 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 00:35:15 ] ありません。自分で書いてください。 (Time.now.to_i - time.to_i) を適当に加工したらできるし。
125 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 00:45:02 ] railsならdistance_of_time_in_words
126 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 01:57:30 ] >>125 >distance_of_time_in_words Thank you very much! >>124 F***!
127 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 06:25:36 ] RubyはLispの替わりで使えるのか?
128 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 07:49:58 ] 文法が全然違うからLispのソースはまず動かないよ
129 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 08:25:43 ] >>126 Railsならそう言えよ。
130 名前:デフォルトの名無しさん [2009/12/11(金) 12:04:28 ] >>125-126 RailsのActionPackのActionViewっぽいね。これだけ使えないのかな
131 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 12:27:45 ] RailsはRailsで
132 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 13:40:27 ] >>130 require 'active_support' require 'action_view/helpers/date_helper' include ActionView::Helpers::DateHelper あー、あとI18n関係の設定がいるかな。以外と面倒かも。
133 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 13:57:40 ] そもそも単独で使うようにできてないからな たった一つの処理のために本質でないファイルをウンコのごとく読まなきゃならんし割に合わん
134 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 14:46:29 ] >>133 「ウンコのごとく読む」っていう比喩がわかんない。 どんな風に読むことを「ウンコのごとく」って言うの?
135 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 17:58:38 ] >>129 Railsだと分かっていたら答えられたとでもいうのかよwwww
136 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 18:23:13 ] たぶんYESなんじゃないかな
137 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 19:21:02 ] ,―ヽ____、― ,/ ノ ヽ ~\ / ノ Ruby ヽ ~\ / ノ ヽ、 `ヽ | ノ / ̄\ / ̄~ヽ ヽ i | ノ | ノ \ | <●> <●> ( ) \ | | | i / | / ヽ レ i (●_●) / i、 ,-――-、 ・ / i、 <(EEEEE)> ∵/ 楽しいプログラミング言語はIPA Rubyだけ i、 \___/ _/ \ ,ノ ,,.....イ.ヽヽ、ー-―一ノ゙-、. : | '; \_____ ノ.| ヽ i | \/゙(__)\,| i | > ヽ. ハ | ||
138 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 21:48:40 ] モジュールの定義の有無を確認する方法ってありますか? method_defined?のモジュール版みたいなのを探しているのですが・・・
139 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 21:57:29 ] >>138 require 'net/http' Object.const_defined?(:Net) #=> true Net.const_defined?(:HTTP) #=> true
140 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 23:46:17 ] メソッド中で変数を書き換えられる場合と書き換えられない場合の区別がいまだに分からないのですが、 X=[1,2,3] def f X[1]=4 end 大文字(const配列?)のくせにこれは書き換え成功する。 x = 1 def g x=2 end これはスコープ内で局所変数と解釈されて、書き換えられない。 Y=1 def h Y=2 end これは定数書き換えが不正と解釈されて通らない。 h()は仕方ないとしても、g()と同じ動作は欲しいので、どう実現すればいいか教えてください。 ポインタっぽいのがあると一番いいのですが・・・。
141 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 23:49:33 ] >>140 >X=[1,2,3] >def f X[1]=4 end >大文字(const配列?)のくせにこれは書き換え成功する。 前後にX.object_idを表示してみると、「同じオブジェクト」を 指したままであることが確認できるはず。 配列のような内部に状態を持つオブジェクトの状態を変更することは 定数という観点でいうと「書き換え」ではない。 >x = 1 >def g x=2 end >これはスコープ内で局所変数と解釈されて、書き換えられない。 >h()は仕方ないとしても、g()と同じ動作は欲しいので、どう実現すればいいか教えてください。 >ポインタっぽいのがあると一番いいのですが・・・。 オブジェクトと変数の区別を理解してから出直しておいで。
142 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:07:05 ] 返信ありがとうございます。 オブジェクトと変数の区別があるのは分かりますが、 X = Integer(1) と Y = [1,2,3] はどちらも 定数=「オブジェクトのインスタンス」 に見えるのですが。
143 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:12:11 ] irb(main):001:0> CONS = [0, 1, 2] => [0, 1, 2] irb(main):002:0> CONS = ["A", "B", "C"] (irb):2: warning: already initialized constant CONS => ["A", "B", "C"]
144 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:12:28 ] 定数は参照の付け替えが出来ないだけで 参照先のオブジェクトが内部状態を変えることには関知しない
145 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:18:59 ] では class Integer def f self = 8 end end X = Integer(3) X.f() p X みたいな感じで内部状態を変えることは原理的には可能でしょうか?
146 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:23:02 ] >>145 オブジェクトと変数の区別を理解してから出直しておいで。
147 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:25:02 ] いや、もちろん @なんとか=8 でしょうけど。
148 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:29:09 ] オブジェクトと変数の区別を理解したいので 質問を続けます。
149 名前:デフォルトの名無しさん [2009/12/13(日) 00:29:25 ] >>145 Integerのような組み込みのクラスだとそれできないから、i++とかインクリメンタル演算子が実装できないんだよね・・・
150 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:31:32 ] >>149 selfを変更できるクラスはRubyにはないぞ データ格納領域がRuby的に保護されてて触れない
151 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:36:43 ] selfはたんに気分で書いてしまったので気にしないでください。 (私のミスです) 自分で定義したクラスなら class MyInt def initialize(i) @i=i end def ++() # 前置演算子の定義の仕方はしらないですが・・・ @i+=1 end end でいいわけですよね。
152 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:36:49 ] もとのxの件はオブジェクトと変数の違いではなく ローカル変数のスコープの問題だねえ。
153 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:38:42 ] >>152 そうですね。本当はそれが知りたかったわけですが・・・。 グローバル変数にすればいいんだけど、なんか気持ち悪い。
154 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:41:31 ] なんか引数で参照渡して、それを書き換えればいいんだよ〜 みたいなのはないんでしょうか? ・・・たぶんないんでしょうね
155 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:44:42 ] 引数で渡していいならArrayみたいな内部状態を持つオブジェクトに包んで 渡すくらいかね。
156 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:48:32 ] 初心者なんで間違っているかもだけど、参照渡しだから引数に渡された オブジェクト自体を書き換えることはできるよね? def method(str) {str.gsub! /a/, '!'} x = "katakana" puts x #=> "katakana" method x puts x #=> "k!t!k!n!"
157 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:48:47 ] やっぱそれですか。 議論によって問題の所在がはっきりしてきました。 おつきあいありがとうございます。
158 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:51:40 ] >>156 それはたぶん文字の配列わたしてるですね。
159 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:53:10 ] えっ?
160 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:53:23 ] そうだ、eval使おうか(笑)!
161 名前:156 mailto:sage [2009/12/13(日) 00:54:39 ] >>158 Ruby のStringオブジェクトの内部ってArrayで表現されていたんですか? 知りませんでした。>< C言語みたいですね。
162 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 00:56:25 ] 158ですが、私も初心者なので、フォローお願いします。 普通の言語なら文字列の扱いはそうなってるんじゃないかなぁ?
163 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 01:06:12 ] 何の意味があるか分からない思いつきだけど通りました。 X='12' def f X.gsub!('12','2') end f() p eval(X)
164 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 01:22:35 ] >>162 文字列がイミュータブル(変更不可)な言語は普通にあるよ Pythonなんかもそう >>> s = 'abc' >>> s[0] = 'A' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment 上のごちゃっとしたところをまとめると * 変数はオブジェクトに付けられた矢印(あるいはラベル)。例: a = [1,2,3] * 変数を通じてオブジェクトを操作することが出来る。例: a[0], a[1] * Rubyの文字列はミュータブル(変更可能)なので 変数が指すオブジェクトの中身を書き換えることができる。例: a[1] = 20 # [1,20,3]
165 名前:156 mailto:sage [2009/12/13(日) 01:24:26 ] >>162 自分なりに調べてみました。 def method(obj) obj.object_id end str = "katakana" p str.object_id #=> 69877275538400 p method str #=> 69877275538400 この結果から分かりますが、上記の変数 str と obj は同一のオブジェクトを指しています。 したがって、変数 obj に対して破壊的なメソッド(オブジェクト自体を変更するメソッド)を使うと str が指しているオブジェクトも同一ですから、objに対して行った操作が反映されている、というわけですね。 あってますか? あと、Stringオブジェクトの内部表現については詳しくしりません。 Rubyのソースを読んでみればわかると思うのですが、まだそこまでのレベルではないので... スレ汚し失礼しましたです。
166 名前:164 mailto:sage [2009/12/13(日) 01:27:10 ] 例が文字列じゃなく配列になってた。それぞれ以下に読み替えて 例: s = '123' # sは文字列 '123' を指す 例: s[0], s[1] # sの一文字(バイト)目と二文字目を取得 例: s[1] = '5' # sの一文字目を '5' に変更 >>165 あってるお 内部表現なんて実装次第なんだから 出来ることを正確に把握するほうが大切
167 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 01:32:12 ] カビの生えた例だけどこんなのも貼っとく a = [0, 1, 2] b = a b[1] = 10 これでaが何になるのかわからなかった人は横着しないで入門書嫁
168 名前:140 mailto:sage [2009/12/13(日) 08:24:28 ] 昨日の者ですが、 結局クラスでラップする感じになるのかなぁ。 下は意図した通りに動きます。 def State(val) Monad.new(val) end class Monad def initialize(val) @val=val end attr_accessor :val end def f(st) st.val += 1 end X = State 1 f(X) p X.val
169 名前:140 mailto:sage [2009/12/13(日) 08:30:00 ] なるほどRubyって関数型言語だったのか!
170 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 08:33:09 ] Dir.globが探索するファイル/ディレクトリの条件って何ですか? i=0 Dir.chdir("C:\\"){Dir.glob('**/*'){i+=1}} p i =>150660 dir c:\ /s /b /a|find /c /v "" =>154483 C:\の全ファイルを選択→プロパティのファイル数+フォルダ数 =>153390 1〜2違うどころではないんだが・・・('A`)
171 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 09:22:12 ] >>170 DOSのコマンドを知らないから憶測だけど、 "."と".."を含めてる含めてないとか?
172 名前:デフォルトの名無しさん [2009/12/13(日) 09:40:23 ] >>170 日本語ファイル名が膨らまれているとか
173 名前:デフォルトの名無しさん [2009/12/13(日) 11:00:49 ] るびまのページいま停止中?
174 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 11:22:02 ] Ω ∅
175 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 11:44:38 ] p "あ" とすると、 "\202\240" 8進数で返ってくるのでわかりにくいです。 16進数で帰ってきて欲しいのですが、どうすればいいのでしょうか?
176 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 12:05:56 ] String#inspect の定義を変更すれば良い。 class String; def inspect; "\""+ self.each_byte.map{|c| "\\x%02x" % c }.join + "\""; end; end
177 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 12:15:41 ] 0x20...0x80はそのままにした方が目に優しそうだ あと?\と?"は別扱いでとか考え出したら面倒くせええ
178 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 12:17:32 ] >>176 それ、他のオブジェクトをinspectするときに影響が出ちゃわない?
179 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 13:03:51 ] 8進表記されてるのだけ、16進に直すのはどう? class String alias _inspect inspect def inspect self._inspect.gsub(/\\(\d+)/){ "\\x{%02x}" % $1.oct } end end
180 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 13:06:37 ] 文字列を16進表記にする関数的メソッドを定義するべきだと思うなあ
181 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 13:40:29 ] 直前の式の返り血が入ってる組み込み変数とかってないですか? Rubyを関数電卓代わりに使いたいんですけど
182 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 13:44:29 ] >>181 irb でよければ _ だと思う
183 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 13:44:54 ] >>181 irb irb> 1+2 3 irb> _ +4 7 まあ返り値ならなんでもいいんだけど irb> Time.now Sun Dec 13 13:40:19 +0900 2009 irb> _.year 2009
184 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 13:48:02 ] ありがとうございます できればirbじゃなくても使いたいんですが無いですか
185 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 13:52:21 ] 関数の戻り値は最後の参照みてるんだし @かなにかに保持してくれるといいと祈り続けて早10年
186 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 14:08:15 ] >>179 俺もそれ考えたけど"\\1000"とかで困る
187 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 15:24:26 ] >>180 こうするのが一般的? p "あ".unpack("H*")
188 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 18:12:58 ] PHPのcall_user_funcにあたる機能はRubyでも実現できますか? 実行時に呼び出すメソッドを切り替えたいのです。
189 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 18:15:34 ] >>188 send, evalなど
190 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 18:24:48 ] >>188 ありがとうございます。
191 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 18:25:33 ] 間違えた…>>189 でした
192 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 18:49:28 ] 異なる文字コードの文字列を同時に出力するとかじゃない限り 適切に漢字コードを指定しておけばちゃんと日本語表示されるんじゃないの? $KCODE = 'S' p "あ" > "あ" 文字じゃないバイナリ列とか表示させるときに16進文字列がいいのなら そういう出力メソッドを作るなりすれば
193 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 19:07:54 ] 1.9 なら encoding を文字列が持ってるからできるが、1.8 なら無理だね。 あと $KCODE は 1.9 じゃ廃止だ
194 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 01:00:47 ] module Hoge def f1 end def f2 end ・・・ってかんじでメソッドがたくさんあったときに module_function :f1,:f2,... って全部書くしか、外からアクセスする方法はないでしょうか? end
195 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 01:05:21 ] include Hoge で f1 や f2 を取り込めるよ
196 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 01:12:46 ] 名前空間は汚染したくないので Hoge::f1 というアクセスだけ許したいのですが・・・ いちいち書くのは保守が面倒だと思ったので。 いま考えてるのは module_function self.methods.join(' ') #未完成 みたいな怪しい方法です。
197 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 01:20:55 ] module M def m1; "m1"; end extend M end M.m1 #=> "m1"
198 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 01:22:36 ] どんぴしゃです! ありがとうございます。
199 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 05:51:45 ] メイン関数は書いた方が良いのでしょうか?
200 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 06:07:46 ] >>198 リファレンスより If used with no arguments, subsequently defined methods become module functions. モジュール定義の頭に module_function と引数なしで書いておけば 以後に定義するメソッドにはすべて module_function が適用される。 public, private とかと同じだよ。
201 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 06:28:54 ] >>199 メイン関数って スクリプトを実行した時に処理系が最初に呼び出すメソッド、という意味? そういう意味なら、書けない、でFA そんな取り決めないし
202 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 07:36:02 ] >>199 def main() しとけばRubyがエントリポイントとして呼んでくれる、とかいうことはないよ ただ if __FILE__ == $0 ... って常套句を使って少し似たようなことはできる
203 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 08:32:24 ] >>199 ruby -e 'p self'
204 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 08:53:07 ] 俺最初なんとなくmainてメソッド書いて if __FILE__ == $0 main end って書いてたな
205 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 11:18:57 ] >>200 これでもいいなぁ。 ttp://ruby-doc.org/core/classes/Module.html#M001642 ですね。 初心者はドキュメントのどこを見ればいいかも分からないので、とても助かります。
206 名前:デフォルトの名無しさん [2009/12/14(月) 11:43:32 ] >>199 いろんなソース読んだ限り、 Rubyではこんな感じで書いている人が多い。俺も習ってる class Application def initialize end def run # ここにメイン処理 end end if __FILE__ == $0 Application.new.run end
207 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 13:15:18 ] 待て、$0って廃止予定じゃなかったか
208 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 13:29:31 ] 心配なら$PROGRAM_NAMEを使っておけ。
209 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 13:30:08 ] あと10年は1.8使い続けるから無問題
210 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 13:33:57 ] まあ、$0 が動かなくなる頃にはそのスクリプト本体もどっか手入れしないと動作しないとは思う そのときにその人に直してもらうことにして $0 は使ってもよし $PROGRAM_NAME はバージョンによらず使えるんだっけ?
211 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 13:38:35 ] 質問が有ります。 引数があれば引数で指定したファイルに 引数がなければ標準出力(もしくはエラー出力)に文字列を出したい場合はどのように書いたものでしょうか?
212 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 13:46:34 ] そのまんま if とかで書けばいいと思うよ!
213 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 13:48:20 ] if (ARGV[0]) $stdout = File.open ARGV[0] end こんな感じニカ ?
214 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 13:51:15 ] こんな感じか if ARGV.length > 0 f = open(ARGV[0], "w") else f = $stdout end f.write "hello"
215 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 13:52:13 ] >>211 def output if filename = ARGV[0] File.open(filename, "w"){|f| yield f } else yield $stdout end end output{|io| io.write "a"} closeめんどくせえ
216 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 13:55:43 ] > closeめんどくせえ うむ $stdout.close がIOError で拒否られたときは軽く眩暈がした
217 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 17:25:48 ] >>211 個々のプログラムでそういうことをするより シェルのリダイレクトやパイプを使いなさいと言いたいのだが 出力先をプログラムの引数として受け取らなければならない理由はなんだろう?
218 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 18:09:37 ] STDOUT にログ出力をするタイプのプログラムはたいてい引数指定 たとえば wget
219 名前:211 mailto:sage [2009/12/14(月) 19:36:53 ] >>212-215 ありがとうございます、ありがとうございます いろいろ方法ありますね。 >>217 事の発端は、最初は標準出力に出してリダイレクト(?でしたっけ)でファイルに書いていたのですが、 ファイルには出したくないBenchmarkとかで計測した結果も表示したくなってそうすると、 どうしたものかって感じになりました。 こういう時って計測結果などはエラーに出せばいいもんですかね?エラーに出していいものかどうか。 >>218 wgetは引数でファイル指定でしたっけ
220 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 20:14:48 ] wget -O
221 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 20:19:22 ] 質問です。 時間の計算するにはどのクラスを使えばいいでしょうか? 具体的には時間の差分を加算したりしたいのです。 例えば、 elapsed_time += Time.local(2008,12,14,1,50,10) - Time.local(2008,12,10,1,50,10) のような感じ(実際にはTime.localの中身は可変) elapsed_timeをTimeにする場合だと初期化にTime.at(0)しても Thu Jan 01 09:00:00 0900 1970 になったり、 0からの時間を考えられていないようなのです。
222 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 20:24:17 ] >>221 基本的には「ない」 61s が 1m1s になるような、秒数のみを表すクラスというようなのは標準では存在しない
223 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 20:25:23 ] >>221 Time.at(0).to_i
224 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 20:26:07 ] >>222 そういうことか、>>223 は忘れて
225 名前:221 mailto:sage [2009/12/14(月) 20:35:18 ] ありがとうです ないですかー。 何が困るかというと、加算した差分の時間を例えば書式で出力するときにstrftimeみたいなのを自前で書かないといけないってことですよね。 誰かそういうの作ってないか探してみたんですがどうも無いようで・・・。 active_supportとかの日付の拡張あたりでなんとかならないもんですかね。
226 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 20:49:16 ] time = 100000 sec = time % 60 min = (time / 60) % 60 hour = (time / (60 * 60)) % 24 day = time / (24 * 60 * 60) puts "%dday %d:%d:%d" % [day, hour, min, sec] こんなんでいいか?
227 名前:221 mailto:sage [2009/12/14(月) 21:01:02 ] >>226 ずばりそのまま書いてくださってありがとうさんです。 使わせていだきます。 ActiveSupport使ってもこんな感じですか。かわらないやw time = 100000 sec = time % 60 min = (time / 1.minute) % 60 hour = (time / 1.hour) % 24 day = time / 1.day puts "%dday %d:%d:%d" % [day, hour, min, sec]
228 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 22:30:38 ] 二年ほど前にdevでTimeSpanというクラスが提案されたことはあるみたいだねー。 立ち消えしてるのかな、これは。
229 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 22:34:40 ] .NETからそのままいろんなクラスパクってくりゃいいのに
230 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 22:36:53 ] やだあんな使いにくいAPI .NET好きな人はIronRuby使ったらいい
231 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 00:52:12 ] 数値積分や微分できるようなライブラリとかってないですか? Rubyを関数電卓代わりに使いたいんですけど
232 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 00:58:10 ] パッチレベル上がったのにmingwでmake通らん
233 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 01:01:41 ] >>231 よくわからんけど「Ruby 数値積分 微分」でぐぐってみた ttp://jp.rubyist.net/magazine/?0006-RLR こっちは結構すごそうだぞ ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/39950
234 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 01:01:55 ] GSL(GNU Scientific Library)のRubyバインドがあるようだ。 詳しくは見ていないけど、数値積分や微分はあるみたい。 ただし、最後のリリースが約2年前というのが気掛かり。 十分枯れているのだろうけれど、新しめのRubyで動くかは不明。 ところで、本格的な数式処理なら、Maximaとか使ったほうがいいんじゃない?
235 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 01:05:33 ] かぶりんこ。
236 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 01:43:08 ] ありがとうございます 導入めんどくさそうですけど頑張ってみます
237 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 02:03:40 ] 数値積分や微分できるような関数電卓を持っていたら、それを使う。 でなければ、カシオの計算センターとか。 自前のコードからコールしたいなら、ついでにそっちも自分で書いてしまう。 てのは、いかがでしょう。
238 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 06:35:31 ] >>219 > ファイルには出したくないBenchmarkとかで計測した結果も表示したくなって 標準ライブラリの Logger を使ってみるというのは? jp.rubyist.net/magazine/?0008-BundledLibraries
239 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 09:20:54 ] いわゆる数値計算には向かないよね、Ruby
240 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 09:53:38 ] しかし、「5分で作って5秒で実行させる」ような、「計算機なんだから計算できてもいいんじゃね」という カジュアルなデータ計算をさせることが期待されるプログラミング言語のトップグループにいることは間違いない 専門数値計算ソフトやC(やJava)を持ち出さなくてもいい程度の計算なら、もっと気楽にできてもいい 高校や大学1年教養の宿題をうっかり解けてしまうような、そんな用途があってもいいはず
241 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:06:28 ] そういう用途ならあるげぶらーじゃね
242 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:09:15 ] Rでもいいしますまてぃか覚えるのでもいいしいっそExcelでも充分使える範囲である可能性も高いな
243 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:20:55 ] カタカナでおk
244 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:28:35 ] アールやエクセルってなんか変だろ
245 名前:221 mailto:sage [2009/12/15(火) 15:52:28 ] >>238 ああ、その手もありました!その名のとおりログのこりますしLoggerいいですねw
246 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 15:56:00 ] 数値計算したいんなら構文的にPython+numpyのほうがいいよ。Rubyには不向き。
247 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 18:38:35 ] >>221 ワンライナーで時間の計算をする時に24時間以内なら ruby -rtime -e "a=Time.parse('09:08:20')-Time.parse('01:40:02');puts Time.at(a).utc.strftime('%H:%M:%S')" とかしたりしますな
248 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 18:47:01 ] ていうか、やろうと思えば結構できるんだよ でも自己責任の域を出れない
249 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 18:54:35 ] name=gets puts "私は#{name}です" nameに日本語を入力するとエラーが出てしまいます C:/My Documents/g/Ruby/test.rb:4:in `<main>': incompatible character encodings: ASCII-8BIT and Windows-31J (Encoding::CompatibilityError) これはどういったエラーなんでしょうか?
250 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 19:03:50 ] >>249 初心者は Ruby1.9 使うなってこれだけ言われてるのになんでわからんのだエラー
251 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 19:08:17 ] それってスクリプトつーか内部文字列がWindows-31Jで標準入力がASCII-8BITってこと? Windows-31Jがロードできたら標準入力もそっち使うようになってなかったっけ どういうときにそんなことになりえるのか知りたい、誰か教えて
252 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 19:08:20 ] スレタイに【1.9】 【使うな】っていれとけよ
253 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 19:21:35 ] 【Windows】【使うな】とか
254 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 19:36:02 ] 順番からいって標準入力がWindows-31Jか、なんでスクリプトがASCII-8BITになったんだろう? とりあえず>>249 は1.9使い続ける気ならマジックコメントを使えるようになるべき
255 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 19:38:08 ] MCって一番やっちゃいけないタイプの変更だよな
256 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 19:50:04 ] スレチだが微積やってくれて感動した www.wolframalpha.com/
257 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 19:52:31 ] >>252 >>1
258 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 20:10:57 ] >>255 じゃあファイルごとに違う文字エンコーディングをインタプリタに知らせる方法を考えてくれ
259 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 20:18:58 ] いいこと考えた、ファイルは全部ASCII-8BIT相当にするってのはどう
260 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 20:25:36 ] これでますますPythonへの移行が加速しちゃうな。 マイナー環境に媚びすぎるあまり全員が等しくLoseしちゃうなんてあまりにも悲しい。
261 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 20:27:49 ] >>259 それ 1.8 じゃん…
262 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 20:29:51 ] やっぱ今からでもせめてデフォルトUTF-8に
263 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 20:32:17 ] >>262 マッキン使えマッキン
264 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 20:36:27 ] UTF-8-MACはUTF-8じゃありませんっていうか今すぐ滅びてくださいお願いします
265 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 22:35:13 ] >>264 Pythonはもろそれにぶつかったな。よくそれではまったよ。 あのさ、require 'foo' したときの、foo.rb または foo.so の在処をしるにはどうしたらいいんだっけ。 よく聞かれる質問だと思うけど、だれか教えて。
266 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 22:44:32 ] 1.8.6と1.8.7の違いってどこかにまとめられてますか?
267 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 22:47:55 ] >>265 前スレでみたのは gem which foo
268 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 22:57:27 ] $" または $LOADED_FEATURES
269 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:04:43 ] >>267 それは求めるものじゃないなー >>268 それはファイル名だけだよね。ディレクトリ名も含めたパスが欲しい。
270 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:10:31 ] それは提供されてない
271 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:10:37 ] >>265 結局こうしました $ ruby -r nkf -e 'puts $:.map {|x| Dir.glob("#{x}/nkf*") }.flatten' /usr/local/lib/ruby/1.8/i686-darwin10.0.0/nkf.bundle
272 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:45:36 ] >>266 svn.ruby-lang.org/repos/ruby/tags/v1_8_7/NEWS
273 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:59:23 ] >>272 Thanks. わーおEnglishじゃん!開発者は日本人が多いのに、ぷんぷん!
274 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 00:05:46 ] >>272 ていうか、これ読んで分かるの開発陣だけだから。 Ruby利用者がよんでもわけわからん。
275 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 00:12:20 ] これを元にした噛み砕いたユーザー向け解説というのを誰か第三者が作ってきちんとフォローすべきなんだ でも、Ruby(特に日本の)ではそういうのが特にないんだよね 商売っけがないというか、目立ちたがり屋がいないというか ちなみにオフィシャルの仕事ではないのでこれ以上は望んじゃ駄目よ 取り巻きの役目
276 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 00:15:59 ] user visible feature changes と書いてあるんだが…
277 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 00:18:07 ] これとRubyリファレンスマニュアルを併用すればきっと・・!
278 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 00:18:17 ] るびきち氏の日記に載ってたのはリリース当時欲紹介されてた気がする。 ttp://d.hatena.ne.jp/rubikitch/20080508/ruby187
279 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 00:31:54 ] >>278 神いわゆるゴッド
280 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 01:55:08 ] >>275 >ちなみにオフィシャルの仕事ではないのでこれ以上は望んじゃ駄目よ なんで? ちなみにPythonはα版でもこれだけの出来。 ttp://docs.python.org/dev/whatsnew/2.7.html これだけの差がありながら、「Rubyはドキュメントが揃ってる」とぬかす古参上級者がほんとジャマ。
281 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:03:55 ] Andrew Kuchlingは取り巻きどころかPythonの主要開発者だな Python3.0のWhat's newはGuido書き下ろしだし ドキュメントは取り巻きに任せろってのはガンかもしれないね でもこれ本スレでやったらいいよ 初心者にはいい迷惑だ
282 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:11:24 ] >>280 人材が究極的に少ないから 現状に加えて一般向けにドキュメント揃えろなんて言ったらどんどんリリースが遅くなる 当事者だからという理由だけでできない人に無理やりやらせる理由はない 得意な人に任せておけばいい まあ初心者スレ向けでないのとドキュメント揃ってるほうだと言ってる人間が障害になってるのには同意
283 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 10:33:28 ] rubyの勉強をしろと言われ、perlのプログラムを渡された 雰囲気は似てるからrubyに書き換えて動作させてみろという perlもrubyもほとんど触ったことない俺にどうしろっていうんですか… 書き換え方にコツとかあるんでしょうか?元のperlプログラムにはサブルーチンにハッシュやら配列やらが結構混ざって泣きそう
284 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 10:43:08 ] >>283 とりあえず元のプログラムが何をするものなのか理解しないことには 始まらないと思われ
285 名前:221 mailto:sage [2009/12/16(水) 11:02:32 ] >>247 ありがとう。24時間は超えてしまうのでTimeはやはり使わない方向でいきます
286 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 11:06:02 ] 質問です。 Rubyで簡単なGUIアプリを作ろうとしているのですが、現在何がオススメでしょうか? 環境は、Ruby 1.8.7、Windowsです。 できれば、あくまでできればですが、実行環境では追加のリソース(ランタイム)が必要ないものがよいのですが… 例えばexeに固めれば単体で実行できる、もしくはRubyとそのライブラリがあれば動くと言ったようなものです。 下記サイトでは、shose(why氏とともにサイト死んでる?)、Ruby-GNOME2、wxRubyがよく使われているとありますが、 みなさんは何を使われてますか? Ruby GUI調査2008 www.pressure.to/ruby_gui_survey/index-ja.html
287 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 11:14:52 ] >>286 > Rubyで簡単なGUIアプリを作ろうとしているのですが、現在何がオススメでしょうか? RubyではGUIアプリケーションは作らない
288 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 11:15:28 ] Windowsで1.8でexe単体なら自分だったらvruby+Exerb+UPX でも上の縛りがなければwxRuby+Ocra あとやったことないけどWebアプリ+RubyStationも面白そう
289 名前:286 mailto:sage [2009/12/16(水) 11:24:17 ] shoesはgithubにありましたけど、Javaのprocessingみたいな感じなんですね。ちょっと用途が違うとおもた samples at master from shoes's shoes - GitHub github.com/shoes/shoes/tree/master/samples/ >>287 (´;ω;`)ブワッ 昔Delphi使ってたんでそっちでもいいんですが、できれば最近なれたRubyでGUI作れたらなとか思うわけですよ… >>288 必ずしもexe単体でなくてもいいです。 webアプリは面白そうなんですが、とりあえず、vrubyとwxRuby試してみます
290 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 11:26:15 ] たぶん、GUIというイベントドリブンな概念とRubyの記法が合わないんだと思う
291 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 11:28:25 ] イベントハンドラにprocオブジェクトを登録することがごく自然に出来るわけで。
292 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 11:31:44 ] 実装の便利度に差がありすぎるんだよな 中にはHSPからシェル経由でスクリプト呼んで引数連携させたほうがマシといゲフンゲフン
293 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 11:43:07 ] >>271 パスに{}[]が含まれると良くない
294 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 11:51:03 ] >>293 一般に使ってもらうならともかく、自分の用が果たせたならそれでいいんじゃないか?
295 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 13:56:13 ] wxRubyをgemで入れてみたのですが、wxruby-2.0.1-x86-mswin32-60がインストールされたのですが、 これて古くないんでしょうか?wxWidgetの0.6.0だったりしませんか? ruby -v #=> ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32] 古いな…
296 名前:uy ◆e6.oHu1j.o mailto:sage [2009/12/16(水) 17:55:27 ] 純粋にrubyのレベルをあげたいです 小さなツールとWebアプリケーションとGUIゲームくらいならrubyで作れるようになったんですが ルビリストと呼ばれるようになる為の次のステップ教えてください
297 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 18:05:30 ] いろいろな言語を使う。 とくにRubyのバックグラウンドを育んだLispやSmalltalkを。
298 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 18:09:09 ] Lispやれ(EmacsLisp以外ならなんでもいい) PerlがまだならPerlも齧れ オブジェクト指向の関係でJavaもできるといいんだが
299 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 18:12:54 ] >>296 もの凄い勢いでRuby初心者スレ/本スレ/ruby-list等 あらゆるサイトの質問にコテハンで答えまくる 質の高い回答が数千溜まるとGoogleに雇ってもらえる
300 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 18:14:14 ] ルビリストってなんですか?
301 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 18:27:26 ] googleって実際優秀な人材だけってわけじゃないんだよねぇ 広告塔の人間もたくさんいるし
302 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 18:47:10 ] >>296 >ルビリストと呼ばれるようになる為の次のステップ教えてください るびまの添削記事を読むのがいいと思う。 ttp://jp.rubyist.net/magazine/?0010-CodeReview ttp://jp.rubyist.net/magazine/?0011-CodeReview ttp://jp.rubyist.net/magazine/?0013-CodeReview ttp://jp.rubyist.net/magazine/?0015-CodeReview ttp://jp.rubyist.net/magazine/?0017-CodeReview
303 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 18:51:14 ] >>282 >人材が究極的に少ないから >現状に加えて一般向けにドキュメント揃えろなんて言ったらどんどんリリースが遅くなる >当事者だからという理由だけでできない人に無理やりやらせる理由はない >得意な人に任せておけばいい ばかをいえ、ChangeLogやNEW FEATURESなんて、開発当事者ぐらいしか詳しくは知らないんだから 開発当事者が書くべきだろ。 こんなことすらも嫌がる開発陣ってなんなの? どうせ開発リソースが増えたところで、ドキュメントに回すつもりないんだろ。
304 名前:283 mailto:sage [2009/12/16(水) 19:00:12 ] 昼間は無事だったのに規制が… 283です。 >>284 jcorrectとかいうやつだったかな プログラムを実行して文章を入力すると、cabochaの解析結果と一緒に文章の校正を促すメッセージが出た これを実行するためにcabochaとかいろいろ入れてた プログラムを読んでいると、サブルーチンから値を順に渡していたり$foo->{$var}->とか見たことないのがいっぱいでなんかもうキーーーーってなったんだ…
305 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 19:06:54 ] >>303 言ってること自体には賛同できるけどそういうのは本スレでどうぞ
306 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:36:21 ] 質問です。 実行環境:Xubuntu9.10、Ruby1.9.1 使用ライブラリ:tk、pty、expect やりたいことは、外部プログラム(対話型のCUIプログラム)をRubyスクリプト内から実行する際に、 外部プログラムの実行結果(標準出力。エラーが発生して終了したならその時のエラー出力) を取得したいのですが、何か方法はあるでしょうか。 ネットを見るとsshやtelnetのサンプルが転がってますが、 sshやtelnetが出力するメッセージ自体やエラー文(はあるのかな?)を処理するようなものがなく、 どうするんだーと悩んでます。
307 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:43:41 ] シェルからパイプでつなぐ ` ... ` (バッククォート)でコマンド実行して出力取る 手の込んだことがしたければ require 'open3'
308 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:23:55 ] wxRubyとかGUIアプリの話がでたついでに聞きたいんですけど、 ↓みたいにマニフェストをruby/bin/において、Windows XP移行のLuna(?)風のUIにする方法があるんですが、 Ruby on Windows: Windows XP Visual Style Controls with wxRuby rubyonwindows.blogspot.com/2007/10/windows-xp-visual-style-controls-with.html …うまくいきません。 古いルックアンドフィールのままになります。 上記サイトのxmlをファイルをruby.exe.manifestとrubyw.exe.manifestに新規作成してコピペして、 ruby/binに放りこめばいいんですよね?
309 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:38:30 ] >>307 ありがとうございます。 標準出力と標準エラー出力に違いがあるのを知らなかったですorz open3は標準入力・出力・エラー出力のみ対応という形だったので、 except実行→出力結果を一時ファイルに出力→実行元プログラムでopen という形で無事結果を得られるようになりました。 PTYがttyを別個に作ってそっちで実行させるっぽいのでバッククォート使えない(のかなぁ……)
310 名前:245 mailto:sage [2009/12/17(木) 11:43:14 ] logger使ってみているのですが、 Benchmarkの出力結果が余計な改行が入るのですが、これってこんなもん? time = Benchmark.measure do :(略) end logger.debug Benchmark::CAPTION logger.debug time.to_s
311 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 12:21:56 ] そんなの logger は与り知らんよ logger は対象のオブジェクトを to_s しての末尾に改行つけて書き出してるに過ぎない 何か問題あるならそのオブジェクトの to_s 調べれ
312 名前:245 mailto:sage [2009/12/17(木) 13:01:09 ] >>311 舌足らずでごめんなさい。 puts Benchmark::CAPTION puts time.to_s だと改行の問題ないんです。気味が悪いんですが、何でなんでしょ
313 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 13:10:17 ] >>312 改行が問題になるときの検証に puts 使ったら駄目 puts は文字列末尾に改行があったら自前で改行をつけない というかこれはそのまんまで irb> require 'benchmark' irb> p Benchmark::CAPTION " user system total real\n" そもそも改行が末尾に入ってる 気になるなら Benchmark::CAPTION.chomp を logger に渡す
314 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 18:13:47 ] > puts は文字列末尾に改行があったら自前で改行をつけない 漏れは大変なことを知ってしまった 近いうちに消されるかもしれない
315 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 18:18:58 ] xpathって難しい。もっと簡単にできるか? id('Layer3')//td[ following-sibling::td//a[contains(@href, 'money.www.infoseek.co.jp/MnStock ')]]/b//font[@color]
316 名前:sage [2009/12/17(木) 21:38:37 ] >>228 trunk には Date::Delta ってのが入ってるよ
317 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 22:32:29 ] RSpecの用語について質問。 describe ... や it .... で書いたひとまとまりを、なんて呼ぶの? たとえば Test::Unit なら class FooTestCase < Test::Unit::TestCase ← これはテストクラス def test_equal ← これはテストケース assert_equal(2, 1+1) end end のような呼び方をしてると思うんですけど、RSpecの場合は何と呼ぶのかわからないので、教えてください。
318 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 23:36:33 ] 現在β版のRSpec本によれば、 We use the describe( ) method to define an example group. The it( ) method defines a code example. なお、 describe(および別名のcontext)メソッドが作るのは Spec::Example::ExampleGroupのサブクラス it(および別名のexample)メソッドが作るのは それのインスタンスメソッド になる
319 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 06:03:22 ] 質問です。 001 002 のような、3桁の連番を表示したいんですが、どうやればいいんですか。 for i in 001..100 だと 1 2 になるんですが。
320 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 06:18:23 ] Rubyらしい書き方ではないかもだが for i in 1..100 p '%03d' % i end 数字の頭に0がつくとRubyでは8進数って意味になるので注意
321 名前:デフォルトの名無しさん [2009/12/18(金) 06:23:07 ] ('001'..'100').each{|s| puts s}
322 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 06:25:56 ] >>320 見事にできました。 素早い回答どうもありがとうございました。
323 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 10:03:11 ] WEBrickで、 ・Basic認証またはDigest認証 ・IPアドレスによるアクセス制限 を実現したいのですが、サンプルとか参考になるページがあれば教えてください。 「WEBrick IPアドレス 制限」とかでぐぐったけど、それらしいのはヒットしませんでした。
324 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 10:32:21 ] 追記。 ちなみに、今使っているサンプルはこんなのです。 require 'webrick' server = WEBrick::HTTPServer.new({ :DocumentRoot => '.', #:BindAddress => '127.0.0.1', :Port => 3000, }) Signal.trap('INT') { server.shutdown } Signal.trap('TERM'){ server.shutdown } server.start
325 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 11:10:43 ] 認証 WEBrick::HTTPAuth::BasicAuth WEBrick::HTTPAuth::DigestAuth IPアドレスでの制御は HTTPRequest#addr あたりを見て403を返せばいいんじゃない?
326 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 12:18:34 ] {1=>[2]}となる事を期待したけど、この方法では駄目みたいですね。 % irb1.9.1 irb(main):001:0> h=Hash.new([]) => {} irb(main):002:0> h => {} irb(main):003:0> h[1] => [] irb(main):004:0> h[3] => [] irb(main):005:0> h[1] << 2 => [2] irb(main):006:0> h => {} irb(main):007:0> h[1] => [2] irb(main):008:0> h[3] => [2]
327 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 12:29:26 ] >>326 www.ruby-lang.org/ja/man/html/trap_Hash.html ぶっちゃけRubyの怪しげな機能は使わないほうがいいと思う
328 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 12:32:18 ] >>326 そりゃArrayやHashの初期値つきnewは毎回初期値のオブジェクトを生成するからな irb> p h[2].object_id == h[2].object_id false irb> h=Hash.new([]) {} irb> h[1]=[2] [2] irb> h {1=>[2]}
329 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 12:39:22 ] >>328 > p h[2].object_id == h[2].object_id これうち(1.8.7cygwin)でやるとtrueになるんだが1.9で変わったとか?
330 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 12:42:53 ] >>326 それだとh[1]の参照先(初期値オブジェクト[])に2を入れてることにしかならない h[1] = ほげほげ としない限り {1=>ほげほげ}にはならない
331 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 13:35:34 ] $ rvm use system <i> Now using system ruby. </i> $ irb --prompt simple >> RUBY_DESCRIPTION => "ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]" >> h = Hash.new([]) => {} >> [h.default, h[0], h[1]].map(&:object_id) => [2156963800, 2156963800, 2156963800] $ rvm use 1.9.1-head <i> Now using ruby 1.9.1 head </i> $ irb --prompt simple >> RUBY_DESCRIPTION => "ruby 1.9.2dev (2009-12-11 trunk 26067) [x86_64-darwin10.2.0]" ruby-1.9.1-head > h = Hash.new([]) => {} >> [h.default, h[0], h[1]].map(&:object_id) => [2151892720, 2151892720, 2151892720]
332 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 15:45:53 ] >>331 みたいな人ってソース中のコメントもほぼかかなそうだよな
333 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 16:35:24 ] >>332 は初心者
334 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 16:59:49 ] まあ初心者スレだしな
335 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 17:53:52 ] 結局>>328 は間違ってるということかい?
336 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 18:26:49 ] new(初期値)で生成されたハッシュに存在しないキーでアクセスした場合の挙動は、 同じオブジェクトが返るというのが正しく、 毎回異なるオブジェクトが返るというのは誤り。
337 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 18:37:34 ] 質問するならリファレンスマニュアルくらい読んでからこい
338 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 18:47:27 ] 初心者スレ的には 「マニュアルのここ読めわかりやすくて疑問の余地無し氏ね」 と言える環境を揃えるほうが先な気もする
339 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 23:53:39 ] >>328 それは初期値じゃなくて初期ブロックじゃないのか? h = Hash.new{|hash,key| [] } p h[2].object_id == h[2].object_id # => false 未設定のキーを指定された時に、そのつどブロックを実行した結果を返す よって同じキーでも毎回違うArrayが帰ってくる
340 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 01:14:37 ] >>338 ようやくたどり着いたと思ったら、 xxxx() 執筆者を募集中 おい、コードを書いたのはどこに行ったの? 採用した人は? なので、動かないものは、自分で書き直すことにしてる。 一から一人でするより、ちょっと近道。
341 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 05:46:41 ] >>337 >質問するならリファレンスマニュアルくらい読んでからこい おまえは書き込むまえに>>1 を読んでこい
342 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 06:50:04 ] >>341 おまえは書き込むまえに>>1 を読んでこい
343 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 07:39:01 ] そんなことより俺のIDを見てくれ。どう思う?
344 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 09:13:46 ] 見えない
345 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 10:15:45 ] >>344 はバカ
346 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 10:27:17 ] まあバカスレだしな
347 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:45:29 ] 教えてください Hpricotで日本語テキストのリンク検索が上手く動きません どうすればNokogiriと同じ動きになるのでしょうか #!ruby -Ku require 'hpricot' require 'nokogiri' html = "<html><a>りんく1</a><a>りんく2</a><a>りんく3</a></html>" doc = Hpricot(html) print doc.at("a[text()*='りんく2']"); # エラー発生 doc = Nokogiri(html) print doc.at("a[text()*='りんく2']"); # こちらは正しく動く エラー内容 /usr/local/lib/ruby/gems/1.9.1/gems/hpricot-0.8.2/lib/hpricot/elements.rb:486:in `index': incompatible character encodings: ASCII-8BIT and UTF-8 (Encoding::CompatibilityError)
348 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:48:10 ] >>347 初心者は Ruby1.9 使うなってこれだけ言われてるのになんでわからんのだエラー
349 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:54:16 ] >>348 が FA なのだが というか何もわからず動かしていることが原因で、 Nokogiri が動いたのはただの偶然に過ぎない むしろ「Nokogiri が動いたのは何故ですか」という質問になるべき事象 無理しないで Ruby 1.8.7 使え 1.8.7 を理解したあとで差分学習で 1.9.1 を習得するのが一番早い
350 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:57:10 ] 了承、1.8.7にする
351 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:59:15 ] hpricotはコンパイルが通る程度に1.9対応されてるだけ。 作者の _why the lucky stiff はネット上から失踪しているので、事実上塩漬け状態。
352 名前:デフォルトの名無しさん [2009/12/20(日) 16:02:52 ] 質問 rdoc が生成する HTML について、特定の要素(例えば <pre>タグ)のスタイルだけ いじりたいという場合はどうしたらいいのでしょうか?
353 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 16:27:02 ] >>352 ちょっと見た感じでは rdoc に --template オプションで 自作のテンプレートを指定してやればいいんじゃまいか 既存のテンプレが rdoc/genarators/template/html に入ってるから それを部分的に書き換えて使えばよさそう
354 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 19:17:36 ] whyさん死んじゃったからNokogiri推奨だと思うけど、 >>347 がhpricot使いたいと思った理由はなんだろ
355 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 19:20:40 ] え、whyって死んじゃったの? もしそうならHpricotきめえとかdisるのやめて冥福を祈る
356 名前:352 mailto:sage [2009/12/20(日) 19:31:28 ] >>353 ありがとうございます。 ベースになるテンプレートを選んで、それに改変を加えたものを使おうと思います。
357 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 20:19:30 ] ネットワーク的に、ね。 自分できれいさっぱり痕跡を消していった。
358 名前:352 mailto:sage [2009/12/21(月) 15:57:51 ] 追記 rdoc の --style オプションにスタイルシートのパスを渡すことで HTML生成時に自前のスタイルシートを読み込ませることができました。 テンプレから CSS の部分だけ切り出して編集して、 rdoc --style=path_to/hoge.css でうまくいきました。 というか、manページに普通に書いてあったorz
359 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 22:18:49 ] hpricot でも nokogiri でもいいんですが、 doc = Hpricot(open(uri).read) (doc/:a).each do | link | if link[:href] == '#' p "設定し忘れ => #{link[:lineno]}" end end みたいに、行番号を取得することって出来ませんか?
360 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 22:21:13 ] 行番号というメタ情報があれば取得できるよ ないならできない 自分で行番号だと思うものを作って数えるしかない
361 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:38:58 ] >>359 その程度なら普通に正規表現でよさそうだね。 File.open(filename) do |f|
i = 0 f.each_line do |line| i += 1 puts "#{filename}:#{i}: 設定し忘れ" if /href=("¥#"|'¥#¥')/ end end
362 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:39:08 ] jrubyでmechanize使えている人います?hpricotのjava版使うしかないんでしょうか?
363 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:45:49 ] >>361 みたいに例示依存の回答する人なんなの
364 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 10:39:36 ] >>361 欲しいのは行番号であって、例文なんかどうでもいいんだが
365 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:00:20 ] 例題コードを添削するのはどうかとw
366 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:10:57 ] 作業ディレクトリの変更って出来ませんか? ./data/a.rb ./data/1.txt ./main.rb ってあったときに main.rbからa.rbをrequireするんですけど a.rbは open("1.txt","r") これで読めるようにしたいです
367 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:21:49 ] save = Dir.pwd Dir.chdir "./data" # 作業 Dir.chdir save とかかな 同じディレクトリにあるファイルを使うってことなら open(File.dirname(__FILE__)+"/1.txt") でもいいかも
368 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:34:12 ] Pythonのdirみたいに、あるオブジェクトが持ってるメソッドと変数を一覧するものってありますか?
369 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:36:29 ] >>367 それでいけそうです ありがとうございます
370 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:37:30 ] puts Object.methods ソートするとなおみやすい puts Object.methods.sort
371 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:41:30 ] Object#methods Object#instance_variables
372 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:00:57 ] >>370-371 ありがとうございます! これが欲しかった。
373 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:36:02 ] >>359 Nokogiriの要素は #line メソッドがあるはず。
374 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 14:41:59 ] >>367 Dir.chdir "./data" do # 作業 end でもいけるよ。
375 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 14:46:45 ] >>374 おお知らなかった もっかいリファレンス見直すことにしよう
376 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 10:27:52 ] ねー、 hoge/lib/ ← 自作ライブラリの rb ファイル hoge/test/ ← lib のファイルに対応するテストスクリプト という一般的なディレクトリ構成で test/test_hoge.rb を実行する場合、どうするのが「ふつう」なんだ? :~/hoge$ ruby test/test_hoge.rb :~/hoge/test$ ruby test_hoge.rb :~/hoge$ testrb test/test_hoge.rb :~/hoge/test$ testrb test_hoge.rb
377 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 11:29:21 ] コマンド直叩きするときは ruby -Ilib test/test_xxx.rb とする気がするが、 普段はrakeのTestTask任せだから、どうやってるか意識してないわ。 TestTaskの中をみてみたけど、testrbを使うことも使わないことも可能みたい。 (デフォルトはrakeのライブラリ内の機能を使う) なお、rakeの場合、test/ の中で起動しても、ディレクトリを遡ってRakefileを 探して、見つかったディレクトリで動くので、hoge/Rakefileとして置いている 場合は、実質的には hoge直下でやってることになるはず。
378 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 11:52:34 ] ruby test/test_hoge.rb とかやりたいなあ テストするためだけに test/ に降りてしまうのは、どうも…
379 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 11:54:14 ] そのへんは、helper.rb をどうやって読むかの一点にかかってる気がしてならない
380 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 11:55:55 ] ファイルいっこテストするだけなのにrakeはないわー
381 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 12:04:42 ] rake test TEST=test/test_hoge.rb でファイル一個か。
382 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:39:33 ] テスト実行するのにコマンド売ってるのかよ。 autotestでファイル保存と同時に自動でテスト実行だろJK
383 名前:362 mailto:sage [2009/12/23(水) 13:40:52 ] JRuby 1.4でNokogiri対応になったみたいですね。失礼しました。
384 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:52:22 ] >>382 テストが通らないタイミングでファイルを保存したりしないの? というか編集途中で保存し辛くなりじゃん
385 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:54:01 ] なるじゃん
386 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 14:12:02 ] ファイルいっこのテスト方法がないわけじゃなかろう autotestを使うかどうかとはまた別の議論だと思う
387 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 15:17:10 ] >>382 コードを保存したいタイミングと、テストを走らせたいタイミングは別じゃね? エディタからテストを実行させられればそれでいいけどなあ。 わざわざ保存したときに勝手にテストが走ってほしくないよ。
388 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 18:03:22 ] かりに毎回毎回コマンドラインからテストするとしても シェルの履歴ぐらい使うだろう。
389 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 18:27:27 ] 秀丸とかサクラエディタとか外部コマンドを 実行できるテキストエディタを使うがよろし。 俺はVim使ってるけど。
390 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 18:36:19 ] 俺はタブ機能付きの端末エミュレータ使って 右端のタブをテスト用に使ってる タブ切り替えにキーを割り当ててやるとかなり快適だ 同じ用途で GNU Screen とか使ってる人もいるのでは?
391 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 19:41:16 ] auto-save-buffersつかってるとautotestは使えない
392 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 21:51:25 ] >>387 そうかー、その品は人それぞれだな。 autotest連携で結果をSnarl(今ならGrawlか?)で通知出したり、サウンド出したりしてるけど けっこう快適よ? ただ、coLinuxで動かすとその辺の連携がしにくくて困る さらに、AutoHotKeyで保存キー入力と同時にブラウザリロードとかもやってる。
393 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 01:40:48 ] 自動保存+すきあらば無意識で手動保存してるから、 保存とか意識したことがないなー。
394 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 09:39:55 ] warning: Insecure world writable dir /home in PATH, mode 040777 という警告がでて困ってます。 この警告だけを出さないようにする方法があれば教えてください。 home のパーミッションが 777 なのがおかしい!といわれればそうなんですけど、 下請けにはそんなことすら変更する権限がないんです。
395 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 09:47:09 ] >>394 知らんよ RailsはRailsスレで
396 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 10:47:41 ] >>394 環境を詳しく もしRailsなら権限くれっていえ。まともに開発できんから
397 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 11:31:38 ] >>394 ENV['PATH']から /home を抜け。
398 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 11:33:56 ] ENV['PATH']つーか、rubyを実行する前だからシェルの環境変数PATHね。
399 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 11:52:12 ] >>395 なぜRails? >>396 環境はlinux 2.6.9-89.EL, ruby 1.8.7-p174です >>397 $PATHには/homeがないけど、/home/username/binがあります。 これを除くことはできないので、どうしたもんか困ってます。
400 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 12:28:44 ] フルパスで実行するようにすれば除けるんじゃないの?
401 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 12:32:16 ] あくまでrubyに伝わるPATHだけ変わればいいので、 * コマンドの環境だけ変える。 PATH=/usr/bin:/bin(などなど) ruby 引数 とか * 一度変えて戻す OLD_PATH=$PATH PATH=/usr/bin:/bin(などなど) ruby 引数 PATH=$OLD_PATH とか * サブシェル内で変える ( PATH=.... ruby ) とかでもいい。
402 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 16:39:54 ] RubyGemsで依存関係を調べる方法ないですか? gem dependency を使ってみているんですがうまくいきません。 $ gem dependency mechanize -v "0.9.3" --remote Gem mechanize-0.9.3 nokogiri (>= 1.2.1, runtime) hoe (>= 1.12.2, development) $ gem dependency mechanize -v "0.9.0" --remote No gems found matching mechanize (= 0.9.0) $ gem dependency mechanize -v "<0.9.0" --remote Gem mechanized_session-0.0.2 mechanize (>= 0.9.3, runtime) hoe (>= 2.3.3, development) 何がやりたいかというとmechanizeでnokogiri非依存のバージョンを探したいのです。
403 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 16:56:21 ] >>402 WWW::Mechanize.html_parser = Hpricot
404 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 17:04:10 ] >>402 libxml2 に依存したくないというのなら>>403 Nokogiri のインストール自体を dependency 経由で行って欲しくないというのなら、Mechanize 0.8.4 かそれ以前が必要
405 名前:402 mailto:sage [2009/12/24(木) 17:13:20 ] 即レスありがとうございます。 >>403 あー、いや、Bundlerで利用しようとしておりまして、 実行環境ではNokogiriが動かないため依存段階そのものから外したいのです。 # 実際はappengine-jrubyでmechanizeを使いたいという難儀なアレなのです # jruby版Nokogiriはffi依存のせいでappengineでは動かんのですわ・・・ appengine-jruby - Project Hosting on Google Code code.google.com/p/appengine-jruby/ >>404 ありがたい 0.8.4ですね、試してみます。 後学のために聞きたいのですが、こういうのってどうやって調べられるもんなんでしょうか? 以前はgemコマンドでgemのパッケージ時の設定を見る方法があったような気がしたのですが、どこいったんでしょう?
406 名前:402 mailto:sage [2009/12/24(木) 17:16:34 ] >>405 の前半の説明が足りないので補足。 mechanize 0.9.3では >>403 したいところなんですが、 require 'mechanize' するだけでffiねーぞゴラァ(appengine版のjrubyでは含まれてないためらしいです。pure java版Nokogiriが望まれます) のエラーがでてしまうのです。
407 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 17:20:09 ] >>405 何もしてない 賞味3分の力技 add_dependency から Nokogiri が消えるまで mechanize.gemspec の github 履歴を直接調べて遡った
408 名前:デフォルトの名無しさん [2009/12/24(木) 18:55:35 ] 参考までに聞きたいのですが、 長くなり過ぎたメソッドチェーンの途中に改行を入れる場合、 皆さんはどこで改行するのが適切だと思いますか? 1) ピリオドの後に \ value = this.is.a.\ very.long.method.chain 2) ピリオドの前に \ value = this.is.a\ .very.long.method.chain 3) そもそも途中で改行しない value = this.is.a value = value.very.long.method.chain
409 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:03:30 ] >>408 長くなりすぎたと感じる時点で「よくないコードの匂い」なので、リファクタリング開始
410 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:13:53 ] >>408 メソッドチェーンでは改行は入れない 今更80文字制限などとは言わないが、メソッドチェーンで長い場合は途中変数で分ける 該当するとすれば3
411 名前:408 mailto:sage [2009/12/24(木) 19:16:52 ] >>409 長くなり過ぎた場合という表現にちょっと語弊があったかも知れません。 実際にはメソッドのブロック付き呼び出しが2〜3続くような場合で どうしても1行には収まらない場合、です。例をあげると files = Dir.glob("**/*.rb").select {|file| ... }.reject {|file| ... }.map {|file| ... } のようなパターンです。
412 名前:402 mailto:sage [2009/12/24(木) 19:18:31 ] >>407 ΩΩΩな、なんだってー。恐れ入りました。そんな手がw gem dependencyやgem specコマンドは--remoteのときには最新版からしかとれないんですね。 一旦gemをインスコしたらOK見られるようですが・・・
413 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:19:43 ] >>408 >>411 files = Dir.glob("**/*.rb").select {|file| ... }. reject {|file| ... }.map {|file| ... } って俺はやってるな
414 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:20:46 ] >>410 > メソッドチェーンでは改行は入れない >>411 であげたようなパターンでもそうなのですか? 自分はああいうパターンだとピリオドの後で改行しちゃうのですが、 一般的には推奨されない(マナーの悪い)書き方なのでしょうか
415 名前:408 mailto:sage [2009/12/24(木) 19:24:34 ] >>413 ピリオドの後は \ なくてもいいんですよね。 自分の場合意図的な改行であることを明示するために \ を付けてます。 というか、>>411 の例は最後の map が意味的におかしいですね、しまったorz
416 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:29:58 ] files = Dir.glob("**/*.rb").select{|file| ... }.reject{|file| ... }.map{|file| ... }
417 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 21:32:51 ] ワンライナー書いてるならともかく、どっかで区切れよと なぜそんなにつなぎまくるのかと
418 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 22:41:13 ] >>417 自分の場合はつなぐというより、 つながっていくという感じでついつい長くなってしまうw 返値を無駄にしたくないというか 変数の名前を processed_values とかにした場合も名前に引きずられて 途中の状態を入れたくないという雑念が生じ、無理してでも一連のチェーンで書いちゃう
419 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:09:13 ] Ping打ちたいんだけどどう書くの?
420 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:25:21 ] >>419 ttp://www.sakalab.net/prog-ruby/ruby-man-html-20080121/ping.html
421 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:35:21 ] 俺もそれ出そうかと思ったけど、ICMP使わないんだよな
422 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:38:51 ] わかりやすくていいじゃん
423 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 05:59:43 ] files = Dir.glob("**/*.rb") files.reject! {|file| ... } files.map! {|file| ... }
424 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 09:08:05 ] >>423 みたいに例示依存の回答する人なんなの
425 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 09:21:57 ] 実際には存在しないメソッドを使って質問したほうがいいな
426 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 09:54:59 ] 別にいいんじゃない? 破壊的メソッドが使える状況なのに気づかなかった初心者がいてもおかしくないし 役に立たないならスルーすればいい 回答者にエスパーを要求するっていうのはそういうことだと思う
427 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:03:27 ] 1.9 だと メソッドのピリオド前でも改行できるようになった 複数行のメソッドチェーンのピリオド位置をそろえられるらしい if とか class とか直後に識別子や式が必須のところは改行しても行が継続するとか そういう行継続のルールってマニュアルあるの?
428 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:16:41 ] 従来のルール 「改行までの箇所を読んで完結していると見なされる(パースできる)ことがないなら改行OK」 に追加されたのは「メソッド呼び出しのピリオドの前もOK」だけのはず。
429 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:18:40 ] あれ、>>428 のルールだけでは class Hoge で改行が許されるのは説明できないのか。
430 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 15:44:18 ] >>429 ん? 説明できてるように思うけど class Hoge って end で閉じるまで完結しないでしょ
431 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:16:30 ] 1.8.7p174 puts 1+ 2 これは3と出る。+がまだ完結していないから2までがまとまって解釈される。 puts(1+ +2) 同じく3。 puts 1 +2 これは1までで完結しているから1と出て、+2は単項演算して捨てられる。 puts(1 +2) これは unexpected tINTEGER, expecting ')' 次の行まで見て完結させてくれないのはどうして?
432 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:22:47 ] パーサをそんなにいじめるなよ
433 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:57:33 ] >>431 パーサには puts (1 2) と見えてる(+ は単項演算子と解釈されてる) puts (1 + 2) だといけるかなと思ったが syntax error, unexpected '+', expecting ')' だった ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]
434 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 19:49:28 ] > puts 1 > +2 > これは1までで完結しているから1と出て、+2は単項演算して捨てられる。 ↑ここまできたら > puts(1 > +2) これは駄目ってわかりそうなもんだろw
435 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:00:39 ] >>434 kwsk
436 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:05:56 ] puts(1\ +2)
437 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:08:58 ] >>434 どうして? >>436 解決法を求めてるわけじゃないぜ。
438 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:30:44 ] ()の構文は(式)。 (1 と書くと1は完結した式と解釈され、次の行には残りの)しか書けない ってことでok?
439 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:42:13 ] ずいぶんしみったれてるな。 '('が出て来たら')'の直前までを式と解釈してくれても良さそうなもんだが
440 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:15:20 ] Rubyのパーサは(人間にすると)曖昧な解釈だからなw >>437 puts 1 +2 が駄目なので、演算子を行末におかない場合は次行と連結されないため、式として認識しない、までは認識できるだろう。 なので、次の puts (1 の時点で次行とは連結されないでその行までで解釈される、と考えられるので、 閉じ括弧がその行にないのでエラーとなる、と そういうふうに頭がさっと回らない、ということならばあなたがRubyに慣れていないか、 もしくは俺が長い行を複数行に分割するのに慣れすぎているのでそう感じてしまうだけかw
441 名前:デフォルトの名無しさん [2009/12/25(金) 21:24:09 ] puts((3 + 4)) # => 4 とかRubyって面白いね
442 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:29:45 ] もろくも崩れ去った俺(=>>438 )の推理orz >>441 はどういうことなの?
443 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:42:32 ] えっ? ここ初心者スレなんですけど
444 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:05:02 ] >>443 初心者にも有益な話題じゃない? 式が完結してしまうところで不用意に改行して構文エラーも出なくて なんでうまく動かないんだみたいな落とし穴を回避するにはこういう知識も必要
445 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:06:30 ] バッドノウハウに近いと思う 改行が有効な個々の場合を記憶する理由はない
446 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:08:31 ] 初心者は構文解析何それおいしいのだし 妙なところで改行打つような真似もしないだろう
447 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:12:13 ] 結論 とても長い式文でもない限り途中で改行すると見づらいし誤作動の原因になりかねないからやめれ。
448 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:14:12 ] メソッドチェーンはとても長い式文に入りますか?
449 名前:デフォルトの名無しさん [2009/12/25(金) 23:54:41 ] >>441 は puts((3;+4)) と同じ
450 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 00:29:37 ] >>444 >>443 は>>440 に対して 初心者スレで何で >そういうふうに頭がさっと回らない、ということならばあなたがRubyに慣れていないか、 なこと言うのってことだ
451 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 00:34:38 ] puts (3;+4) はエラーで puts((3;+4))は通るのは何で?
452 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 02:20:30 ] 前者、おそらく”(”がメソッド引数の括弧だと読まれている 引数部に”;”があるのはおかしいからエラー 後者、(3;+4)は4に等しいから、 puts(4)と同じ。もちろん文法的に正しい
453 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 02:43:20 ] なぜこんな仕様にしたし
454 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 04:56:34 ] 括弧の省略を可能にするため、とマジレス
455 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 07:52:07 ] >>451 引数を括る括弧と、式としての括弧は別
456 名前:デフォルトの名無しさん [2009/12/26(土) 21:00:18 ] 質問です。 include して使われることが想定されているモジュールを書いているのですが 非公開の下請けメソッドの扱いについて悩んでいます。 include先で名前の衝突が起こらないようにするため、以下の方法を考えたのですが…… 1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw 2、モジュールメソッドにしちゃう → 非公開じゃなくなるw 3、モジュール内部に Privateモジュールを作り、Private.method でアクセス → Privateモジュール自体は非公開にできないけど、includeする側からアクセス されることはまずないだろう 他にもっとよい方法というか、こういう場合のイディオム、定石のようなものが あったら教えて欲しいです。
457 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 22:19:29 ] >>456 実用上は >1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw で十分。それでも心配なら接尾辞もつけるといい。 (もちろん衝突しやすい接頭辞は避けてね)
458 名前:456 mailto:sage [2009/12/27(日) 08:57:11 ] >>457 わかりました。接頭辞をつけておくことにします。 あまり長すぎるとうるさくなるんで、 アンダースコア+モジュール名を3文字くらいに圧縮したもの ぐらいでいいかな。
459 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 09:43:27 ] インスタンスメソッドである必要がないなら非公開にする必要もないと思うんだけど 個人的には3かな、Hoge::Utilsとか
460 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 11:37:54 ] >>456 >1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw スクリプト言語は変数の型についてはいいかげんだし、カプセル化についてだけ厳密性を求めてもしょうがないと思う。 もともとそういう言語じゃないんだよ、スクリプト言語は。 接頭辞や接尾辞をつけるだけでは衝突する可能性はゼロにできないけど、実用上は問題ないから、それでよしとしてください。
461 名前:456 mailto:sage [2009/12/27(日) 17:37:52 ] >>459 > インスタンスメソッドである必要がないなら非公開にする必要もないと思うんだけど > 個人的には3かな、Hoge::Utilsとか Helpers とかもそうですね。 外部から利用しても役に立ちそうなメソッドなら積極的にそうすべきかも >>460 > カプセル化についてだけ厳密性を求めてもしょうがないと思う。 > もともとそういう言語じゃないんだよ、スクリプト言語は。 そういうもんですか。 サブクラスに対して閉じるアクセス制御って今後もできないんですかね
462 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 01:40:43 ] >>461 たぶんRubyでのprivateを勘違いしている。 Javaと違うから、マニュアルを読むことをお勧めする。
463 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 04:42:17 ] 可視性メモ ttp://www.rubyist.net/~matz/20070208.html#p04
464 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 06:26:05 ] >>462 名前の衝突を懸念している時点で勘違いはしてないと思うのだが
465 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 12:17:10 ] >>464 「サブクラスに対して閉じるアクセス制御」と言ってる時点で勘違いしてると思う。
466 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 12:41:29 ] あればいいのにって話だろ
467 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 12:45:35 ] Rubyではアクセス制御はそもそもできない 可視性を決めるだけ
468 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:09:11 ] >>466 不要です。 以上。 ↓はい次の方。
469 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:12:49 ] ↓ 本質的にはオープンクラスを諦めないといけない ↓ 再オープンできる時点で制御も何もねえよ ↓
470 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 18:21:24 ] 本質的にはMatzの設計次第
471 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:04:43 ] サブクラスに上書きされない為にどうしたらいいかって質問なのに 勘違いしてるとか不要とか諦めろとかどーゆー事よ 質問者の方がよっぽどrubyの事を理解してると思うわ
472 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:07:14 ] Matzに聞いたら、 サブクラスで気をつけれ っていうに決まってそう
473 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:15:49 ] >>471 だからシステム的にできねえって 新しいRuby実装を自分で作れば無論可能だが、そういう回答を求めているわけではあるまい
474 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:18:15 ] >>471 じゃあ、おまいが答えれ
475 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:57:46 ] set_position x, y, z get_positionX みたいなget,set関数を作りました。 setはともかくgetはつけずに positionX の方が良いですか。どちらがよりRubyっぽいか教えてください
476 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:00:26 ] x メソッドや y= メソッドだと都合が悪い?
477 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:06:09 ] ziki.position = [x,y,z] puts ziki.position_x ですか??? そっちの方がRubyっぽいならそれでも良いです
478 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:20:17 ] 混乱してきたので質問を変えます。 AとBについてどちらが良いですか? A: (1) my.position = [1,2,3] (2) my.set_position 1, 2, 3 B: (1) puts my.position // 配列 (2) puts my.position_x
479 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:39:37 ] >>478 [x, y, z] の組が頻出なら Struct を使ってもいいかも Point = Struct.new(:x, :y, :z) my.position = Point.new(x, y, z) my.position.x
480 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:48:58 ] >>478 attr_accessor, attr_writer, attr_reader とかは知ってる?
481 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 22:07:20 ] >>479 のPointを使って class My attr_reader :position def initialize ; @position = Point.new ; end def position=(xyz) @position.x,@position.y,@position.z = xyz # 要引数チェック end end my = My.new my.position = [0,0,0] pos = my.position my.position.x = pos.x + 1
482 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 22:09:56 ] 初心者スレでStruct使うアホは即爆発していいよ
483 名前:478 mailto:sage [2009/12/28(月) 22:11:56 ] そんな難しい文法使わないでください。 初心者には理解できません。
484 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 22:15:23 ] >>482 お前は永遠に配列の添字アクセスでもやってろ
485 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 22:23:19 ] ハッシュで複雑なデータ構造を表現するのは悪らしい。。
486 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 22:27:43 ] >>483 >>481 を見て具体的に何が理解できないか書いた方がよいと思われ
487 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 08:24:31 ] >>485 Javaの人は引数にハッシュを使うことを理解できません Struct使う人間の95%がRubyをJavaと勘違いして使っています
488 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 08:53:28 ] 質問です [1,2,3] * [2,2,2] = [2,4,6] と書ける裏技無いですか。 ようは2つの配列を要素毎掛け合わせて欲しい
489 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 09:02:39 ] >>488 とくにないです require 'enumerator' a1 = [1, 2, 3] a2 = [10, 20, 30] p a1.enum_with_index.map{|e,i| e*a2[i]} #=> [10, 40, 90]
490 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 09:04:25 ] >>488 class Array def * other m = [] each_index{|i| m << self[i] * other[i]} m end end 裏技だからね。既存の Array#* を使ってるコードがどっかにあって 何が起きても知らないよ。
491 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 09:36:10 ] >>487 は x, y, z の組をどう扱うの?
492 名前:488 mailto:sage [2009/12/29(火) 09:38:30 ] >>490 いやそれはちょっと…… >>489 うーん、やっぱり無理そうですね。 C++みたいに Array& operator* (const Array& a1, const Array& a2) が定義できると便利なのに
493 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 12:49:27 ] a1 = [1, 2, 3] a2 = [10, 20, 30] p a1.zip(a2).inject([]){|r,(x,y)| r << x*y} とか
494 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 12:53:15 ] >>491 配列とかでいいんじゃねえの 組として外部に持ち出さなければならないなら クラスか何か作って名前付けることをそのときに考える
495 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 16:42:10 ] eclipseで開発できますか?
496 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 16:44:38 ] >>495 そらできる。
497 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 16:45:55 ] def foo= end と同様に def foo<< end を定義するとコンパイルエラーになるのですが、もしかしてこれはダメなんでしょうか。 その場合はどうすれば???
498 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 17:07:16 ] foo= のようなメソッド名は、 obj.foo = ... のような式のために特別に許されている。 (foo に代入するためには、obj.foo ではなく obj そのものを呼び出す必要があるため) obj.foo << のような式は、obj.foo の << の呼び出しと解釈されるので、 そういうようなメソッド名はない。 ていうかどういうことがしたいわけ?
499 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 18:15:34 ] obj.foo = # 代入 obj.foo << # 追加 がやりたいです。 fooは仮想的な配列でメンバー変数ではありません。
500 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 18:22:31 ] Ruby ではオブジェクトの外からインスタンス変数を直接参照したりはできません。 obj.foo は obj.foo() というメソッド呼び出し(が返す値の参照)です。 obj.foo() を定義して、それが返すオブジェクトの << メソッドでなんとかするしかないと思います。
501 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 18:41:19 ] あーなるほどそういうふうに見えるのか
502 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 19:17:45 ] この場合は変数操作でこの場合変数に偽装したメソッド呼び出し みたいな使い分けで引っかかるのは理解する >>495 あまり楽しくない
503 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 19:22:20 ] eclipseで開発したとして、実行はどうするんだろうね Runとかやって、スクリプトが動いても なんかな、って感じになりそう
504 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 02:54:55 ] >>495 もしかして: Aptana
505 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 11:17:47 ] <<を定義して配列のように見せかけている例としてはRailsの ActiveRecordのhas_many関連がありますな。 .classですらArrayと返ってくる徹底ぶり。
506 名前:デフォルトの名無しさん [2009/12/30(水) 15:20:41 ] def foo= x, y, z end を定義して bar.foo = 1,2,3 と呼び出すと ./main.rb:25:in `foo=': wrong number of arguments (1 for 3) (ArgumentError) というエラーが出るのですが、なぜ引数3つで呼び出しているのに引数の数が間違えている(1?)とか うちのRuby様はふざけた事を言い出すのでしょうか
507 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 17:09:05 ] bar.foo = a, b, c は bar.foo=([a, b, c]) だからです。 bar.foo=(a, b, c) で呼び出してください。
508 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 17:12:48 ] syntax error, unexpected ',', expecting ')' bar.foo=(1, 2, 3) 末尾= の場合は引数1つに限定かしらね? bar.foo=[1, 2, 3]は wrong number of arguments (1 for 3) (ArgumentError)
509 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 17:49:08 ] >507 それウソ たぶん>>508 が言うように末尾=の場合は引数1個限定だと思う けど自信ない
510 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 21:46:36 ] puts RUBY_DESCRIPTION #=> ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mingw32] plus = "a".method(:+) #=> #<Method: String#+> p plus.("b") #=> "ab" この3行目のシンタックスについてparse.y以外でどこかにドキュメントありませんか? Method.instance_methodsにそれらしきメソッドが見当たらないのですが,Methodオブジェクトに特有なものなのでしょうか?
511 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 22:47:00 ] foo.(arg) とすると foo.call(arg) の意味ということになった。 ttp://jp.rubyist.net/?NEWS-1.9.1.ja の「言語の中核部分」→「新しい文法と意味論」 「.()で#callや#[]を使わずにProcなどを呼べる」
512 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 22:47:50 ] メソッドじゃなく、文法(構文)の範囲だから instance_methods では出てこないよ。 Procでも使える。
513 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 01:32:23 ] >>509 やはり、呼び出すときには引数が一つしか取れないのだろうか? でも、定義では3つの引数が必要なので、引数の数が合わないと怒られる bar.send( :foo=, 1,2,3 ) で、引数三つ与えて呼び出せないこともないけど なんだか、無意味な感じ
514 名前:デフォルトの名無しさん [2009/12/31(木) 06:56:22 ] dhh @37signals is already running a few minor apps on Rails 3. We've just started playing w/ porting Basecamp. Exciting times! twitter.com/dhh/status/7208264678 Very tentative target date for Rails 3 beta is end of January. But core is staffed with volunteers, so very much subject to change. twitter.com/dhh/status/7107817801
515 名前:デフォルトの名無しさん [2009/12/31(木) 08:32:35 ] Very tentative target date for Rails 3 beta is end of January. But core is staffed with volunteers, so very much subject to change. twitter.com/dhh/status/7208225785 dhh
516 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 09:12:32 ] >>511 >>512 なるほど。 指摘していただいたドキュメントも拝見いたしました。 #callをできるだけ通常のメソッド呼び出しの記法に近づけるため #[]をオーバーライドするといった努力をしているというのは 耳にしたことがあったのですが,.()もその一環のようですね。 ありがとうございました。
517 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 22:42:29 ] Ruby1.9で正規表現のエンコーディングにShift_jisを指定するには どうすればいいんでしたっけ? オプションでsを指定すればよかったような気がしたのですが、 p /hogehoge/s.encoding で#<Encoding:Windows-31J>が帰ってきます。 WindowsXPで ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mswin32] です。 よろしくお願いします。
518 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 23:39:43 ] Regexp.new('あ.い.う.え.お’.encode('Shift_JIS')) かなあ。
519 名前:デフォルトの名無しさん mailto:sage [2010/01/01(金) 07:30:44 ] 明けましておめでとうございます。 >>518 /\p{ASCII}/ という表現を使いたいのでその手法は難しいんです。 今回は関係ありませんが/\x82\xA0/ という表現もその手法だと難しいですね。 マジコメでソースエンコーディングをsjisに指定するって手もあるのですが、 大人の事情でこの手法も避けたいのです。 ハチドリ本を読み返したのですが、p.335には"SJISは、s"って書いてありますね。 なんだかなぁ。 引き続きよろしくお願いします。
520 名前:デフォルトの名無しさん mailto:sage [2010/01/01(金) 08:14:35 ] 失礼しました、>>518 さんの方法でできますね。 もっとスマートな方法があればいいと思うのですが、とりあえず解決です。 お騒がせしました。
521 名前:デフォルトの名無しさん [2010/01/01(金) 14:23:19 ] SJISのデータを一度読み込んでUTF-8に変換してごにょごにょ が一番綺麗だと思う。 SJISでしないといけない理由は実はなかったりしないかい?
522 名前:デフォルトの名無しさん mailto:sage [2010/01/01(金) 21:58:59 ] rubyのアンインストール方法ってどうするんでしょうか。 ./configure --prefix=/usr/local make sudo make install でインストールしたのを、事情によりきれいさっぱり削除したいです。
523 名前:デフォルトの名無しさん mailto:sage [2010/01/01(金) 22:45:28 ] >>522 特に手段は用意されてない make -n installでファイルリストを作ってぶん回すぐらいしか思いつかないな
524 名前:デフォルトの名無しさん [2010/01/02(土) 02:18:44 ] 標準ストリームに対する文字コードについて教えて下さい。 まだRubyの問題なのか、OSの問題なのかも上手く切り分け出来ていません。 m(__)m TCPでクライアントと通信するプログラムを作っています。 環境はサーバー側(作っている側)がDebian Lenny(5.03)で、文字コードはUTF-8です。 クライアントはWindows2000のマシンで、文字コードはShift JISです。 コードは次のような感じです。 他にも色々な処理が入っていますが、話を簡単にするため、コードを思いっきり削っています。 > hoge.rb #! /usr/bin/ruby -Ku while receive = STDIN.gets # コマンドを受信した msg = "受信しました" # UTF-8 # 送信処理 # STDOUT.puts( NKF.nkf('-Ws', msg)) # これだとWindows側にパケットが全く返らない STDOUT.puts( msg) # これだとWindows側で漢字は化けるけどパケットは返る end というような感じです。 何かパケットが来たら、メッセージを返すものです。 (実際にはPostgreSQLを呼び出し、コマンドの結果を得て返しています。)
525 名前:524 [2010/01/02(土) 02:19:24 ] このコードはinetdから起動されます。 inetd.confはこんな感じ。 4142 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/hoge.rb Rubyで扱っているUTF-8の日本語文字列を、標準ストリームにShift JISで流したいだけなのですが、上手くいきません。 Shift JISで出力しようとすると、STDOUTするところで、何事も無かったかのようにパケットが送信されません。 Rubyはエラーにもならず、その行を飛ばしたかのような挙動になります。 UTF-8のままでSTDOUTへ出力すると、Windows側で文字化けしますが、パケットは返ります。 事情により、Windows側のプログラムには手を入れられません。 どこらあたりから、見直していけば良いでしょうか? この件の調査修正で、お正月休みも返上です。(TT) よろしくお願いします。
526 名前:524 [2010/01/02(土) 02:48:40 ] あ、ごめんなさい、すっかり書き忘れていました。 Rubyのバージョンは1.8.7です。 よろしくお願いします。
527 名前:デフォルトの名無しさん [2010/01/02(土) 04:37:19 ] require 'kconv' STDOUT.puts(msg.tosjis)
528 名前:524 [2010/01/02(土) 12:29:54 ] >>527 ありがとうございます、しかし状況変わらずです。 NKFとkconvは、挙動が違うのでしょうか??
529 名前:524 [2010/01/02(土) 12:53:11 ] >>527 再び524です。 申し訳ありません、確認が足りませんでした。 このmsgには”人の名 ”(漢字3文字+空白14)というように、 ASCIIで20Byte毎に区切って送るという仕様です。 ですが、Windows側には”人の名 ”(漢字3文字+空白11文字)として 届いていて構文チェックで跳ねられていました。 ちょうど空白が漢字の文字数分足りません。 UTF-8からShift JISに変換する時に、漢字とスペースの扱いはどうなるのでしょうか? 何か、特別な処理が必要でしょうか? 以前、EUC-JPとShiftJISでやったときは、問題無かったのですが。 なんとなく光が見えてきました、引き続きよろしくお願いします。
530 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 13:25:36 ] どっかに全部コード貼ってから来なさい
531 名前:デフォルトの名無しさん [2010/01/02(土) 15:32:50 ] >>529 utf8では漢字は2バイトではなく3バイト。 ja.wikipedia.org/wiki/UTF-8
532 名前:524 mailto:sage [2010/01/02(土) 17:35:34 ] >>531 ありがとうございます、解決しました。 結局、SJISに変換してから加工するようにコードを変えました。 UTF-8では、漢字は3バイトなんですね。 勉強になりました。 お騒がせしました。
533 名前:524 mailto:sage [2010/01/02(土) 22:50:27 ] >>530 524です、今、デバッグを終えて、正常動作を確認しました。 決め手は>>532 さんの「漢字は3バイト」でしたが、結構ポカミスもしてまして、今まで掛かりました。 ごめんね、プロジェクトの規模が大きすぎて、コードは晒せないの… 某自動車会社で、国土交通省に提出する書類を作成するためのシステムです。 Rubyの案件としては、中くらいの規模なんじゃないかな。 わりと重要なシステムで、止まると車が作れません。 Rubyはミッションクリティカルでも大丈夫、信頼が置けます。 pgsqlだったかな、DBIになる前の古いやつ。 それからDBIへの移植だったのですが、なかなか… pgsqlでEUC-JPだから動いてたっていうコードが結構あって、 思っていたより全然はまりました。 何処へ質問を投げようかと思案したのですが、おまいらに聞くのが一番良い気がして ここに書かせて貰いました。 あとは1月4日の総合テストを待つのみです。 実際に車を測定する設備が無いので、うちの社内では完全なテストは出来ないんですよ。 何はともあれ、おまいらのお陰で解決しました。 本当にありがとう。 それでは、名無しに戻ります。 m(__)m
534 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 00:12:17 ] >>533 身元と案件を特定出来る情報を2chに書くなよ・・・
535 名前:531 mailto:sage [2010/01/03(日) 00:20:53 ] >>533 いまのご時勢でRuby/DBIを選択しちゃうセンスは大いに疑問だが、問題が解決してよかったね。
536 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 00:25:56 ] > いまのご時勢でRuby/DBIを選択しちゃうセンスは大いに疑問だが kwsk
537 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 02:32:44 ] 通報。
538 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 04:20:45 ] HTTPProxyを作りたいので WEBrickでプロキシサーバを作って遊ぶ ttp://jp.rubyist.net/magazine/?0002-WEBrickProxy を参考に require 'webrick' require 'webrick/httpproxy' s = WEBrick::HTTPProxyServer.new( :BindAddress => '127.0.0.1', :Port => 8080, :Logger => WEBrick::Log::new(nil, WEBrick::Log::DEBUG), :ProxyVia => false ) Signal.trap('INT') do s.shutdown end s.start と書いて実験してみたところ リモートからのデータをいったんメモリに貯めてからクライアントへ渡す動作をするようです この場合巨大なファイル(結構大きいファイルを扱うProxyを作る予定です)を通したときにメモリ消費が 洒落にならないので、読み込んだデータから逐次クライアントへ渡すような動作にしたいのですが そのような設定は可能ですか?可能であればその方法を教えてください。よろしくお願いします
539 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 04:50:47 ] 以前、どこかのスレで python -i と同じことをする方法を見たのですが、どうやるんでしたっけ?
540 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 04:57:19 ] $ irb
541 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 05:17:07 ] >>540 違う。
542 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 09:50:24 ] ver #=> Microsoft Windows XP [Version 5.1.2600] ruby -v #=> ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mingw32] 以下の簡易wget風ワンライナをより短くできませんか? ruby -ropen-uri -e"$><<URI(*$*).read" www.example.com/>output ruby -ropen-uri -e"$>.binmode<<URI(*$*).read" www.example.com/hoge.zip>output 短くならなければ「短くならないよ」というご意見や よりスマートな代替案もいただけたら幸いです。
543 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 10:07:26 ] >>542 代替案ということはワンライナにこだわらなくていいんだよね? 若干強引だけどlib/site_rubyにwget.rbライブラリを作ってそのなかに処理書いちゃうとか ruby -rwget www.example.com/ > output irb.batのようにbinにbat置いてスクリプト実行するとか rwget www.example.com/ > output
544 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 10:20:40 ] >>543 早速のレスありがとうございます。 ライブラリ案・バッチ案は個人で使う分にはアリですね。 コマンドもすっきりしますし。 個人的には何もライブラリやファイルをインストール(作成)せずに Ruby単体で簡易wgetを実現できればいいなと思っています。 あまり実用的な場面はありませんが ^^;
545 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 10:44:08 ] >>538 データをストリーミング中継したいということでしょうか? 私はネットワークプログラミングに詳しいわけではないのでアドバイスはできませんが, googleで "webrick ストリーミング" で検索してみてください。 1件目のブログが参考になるかもしれません。
546 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 12:22:32 ] >>539 対話型debugが目的なら -rdebug 対話型インターフェイスが目的なら while true print ">" input = $stdin.gets.rstrip break if input == "\x04" # ^D puts input end もしくは(GNU Readlineが必要) require "readline" while input = Readline.readline(">") puts input end pythonなんて知らんよ
547 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 13:21:29 ] OpenGLってDirectXに比べるとプリミティブすぎるというか機能足り無くない? 標準のシーングラフとかあっても良いと思うのだが…… 何か無いですか?
548 名前:538 mailto:sage [2010/01/03(日) 13:46:23 ] >>545 レスありがとうございます 探していた情報はまさにそれです、ストリーミングも含めて考えていました 逐次転送するような動作は不可ですか・・・(´・ω・`) 以前にsocketで似たような物を実装しようとしたことがあったけどリクエスト/レスポンスの 終了を検出する方法が判らなくて断念・・・il||li ○| ̄|_
549 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 15:32:50 ] >>548 webrickを改造する場合にはリファレンスの以下の項が参考になるかもしれません。 Net::HTTPResponse#read_body {|str| .... } 「エンティティボディを少しづつ取得して順次ブロックに与えます。」 TCPSocketを使う場合でも socket.gets until $_ == CRLF でヘッダを切り離して while data = socket.gets ...dataを料理... end ではダメですか? Rubyで終端を気にする必要はなかったように思います。 他に思いつくにはヘッダのContent-Lengthを信用してそのバイト数だけ読み込むとか。 TCP/IPの規格に詳しくないので当てずっぽうですが。
550 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 01:49:17 ] windows機でタイマーを実装しようとしてます。 マルチスケジューリングなキッチンタイマーのようなものです。 問題がありまして、 例えば60分後にアラームを鳴らせるというタイマーのプログラムを行ったときに やっぱりその30分前にもう一個のプログラムを追加したいと思ってもそれを行うためには 常に入力待ち状態である必要があります。 その一方で常に出力待ち状態でないと指定時刻にタイマーを実行することができません。 今は タイマー入力(空入力も化)待機モード→ 1分間のタイマー実行待機モード→ その1分の間に起こるべきイベントがあれば指定時刻にイベントを起こす→ またタイマー入力待機モードに戻る→ 以下ループ というようにユーザに入力によって待機モードを切り替えることでそれらしい動作をさせています。 どのようにすればもっとスマートにこのタイマーを実装できるでしょうか? 一つのスマートじゃない方法はテキストエディタと外部ファイルを使ってこのタイマー入力を行うことかなと思うんですが。(非排他モードでファイルの書き込み読み取りする) forkがwindows rubyでは使えなくて、そもそも子プロセスを使ったことがないので悩んでいます。
551 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 01:57:34 ] www1.axfc.net/uploader/Sc/so/70232.txt しょーもないソースコードですが、文章で書くより伝わりやすいと思うので よろしくお願いします。
552 名前:538 mailto:sage [2010/01/04(月) 03:29:30 ] >>549 レスありがとうございます WEBrickはソースコードを理解するだけで時間が相当かかりそうな感じなので 改造はあきらめます・・・ バイナリデータをgetsで読み出そうとすると最悪の場合、最後まで読み込んで しまうように思いますが・・・ Socketの終了が判らない件ですがノンブロックモードで読み出す方法 (sysreadを使う。getsが使えなくなるけど・・・)が判ったのでひとまず解消しました 普通にreadを使うとブロックモードなんで帰ってこない・・・(TT しかし1セッションに複数のホストへのリクエストとかマンドクセ(´・ω・`)
553 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 05:32:35 ] >552 getsはバイト列に$/(普通は0x0A)がでてこなければ 最後まで読み込んでしまうけれど、その確率は気にするほどのものかな ミッションクリティカルなアプリケーションならしかたないとは思うけど
554 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 06:17:44 ] >>550 つ Thread & ConditionVariable
555 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 12:40:48 ] あるURLから特定のURLのみを抽出するにはどうしたらいいでしょうか? 例えばmenu.2ch.net/bbsmenu.html から"pc11"が含まれるURLを抽出したいです。 require "open-uri" url = ARGV[0] || "menu.2ch.net/bbsmenu.html " uri = open(url).read URI.extract(uri, ['http']){ |uri| puts uri } URL自体を抜き出すのは比較的簡単に出来たのですが、特定のURLを抜き出すのってこの状態からどうしたらいいでしょうか? 宜しくお願いします。
556 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 13:03:47 ] puts uri if /pc11/ =~ uri.to_s
557 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 13:05:12 ] >>555 URI.extract の返値(URI の配列)に対し find_all でいいんじゃない? str = open(url).read URI.extract(str, ['http']).find_all {|uri| uri =~ /pc11/ } 正規表現マッチの部分はもう少し厳密にした方がいいと思うので適当に
558 名前:557 mailto:sage [2010/01/04(月) 13:13:58 ] 返値を変数に格納するの忘れてたw
559 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 13:20:49 ] str = open(url).read URI.extract(str, ['http']).grep(/pc11/)
560 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 20:31:50 ] 「特定のURLを抜き出す機能」と考えるからわからなくなるんだと思う 配列から特定の条件を満たす要素を抜き出す方法とか URIオブジェクトのURI構成要素を返すメソッドは何かとか そういうの調べていったほうがたぶん早い
561 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 20:41:17 ] 御託はいいから妥当解とっとと出せカス
562 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 20:43:13 ] 「手抜き」じゃね? いつ動かなくなるのか不安だ。。
563 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 20:51:14 ] どうでもいいけど、 普通はstr = open(url).{|io|io.read}じゃね? それかstr = URI(uri).readか。
564 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 20:54:18 ] >>561 require 'open-uri' url = "menu.2ch.net/bbsmenu.html " purls = URI.extract(open(url).read, ['http']) uris = purls.map{|url| URI.parse(url)}.find_all{|uri| /\Apc11\.2ch\.net\Z/ =~ uri.host} ただ、 「URLを抽出したあとそれに対して何をしたいのか」 「本当に抽出したいのは本文のURLではなくて<a href>のリンクなのではないか」 「貴様は次のレスで「あっあとttp://も抽出したいです」と言うッ!」 とかいうような危惧がないわけでもない 普通にHTMLパーサ通したほうが近道だったり 一般的な適当範囲の正規表現を通したほうがマシな処理だったりしなくもなくもないかも
565 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 20:56:56 ] 関係ないけど、2chのAPIは糞。
566 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 21:00:02 ] そりゃ急いで突貫工事したものをずっと継ぎ接ぎで使ってるからな これがめちゃくちゃ洗練されて、2chアクセス者全員にdat直読みだけをされるようになっても 本当は運営的にはちょっと困るのよ
567 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 21:03:29 ] datはまぁ良いとして、bbsmenu.htmlだけはどうにかして欲しいな。
568 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 21:03:47 ] >>566 APIが洗練されたとしても利用者全員がdat読みすることなんてありえんから 後半は全然関係ないだろw
569 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 21:10:00 ] >>568 本当に洗練されたWeb経由APIはJavaScriptのみでの実装を許す API経由で広告を見せて有効に動作させるロジックはまだ発明されていない 今の2chから広告収入外されたら傾くぞ なんかこう物理的にナナメに傾くだけで済む気もするのがなんか謎な収益だが
570 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 21:29:00 ] >>563 まあなんか非常にめんどくさいのだけど open(path).read は close 忘れが多いので推奨されない書き方 (open(path){|f| f.read} を強く推奨、File.read(path) は Windows のバイナリスイッチが入らなので非推奨) ただ、open-uri を読み込んだ URL や URI に限っては、 open(uri).read は IO#close 相当を必要としないので妥当安全にたまたま動作する いや、ブロックつきで書いてもいいけど っていうかレスしてて気づいたけど本当にたまたま動くんだなこれ ローカルのファイルを読むことがなくて、簡便な HTTP アクセサとしてしか使用しないのなら あなたの言うように URI.parse(url).read するのがいちばんではあるっていうかお前ら初心者スレで手を抜くな
571 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 22:11:39 ] >>570 手を抜くな、と言われましても、2chの手抜きAPIに対して 真面目にプログラミングする気がしませんん。
572 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 22:16:54 ] 手抜きAPIを調教して俺色に染めてやんよ
573 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 22:19:33 ] そもそも2ちゃんのそれはAPIなんかじゃない無いだろw 一時期XML吐こうぜみたいな動きがあったみたいだけど、 「やっぱだりぃわ」で自然消滅した?w
574 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 22:23:55 ] >>571 URLにアクセスしてHTMLを取得するという根幹部分すらまともに書けませんと素直に言ったら
575 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 22:30:23 ] >>574 は?HTTPのライブラリぐらい作ったことあるから w
576 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 22:40:14 ] しっかし、open-uriって、 open(path)ってしただけでゴリゴリとTempfileをディスクに書いちゃうのね。 大量のURIを扱うならopenは使うべきじゃないな。
577 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 04:26:10 ] >>571 のような open(file).read と open(file){|f| f.read} の違いがわからないような人間にはなりたくないと思う
578 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 05:17:44 ] >>576 f = open(uri) が open として何を返すべきかを考えたら、 StringIO が返ってくる低サイズ帯のほうがむしろ特殊というか変
579 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 15:25:56 ] 無圧縮のzipを作成したいのですが ziprubyもrubyzipも無圧縮オプションが見当たりません この2つは無圧縮zipの作成をサポートしていないのでしょうか? あるいはlibtarで作成すれば無圧縮zipと同じものが出来ますか?
580 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 19:57:04 ] open-uriだけでよくここまで話せるな
581 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 22:54:32 ] >>579 ヒント Zlib::NO_COMPRESSION
582 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 05:24:47 ] >>579 オレも気になったので調べてみたけど見当たらないね、実装されてないのかな? おそらくPKZIP形式を求めていると思ったので 偽Zip32J.DLLてのを使ってやってみた require 'dl/win32' zip = Win32API.new("Zip32J.DLL","Zip","lppl","l") p zip.call(0,"-q -0 out.zip 1.txt 2.txt", "" , 0) 拘り無いならtarでいいと思う
583 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 07:15:17 ] rubyzipのZip::ZipOutputStream#put_next_entry見ろよ。 どこ見てんのよ。
584 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 12:31:59 ] a='/' a.sub!(/\//, "\\") p a これで出力は \ 1個を期待したのだけど \\ 2個になってしまう a.sub!(/\//, "\") こうすると怒られるし どうしたらいい?
585 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 12:36:25 ] >>584 irbでinspectの結果を見てないか?
586 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 12:37:22 ] ごめん、pか。 pはinspectの結果を出すので、そうなって当然。 putsせよ。
587 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 12:40:36 ] ttp://doc.okkez.net/187/view/method/Kernel/m/p ttp://doc.okkez.net/187/view/method/String/i/inspect
588 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 14:25:27 ] subとgsubはブロックを使えと先生から習わなかったか
589 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 14:38:24 ] しかしそれ以前の問題だからのう。 どうでもいいけど、個人的には正規表現に / が入るときは %r が見やすい
590 名前:584 mailto:sage [2010/01/06(水) 14:48:46 ] >>585-589 あざーした! pの方が短くてうちやすいので ついputs代わりに使ってました 今度から気をつけます!
591 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 15:03:29 ] exerb 使う時って open-uri 使っちゃいけないの?
592 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 20:42:04 ] こんなのあったのね。テンプレに入れとけばどうか。まーActiveScriptRubyでもいいけどw 窓の杜 - 【REVIEW】Windowsでスクリプト言語“Ruby”を導入するための和製インストーラー「Rumix」 www.forest.impress.co.jp/docs/review/20100106_340742.html
593 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 23:46:16 ] WindowsでRubyを使うこと自体が既に初心者レベルを超えてる
594 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 23:52:33 ] いや、逆じゃないのか。。
595 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 08:02:18 ] RumixってOne-Click Installerとなにがちゃうんや!
596 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 08:37:14 ] One-Click Installer 海外版Windows向けRubyパッケージ(ただしRuby古い) Rumix 日本語版Windows向けRubyパッケージ
597 名前:デフォルトの名無しさん [2010/01/09(土) 19:02:01 ] rubyはメモリをたくさん食うと聞いたことがあるのですが解決方法などはありますでしょうか?
598 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 19:04:58 ] >>597 Rubyを使わない Rubyはメモリを多めに使うことで、Rubyであるということの意味を保っている (そもそも言語レベルでそのように作られている) メモリを大量に消費するということがネックなのなら、その用途にRubyを選ぶべきではない
599 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 19:20:43 ] ほんとカス言語だな
600 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 19:33:36 ] >599 suck but ruby just sucks less.
601 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 19:35:17 ] sorry!! this site is japanese only!!
602 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 19:44:52 ] rubygemsの開始読み込みのへちょい構造はどうにかして欲しいと思うことがある あれはRubyらしさとかそういうの抜きで単にミスだろう
603 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 19:52:10 ] メモリを大量に食うこと自体が設計ミス
604 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 19:54:55 ] >>603 お前気楽な人生送ってるな 反対のことだけ書いてりゃ爽快なんだもんな
605 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 20:09:47 ] CPU時間でQuotaや課金があるようなサービスがもうちょっと一般的になると Rubyは再度日陰になるのかね どっちにしても初心者スレの話題じゃねーな
606 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 20:22:09 ] Ruby1.8 for WinでインタプリタがCUIかGUIかを簡単に判別する方法ってありますか? exerbでexeファイル化する予定なので出来れば自動で判別したいです
607 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 20:26:19 ] よくわからんがこのへんではだめなのか ttp://exerb.sourceforge.jp/man/doc/core.ja.html
608 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 21:14:09 ] 空間計算量と時間計算量を犠牲にしてMatz好みのOOとプログラマの幸せを手に入れたいらしい
609 名前:デフォルトの名無しさん [2010/01/10(日) 18:15:55 ] rubyかpythonどちらを初めに勉強しようか悩んでます どなたかアドバイスお願いします
610 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 18:28:22 ] はいはいpython、python いいからさっさと消えてくれ。目障りだ
611 名前:sage [2010/01/10(日) 18:40:42 ] rubython
612 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 18:46:03 ] Rubyを256倍使うための本ってどうですか? オクにいくつかでてるんで、買おうか迷ってるので教えてください。
613 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 18:50:05 ] >>612 古書 Rubyの過去を知るために有意義
614 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 21:30:35 ] 質問です。 hamlで以下のような定義のときに、ruby本体でどのようにしたらいいのか教えてください。 %table != header = capture_haml do %tr %th Name %th TimelogUrl %th Status - @users.each do |u| %tr %td u.name %td u.link != header この中で、@usersをどのように定義したらいいのかが分かりません。 バージョンは以下のものを使っています。 ruby 1.9.1 haml 2.2.16
615 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 23:05:34 ] >>614 そのときのコンテキストにおける self に対して。 たとえば instance_eval { @users = ... }
616 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 23:34:52 ] >>615 レスありがとうございます。 すいません、もう少し詳しく教えてもらえると嬉しいです。 @users = [ [ name => "aaaa", link => "link1" ], [ name => "bbbb", link => "link2" ] ] こんな感じのを想定しているんですが、全く違うようなそうでないような・・・ そんなレベルです。すいませんorz
617 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 23:43:00 ] もしかしてRailsのビューにhamlを使ってみようとかそういう話?
618 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 00:03:44 ] あの〜、Rubyってブラウザ上で動くアプリは作れないのですか?
619 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 00:16:32 ] ブラウザ上で動くアプリってたとえばどんなんだ HTMLと画像とJavaScriptで構成されているWebアプリケーションなら サーバを用意してサーバ上でRubyを頑張って動かせば作れないわけでもない Flashなどを利用するタイプのは、そりゃバックグラウンドサーバでRuby動かすことはできるけど それより先にFlashで普通に作らないといけないぞ 何の話をしてるかわからないのなら、Webアプリケーションについての概略知識が足りない
620 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 00:21:59 ] >>617 先に書くべきだったでしょうか? Sinatraを使ってPassenger経由で表示させようとしています。 index.hamlという名前でhamlを使って別ファイルに保存していて、それをstart.rbから読み込んで表示させようとしています。
621 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 01:29:35 ] >>620 このページは参考になるかな(2ページ目の@comment変数) ttp://gihyo.jp/dev/serial/01/ruby/0009
622 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 03:13:44 ] >>621 はい。そのページは知ってるのですが、実際に定義する場合にどのようにしたらいいのか? というところで悩んでます。 テストデータを仮に組もうとして、どう「書いたら」良いのか分からないという orz
623 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 04:12:59 ] >>622 こんな感じか TestData = Struct.new(:name,:link) @users = [ TestData['aaaaa','link1'], TestData['bbbbb','link2'] ]
624 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 04:33:52 ] >>623 ありがとうございます。 おかげさまで動きました。 ただ一つだけ修正が >>614 の所は %td u.name %td u.link は %td= u.name %td= u.link でしたorz
625 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 07:46:02 ] 【レス抽出】 対象スレ:Ruby 初心者スレッド Part 33 キーワード:orz 抽出レス数:7
626 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 10:39:52 ] R Language Ruby
627 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 12:17:24 ] Pで始まってLで終わる言語っていう表現があったな。 文脈によって指すものは変わる。
628 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 17:22:46 ] 質問です 同じ名前のチェックボックスから複数の値をとりだすにはどうしたら よいのでしょうか? require "cgi" cgi = CGI.new check1 = cgi["check"][0] とかで個別には取れますが、選択できる数が固定でない場合、 どのように書けばよいのでしょう? 配列の数さえわかればできるのですが cgi["check"].lengthとかで配列の数がとれないようですし困っています。
629 名前:628 mailto:sage [2010/01/11(月) 17:58:49 ] 自己解決しました くだらない質問してすみませんでした
630 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 04:22:00 ] cgiは残念だがゴミ。
631 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 18:16:46 ] zsh で rake を実行するときに、desc がある task だけしか、 task が補完されない。Rakefile 中の全 task を補完させたいのだけど、 どうしたらいい??
632 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 18:27:46 ] rubyはjis規格で規定されていますか?
633 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 18:39:02 ] >>631 zshの設定を変える rake専用の補完関数を書けばいい 誰かが作ってるのではないかな
634 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 18:45:55 ] >>632 今ドラフト。
635 名前:デフォルトの名無しさん [2010/01/12(火) 22:17:37 ] Ruby と IPA はどのような関係があるのですか?
636 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 22:21:00 ] >>635 マブダチ。
637 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 23:35:30 ] >>634 まじ?
638 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 23:38:22 ] 情報処理技術者試験の午後問題になる日も近いな
639 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 23:59:56 ] Ruby Draft Specification ruby-std.netlab.jp/
640 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 00:11:14 ] Ruby/GSL rb-gsl.rubyforge.org/ のWindowsバイナリってないです? gem install gslしようとしたら、native libraryでコンパイルしようと下ので、 VC++2008環境でやってみたんですが、エラー吐いてダメポです。 どなたかコンパイルしたバイナリか、コンパイルの仕方教えてください。 mingwとかでもコンパイルできますか? C:\Program Files\Microsoft Visual Studio 9.0\VC>gem install gsl Building native extensions. This could take a while... ERROR: Error installing gsl: ERROR: Failed to build gem native extension. C:/ruby/bin/ruby.exe extconf.rb checking for sys/types.h... yes checking for u_int8_t... no checking for int16_t... no checking for int32_t... no checking for u_int32_t... no creating narray_config.h creating Makefile nmake (つづく)
641 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 00:12:02 ] (つづき) Microsoft(R) Program Maintenance Utility Version 9.00.21022.08 Copyright (C) Microsoft Corporation. All rights reserved. cl -nologo -I. -I. -IC:/ruby/lib/ruby/1.8/i386-msw in32 -I. -MD -Zi -O2b2xg- -G6 -DHAVE_SYS_TYPES_H -c -Tcnarray.c cl : コマンド ライン warning D9035 : オプション 'Og-' の使用は現在推奨されていま せん。今後のバージョンからは削除されます。 cl : コマンド ライン warning D9002 : 不明なオプション '-G6' を無視します narray.c c:\ruby\lib\ruby\1.8\i386-mswin32\config.h(2) : fatal erro r C1189: #error : MSC version unmatch NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN \cl.EXE"' : リターン コード '0x2' Stop. Gem files will remain installed in C:/ruby/lib/ruby/gems/1.8/gems/narray-0.5.9.7 for inspection. Results logged to C:/ruby/lib/ruby/gems/1.8/gems/narray-0.5.9.7/src/gem_make.out
642 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 00:27:46 ] >>630 cgi.rbがゴミなのでしょうか? 他に使いやすいCGIライブラリってありますか?
643 名前:640 mailto:sage [2010/01/13(水) 00:32:06 ] こういったライブラリはmingw32でコンパイルできるものなのでしょうか?
644 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 00:49:49 ] >>642 いまのところの本命はRackやRackに基づいたもの。
645 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 01:03:24 ] .. (. . ) ,―ヽ__(__、― ,/ ノ ヽ ~\ / ノ IPA ヽ ~\ / ノ ヽ、 `ヽ | ノ / ̄\ / ̄~ヽ ヽ i | ノ | ノ \ | <●> <●> ( ) \ | | | i / | / ヽ レ i (●_●) / i、 ,-――-、 ・ / i、 <(EEEEE)> ∵/ RubyはIPA Rubyになったピョん☆ i、 \ ./ / \ ーー ,ノ ,,.....イ.ヽヽ、ー-―一ノ゙-、. : | '; \_____ ノ.| ヽ i | \/゙(__)\,| i | > ヽ. ハ | ||
646 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 01:24:34 ] 初心者には Ruby 1.8.7 を強くお勧めします。とありますが、 公式から初心者のためのRubyインストールガイドに飛んで、 <URL:rubyforge.org/projects/rubyinstaller/> でダウンロードできます。 に行ったところ、1.8.6と1.9.1しか見当たりません ど初心者なので安心な公式からのリンクのインストーラを使っておきたいところなんですが 興味を持っていざ足を踏み入れてみたものの、いきなり迷子になってます
647 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 01:29:31 ] >>640 rubyをコンパイルしたのと違うバージョンのコンパイラを使うと ランタイムライブラリが衝突する関係上、拡張ライブラリはコンパイルできない ただしVC6とMinGWは同じランタイム使うのでそこの互換性はあり つーことで、>>643 はrubyがVC6かMinGWでコンパイルされている条件付でyes
648 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 01:33:27 ] >>646 そういえばOne-Click Installerって1.8.6までだったね groups.google.co.jp/group/comp.lang.ruby/browse_thread/thread/3212e4e1a32d8526 >>592 にあるRumixってのを試してみては 不安なら他の人のレスを待って
649 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 01:43:57 ] >>648 ありがとうございます 教えてもらったRumix - Ruby Starter Package with Installer でインストールして初めてみたいと思います
650 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 01:46:22 ] >>646 とりあえず始めるにはRubyGemsつきの以下の2つをオススメしたいな ActiveScriptRuby(ただし、少し古いので外部公開とかは注意) COM Meets Ruby arton.hp.infoseek.co.jp/indexj.html か、>>592 のRumixをどうぞ Rumix - Ruby Starter Package with Installer ruby.morphball.net/rumix/ Rumixの方は試してないからわからんが、コッチの方がRuby1.8.7でも新しい。
651 名前:640 mailto:sage [2010/01/13(水) 01:48:30 ] ありがとうございます。 RubyはVC6版(ActiveScriptRubyのだと思う)のはずなので、MinGWでコンパイル試してみます。
652 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 01:54:49 ] >>650 わざわざありがとうございます ActiveScriptRubyもチェックしてみたいと思います
653 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 06:54:52 ] 環境によってrubygemsがアホみたいに遅くなるのはどのWindows版だっけ
654 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 07:03:58 ] >>653 mswin32が爆弾持ち 絶対にmingwもいれて比較すべき 遅く感じないならどっちでもいい 遅くない人もいるみたいだから
655 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 07:34:04 ] 1.8.7のインストーラ用意してないのは、単なる手抜き? まあ教祖自身がウィンドウズ使ってないから放置なんだろうけど。
656 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 07:55:04 ] マストでないので、やる人員が確保できなければ特段用意されない
657 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 08:15:41 ] マイクロソフトあたりが環境用意してくれるのはきっと大歓迎。
658 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 09:20:36 ] >>655 自身が必要なら手を上げれば今なら英雄候補生
659 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 10:52:00 ] arr.insert(0, obj) ってなんか意味あんのかね arr.unshift(obj) と一緒だよね ただのデータ配列なのでキュー関連の物言いを嫌ったのかね
660 名前:デフォルトの名無しさん [2010/01/13(水) 16:12:42 ] floatの内部表現を表す4バイトを指す文字列(ポインター)が欲しいのですが、どうすればいいのでしょうか C言語で書くとこうなります。 float f[] = {1,2,3,4,5,6}; unsigned char* p = (unsigned char*)f; OpenGLを使っていて頂点データをGPUに送るのに配列の生データが欲しいのですが……
661 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 16:49:47 ] >>660 pack調べろpack
662 名前:デフォルトの名無しさん [2010/01/13(水) 17:04:11 ] >>661 .pack("f*")で出来た。まじサンクス。 @@vertices = [1,0,0, 0,1,0, -1,0,0].pack("f*") @@indices = [0,1,2].pack("f*")
663 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 19:37:31 ] >>659 すまん。レスの趣旨がつかめん。 挿入位置によってメソッド使い分ければいいじゃんてことが言いたい?
664 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 11:08:18 ] スタックとみなしてる意図のメソッドと、キューとみなしてる意図のメソッドってあるよね とかそんなことだと思う
665 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 17:43:13 ] たまたま何処かでそういうコードを見かけて、unshiftで事足りるのに わざわざinsert使っているのは何故なんだっていうところだろうね。
666 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 20:04:56 ] バグを見つけたらどうしたらいいの?
667 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 20:16:27 ] [BUG] と出て落ちたとか Segmentation Fault したとかならまず検索かな たいていは既に報告してて対処待ち Rubygems みたいな外部ライブラリのバグっぽい感じのものならやっぱ過去の報告とか調べて それでもなさそうなら Rubyforge や GitHub のページのバグ報告あたりに出すといい ただ、断言してもいいけど6割はただの勘違いで、残りのうち3割5部は既に報告済みだと思う どこのどのへんが怪しい動作と思えるのかここで言ってみ 報告のためにはそれなりに体裁とか前提条件とか洗い出さないと対処してもらいにくいけど ここで何か言えばそのためのヒントくらいは出るかもよ
668 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 20:20:12 ] >>665 unshift と書いてあったら俺はキューのようなものだとみなす キューでもないのに unshift と書いてあったらたぶんキレる 先頭に要素突っ込みたいなら insert 使え 最後に要素突っ込みたいなら << か push 使え
669 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 20:27:34 ] 沸点低いなー まあ確かに順番必要ないのにArray使ってる例というのは結構あって
670 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 21:33:30 ] バグの情報はどこにあるの? Googleで4・50件ほど見たけど無かった。 win32でコマンドラインに特定の非ASCII文字を含むディレクトリ名を指定するとワイルドカードが展開されない
671 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 21:35:23 ] bugはここ redmine.ruby-lang.org/projects/ruby/issues?set_filter=1&tracker_id=1 サンプルコード見せて
672 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 22:16:49 ] >>670 非ASCII文字の中に「表」とかの \ で終わる文字が入ってるんだろ
673 名前:デフォルトの名無しさん [2010/01/14(木) 23:06:29 ] Do One Thing for Rails 3 on January 16th and 17th railsbridge.org/news_items/10
674 名前:デフォルトの名無しさん [2010/01/14(木) 23:11:49 ] Rubyでwebアプリ作るときはcgi使うのとERB使うのと お作法的にはどっち?
675 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 23:13:46 ] どっちもつかわねー、というのが答ではあるが 初心者のうちは全部使って長所短所欠点体に刻んどけという気はする どうせ外に出したりしないだろ
676 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 23:15:09 ] 何使うの?
677 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 23:15:28 ] >>670 その「特定の非ASCII文字」が何かによって答えは変わる。 シフトJISにない文字なんじゃないかと思うが如何?
678 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 00:13:11 ] >>644 RackやRackに基づいたもので、普通のCGIは作れるのでしょうか? 調べてみても、mod_railsとかmongrelとかの環境を作らないと 動かせないように見えるのですが...
679 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 00:20:18 ] >>678 できる できるが、rack/cgi はリリースされても全く動かなかったことがある (つまり誰も本気でテストしてなかった)というヤな過去があって つまり誰もやってないんだよね 理屈上はできるし理屈上はRackでやるとキレイなんだけど、 CGI作るということ自体がもうあまり流行らないから
680 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 00:28:29 ] >>671 D:\tmp\r>ruby -e "p ARGV" D:\tmp\r\本/* ["D:\\tmp\\r\\本/*"] D:\tmp\r>ruby -e "p ARGV" D:\tmp\r\表/* ["D:\\tmp\\r\\表/*"] D:\tmp\r>ruby -e "p ARGV" D:\tmp\r\漢/* ["D:/tmp/r/漢/新規テキスト ドキュメント.txt"] 漢字の2バイト目が\とか{とか
681 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 02:40:12 ] とりあえずバージョンを書いて 1.8.7p160だと問題なかった pの出力で日本語が出てることをみると1.9系だと思うが 1.9.1p243だと >>680 と同じ状態 Dir.glob に渡した時はちゃんと展開されるが コマンドライン引数を展開する時はダメなんだね UNIXだとコマンドライン引数のワイルドカードはシェルが展開するから、開発者には気付かれにくいのだろう 昔の1.8は Dir.glob自体がSJISに完全対応してなくて、コマンドライン引数にも同様の不具合があったけど 今回のはコマンドライン引数の時だけの不具合なのか
682 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 03:16:56 ] def set_select_quests for i in 0..9 quest_number = rand(10) @select_quests |= quest_number.to_a if select_quests_flag(quest_number) end end def select_quests_flag(index) return false if @select_quests.include?(index) #・・・@ return true end @で@select_questsに同じ要素が入っている場合falseを返す様にしたいのですが この場合include?(val)メソッドしかないですよね? なんかうまく動かないんですがどこか間違ってますか?
683 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 03:29:47 ] >>682 @select_quests << quest_number if select_quests_flag(quest_number) かな
684 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 04:05:24 ] >>654 え、うそ!!!1 RubyGemsが遅いのってmswin32版のせいなの??? くっそー今まで散々苦労してきたのにー 確かにcoLinuxとかだとめっちゃ早いと思ってたわ。 mingw版だと早い?、とか
685 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 06:38:43 ] とりあえずgemはバージョンが古かったら サーバ側でバージョンが古いと怒って欲しい
686 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 07:35:58 ] >>685 おう、そういう機能入れたから、rubygem をアップデートしてくれ というわけで鶏と卵だ
687 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 07:43:14 ] >>682 def initialize @select_quests = Array.new ... end def set_select_quests (0..9).each.do |i| quest_number = rand(10) # @select_quests に quests_number が含まれてなかった場合追加する @select_quests << quest_number if @select_quests.include?(quest_number) end end
688 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 08:06:58 ] >>687 のifはunlessの間違いだと思う冬の朝
689 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 20:25:24 ] rubyはwindowsで動かすとどうして遅いの? ずーと前からみたいだけど直すきないの?
690 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 20:28:45 ] 開発者がアウトオブ眼中だから
691 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 20:29:00 ] >>689 なんでWindozeを使ってるの? LinuxやBSDやSolaris使えばいいだけじゃないの? 文句言ってるだけで何も行動しようとしないのはなんでなの?
692 名前:682 mailto:sage [2010/01/15(金) 20:46:00 ] ありがとうございました うまくいきました
693 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 20:46:26 ] >>689 めんどくさいから いやマジで 誰にでも絶対に起こるなら直されると思うんだが実際はそうではない
694 名前:デフォルトの名無しさん [2010/01/15(金) 20:50:00 ] >>689 >>691 みたいな人ばっかりだから
695 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 20:55:02 ] >>693 だよね むしろ嫌がらせっぽい
696 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 21:26:17 ] WindowsOSがやめられないので、ちょっとずつPythonに移行し始めたよ。 既存のクラスにメソッド追加したり、injectとかがちょっと使いづらい以外不満はない。
697 名前:sage [2010/01/15(金) 21:29:39 ] Pythonたんは、純粋なオブジェクト指向じゃないよね。 len() とか気持ち悪い。
698 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 21:37:14 ] >>697 最初はそう思ってたけど慣れればそんなもんかって思えるよ。 あとは、三項演算子やcase文がないのがちょっと残念くらいなもんか。
699 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 21:38:39 ] >純粋なオブジェクト指向 Rubyも「+」とか「end」はオブジェクトじゃないよね
700 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 21:41:20 ] >699 不完全性定理というのがあってだな
701 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 22:19:11 ] 文字列をn文字ずつ&1文字ずつに分割したいのですが x = "ABCDEFGHIJKLMNOPQRSTUVWXY" x = x.scan(/.{5}/) x.collect!{|y|y.scan(/./)} p x =>[["A","B","C","D","E"],["F","G","H","I","J"],["K","L","M","N","O"],["P","Q","R","S","T"],["U","V","W","X","Y"]] みたいに書くと都度、正規表現によるマッチが行われるので遅いです もっと高速に実行する方法があったら教えてください。よろしくお願いします
702 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 22:20:42 ] まあ俺は自分の仕事が片付けばいいだけだから オブジェクト指向の純粋さなんてどうでもいいわ
703 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 22:31:44 ] >>701 x.chars.each_slice(5).to_a とか。 Benchmark.bm で1万回ずつやった時間を比較したら半分弱の時間だった。
704 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 22:37:37 ] >>701 x.split(/.{5}/) x.split(//) がたぶん一番速い これでも遅いという場合はそもそもそんな莫大な配列を文字から作る理由は何というとこから
705 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:10:56 ] >>704 そもそも要件を全然満たしてない件
706 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:17:57 ] enumeratorと配列の違いって何ですか? なんとなく大体同じもののように思えるんですが
707 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:42:36 ] 超巨大な集合から1つずつ取り出そうとしたとき、Enumeratorは全部を 覚えていなくてもいいぞ。 alphabets = %w(a b c d e f g h i j k l m n o p q r s t u v w x y z) alphabets.combination(13).first(5) は造作もないが alphabets.combination(13).to_a.first(5) はたぶんメモリ足りない。
708 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 00:46:48 ] >>706 数えられて、返ってくる順番が保証されないのがEnumerator Enumeratorを継承してるので数えられて、しかも順番情報を保持するようにしたのがArray こう考えるとSetの出番がないんだがまあ誰も覚えてないし誰も使ってないと思うので気にするな
709 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 12:34:07 ] >>701 シングルバイト文字限定でいいのかな? であれば x = "ABCDEFGHIJKLMNOPQRSTUVWXY" res = [[]] x.each_byte do |b| if res[-1] < 5 res[-1] << b.chr else res << [] end end で,どうでしょう?
710 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 14:39:59 ] ruby1.9の正規表現で,\wがマルチバイト文字にヒットしてくれません。 以下のコードはなにか間違っていますでしょうか? # coding: cp932 p "日本語" =~ /\w/s #=> nil 鬼車のドキュメントには\wは多バイト文字にマッチすると書かれているのですが。 ttp://www.geocities.jp/kosako3/oniguruma/HISTORY_5X.txt
711 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 14:44:55 ] \w は Ruby では元々 [0-9A-Za-z_] という意味のメタ文字だったので、 1.9 でもそうなってる。
712 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 14:51:19 ] >>711 Thanksです。 マルチバイト文字を含めた単語構成文字にマッチするナイスな正規表現ってありませんか? あとドキュメントのURLが間違ってました。 ttp://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt
713 名前:710 mailto:sage [2010/01/16(土) 14:58:14 ] 自己レスです # coding: cp932 "日本語" =~ /\p{Word}/s でいけました。
714 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 15:02:56 ] たしか ¥d が漢数字にマッチしてしまって使いにくくなってたので その種のは使い分けるようになったんだっけ?
715 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:22:03 ] >>709 1.9系なら↓でマルチバイトもOK x = 'あいうえおかきくけこさしすせそ' res = [] x.each_char.each_slice(5){|a| res << a}
716 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:29:26 ] これでもできるな x = 'あいうえおかきくけこさしすせそ'.each_char.each_slice(5).map{|a| a}
717 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:32:17 ] Windowsのユニコードのファイル名が扱えるライブラリはありますか?
718 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:33:00 ] >>717 ありません
719 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:38:28 ] いやいやいやいや、直接API呼べば問題ないからさ そういうライブラリがrubygemsあたりにでもないかという話だろう でもこれで困るの日本人とかだからなー
720 名前:701 mailto:sage [2010/01/16(土) 18:50:38 ] レスありがとうございます >>703 の方法が一番早いようなのでこれを使わせてもらいます
721 名前:デフォルトの名無しさん [2010/01/17(日) 10:37:45 ] 皆さんはRubyのコードを何で書いてるのでしょう? やっぱり、Emacs or vim? 補完が効くのが良いのですが・・・・
722 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 10:48:27 ] Emacsが無難ということに一応なってはいる 適当な統合環境が快適に動作する環境なのなら、エディタ部のコード書きの補完機能だけ使うのも悪くはない Emacsを一度も使ったことがなくて基本キー操作から覚えなければならないというのだとすれば尚更 Emacsが好まれてるのはエディタの軽さの範疇を実際上は超えてないというのが大きい もしEclipseやNetBeansが超サクサク動作だったならEmacsは時代遅れ度を2段階くらい上げていたはず
723 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 11:02:32 ] Emacsは現代的なIDEが提供するところの補完機能を厳密にはもってない …まあ、実用上はそれほど困らないが
724 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 11:35:27 ] 拙者は秀丸でござる。 感謝の意を込めてちゃんと送金したでござる。
725 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 11:35:48 ] Emacs で指がつったら vim も試してみてね by vim厨
726 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 11:46:52 ] >>721 主にNetBeans使ってる。IDE厨なのでw ただし、NetBeansの最新の6.8はいろいろとバグが・・・
727 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 11:57:45 ] 俺もいわゆるスクリプト程度しか書かないからEmacsで十分だな でもたしかにIDEがエディタ同様に軽ければそっち使うかも
728 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:36:38 ] 通常のエディタでは慣れてくると物足りない(プログラミング初心者は補完のないエディタでやること) IDEはおおむね重いし遅いしプロジェクトとかそんなのが必要な大作ばかり作るわけじゃないから邪魔 というところにすこんと入るのがEmacs 全部できるが余分で煩雑で重い、というものを使うよりは、 やや足りなくて手作業が入るが軽快、のほうを選ぶ人は意外と多い
729 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:17:32 ] emacs自体あんまり使わないんだけど、ショートカットキー一発で 全体を整形&フィリング(emacsではこういうのかな)できる設定ないかしら。
730 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:20:51 ] あるお。 俺はCtrl-x hとかしたあと、Ctrl+Alt+\を押してる。 フィリング?は知らんけど。
731 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:20:54 ] 結局>>717 は無いの?
732 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:21:05 ] class C def hoge とても長いメソッド... local_var = value #<= ここだけを書き換えたい ... end end メソッド定義内のローカル変数たった一行を書き換えたいんです。 とても長いメソッドなので,class_eval{def...無意味なコピペ...end}をしたくありません。 スパッと書き換えることはできませんか? とりあえずSCRIPT_LINES__とripperを使えば20行くらいでできるのですが, もっとストレートな方法があるかもしれないと思い質問しました。 ちなみにbindingを使った実験には失敗しました。 よろしくお願いします。
733 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 14:05:33 ] >>731 本スレ行って聞いてみたら
734 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 14:22:30 ] Emacs が軽快とか隔世の感、とか言うのは多分年寄り。
735 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 14:32:07 ] 今は通信速度が速いから、Emacs も簡単にダウンロードできる。 昔はフロッピーで小分けにして、配布してたな。
736 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 14:36:14 ] >>731 Perlの↓相当がgemにあればいいんだろうけど perl-users.jp/articles/advent-calendar/2009/hacker/20.html いまgemでサーチかけた感じだとなさそう 必要なら↑を参考にしてRubyにportしたら?
737 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 14:46:29 ] >>731 1.9.2で扱えるようになるかも、ってことらしい blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/45826
738 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 14:54:30 ] >>731 >>736-737 あれ、WindowsだとUNICODEファイル名ダメだったのかー gemでモンキパッチみたいに簡単にWindowsのときだけOKにできるのとかあったら便利そうだね。 システムの根底だから難しいのかね
739 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 20:48:07 ] >>736-738 ありがとう。だが初心者にはハードル高すぎ 1.9.2に期待しまつ。いつごろ出るんだろ?今年の春頃?
740 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 20:52:56 ] 一応「もう出てる」レベルではあるんだが、Windowsでは自力でソースからコンパイルしないといかん rubygemsとかも未対応で動作しない可能性も大きい しばらく前の1.9.1状態 来年くらいには使える状態になってるんじゃないかなあ
741 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 21:21:56 ] なんか直接いじればどうにかなりそうな気はするんだけどねえ
742 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 21:54:31 ] すいません、これ↓を使いたいんですが、何から始めればいいのか教えてください。 ttp://gist.github.com/211635
743 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 22:12:49 ] >>730 フィリングってのはこういうの。文章の段落内でESC qでできる。 # ながーーーーーい説明文菜がーーー否がーーー否がーーーーーーーーーーーーーーーーーーーーい ↓ # ながーーーーーい説明文菜がーーー # 否がーーー否がーーーーーーーーー # ーーーーーーーーーーーい んで、ソースコード全体を一発で整形&フィリングしたいのんよ。ruby-modeで。
744 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 22:20:06 ] >>742 見てわからんのならスクリプトがすこし違って詰まったときの対処も自力で全然できないということだから 素直に Ruby の勉強を進めたほうがいいような気がしないでもない 前情報として、Ruby の知識が全然ないのなら使えないよ MySync GoogleContacts でぐぐると唯一出てくるから、 これをしたい場合は Ruby 上でこれを動かすしかないわけだけど、 まったくの一見さんが使えるようなクオリティにはそもそもなってない を踏まえて Ruby を適当にインストール、URL の Download からダウンロードして展開して、 au2gcontact.rb をてきとうなとこにコピー その後、au2gcontact.rb 自身のファイルの文字コードを Shift_JIS というか CP932 に変換 MySync が吐き出したエクスポートの CSV(Shift_JISに変換済)を第 1引数に、 GoogleContacts に食わせたいファイル名を第 2引数にして、 ruby au2gcontact.rb mysync.csv output.csv と実行 output.csv は ShiftJIS(というかCP932)だが、 これがそのまま GoogleContacts にでインポートできるかどうかまでは知らない
745 名前:742 mailto:sage [2010/01/17(日) 22:53:26 ] なんかよくわからんまま試行錯誤したら一応の目的は達しました。ありがとうございました。以下俺メモです。 rubyをインストール。 ソース(っていうのかな?)をメモ帳にコピペ。拡張子を.rbに変える。 au2gcontact.rbとaddress.csv(←LismoPortが吐き出すやつ)とgcontact.csvをC:\Documents and Settingsに置く。 コマンドプロンプトからruby au2gcontact.rb address.csv gcontact.csv 出てきたのをgmailにインポートでおk。 いやーすごいですね。感動しました。ほんとありがとうございました。
746 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 01:19:39 ] >>743 Emacs のスレで聞いたら adaptive-fill-mode の使い方なり filladapt.el の後継なり 何か情報が入るんでない?
747 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 03:41:47 ] 乗り遅れた感あるけど vim+neocomplcacheでやっとります。
748 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 09:32:46 ] > rubyはwindowsで動かすとどうして遅いの? Ruby 1.8.7-p174 の select が遅かった話じゃなくて? www.garbagecollect.jp/~usa/d/200909c.html Ruby 1.8.7-p249 にすれば直るよ。 > たしか \d が漢数字にマッチしてしまって使いにくくなってたので Ruby 1.9.1 の初期はそうだったんだけど、この挙動はバグ扱いされて修正されたので、 Ruby 1.9.1-p378 にすれば直るよ。
749 名前:742 mailto:sage [2010/01/18(月) 09:33:49 ] 追記。適当なソフトでau2gcontact.rbの文字コード変換をshift jisに変換。
750 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 15:18:11 ] puts "日本語".inspect とすると、"¥123¥456" みたいな表示なりますけど、これを "日本語" のままで表示させることはできませんか。
751 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 15:35:00 ] 1.8.7 mswin32の場合 irb(main):001:0> puts "日本語".inspect "\223\372\226{\214\352" => nil irb(main):002:0> $KCODE = "s" => "s" irb(main):003:0> puts "日本語".inspect "日本語" => nil
752 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 15:37:06 ] -Kオプションの方がわかりやすいかもしれないと思い直した >ruby -Ks -e'puts "日本語".inspect' "日本語"
753 名前:739 mailto:sage [2010/01/18(月) 18:25:32 ] 1.9.2 preview1で試してみたけどダメだった
754 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 18:35:12 ] だからそういうふうにそもそも作ってないんだから標準で用意されたメソッドをどう使おうと絶対に駄目だって
755 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 19:39:35 ] 火急的に困ってる人がいないんだろうね 見なかったことにするわけにもいかんと思うんだが、代替手段は何なのだろう そこだけRubyを使わない?
756 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 19:58:33 ] 1.9.2で扱えるようになるかも、ってことらしかったんで
757 名前:デフォルトの名無しさん [2010/01/18(月) 20:21:42 ] #!ruby -Ku require 'win32ole' WIN32OLE.codepage = WIN32OLE::CP_UTF8 fso = WIN32OLE.new('Scripting.FileSystemObject') a = fso.CreateTextFile("♡♥♡♥.txt", true) a.WriteLine("This is a test") a.Close()
758 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 20:35:46 ] 笙。笙・笙。笙・.txt というファイルができました先生
759 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 20:39:55 ] u
760 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 21:01:23 ] 環境とエディタによってはこのへんきちんと動作するように保存するのは微妙に難しいぞ 慣れればどうということもないんだが
761 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 21:11:27 ] おお! できました!! ありがとうございます!!! これどうすればIOやDirで扱えるんですか?
762 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 21:20:06 ] >>761 扱えない 全部 WIN32OLE 内で完結させる必要がある 必要なのは Ruby の知識じゃないね
763 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 21:33:40 ] ですよねー...
764 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 21:35:43 ] 最初と最後にリネーム処理かませば Ruby から扱うのも不可能ではないと思う
765 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 22:55:11 ] 先生質問だよ質問 data = {/key/ => lambda{|m| "<#{m}>"}} … data.each_pair do |re, p| file.gsub!(re){|m| p.call(m)} end p file #=> key が <key> になってる というような、 {正規表現 => キーのマッチ結果を便利に利用した結果の返り値またはただの文字列} というデータを用いた連続置換をしたいのです それで、data は外部から自由に与えたいのです でも、よく考えたら lambda を作った時点では gsub の $1 も \1 もまだ無いから利用できないわけで なにかうまい方法ないですか eval ならなんとかなると思ったんだけど普通の置換後に使いたいだけの文字列も eval してしまいます
766 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 23:47:16 ] >>765 m = Regexp.last_match puts m[0] とかでできないかな? あと data.each_pair do |re, p| file.gsub!(re, &p) end でいいような気がするけど試してはいない。
767 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 23:55:48 ] こういうことだろうか。 to = data.each_pair.inject(from) {|result, pair| result.gsub(pair[0], &pair[1]) }
768 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 23:59:30 ] これではどう? a = 'abc def' data = [['(\w+)', '<\1>'], ['(> <)', '> < \1 > <']] data.each{|reg, rep| a.gsub!(/#{reg}/, rep)} a => "<abc> < > < > <def>"
769 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 00:09:09 ] >>768 なにそのわかりやすくしようとする気概をぜんぜん感じない例
770 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 00:10:57 ] >>765 766-768が書いているようにgsub!の第2引数で置換パターンを書いたほうが 単なるstringでパターンを渡せるので簡単だと思う 766,767が書いてるパターンの前の '&' って どういう意味?
771 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 00:21:13 ] >>770 ttp://www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html
772 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 00:26:03 ] なるほどProcを渡してるのねthx 俺には768の方がわかりやすいな、例は見づらいが
773 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 00:42:38 ] だって先生が gsub はブロック使えって言ったんだもん言ったんだもん言ったんだもん >>766-768 irb> data = {/k1/ => 'v1', /k(2)/ => 'v\1', /k3/ => lambda{|m| m.sub(/k/,'v')}} irb> str = 'k1, k2, k3' irb> data.each_pair do |re, p| p.kind_of?(Proc) ? str.gsub!(re, &p) : str.gsub!(re, p) end irb> p str "v1, v2, v3" 思ったことに近いことができましたーうおー 助かりましたせんきゅうです
774 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 03:46:28 ] 1byte文字以外をマッチする方法を教えてください s="123123456456" s.gsub!(/〜/){|c| uni_enc(c) } p s => 123%uFF11%uFF12%uFF13456%uFF14%uFF15%uFF16 みたいに1byteじゃない文字だけ変換して置換したいです よろしくお願いします
775 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 06:56:24 ] $KCODE='s' s="123123456456" s.gsub!(/./){ |ch| (ch.length==2) ? "(#{ch})" : ch } puts s;
776 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 07:36:20 ] 1バイトじゃない文字だって言ってるのにわざわざ2バイトをチェックするとはこれいかに
777 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 14:27:57 ] # coding: sjis # Ruby1.9以降か正規表現エンジンに鬼車を使用 s="123123456456" s.gsub!(/[^\p{ASCII}]/){|c| "%u"+c.encode('utf-8').ord.to_s(16) } p s
778 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:08:32 ] test = {"うし"=>5, "うま"=>3, "うし"=>1, "うし"=>2, "うま"=>4} test.each{|key, val| } これを実行したら最後二つの"うし"=>2と"うま"=>4しか処理が実行されないんですが キーの要素が一緒だと前にある奴は消されてしまうんですか? またこれをハッシュの数分だけ実行させることはできないんでしょうか?
779 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:22:15 ] >778 ハッシュの意味を勉強してこい
780 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:30:11 ] 配列の配列を使う方法 test = [ ["うし", 5], ["うま", 3], ["うし", 1], ["うし", 2], ["うま", 4] ] test.each {|k, v| use(k, v) } 値が配列になったハッシュを使う方法 test = {"うし"=>[5, 1, 2], "うま"=>[3, 4] } test.each {|k, a| a.each {|v| use(k, v) } }
781 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:44:49 ] 文字列 a0-0 a0-1 a0-2 a0-3 a1-0 a1-1 a1-2 a1-3 a2-0 a2-1 a2-2 a2-3 から任意が選ばれた配列a a=["a0-0","a2-2","a2-3"] より、 配列bを作成したいのですが、 なにか良い方法はないのでしょうか? b=[[1,0,0,0],[0,0,0,0],[0,0,1,1]]
782 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:51:33 ] 只今から上位エスパー召喚の儀を執り行う
783 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:54:09 ] "a0-0" → [1, 0, 0, 0] "a2-2" → [0, 0, 0, 0] "a2-3" → [0, 0, 1, 1] という対応があるように見えるのだが、2つめは [0, 0, 1, 0] ではない? どういうルール?
784 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:55:50 ] >>782 失敗してるぞw
785 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:58:38 ] こうだな a=["a0-0","a2-2","a2-3"] b = Array.new(3){ Array.new(4, 0) } a.each do |x| if /a(\d)-(\d)/ =~ x b.push[$~[1].to_i][$~[2].to_i] = 1 end end p b #=> [[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 1, 1]]
786 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 18:00:09 ] >>782 成功したぞw
787 名前:785 mailto:sage [2010/01/19(火) 18:00:44 ] ごめん。こうだったね。 > b.push[$~[1].to_i][$~[2].to_i] = 1 b[$~[1].to_i][$~[2].to_i] = 1
788 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 18:02:57 ] >>783 a0-0 は配列aにあるから 1 a0-1 はないから0 a0-2 はないから0 a0-3 はないから0 これにより[1,0,0,0]です。 a2-0 はないから0 a2-1 はないから0 a2-2 はあるから 1 a2-3 はあるから 1 これにより[0,0,1,1]です。 このようなルールです。
789 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 18:26:34 ] >>785 ありがとうございます。 この方法で問題なく解決しました。
790 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 22:18:49 ] こういう3択クイズで選んだ結果をファイルに出力して、解答ファイルと照らし合わせる場合 どうすればいいのでしょうか? require 'cgi' c = CGI..new hoge = c["va"] print "Content-type: text/html; charset=EUC-JP\n\n" print "<html><head><title></title></head><body>\n" print "<p>" if hoge == 1 print "<p>問題1</p>\n" print"<form method=\"POST\" action=\"./test.rb\">\n" print"<input type=\"radio\" name=\"va\" value=\"2\">ア print"<input type=\"radio\" name=\"va\" value=\"2\">イ print"<input type=\"radio\" name=\"va\" value=\"2\">ウ print"<input name=\"ok\" type=\"submit\" value=\"OK\">\n" print"</form>\n" elsif hoge == 2 略 end print "</p></body></html>\n"
791 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 22:32:03 ] >>790 Rubyは基本、HTTPのクエリ文字列とかを隠蔽しない そのときどんなデータがどのように送られてくるものなのか、HTTPの勉強をするといいぞ
792 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 23:06:30 ] >>791 ありがとうございます 勉強して何とかやってみます
793 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 08:35:06 ] >>791 事実だから仕方ないが、あんま威張ることじゃないけどねえ Railsで作ってRailsで表示してRailsで受け取れば抽象度高くできそうだが、もうCGIではないな
794 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 08:36:21 ] そりゃ言語としてWEBだからって何かするのはPHPくらいだろう。
795 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 08:49:20 ] あほまるだし
796 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 12:53:24 ] 質問です! 文字列を受け取ってスペースと記号を削除した文字列を返すメソッドを作りたいんですが どうすればいいでしょうか? ちなみに条件はgsubメソッドをつかうこと 記号は全角も半角も含む(","とか"。"とか"?"とか"?"とか) どなたかお願いします
797 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 12:56:49 ] >>796 Rubyの宿題教えてください。2限目 pc12.2ch.net/test/read.cgi/tech/1200175247/
798 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 13:10:06 ] >>797 スレ違いでしたね すいません わざわざありがとうございます
799 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 13:48:31 ] RDEは軽いからお手軽なGUIのirbみたいなイメージで 自作メソッドとかの動作確認的な風に使うな
800 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 14:45:43 ] railsを勉強しようと思うんですが、初心者向けで お勧めの本はありますか?あるいは、これは読んで おくべき本でも構いません。 Webでいろいろ読んだのですが、modelのassociation やAjaxが難しく感じました。
801 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 14:50:41 ] うむ、スレのテンプレすら読めんような注意力では何もかもが難しかろう 【Ruby】Ruby on Rails Part8 pc11.2ch.net/test/read.cgi/php/1252842574/
802 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 14:53:24 ] Railsの初心者スレってありそうでなさそうで需要ありそうだがやっぱめんどいからなしで
803 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 16:16:05 ] >>801 ありがとう。
804 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 16:21:54 ] >>800 初心者が最低限これだけあればまずはなんとかなる!って書籍を3つ。 というか俺が実際にRails初心者レベルで仕事で使った本 ・RailsによるアジャイルWebアプリケーション開発 www.amazon.co.jp/dp/4274067858/ ・Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応 www.amazon.co.jp/dp/4839928266/ ・Railsレシピブック 183の技 www.amazon.co.jp/dp/4797336625/ あとは、webサイトだけど公式のガイド。ちょっとしたわからんことはまずこれ見たら大体すむ Ruby on Rails guides guides.rubyonrails.org/ 毎回聞かれてるんで、Railsスレテンプレに入れといていいと思うんだ・・・
805 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 16:23:43 ] 質問いいでしょうか? Ruby 1.8.7にて、ブロックつきメソッドの呼び出したブロックの返り値を得たいのですが、 ブロック内で return "UNKO!!" すると、 unexpected return (LocalJumpError) と言われます。 break "UNKO!!" では問題ないようなのですが、これはこういうものなのでしょうか?
806 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 17:03:26 ] >>804 紹介ありがとう とりあえずそれらと公式サイトで始めてみます
807 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 17:04:09 ] >>805 トップレベルでreturn使っていない? def f(a) a.each{ return 1 } end a = [1,2,3] f(a) # これはだいじょうび a.each{ return 1 } # でもこれはダメ
808 名前:805 mailto:sage [2010/01/20(水) 17:50:49 ] >>807 ありがとうございます。 エラーでない方法をお聞きしたいというよりも、もう少し具体的に聞くべきでした。 こちらの期待する動作としては、 ”UNKOoooooooOOOO!!”と”f is finisheeeeeeeedddddd!!111”ともに表示させたいのです。 breakの代わりにreturnだと”f is finisheeeeeeeedddddd!!111”が表示されませんよね・・・?(fから抜けてる?) 実際のコードではa.eachではなくeachの代わりに自分で定義したブロックを必要とするメソッドを呼び出してます def f(a) puts a.each{ break "UNKOoooooooOOOO!!" } puts "f is finisheeeeeeeedddddd!!111" end a = [1,2,3] f(a) # これはだいじょうび #a.each{ return 1 } # でもこれはダメ
809 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 18:01:04 ] breakはブロックの脱出、returnはメソッドの脱出ってこと だからそのfの中でretrunを使ったら内部ブロックでだろうとfを脱出する 同様にこれも無理 def f break end f
810 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 18:09:10 ] ある案件で始めてRubyをいらうことになったのですが、 訳がわからず困っています。 取り合えず、"RailsによるアジャイルWebアプリケーション開発”のT部 HelloWorldプログラムを作成して動かすまでを試してみて、 ああ、PHPでSmarty使ってMVCモデルで作成するのを自動、徹底 してる感じだなと思い、そのまま本チャンプログラムに挑みましたが・・・ ・まず、.rhtmlがTopページしかなく、MVCとも.jsファイルばかり。 ・ブラウザに表示してソースコードを見てみると、1万行近い ソースコードで表示と一致していない。 ・ブラウザのURL表示がページ遷移しても常に一緒。 と、始めて見る構成でした。 私のRubyの理解が足りないと思い、U部以降を読み進めようと思いましたが このプログラム構成が特殊だから、参考書読み進めても効果は薄く それよりプログラムの解析を続けるべきでないかと思い直しました。 皆さんに質問ですが、こういった構成は一般的なのですか? それなりにある手法ならば、読むべき参考書、検索のキーとなる 単語を教えていただけたらと思います。 要領得ない質問ですみませんがお願いします。。。
811 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 18:17:27 ] >>810 お前には絶対に無理だ
812 名前:sage [2010/01/20(水) 18:20:39 ] せめて日本語で頼む。
813 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 18:31:08 ] >>804 の罪は重い
814 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 18:34:15 ] これは俺でも煽る 直前読めずにスレのルールすら理解できないようでは駄目だろうな
815 名前:810 mailto:sage [2010/01/20(水) 18:51:22 ] >>814 >関連スレやURLは>>2-5 あたりを見てください。 >Ruby on Rails の質問は Webプログラミング板の Rails スレへ。 これですか? もっと詳細に質問すべきだったのかもしれませんが、 個々のプログラムの質問以前に全体として???だったもんで。。。 >>810 ,813 つまり、初心者レベルでないから私には到底無理ってことですか? それならそれで上にそう報告しますので助かります。 それでもやれって言われそうですが・・・。 逆に、参考書読んだらわかるようなことを質問するなというのであれば すみません。 参考書、全部読んでみます。 取り合えず、初心者参考書レベルの問題なのかだけでも教えて下さい。
816 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 19:11:01 ] >>815 君が書いてる質問の中に、Rubyそのものに関する話題は一切ない。 Railsスレへ行きなされ。 >>813 が書いてるのは、たぶん、Railsスレへ行けということが示されてるのに わざわざ餌を撒いてここに君を留まらせた罪が重いってこと。
817 名前:810 mailto:sage [2010/01/20(水) 19:13:22 ] >>816 そうですね。。。 すいません。 Railsスレにいきます。 スレ汚し失礼しました。
818 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 19:21:36 ] >>817 読んでないことを期待するが、40パーセントくらいしか悪くないのでそれほど謝る必要はない 残り40パーセントは>>804 で、残り20パーセントはたまたま重なったタイミング
819 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 19:39:51 ] >>808 eachごとの結果がほしいのなら ブロックの外で定義した配列に 欲しい結果を入れておく。 またはブロックのto_aとか 701へのレス703, 709参照。
820 名前:804 mailto:sage [2010/01/21(木) 10:54:34 ] 俺の名誉のために言っておくが、>>810 の言っていることは、 "RailsによるアジャイルWebアプリケーション開発”のサンプルコードの話じゃなくて、 >>810 が取り組んでる仕事のコードだと思うぞ
821 名前:804 mailto:sage [2010/01/21(木) 10:55:31 ] ごめん >>816-818 読んでなかった。餌まいてスマソ
822 名前:805 mailto:sage [2010/01/21(木) 10:56:56 ] ありがとうございます! >>809 > breakはブロックの脱出、returnはメソッドの脱出ってこと ああ!それです。まさにその1行が聞きたかったのです。 俺はもっとよい聞き方を憶えないといけないな・・・
823 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 11:43:10 ] こうして>>804 はプライドも外聞もズタズタになったのであった。
824 名前:デフォルトの名無しさん [2010/01/21(木) 12:57:39 ] 1. ruby -e 'puts ARGF.read' file.txt 2. ruby -e 'puts $<.read' file.txt 1.の文では正しくfile.txtの内容が表示されるのですが、 2.の文で「指定されたファイルが見つかりません。」と怒られます。 リファレンスマニュアルの$<の項には 「つまり定数 ARGF の別名。 」 と書いてあるので、 1.と2.で同じ結果を期待したんですけど。 どこが間違ってるんでしょうか? Ruby1.9.1でOSはWindowsXPです。 よろしくお願いします。
825 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 13:06:28 ] あ,自己解決しました。 Windowsの<とか>とかってエスケープするか ""で括らなきゃいけなかったんでした。 1. ruby -e "puts ARGF.read" file.txt 2. ruby -e "puts $<.read" file.txt または 2. ruby -e 'puts $^<.read' file.txt なら同じ結果になりますね。 スレ汚しスマソ。
826 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 13:10:22 ] >>824 「指定されたファイルが見つかりません。」を出してるのは実はcmd.exeだ 「<」を誤認識してる ということで cmd.exe から < をエスケープすればよい cmd.exe のエスケープ文字は ^ だから、 ruby -e 'puts $^<.read' file.txt
827 名前:816 mailto:sage [2010/01/21(木) 14:12:27 ] 別に810や804を責めたいわけでもないんだが、質問と回答は 適切な場所でやった方がいいよ、ってことで。
828 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 14:15:52 ] >>826 すみませんすみません ありがとうございました。
829 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 14:33:03 ] >>810 >・まず、.rhtmlがTopページしかなく、MVCとも.jsファイルばかり。 >・ブラウザに表示してソースコードを見てみると、1万行近い > ソースコードで表示と一致していない。 >・ブラウザのURL表示がページ遷移しても常に一緒。 > と、始めて見る構成でした。 これはAjaxでページを作ってるんだろう。Railsうんぬんはさほど関係ない。 > 私のRubyの理解が足りないと思い、 いや、JavaScriptやAjaxの知識が足りないだけだと思う。
830 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 14:34:48 ] >>801
831 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 17:50:52 ] riっていらないよね
832 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 17:58:09 ] rubygem パッケージマニュアルとしての ri に関しては、「とりあえず入れておく」というようなもんでもないな既に 現時点で ri を利用してないのなら、 --no-ri で飛ばしてOK 基本的にロクなこと書いてないしソースを grep したほうがおおむね速いので、rdoc もなくてもいい rdoc がきっちりしているライブラリのみ、マニュアル読む機会があるときだけ rdoc コマンドで構成するか、 あるいはネットで公開されてる rdoc を読めばいい
833 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 19:04:47 ] refeはいるけど、riはいらない
834 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 19:13:46 ] デフォで--no-ri -no-rdocしても特にデメリットはないね インストール速いしディスクアクセスも少なくて済むしいいことだらけ
835 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 19:37:04 ] 俺は.gemrcに書いたが、デフォルトでそうであれ、とまでは思わない。
836 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 19:41:39 ] 自分の作るライブラリにはRDocをていねいに書く 自分がインストールするライブラリではrdocは使わない
837 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 19:46:04 ] 日本語でいいならコメント書くんですがー
838 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 19:54:48 ] >>837 あちらさんの使ってるフォント自体に日本語文字がないから、本気で表示が崩れるぞ 外国語の文字も適当に表示できるフォントの認知度が高いのは日本くらいだ
839 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 19:59:50 ] とりあえず日本語でコメントを書きまくり、英語の得意な人がプロジェクトに参加してくれることを祈るというのはどう 英語でコメント書くの大変だって言うような人が作るライブラリなんて、どうせ最初に使うのは日本人が主だろうしさ
840 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 20:14:17 ] そうだな、とりあえず日本人向けオンリーででもまず本体クオリティ上げるのが第一かもしらん 英語ドキュメント書けないからと言って諦めるのはもしかしたら勿体無さ過ぎるかもしれない
841 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 22:08:16 ] 質問です。ある1つのディレクトリ内にあるファイルを更新時間順にソートしてファイル名を連番(数字のみ)にしようと以下のコードを書きました。 def consecutivenum(path) i = 1 files = Dir.glob("#{path}/*").reject{|name| FileTest.directory?(name)} files.sort{|a, b| File.mtime(a) <=> File.mtime(b) }.each{|name| File.split(name)[1] =~ /.+(\..+)/ File.rename("#{name}", "#{File.split(name)[0]}/#{i}#{$1}") i += 1 } end 実行するとファイルが消去されたりコピーされたりしてしまいます。 試しにDir.glob(#{path}/*)だけを実行したところ、存在しないファイル名が混じっていました。 また、そのファイルをFileTest.exist?に送るとtrueが返ってきます。Windowsの隠しファイルでもありませんでした。 何がどうなっているのかさっぱりわかりません。OSはVistaでRubyのバージョンは1.8.7です。 ご助力よろしくお願いします。長々と失礼しました。
842 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 22:40:56 ] > 存在しないファイル名が混じっていました 存在します または、UNICODEファイル名です UNICODEファイル名だった場合、Rubyから扱うことはできません
843 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 23:30:17 ] てか存在しないファイル名とか教えてくれりゃ結構一発だったり
844 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 23:33:11 ] 察してください、まで読んだ
845 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 00:28:53 ] >>842 >>843 ファイル名ですが、エクスプローラーやコマンドプロンプトのdirで確認できずにrubyで検出されたのは 6.jpg 2.ini の二つです。
846 名前:841 mailto:sage [2010/01/23(土) 00:29:59 ] 失礼 >>845 の書き込みは>>841 の者です。念のため。
847 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 00:59:11 ] 本当に存在しないファイルなの? そのディレクトリで system('start 6.jpg') ってやればjpegに関連付けられたアプリで 6.jpg が開くから確かめてみたら?
848 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 01:01:01 ] あとは dir /x とか
849 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 01:08:43 ] >>847 6.jpgについてはエラーが出ましたが、2.iniは開かれました。 >>848 6.jpg、2.iniいずれも出ませんでした
850 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 01:16:26 ] 2.iniがでてきたってことは、ファイル自体はあるってことだよね? でもdirでは出てこないのか・・・謎だ・・・ require 'win32ole' fso = WIN32OLE.new('Scripting.FileSystemObject') fso.GetAbsolutePathName('2.ini') とかしてみたら?
851 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 01:27:40 ] >>850 さきほどまでのフォルダではなくtempフォルダのパスが出ました。 今度はそのtempフォルダで start 2.ini を実行しましたが開かれず、dirでも見つかりませんでした
852 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 01:35:45 ] とりあえずスクリプトに $KCODE = 'SJIS' を付けて実行してみるべき FileSystemObjectで見えているパスはWindowsで見えているパスなので fso経由で2.iniが見えているのにdirで見えないのは、ちょっと不思議
853 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 01:48:34 ] $KCODE = "SJIS"を付けてみましたが特に変わりないようです (ただ、コンソールの作動場所のせいかスクリプトの保存場所のせいかまた別のパスが返ってきましたが) >>850 のスクリプトはなにを意味するのですか?2.iniの代わりに適当な文字列を入れてもパスが返ってくるのですが・・・
854 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 02:49:29 ] まだいるかな? attrib *.* はどう?
855 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 02:52:21 ] なんかの拍子にシステムファイルになったんじゃない? フォルダオプション→表示→保護されたオペレーティング〜 のチェック外してみ
856 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 14:46:40 ] dir で出てこなくて dir /a で出てくるなら 存在はしてるけど何らかの属性がついてて、そのせいでエクスプローラーに表示されないだけだな
857 名前:デフォルトの名無しさん [2010/01/23(土) 15:10:59 ] ./hoge.rb を実行するときに例えば ./hoge.rb --debug のようにしてデバッグモードにして そのときだけ状態メッセージを print するためにはどのようにするのは ruby 的にエレガントでしょうか?
858 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 15:12:05 ] もはやRubyとは関係ないな
859 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 15:43:41 ] >>857 読み手にとっていちばん妥当なもの require 'logger' @log = Logger.new(@logfile||$stdout) @log.debug "debug log message" if @log 書く人が楽だがメソッド名に独り善がり感またはどや顔が滲み出たもの def D(msg) return unless @debug_output @debug_output << msg @debug_output << "\n" end @debug_output = $stderr D "debug log message" 後者のタイプで def LOG(msg) を時々見る
860 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 17:54:08 ] >>859 ありがとうございます! 後者のDをDoyagaoとして使いたいと思います(違)^A^K二つの視点から例を出していただきとても参考になりました!
861 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 18:59:49 ] >>841 です >>854-856 2.iniがシステムファイルとして存在していました。相変わらず6.jpgは見つかりません。
862 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 19:46:16 ] どこにだよ tempか? 最初のフォルダの中のファイルは全部連番に変わったのか? tempのファイルも全部か?
863 名前:デフォルトの名無しさん [2010/01/23(土) 21:43:18 ] ブロックスペシャルファイル(readするとバイト列が得られます)の長さを 調べたいのですが、実際にreadすることなしにこれを実現する方法はありますか? パッと思いついたのは、openしてからファイルの末尾にseekして 先頭からのpositionを得るという方法ですが、他にはありますか。
864 名前:863 [2010/01/23(土) 21:46:20 ] 例えばこんな感じです: File.open("/dev/sda") do |io| io.seek 0, IO::SEEK_END io.pos # /dev/sda のバイト列の長さ end
865 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 21:49:18 ] 関数の外で@も@@も付けずに定義した変数はいったいどこに保存されるのでしょうか? x = 10 def func x = 20 end func puts x #=>10 これがxが20にならないので、最初に定義したxはグローバルには見えないどこかに閉じ込められてるのかな。
866 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 21:50:04 ] >>863 完全にUNIX/Linuxプログラミングの話題じゃまいか
867 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 21:51:41 ] >>866 を、Rubyで実現するにはどうすればいいですかという話だろう
868 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 21:53:55 ] >>865 変数のスコープという概念を勉強してくれ ごく端的に説明すると消えるというか、スコープを抜けるとアクセス不可になって取り出す手段がなくなる def の「中」のローカル変数は def の「外」からはアクセスできない だからメソッドの引数で「中」に入れてメソッドの返り値で「外」に出す
869 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 21:57:27 ] File.statでサイズ読めないかね
870 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 22:02:55 ] 俺もそうおもた
871 名前:863 [2010/01/23(土) 22:03:17 ] >>869 やってみたのですが size = 0 になっています。 statコマンドで調べても0バイトになっています。 そもそも、ブロックスペシャルファイルのバイト列の長さって、デバイス依存な気がします。 つまり「ファイルサイズ=バイト列の長さ」は成り立たない、ということかも知れません。
872 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 22:03:31 ] $ sudo ruby -e "p File.stat('/dev/sda')" #<File::Stat dev=0xe, ino=5003, mode=060660, nlink=1, uid=0, gid=6, rdev=0x800, size=0, blksize=4096, blocks=0, atime=Sat Jan 23 18:12:33 +0900 2010, mtime=Sat Jan 23 18:12:33 +0900 2010, ctime=Sat Jan 23 18:12:55 +0900 2010>
873 名前:863 [2010/01/23(土) 22:06:31 ] >>872 ふむ、、やっぱり size = 0 ですね。。 バイト列の長さがデバイス依存(つまり不定値)なのは、よく考えてみればわかります。 /dev/null は常に長さ0ですし、/dev/zero は無限大。 難しいです。。
874 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 22:11:19 ] そもそもなににつかうん
875 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 22:12:16 ] やっぱりUNIXスレで聞いたほうがいいと思うんだ カーネルとファイルシステムの知識が必要だし Ruby初心者スレで聞くような話題じゃないよ
876 名前:865 mailto:sage [2010/01/23(土) 22:18:31 ] >>868 ありがとうございます。 ただ、自分が不思議に思ったのは、外から関数内の変数にアクセスできないことではなく、 関数の外の変数に内側からアクセスできてないことです。 一般的に内側から外側の変数にはアクセスできると思うので。 x=20の段階で、外側の変数に代入するのではなく、新しい変数を作ってしまっているのが不思議なんです。
877 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 22:18:59 ] >>876 変数のスコープという概念を勉強してくれ
878 名前:863 [2010/01/23(土) 22:19:06 ] >>874 LVM の論理ボリュームのスナップショットを自動で作成しようかと。 ただし、論理ボリュームの大きさが: ・Xバイト以下だったら、それと同じ大きさのスナップショットを作成 ・Xバイトより大きければ、Xバイトのスナップショットを作成 という処理をしたかったのですが、論理ボリュームの大きさを調べるために 外部のコマンドに投げるのは嫌だったので、どうせならデバイスファイルの中身の大きさを調べちゃえ、みたいな感じです。 >>875 すみません、そうします。 カーネルの知識はありませんが。。
879 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 22:22:19 ] はいさよなら