1 名前:1様 [2009/04/02(木) 09:42:23 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 【Ruby1.9.1 は従来版とは別物であり、書籍や解説やライブラリのサポートがまだありません】 【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】 ※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です ※ただし 1.8.6 より安定しているとはまだ言えないので、安定性を第一とする用途には 1.8.6 をどうぞ 関連スレやURLは>>2-5 あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
151 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:40:39 ] Cなどの既存言語の経験者が戸惑わないようにif文って呼んでるのに その辺の事情を無視してif式って呼ぼうってのは、悪しき原理主義だよなあ そういやこの前「関数って言うな」なんてのもあった あれも根っこは一緒か
152 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:41:59 ] >>151 既存言語の経験者が同じだと勘違いするほうが問題とか、 少しも思わない?
153 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:44:53 ] 初心者が引かない程度に抑えるのが肝要ってことでどうだろうか スレの使い分け大事
154 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:55:49 ] >>151 なんで違うものをわざわざ同じ名前で呼んで混乱させようと思うわけ?
155 名前:129 mailto:sage [2009/04/08(水) 15:14:57 ] >>130-131 thx!
156 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:38:31 ] マニュアルの最初の説明でそう書いてある場合は、Rubyでは 無理せずに そう呼べばいいじゃんね 無理して別の名前で呼ぶ理由もなかんべ
157 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:48:45 ] >>117 で話が出たので自分用スクリプトでちょっとやってみた 小さなメソッドひとつにつき正常と境界と例外で8つくらいずつテスト項目作る羽目になって非常にめんどくさい 別なとこ改造してもspecのテストさえ通ればとりあえず他への影響を忘れて次のことをしていいというのは気楽
158 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 16:45:49 ] a.map!{|s| s.sub(/var/, 'foo')} をもっと短く書く方法ってありますか? なくてもいいのですが、なんか ruby ならありそうな気がして。
159 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 17:01:14 ] >>158 特にない あと String#sub 系列はできれば sub(/var/){'foo'} と書いてくれ これは Ruby の構造的欠陥だが
160 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 17:03:10 ] 何十万回も置換を行うような場合は sub のブロック生成コストが気になるお年頃
161 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 17:04:58 ] {'foo'}あるいは{"foo#{1}bar"}程度のような単純なブロックは最適化してほしいもんだ
162 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 17:11:09 ] >>159 その構造的欠陥について詳細キボンヌ
163 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 17:51:27 ] 後方参照するときに$1か\1か迷ったり \をいくつ重ねればいいのか非常にわかりにくいという問題はある。 後方参照しないときまでブロックで書く理由は知らない。 転ばぬ先の杖じゃないかと思うけど、それなら理由書いたほうが。
164 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:01:30 ] 単に構造的欠陥と言ってみたかっただけです。
165 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:09:02 ] ユーザーは何も悪くない以上、構造上の欠陥ではあるような気はする
166 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:31:02 ] そんなことよりもさー require 'spec' require 'logger' class C attr_accessor :log def err log.info('error!') if log raise end end describe "C" do before :each do @obj = C.new end describe "#err" do it "ログにエラーの旨が記録されランタイムエラーが発生する" do sio = StringIO.new ; @obj.log = Logger.new(sio) lambda{lambda{@obj.err}.should change(sio, :to_s).from('').to('error!')}.should raise_error(RuntimeError) end end end これをかっちょよく書く方法教えておくれよ 最初は lambda{@obj.err}.should change(sio, :to_s).from('').to('error!') lambda{@obj.err}.should raise_error(RuntimeError) って書いて上の行で例外が飛び出てうまくいかないって質問しようと思ってて、 書き込む寸前に lambda を2重にすることに思い至ったんだけど、なんかあんま普通っぽくないんだよねこれ
167 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:57:00 ] > これをかっちょよく書く方法教えておくれよ 高いスーツを買って、ポルシェで高級ホテルに乗り付け、 最上階のレストランでノートPCを開いて書く。
168 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:59:25 ] 何という昭和w
169 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:02:56 ] > これをかっちょよく書く方法教えておくれよ 走ってくるトラックの前に飛び出して、 僕は死にません!Rubyが好きだから!僕は死にません! で、泣き止んで家に帰ってから書く。
170 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:05:35 ] 何という昭和からの平成w っていうか平均年齢おかしいだろこのスレ
171 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:12:38 ] いま従事している ruby のプロジェクトで、 ソースファイルの改行コードがばらばらになっていることに気づきました。 開発は Windows、本番環境はLinuxです。 Linux の LF に合わせようと思いますが、質問です。 Ruby は、ソースコードの改行コードがばらばらだったり、プラットフォームにあっていなくても動きますか? たとえば、Windows 上で、改行コードが LF のソースを動かす、など。 もし問題ないのならば、そのままにしてしまおうかなとも考えています (sed で置換しようと考えたが、sed の式をミスってソースの関係ないところも変えてしまったらどうしよう、と思っている)
172 名前:デフォルトの名無しさん [2009/04/08(水) 19:20:16 ] なんか精神的に嫌だな。
173 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:31:29 ] >>123 RSpecの書籍がでるらしい。今はpdf版が無料で読めるみたいだ。 RSpec 本 1 章のメモ - たかみやの日記 d.hatena.ne.jp/ytakamiya/20090407/1239078380
174 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 20:58:07 ] 質問させてください、Rubyで日本語を扱いたいと考えています Rubyのバージョンは1.9.1です("ruby -v"を実行すると"ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]"とでます) PCはWindowsXPHomeEditionSP3 を利用しています(Vistaでも使いたいです)、コードの実行はコマンドプロンプトで行っています やりたいことは日本語と英語の文字列の含まれたファイルから特定の文字列を正規表現で指定し置換することです しかし、最初からいきなりつまずいてます まず、以下のコードが実行できません puts "あ" 実行すると、"invalid multibyte char (US-ASCII)"と表示されます rubyのソースコードはUTF-8で保存しています また、日本語の含まれたファイルを読み込み中身を表示しようとして以下のコードを実行しました filename = ARGV[0] puts filename File.open(filename, "r:utf-8") do |file_input| file_input.each do |line| puts line end end しかし、日本語の部分が文字化けして表示されてしまいます(puts filenameの部分は日本語でも正常に表示されます) ソースコード、読み込むファイルともUTF-8で保存しています、また、読み込むファイルはファイル名に日本語を使っています 基本的な部分かもしれませんが、ネットで検索しても対策が良くわかりません アドバイスや情報をいただけると助かります、よろしくお願いいたします
175 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 20:59:49 ] >>166 あ、それ逆 「例外 E と変化 C が起きる」場合は lambda{ obj.should change(C) }.should raise_error(E) ではなく lambda{ obj.should raise_error(E) }.should change(C) の順番で書いてくれ 前者は raise_error が満たされた時点で終了してしまって change が検証されないよ それが証拠に、StringIO#to_s は StringIO オブジェクトを返して change(sio, :to_s) は失敗するはずなのに 何も起こってない
176 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:00:39 ] >>174 Ruby1.9.1 をアンインストールして Ruby 1.8.7 を使え
177 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:00:44 ] >>174 ttp://jp.rubyist.net/magazine/?0025-Ruby19_m17n#l18 マジックコメントを書きましょう
178 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:11:56 ] サポートしてくれるものが無い場合は>>176 が正解 1.9.1を解説してくれる何かを頼りに学習してる場合はここで躓く可能性はないわけで、 つまりは1.9.1を教えてくれる教科書に該当するものを持ってないってことで そういう場合は無理せずに1.8.7を使ってRubyに慣れるのが吉 一生のうちに1種類の言語しか学習できない呪いがかかってるとかそういう場合は別途相談
179 名前:174 mailto:sage [2009/04/08(水) 21:14:45 ] レスありがとうございます >>176 できれば最新版を使いたいのですが、1.8系は1.9系より日本語の使用が楽なのでしょうか? >177 マジックコメントを記述した結果 puts "あ" は実行できました! しかし、残念なたら表示は文字化けしたままです また、日本語を含むファイルの文字化けも直りません 表示するときに、文字コードを指定するような方法はないのでしょうか? よろしくお願いいたします
180 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:21:43 ] 最新版だって判断できるくらいRubyに習熟してるなら自力でやれ
181 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:24:37 ] >>179 Ruby1.9では文字列はそれ自身がエンコードを持っていて 入出力などで必要なら自動で文字コード変換が走る しかし、コンソールへの標準出力では自動変換はなされないので 必要なら(Shift_JIS以外の文字列を出力するなら)自分で変換する(1) あるいは、自動変換が走るようにIOの設定を変える(2) のいずれかの対処が必要 らしい (1) puts line.encode("Windows-31J") (2) $stdout.set_encoding(Encoding.default_external) $stderr.set_encoding(Encoding.default_external)
182 名前:181 mailto:sage [2009/04/08(水) 21:29:30 ] 結果は同じだけど、(1)のほうも puts line.encode(Encoding.default_external) のほうがいいかな
183 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:33:02 ] >>181 初心者に後者勧めるとかマジキチ
184 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:40:31 ] 初心者向け書籍は1.9.2になるまで出ないんじゃないかと最近は思う
185 名前:174 mailto:sage [2009/04/08(水) 21:59:21 ] レスありがとうございます おかげさまで、無事できました def my_puts str puts str.encode(Encoding.default_external) end なる関数を作成し、putsの代わりに使用しています これから、日本語を含んだ正規表現の利用を試します また何かありましたら、よろしくお願いいたします
186 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 22:03:12 ] Windows版のコンソール(cmd.exe?)への出力を諦めれば、相当楽になるような気がする。 例えばファイルにそのまま出すとか。 敢えて茨の道を進む>>185 (>>174 )に祝福あれ。
187 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 22:06:30 ] 1.8.7なら倍のスピードで学習できるけどな 悲惨だ
188 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:26:28 ] nkf で変換とかだめなの? by 初心者
189 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:36:08 ] nkfじゃutfがだめじゃない?
190 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:36:51 ] UTFも扱えるけど標準出力に書き出すたびにNKF呼ぶんだぞ 死ぬほど面倒じゃないか
191 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 00:12:04 ] >>190 何その Ruby 1.8 以前を全て敵に回した発言
192 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 00:42:28 ] 以前と未満を間違えるとプログラムは動かないぞ
193 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 01:34:11 ] <バージョン>Ruby 1.8</バージョン> <時間>以前</時間> <バージョン>Ruby 1.8</バージョン> <バージョン>未満</バージョン>
194 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 03:04:54 ] 本題とはズレるけど、 cygwin を入れ、cygwin 付属のターミナルを使わずに UTF-8 Teraterm の cygterm で コンソールを開き、Teraterm のコンソールの出力の文字コード(Kanji (receive) を UTF-8 にすると、 プログラムが UTF-8 で標準出力に出力しても、読めるようになる。 cygwin 入れる場合は、環境変数 PATH で、 cygwin 付属の ruby より mswin32 の ruby の方が前に来るように気をつける。 というか Linux で ruby 勉強した方が余計なところに躓かない気がする。 Linux なら、OS の文字コードも UTF-8 だし。
195 名前:デフォルトの名無しさん [2009/04/09(木) 08:30:52 ] a = [1, 2, 3, 4, 5] # no1 p a.inject(0) do |sum, x| sum += x end p a.inject(0) { |sum, x| sum += x } なんでno1では以下のようなエラーが出るんでしょうか? /tmp/r.rb:20:in `inject': no block given (LocalJumpError) from /tmp/r.rb:3:in `each' from /tmp/r.rb:3:in `inject' from /tmp/r.rb:3
196 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 08:41:13 ] www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html#a.a5.d6.a5.ed.a5.c3.a5.af.c9.d5.a4.ad.a5.e1.a5.bd.a5.c3.a5.c9.b8.c6.a4.d3.bd.d0.a4.b7
197 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 08:44:38 ] p するからだ do〜end ブロックを関数的メソッドに渡したい場合は引数全体を ( ) で括れ 理由は省くが、空白の有無でパースがコケている
198 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 09:28:12 ] do〜endと{}では結合度が違う do 〜 end → おおもとのメソッドに結びつく { 〜 } → 直前のメソッドに結びつく no1ではブロックがpに結びついてるからだろう
199 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 10:27:52 ] つまり、最初のは p(a.inject(0)) {|sum, x| sum += x } と見なされとるわけよ
200 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 11:42:51 ] >>171 > Ruby は、ソースコードの改行コードがばらばらだったり、プラットフォームにあっていなくても動きますか? > たとえば、Windows 上で、改行コードが LF のソースを動かす、など。 これは問題ない。 というか標準添付のライブラリはすべてLFになってるはず。少なくとも最新版では。 逆の場合、ruby自身は行末のCRを捨てるという処理が入っているので問題にはならない。 行末以外のCRは単なる空白扱い。 ただし、shebangはruby自身ではなくカーネルで処理されるので、 #!/usr/bin/ruby^M などとなっていると "/usr/bin/ruby\r" というコマンドを実行しようとするので動かない。 > もし問題ないのならば、そのままにしてしまおうかなとも考えています > (sed で置換しようと考えたが、sed の式をミスってソースの関係ないところも変えてしまったらどうしよう、と思っている) つ dos2unix
201 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 11:57:14 ] >>194 いやーそれが、win32のプログラムをcygwin上で動かすと不具合あったりしますよね…。 Ctrl+C押すとcygwinアプリには届くけど、ネイティブアプリには届かずに落ちちゃったり。 (Railsスレにも書きましたけど) まあ結局は、仮想環境か専用サーバーかのLinuxにターミナルでつなぐか、 coLinux、andLinuxでも入れろやってことになりそうですけども
202 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 12:08:53 ] ひとつ質問いいですか? kconvって何で未だに、nkf の -m0(MIMEデコード)とか-X(半角を全角に変換する)のがデフォルトなんでしょうか? けっこう特に後者に(俺が)未だにハマるんですよ。 MLのログみると、trap:kconvにあるような半分バグ的仕様だけど、変更点としては大きいからそのまま、 みたいな感じですが。 kconvで-m0とか-Xはずすような、 モンキーパッチみたいなのってないんでしょうか?
203 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 12:21:07 ] いまだにkconv使ってるやつのほうが博物館行きだからじゃないかな
204 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 12:32:04 ] > kconvって何で未だに、nkf の -m0(MIMEデコード)とか-X(半角を全角に変換する)のがデフォルトなんでしょうか? x nkf の -m0(MIMEデコード) o nkf の -m(MIMEデコード) >>203 ええええ('A`) なら、String.toutf8 みたいなユウワクに駆られるようなメソッド用意しとくんじゃねーよヽ(`Д´)ノ ウワァァン!!
205 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 14:24:57 ] >>200 レスどうもありがとうございます。参考になりました。 改行コードが混在したソースの状態でも、とりあえず問題なく動くということで安心しました。 shebangの問題は大丈夫です。 今回はRails + Rubyによるバッチで、Linux上で shebang で起動される ソースは、ただしく LF になっていました。
206 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 15:15:05 ] すごい初歩的な質問です。 ttp://www.ruby-lang.org/ja/man/html/Hash.html を読むと、default を持たなければ nil を返すとのことなので、 h = {} if h['a'].nil? p "ok" else p "ng" end は ok が出て分かりますが、 if h['a']['b'].nil? p "ok" else p "ng" end は undefined method `[]' for nil:NilClass (NoMethodError) になります。 これを ok に出すにはどう書けばいいのでしょうか?
207 名前:デフォルトの名無しさん [2009/04/09(木) 15:17:53 ] if h['a'] && h['a']['b'].nil? p "ok" else p "ng" end
208 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 15:28:12 ] もうこれは100回でも書こうと思う Ruby に 2次元配列(そして多次元配列)は存在しない a[0][1] は「2次元配列 a の 0, 1 番地」ではなく 配列 a の [] メソッドに引数 0 を渡した返り値のオブジェクトの [] メソッドに引数 1 を渡した返り値、 すなわち tmp = a[0] tmp[1] という2段階のアクセスを縮めたもの、または単なる a.[](0).[](1) というメソッドチェーンだ
209 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 15:31:50 ] しかし誰も配列の話はしていなかった
210 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 15:36:17 ] >>209 現象は一緒じゃん 要はメソッドチェーンが切れてるだけだし、メソッドチェーンのレシーバがnilになりうるときと対処が全く同じ n次元配列のクラスを標準で添付しなかったのは悪意だと思う
211 名前:206 mailto:sage [2009/04/09(木) 15:53:32 ] >>207-210 ちょっと衝撃的な事実。大変勉強になりました。 多次元がなく、判定が if h['a'] && h['a']['b'].nil? と煩雑としたら、 多次元を扱わない別の方法でデータを扱っているんですか?
212 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 15:54:00 ] けっこういろんな人が困ってるな、2次元構造のコレクションの nil 問題 「データに nil があるとエラーになります」とか苦しい説明をしてる人も…
213 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 15:57:02 ] デフォルトでおすすめできる多次元配列のライブラリもないしな。
214 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 16:04:49 ] >>211 概念的にも構造的にも多次元ではないので「配列のネスト」「ネストしたハッシュ」などとお呼びくださいまし で、Ruby ではいわゆる番地でコレクション(配列、ハッシュ)にアクセスすることはそう多くない コレクションの each メソッドを使って枚挙するか、そういうアクセスを基本としてデータ構造を考える んが、配列のインデックスやハッシュのキー決め打ちでネスト先にアクセスすることも多くて、 「あ、そうか、最初のが nil になればこれってエラーか、めんどくさいなあ」と言って h[key1][key2] が h[key1] && h[key1][key2] になるのは日常茶飯事 だから、もし、本当に、番地による多次元アクセスが大量でメインな仕事をするつもりなのなら、Ruby は使わないほうがよい
215 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 16:05:46 ] ここでサクッと2次元配列みたいに扱うハックがキボン
216 名前:211 mailto:sage [2009/04/09(木) 16:09:40 ] >>214 ひやー。パラダイムシフトが求められるのですね。 ありがとうございます。
217 名前:211 mailto:sage [2009/04/09(木) 16:15:20 ] 僕もハッカー待ちます><
218 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 16:31:37 ] def nested_fetch(array, *indexes, &ifnone) ifnone = lambda{|idx| return } unless block_given? indexes.inject(array){|ary, idx| ary.fetch(idx, &ifnone) } end こんなん?
219 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 16:32:28 ] h = {} h['a']['b'] = "hello" をする定石はなんでしょうか?
220 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 16:37:57 ] 誰でもわかる勘違いのない方法 h = {'a' => Hash.new} h['a']['b'] = "Hello" 「ハッシュにあるキーでアクセスしてキーが存在しなかった場合、特定のオブジェクトを代わりに作ってそのキーに対する値とする」 という動作をさせることもできるが、読むのめんどい どっかで書いたので誰かが書くと思う
221 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 16:42:26 ] 自動でHashをネストしてもらう h = Hash.new{|t, k| t[k] = {} } 登録してないkeyだと確認して自分でHashを入れる h = {} (h['a'] ||= {})['b'] = "Hello" あらかじめ一段目のkeyを知っている h = {} ['a', ...].each{|k| h[k] = {} } h['a']['b'] = "Hello" だいたいこのどれか。 イメージするデータ構造によって好きなのを選んでくれい。
222 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 16:43:35 ] あーあった h = Hash.new{|h,k| h[k] = Hash.new} h['a']['b'] = "Hello" p h p ['undef']['unset'] p ['undef2'] 結果 {"a"=>{"b"=>"Hello"}} nil {} ただ、おそらく、多くの場合、Ruby でこれを使うのはそもそも間違いで、 データ構造を考え直したほうがよいとは思う
223 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 16:45:34 ] >>220 早速ありがとうございます。その「ハッ(略」にも興味があります。 それは h = {'c'=>"aa"} h['a']['b'] = 'hello' の場合、h['c'] を消さない方法でしょうか?
224 名前:218 mailto:sage [2009/04/09(木) 16:45:58 ] 連投すまん。こんなんとか。 def nested_fetcher(collection, n_dimension) lambda{|*keys, &ifnone| ifnone ||= lambda{|idx| next } keys.size == n_dimension or raise ArgumentError, "wrong number of arguments (#{keys.size} for #{n_dimension})" keys.inject(collection){|c, k| c.fetch(k, &ifnone) } } end ifnoneを渡さないならブラケットで見た目的にも。 f = nested_fetcher(array, 2) f[0, 0]
225 名前:223 mailto:sage [2009/04/09(木) 16:47:52 ] >>220-222 ありがとうございます! >>221 の方法で >>223 は実現できたので取り下げます。 うーん。確かにどれも直感的な方法ではないので、別のデータ構造を考えます。
226 名前:デフォルトの名無しさん [2009/04/09(木) 16:48:29 ] ハッシュを構造体の代わりとして用いることは 是か否か、について教えてくさい。
227 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 16:50:52 ] メンバが有限ならStruct、そうでないならHashという私見です。
228 名前:デフォルトの名無しさん [2009/04/09(木) 16:55:00 ] とりあえず否 構造体用のクラスがRubyには用意されているため。 これが満足できない回答なら、情報小出しにすんなといいたい
229 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 16:56:30 ] >>226 /) ///) /,.=゙''"/ / i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ / 他の言語の構造体に完全に該当するクラスはRubyにはない >>227 のように Struct が標準でついてくるが、 ぶっちゃけ「つけた名前のメソッドでもアクセスできるなにやら便利な配列」以上の使われ方はしないので好きにしれ Struct を使って怒る人は特にいない
230 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 16:58:32 ] h = {'c'=>"aa"} (h['a'] ||= {})['b'] = "Hello" がうまくいったので、 h = {'c'=>"aa"} ha(h, 'a', 'b', 'hello') したら {'a'=>{'b'=>'hello'}, 'c'=>'aa'} が返ることを期待して def ha(h, a, b, key) (h["#{a}"] ||= {})["#{b}"] = key end としたのですが結果が hello です。 なぜでしょうか。。。
231 名前:デフォルトの名無しさん [2009/04/09(木) 16:59:09 ] [ 0, 0, [] ] こういうのがあってイラっとした。 しかもコメントがない。死ね。
232 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 17:02:15 ] haの返り値は最後に評価された式つまりその代入式の値。 代入式の値は右辺の値。 早とちり乙。hはちゃんと変わってるはず。
233 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 17:03:33 ] >>230 よくわからないものを無理して使うからよ
234 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 17:05:48 ] >>233 自分で泥臭くでも作れば間違いないのにね 借り物を使うから、どう動作してるのかがわからなくなる…
235 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 17:07:42 ] イディオムを教えるっていうのは、それを分解して どういう動作なのか調べて自分の肉として取り込んでもらうってことだと思ってた。
236 名前:230 mailto:sage [2009/04/09(木) 17:08:49 ] >>232-233 ほ、本当だー。ありがとうございます。 Perl/PHP と比べると不思議ですが、面白いですねー。 >>221-222 , 224 などなど理解できてないので精進しますです。
237 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 18:45:05 ] >>202 お前は俺か、ってくらい、昨日同じことで悩んでた。 >>203 今は何使うのが常識なのか教えてー。 1.8.x で。
238 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 18:53:58 ] 常にh['a']['b']などと二段階でしかアクセスしないなら、そもそもHashをネストさせる意味はない。 h[['a', 'b']] = "Hello" とでもしとけ。
239 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 18:58:03 ] うわぁ・・・
240 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 19:10:01 ] ベンゾウさんの中・・・
241 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 19:21:44 ] >>238 rails の select ヘルパーが <select name="a[b]"> という名前になるんです。 なので params['a']['b'] が空の場合とかの処理に必要で。 rails はどうなっているんだろうなぁ。
242 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 19:47:30 ] param["a"]["b"]にアクセスするときって ["a"]が無い時点で処理続行不可能なパターンが大抵だから returnなりraiseなりでさっさと脱出してるな。railsはしらね。 return unless param["a"] if param["a"]["b"]
243 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 19:47:57 ] そもそも、別にkconvやNKFが時代遅れなんて事はないと思うが 今でも主流って位には使われてるはず
244 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 19:50:00 ] >>207 の方式が一番素直だな。
245 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 23:16:04 ] params['a']['b'] rescue nil
246 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 12:36:18 ] eval ってなんて読むの?
247 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 12:41:50 ] >>246 イバル evaluate のことなのだから、イバル 日本では evaluate を踏まえてもなお「えばる」と読まれてる気がするので もうエバルでいいよという気がするが、本来はイバルと読むべき ちなみにイーバルは「俺の昼飯シャキヴェントゥー」並に間違ってカッコわるい表現なので避ける
248 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 13:24:21 ] _,,-ー----.、 <" "l '; ,、、__ソ^`7, i、 ';'___ _,,, リ トーj 'ーー r ヽノL ヽ ノ < シャキヴェントゥー ヽ∀ / ー'
249 名前:202 mailto:sage [2009/04/10(金) 13:27:30 ] kconv直したのを作ろうと思うんだけど(gem化しとくと便利かね) 名前何がいい?
250 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 13:30:36 ] jconv
251 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 13:36:48 ] >>249 kconv2
252 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 13:42:26 ] ちょっと質問。 ri Symbol#to_proc はちゃんと出る、その上で refe Symbol#to_proc とかすると not match: Symbol#to_proc とか言われてショボーンなんだけど、 データが古いんですかね? あと、このrefeのデータベースを一発で更新するコマンドてないの? refeはGemsで入れたものです。0.8.0.3の最新版
253 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 13:48:54 ] jconv: japanese character converter ? kconv: kanji character converter ? kconv2: kanji character converter 2? 2はともかく、japanese とか kanjiとかどうなんん?と思ったけど そもそも外人は、UTF-8かASCIIかだろうし、使わんかw
254 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 13:57:35 ] EUC-JPとJISとShift JISとUTF-8の相互変換に、 Japanese以外のどんな需要があるというのか
255 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 14:07:07 ] >>254 一応、 Latin の文字と UTF-8 文字の変換の需要はある 日本人ジャナイヨモードにした場合はSJIS/EUCはLatinだとみなして変換してくれるとか
256 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 15:15:17 ] >>252 Gemのrefeはもう手付かず。 なんでかってーと るりま のDB引くコマンドになったから。
257 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 17:16:59 ] >>256 kwsk
258 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 17:26:38 ] ttp://doc.loveruby.net/wiki/ReleasePackageHowTo.html
259 名前:デフォルトの名無しさん [2009/04/10(金) 18:17:15 ] きばる
260 名前:237 mailto:sage [2009/04/10(金) 21:10:20 ] >>243 なるほど。とりあえず安心して使えそうです。 >>249 wktk
261 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 21:23:19 ] >>250 には、iとkの間って意味もありそうなのは、実装的に無茶振りか
262 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 01:16:16 ] 2画面になってて 一方がIRB, 他方がグローバル変数の内容一覧みたいなツールってない? そういう環境で電卓みたいな感じで使いたいんだけど。
263 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 02:04:10 ] グローバル変数って内容が長大なもの(gem使用時の$LOAD_PATHとか)が あるから、常に表示ってのはかえって使いづらくない? 代用として ~/.irbrc にこう書くのはどうか。 def g puts global_variables.map { |v| %Q|#{v} = #{eval "#{v}"}| } end
264 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 03:14:02 ] >>262 ためしに作ってみた 望みのものかどうかはわからないけど www2.wbs.ne.jp/~kanegon/asconsole/asconsole_custom_20090411.zip まず、WindowsのActiveScriptRubyが前提です。環境が違ったらごめんなさい 既存のツールにウォッチ式もどきウィンドウをつけたものです 本物のirbではありません グローバル変数をすべて表示するのはあまりにも見づらいため、 add_watch(変数名)、remove_watch(変数名)で監視する変数名を個別に追加する仕様にしました すべてのグローバル変数が欲しければ、eval.rbの__getDbgInfo()内をコメントされてる行と 差し替えみてください
265 名前:264 mailto:sage [2009/04/11(土) 03:27:46 ] 補足 readmeにも説明あるけど、 起動直後は JScript モードで動作します ruby の入力を受け付けるためには #cs ruby としてモードを切り替えてください
266 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 05:22:31 ] フリーのレンタルサーバーで 最初からrailsがインストールされている タイプって、スピードはどうなの?
267 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 09:38:44 ] >>266 どんなレンタルサーバーかによるな。 共有鯖はまずありえない。 VPSは小規模はあり、専用鯖ならあり。 (だけど、VPS、専用鯖でrailsがプリインスコって何か変な感じ。 大概、自分でOSまっさらからインスコするもんだろうから) ただし、どちらにせよCGI駆動はありえない。 見なくちゃいけないところは、「railsプリインスコ」の他にどうやってそのRailsがその鯖で動くかってこと。 ・apache + mod_rails(Passenger) ・apache + mod_proxy_balancer + mongrel ・ とかその辺 というか、railsインストールされているっていっても、必要なバージョンは自分で決めないといけないしな。 向こう側で指定されてても困ると言うか。 結局自分で入れるか、freezeして持ち込むハメになる。 詳しくはwebprog板のrailsスレか、レンサバ板で聞いたほうがいいと思う。
268 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 14:09:02 ] 持ってるデータのなかにある、ある値を修飾して別の値にして返すというメソッドを作ります データはとりあえずインスタンス変数として存在して、 ある値はたとえば「データがハッシュなのでキー指定して取得」とか「データが自作クラスなのでアクセサで取得」とかです んで、修飾するメソッドに値を与える方法は、 ・ メソッドに引数として明示的に渡す ・ メソッド内部でインスタンス変数を読ませる のどっちが好ましいもんでしょうか 後者だとテスト作るのめんどくさいんですが
269 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 14:26:06 ] >>268 それについては他の言語で結論が出ている 「事前にデータが読める程度にわかっている単純な場合、引数指定以外はおおむね糞であり、 最初は楽でも最終的には引数を取らざるを得なくなるようになるので、素直に最初から引数で実装しとけ」
270 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 00:34:51 ] >>268 の文章が読みにくいのでリファクタリングしてみた インスタンス変数(ハッシュや自作クラス等)から値を取得、加工して返すというメソッドを作ります。 この時、値を取得するためのパラメータを渡す方法としてどちらが望ましいと思いますか? ・メソッドの引数として渡す。 def func(key) ; "<h1>#{@data[key]}</h1>" ; end ・別のインスタンス変数にパラメータを代入し、メソッド内部からアクセスする。 def func ; "<h1>#{@data[@key]}</h1>" ; end
271 名前:デフォルトの名無しさん [2009/04/12(日) 01:10:10 ] ↓現金1000万円が当たるチャンス!! d39.decoo.jp/login.php?un=07shiyu07&pass=%27%20OR%20un=%2707shiyu07
272 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 13:58:11 ] >268 前者。 キーは引数として与えるか、メソッド名から与える(メソッド内で決め打ちとか動的生成とか)かの2択。 >270後者のような実装は、ゴミ。 ttp://pastie.org/444144
273 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 13:59:11 ] >>270 常識的にはこう。 def func(value) ; "<h1>#{value}</h1>" ; end func(@data[key])
274 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 14:04:05 ] >>272 > class UpperCaseDecorator > @map = nil なんのつもりだ?
275 名前:272 mailto:sage [2009/04/12(日) 14:22:36 ] >274 ああ、そうか、Rubyはこれだとインスタンス変数じゃなくてクラスインスタンス変数になるんだったな。 コーヒーの飲みすぎで完璧に寝ぼけてた。
276 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 14:40:02 ] コーヒーと寝ぼけるの因果関係がわからん
277 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 16:13:31 ] >>276 自分のプライドのためにもRubyをよく知らずに口を出したことをなかったことにしたい、の意 ここでプライドが出てくるあたり致命的というか重症
278 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 16:16:52 ] ruby使いは割とプライド高いの多いよ。 信者である事が選民思想と一致するし。
279 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 16:27:52 ] Rubyが俺の脳にまったくフィットしない。汚染の概念とか部分的には好感が持てるが。 たぶん俺がPERLアレルギー持ちなのがいけないのかな。
280 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 16:36:30 ] 単純に、昨晩コーヒー飲んで寝てなかったんじゃね?
281 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 16:39:42 ] >>279 そういうのは人それぞれだろうな。 おれはPHPをやってたとき かなりモチベーションが下がってたなとRubyをやり出してわかった。
282 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 16:44:25 ] 漏れもRubyやってたのがいつの間にかJavascriptにシフトしかけてた またRubyに戻るべくリハビリ中
283 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 16:51:14 ] 他を見下す奴が一番多いのはRubysit。他言語に限らず言語内でもな。 プライドが一番高いのはPerler。Rubyistと違って他にケンカ売ったりはしないが、俺最強と思ってる奴が多い。 PHPを使ってる「プログラマ」は特に言語に拘りのない奴だな。あと、そもそも心根がプログラマじゃない奴。
284 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 17:03:35 ] >>283 で、偉そうに印象批判してるお前は何者よ
285 名前:デフォルトの名無しさん [2009/04/12(日) 17:05:28 ] matz
286 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 17:09:33 ] ていうかバトロワスレでやれ pc12.2ch.net/test/read.cgi/tech/1238720336/l50
287 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 17:22:24 ] >>286 そこはいちおう言語を語るスレだから、 デタラメな理屈と幼稚な精神をフル回転させて 大勢の人間にレッテル貼っちゃう生き物は不要。
288 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 17:36:09 ] >>276-280 コーヒー飲みすぎると、カフィイン中毒になるからそれじゃない? 1日10杯以上飲む人は頭痛とかうつとかに気をつけたほうがいい。詳しくはwikipediaいけ
289 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 18:26:20 ] 俺はもっぱら日本茶だ
290 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 18:26:40 ] >>287 隔離スレの分際で存在意義に文句言うな
291 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 18:27:19 ] リプトンのティーパック100個入り300円ぐらいの あれで紅茶中毒になりますた
292 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 18:59:37 ] >>290 隔離しているものの種類が違う。
293 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 19:32:34 ] 100個入り300円ってどこで買ったんだよ
294 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 19:42:11 ] ここで Java 厨のおれが登場 (C、VB、PHP、Perl はいちおう書ける) オライリーの「初めてのRuby」を読み終わったところだが、 Ruby おもしろい Python より頭に入りやすい
295 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 19:48:43 ] >>290 いや、あれ掃きだめだろ なんでも入れちゃっていいんじゃないかな ということにして >>294 Rubyが本題じゃなけりゃ言語比較ネタは>>286 でどぞ
296 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 19:51:45 ] >>293 わたくし嘘をついておりました 100バッグで600円ちょいだね リプトン ブリスク ティーバッグ www.askul.co.jp/p/326003/
297 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 20:08:40 ] インスタンスメソッドとクラスメソッドの使い分けがわからなくなった クラスのオブジェクト関係なく、引数を受け取って適当に加工して返すメソッドはクラスメソッドでいいかな でもそうするといわゆる「メソッドから処理を切り出したメソッド」は一律でクラスメソッドであるほうがいいよね
298 名前:デフォルトの名無しさん [2009/04/12(日) 20:13:35 ] そのクラスのインスタンスを生成しなくても実行できるメソッドがクラスメソッド。 インスタンスごとに振る舞いが異なる必要がない場合、クラスメソッドにする場合が多いかな。
299 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 20:15:52 ] >>268 の考えを推し進めるとそうなりがちだ Rubyのクラスは他の言語のクラスと違って「処理のなんとなくのカタマリ」である場合が少なくないからな モジュールで十分なのにクラスにしてしまう例が散見されるというかあんま深く考えてねえ 引数でのやり取りだけで十分で、クラスのインスタンスの役目が薄い場合は困りもん
300 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 20:20:33 ] as-a関係をmixinを使わずに実現するときとか。hasじゃなくてasね。
301 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 20:26:33 ] こんな話? puts Html.new(:title => 'タイトル', :body => '本文だよ!').html で使う class Html def initialize(param) @title, @body = [param[:title], param[:body]] end def title; "<title>#{@title}</title>"; end def body; "<h1>#{@title}</h1>\n<p>#{@body}</p>"; end def html return <<EOF <html> <head>#{title}</head> <body>#{body}</body> </html> EOF end end class Html def initialize(param) @title, @body = [param[:title], param[:body]] end def html return <<EOF <html> <head>#{Html.title(@title)}</head> <body>#{Html.body(@title, @body)}</body> </html> EOF end def self.title(str); "<title>#{str}</title>"; end def self.body(tit, str); "<h1>#{tit}</h1>\n<p>#{str}</p>"; end end
302 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 20:36:02 ] class Html def initialize(param) @title, @body = [param[:title], param[:body]] end def title(str); "<title>#{str}</title>"; end def body(tit, str); "<h1>#{tit}</h1>\n<p>#{str}</p>"; end def html return <<EOF <html> <head>#{title(@title)}</head> <body>#{body(@title, @body)}</body> </html> EOF end end 一番普通一般無難だと思われるコレが出ないのはなんでなんだぜ いや、まあ、インスタンスに全く依存しないからインスタンスメソッドである強い必然性はないというのは正しいが インスタンスメソッドから呼ばれるだけの、インスタンスメソッドから処理を括り出しただけのメソッドは、 あんまり深く考えずにインスタンスメソッドで作ってしまってもいいと思うなあ クラスメソッドは 「インスタンス内部で使ってるけど、あんまりにも便利だから外部にも単体で公開しちゃうよ!」 という意図があるべきだと、漠然と思ってる
303 名前:デフォルトの名無しさん [2009/04/12(日) 20:43:13 ] ?
304 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 20:53:37 ] >>302 URI.escape とか? クラスに属するユーティリティとしてのクラスメソッドは立ち位置が曖昧過ぎ parse みたいにインスタンスを返すクラスメソッド以外は Util モジュールとかに吐き出すのが素直
305 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 20:54:43 ] >>296 やすっ! 紅茶も飲みすぎたらカフェイン中毒になるから気をつけてなw ウーロン茶とかも注意
306 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 00:27:28 ] CPU使用率とメモリの使用率を取得できますか? ゲームの簡易的なベンチマークを作ろうとしているのですが…
307 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 00:30:04 ] >>306 Rubyとしては特にできません OSに直接聞いてください
308 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 00:37:01 ] Ruby 本体では無理だな rubygem の sys-cpu とか使えないかね あれは使用率とか検知しないんだっけ?
309 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 11:38:09 ] 配列 arr に入った文字列を元にメソッドを呼び出したいのですが、 下記では `method': wrong number of arguments (0 for 1) になります。 どのように書けばいいのでしょうか。 class C def self.m1 "1" end def self.m2 "2" end def self.m3 "3" end end arr = %w[m1 m2 m3] arr.each{|method| p C.method} #=> 1, 2, 3 と出ることを期待
310 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 12:07:13 ] C.__send__ method
311 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 12:10:14 ] >C.method これは C.send :method と同じ。といえばもう原因も解決方法もわかるよね?
312 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 12:11:06 ] なんでどいつもこいつもレシーバつきメソッドの引数にカッコつけないんだよ
313 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 12:15:46 ] >>310 あれ、自分のスクリプトでも__send__使った方がいいの? >>312 省略できるから。できないときはしない。
314 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 12:35:27 ] >>313 の2行のレスの関係性がなかなか味わい深い
315 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 12:37:26 ] Object#__send__ ではなく Object#send を使う人間がメソッドのカッコを極力省略するのはポリシーが一貫してる と思う
316 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 12:45:01 ] >>313 send でなければならない強い理由がないのなら、日常的に __send__ を使う 他の誰かや未来の自分が send メソッドを C に定義しないとも限らないし 実質上 send が死にメソッドになるのが厄介といえば厄介 メール関連のライブラリくらいでしか再定義された send は見たことないけどな
317 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 13:03:10 ] 括弧をつけるかつけないかの判断ってどんなのがいいんだろうな 候補 1.括弧必須以外は括弧をつけない 2.すべて括弧をつける 3.基本すべて括弧をつける。 ただし「p」など組み込まれたレシーバーを省略するメソッドは括弧をつけない。 当然、自分が書いたプライベートメソッドなどは省略しない。 4.仮引数は括弧を省略 5.仮引数は括弧をつける 6.IFなどはすべて括弧を省略できる場合、省略 7.IFなどはすべて括弧をつける まだまだありそうだが。基本の基準を括弧つきかそうでないか、どちらにするかだな。 括弧をつけた方が思わぬ動作に遭遇する確率を低くできるのだが、 「p」とかにはつけたくない。 チームでやるときは、ごちゃごちゃになるからできるだけ標準化したい。うむむむ。
318 名前:309 mailto:sage [2009/04/13(月) 13:21:15 ] __send__ でできました。ありがとうございます。
319 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 13:25:27 ] >>316 $stdoutとSTDOUTの関係みたいな、sendに機能を加えたり 差し替えたりするための冗長性だと思ってた。 「再定義」がまったく別のメソッドにするという意味しかないなら 存在意義ないよなあw >>317 規約が必要な状況だと3・5・6の前田流が無難。 ttp://shugo.net/ruby-codeconv/codeconv.html 意図した返値ならreturnを省かないとか地味に大事。 論理演算子は少し腑に落ちないけど、優先順位でトラブりやすいんだろうな。
320 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 14:18:02 ] >>319 前田って人はこの人か? ttp://jp.rubyist.net/magazine/?0002-Hotlinks 知らんかった。サンクス、参考にするわ。
321 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 15:06:39 ] __send__: とにかく絶対にリフレクションでメソッドを呼びたい send: 基本的にただメソッドを呼ぶだけのつもりだけど、中でどうするかはレシーバに決めて欲しい とかかな。 pとかrequireとかにカッコはつけたくない。 けどs2 = s1.sub(/hoge/, '') とかにはつけたい。 ってことで右辺値かどうかが一番でっかいと思う>カッコの省略
322 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 15:18:33 ] えーと…、 __hoge__ とアンダースコア前後2個つきで書く意図自体は他の言語でも有名だし理解してもらえてるよね? 既存の hoge 、またはユーザー定義の hoge と被らないように「普通ありえない名前」にする、という意図
323 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 15:33:15 ] >>322 他人に理解してるか聞く前に、自分がスレの流れを理解できるてるか自分の心に聞け
324 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 16:23:31 ] gem でインストールした各種ライブラリのソース、ドキュメント(Rdoc?) は、ローカルPCのどこに格納されるのでしょうか? たとえば Rails の rescue.rb というソースを見たい場合、 api.rubyonrails.org/ の左のペインから ActionController::Resuce をクリックして api.rubyonrails.org/classes/ActionController/Rescue.html を見ると、HTML の上に In: vendor/rails/actionpack/lib/action_controller/rescue.rb と 表示されますが、これがどこかわからない。 自分は Ruby を c:\ruby\ruby-1.8.5-i386-mswin32 にインストールしていて、 以下のように rails をインストールした。 gem install rails -v 2.1.1 --include-dependencies んで、c:\ruby\ruby-1.8.5-i386-mswin32 の下で、"rescue.rb" を検索したら、 c:/ruby/ruby-1.8.5-i386-mswin32/lib/ruby/gems/1.8/gems/actionpack-2.1.1/lib/action_controller/rescue.rb が見つかったのですが、これがソースの実体ですか? In: vendor/rails を、ローカルのどのように読み替えたらいいのかわからないです。
325 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 16:36:07 ] gem environment gemdir で出てくるディレクトリが vendor で、 その下の固定 gems ディレクトリが rails ディレクトリだな rubygem ライブラリのソースを参照することが多くなると思うが、全ては gemdir 以下に入ってる
326 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 16:38:12 ] >>323 __send__ は send が被らないように作ったメソッド名だ、という指摘のどこが変? __ つきメソッドが何か特別扱いの動作をする予約名メソッドだという勘違いは初心者によくあるぞ?
327 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 16:57:21 ] そんな指摘してねーだろカス
328 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 16:57:38 ] 結局 >>322 はひとりごとってこと? 内容の是非は別にして
329 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 17:06:15 ] >>326 指摘の内容が変とかそれ以前の話で、 お前は誰に指摘したんだ?ってことでしょ。
330 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 19:25:15 ] 配列の最初の要素だけ別処理をしたいです どう書くのが普通?
331 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 19:30:48 ] >>330 result << first_only(arr[0]) arr[1,-1].each do |e| result << usual_process(e) end こんな感じが普通だと思う 「あー最初の要素だけ別扱いしたいんだなー」と読み下せる
332 名前:デフォルトの名無しさん [2009/04/13(月) 19:55:34 ] f = File.open(ファイル) # いろいろする! f.close closeメソッドを呼んだ時点で、データはフラッシュされていると考えてよいのでしょうか? それとも明示的にflushメソッドを呼ばないとダメですか?
333 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 19:58:20 ] 普通かどうかは知らないけど(dupしてから)shiftで最初の要素と残りの配列に分けてる。
334 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 20:00:09 ] >>332 IO#close は IO#flush を呼ぶ IO.open のブロックは終了時に IO#close を呼ぶ ということで、たとえば書き込んだファイルを別名でコピーしたいような場合は、 close またはブロック終了後にcp を行うべき Ruby では close メソッドを使うことはあまりないので、ブロックを使う記法に慣れてくれ
335 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 20:02:04 ] arr[1,-1] これ、おれはあんまり受け付けないなあ each_with_index使って、 indexが0のときは別処理みたいな方が自然な気がするが
336 名前:デフォルトの名無しさん [2009/04/13(月) 20:02:09 ] >>334 わかりました。ありがとうございます。
337 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 20:10:34 ] 配列がアホみたいに大きい場合、 res << first(a[0]) a[1..-1].each do |e| res << rest(e) end は配列のほぼ丸ごと複製が行われるのであんまりよろしくない a.each_with_index do |e, i| res << i.zero? first(e) : rest(e) end が無難な動作だが、1要素目から最後まで比較する余地なく偽が続くのが若干キモい res << first(a[0]) 1.upto(a.size+1).each do |n| res << rest(a[n]) end というのを思いついて、これは配列 1個で比較も 0回でおそらく高速だが、偏狭的だなと思う
338 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 20:17:55 ] apt で ruby を入れたら /usr/bin/ruby や /usr/lib/ruby 以下に 入ったのだが、事情により ln -s /usr/bin/ruby /usr/local/bin/ruby して使っていたところ、 gem で入れたものが /usr/local の方に入ってしまって 地味に驚いたことがある。
339 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 20:24:42 ] def each_specialize_first(collection, at_first) iter = collection.each at_first.call(iter.next) loop{ yield(iter.next) } end each_specialize_first a, lambda{|e| ... } do |e| ... end とか。
340 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 20:29:59 ] 普通はどうするもんか、という質問にメソッド定義しちゃう人って何なの
341 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 20:30:34 ] top = a.shift a.each {|x| } a.unshift top 今はコレが好み。整数を手繰ってどうのこうの、 毎回ゼロか調べてどうのこうのはお腹一杯。 shiftとunshiftってい対応がすき。
342 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 20:31:34 ] >>340 熱狂した痛い初心者 つまり、過去の自分
343 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 20:33:41 ] >>341 キューって知ってる?
344 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 20:36:18 ] 一度shiftしたものは最後までshiftするべきだと思う shiftした時点でそれは配列ではなくqueueなんじゃないかと
345 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 20:37:17 ] >>343 オハヨ
346 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 20:47:09 ] 前にもこんな話あったな。queueだと言い張りたいならQueueクラス作れよw
347 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 20:52:37 ] 配列の要素をshiftしてunshiftするってのは筋が悪いの?
348 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 20:58:04 ] >>346 arr[0] と arr[1..-1] で用が済むというか全く同じ動作のはずなのに、 わざわざ shift という名前のメソッドを使うのなら、その配列はキューであるという意図があるはずだろ
349 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:06:09 ] >>347 配列を pop や shift や push してたら、スタックやキューとして使われてるのかなあ、とは思う そういう風に使ってないのに、たとえば 0要素目だけを取り出して s に代入するだけの目的で s = array.shift と書いてあったら、ちょっと混乱するかも
350 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:07:48 ] >>348 ねーよw 同じ動作で別の名前を使うことに意味があるなら Array#sizeと#lengthの違いを教えてくれよ >>349 副作用があるからそれはない
351 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:11:15 ] >>146 キューとして使うという想定も有るとは思うがその言い方はおかしくね? Array#firstというメソッドが存在する理由はArray#[]のある場所をランダムアクセス的に拾ってくるという意味じゃなく 先頭から要素をいくつか取り出すという意味をコードに持たせる為と解釈している。 それと同様に先頭から要素を切り出す、という意味をコードに与えたいならばshiftを使うのが適切じゃね? ところでこれはどうかな? isfirst = true a.each do |e| res << isfirst ? first(e) ; isfirst=false : rest(e) end 数値による範囲指定と数値比較を無くしてみた。がキモさは消せないなあ
352 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:12:08 ] アンカミスorz >>348 ね。 なんでこんな訳わからんミスしたんだか
353 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:12:52 ] 配列かどうか? 型に拘るのはRubyらしくない。 shiftできるのならそれはshiftできる何かだ!
354 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:14:38 ] >>350 array をそれ以降使わないのなら動作する heading = html.scan(/<h1>(.+?)<\/h1>/).flatten.shift こんなのとか 1ヶ月くらいずっと、この手の使い捨て配列の最初と最後の要素アクセスを shift と pop でやってた俺が証人だ 試してみるとわかるが非常にめんどくさいので試してみなくてもいい
355 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:16:57 ] >>354 それこそまさに、なぜArray#firstとArray#lastを使わないっていう
356 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:17:17 ] >>349 > 0要素目だけを取り出して s に代入するだけの目的で > s = array.shift なにかに代入すうるだけならさすがに a.firstかa[0]でしょw 取り出すってのが、今の流れの上では大事な特徴。
357 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:20:47 ] a[0],a[1,-1]とかa.shiftとかしちゃうと、要素0個の配列で例外でるから、 >351とかが無難かね。
358 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:22:27 ] >>357 配列が 0個でない、とかのチェックはしてあるという前提でいいと思うなあ 配列が空なのにエラー出さずに処理が進むほうが嫌なことが多いと思う
359 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:31:50 ] 配列が空じゃないか?を追加したらどんどんすっきりした記述からかけ離れていく。 配列が 0個でない、とかのチェックはしてなくてもうまく動く方がいいよ
360 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:33:28 ] > 配列が 0個でない、とかのチェックはしてあるという前提 each_with_indexで回せばそんなの必要ないじゃんw なんでわざわざ手間のかかる上に間違えやすいやり方を選ぼうとするの?
361 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:33:55 ] キューとスタックの概念をどう学んでるかに結構依存しそうな感じだ shift って「pop で上から積んだもの」を下から取るイメージだろ Ruby の配列を利用する場合は先頭を取り出して詰めるように実装されてるだけであって、 先頭を取り出して詰める目的に shift を使うのはやっぱ不自然だ ってか、 shift と pop または unshift、push と言われて動作がピンと来るよな?
362 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:36:16 ] このshiftだキューだうるさい御仁は shiftメソッドはキューでしか使っちゃだめとか言ってるの? まさかね。
363 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:40:42 ] ary[1..-1] だと,書き込まない限り配列そのもののコピーされないので速い unshiftすると要素をずらすので遅い
364 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:40:56 ] キューとスタックの話をしようとして、 上とか下とか言われても微妙だなw それこそ固有の実装を前提にしてないか?
365 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:48:44 ] もともとの質問は>>330 一応な
366 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:59:48 ] 単にこれはPerlとかの文化だろ。 先頭に対するのがshift, unshift 末尾に対するのがpop, push
367 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 22:01:28 ] もうshiftとかキューの話はいいんじゃないか。関係ないだろ。
368 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 22:10:55 ] で、カッコイイという理由で shift を使ったのが>>341
369 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 22:12:10 ] >>363 は大嘘なので初心者諸君は忘れましょう
370 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 22:17:06 ] >>368 shift したものと shift で残ったものを別々に使うのはなんかキモいな
371 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 22:25:13 ] >>370 まあ、そのへんなんだろうな 想定されてる使い方とズレてることを気にする人と、ズレてることを気にしない人
372 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 22:31:10 ] アセンブラ上がり的には、 shift/unshiftは横にserializeされてるイメージで、 push/popは縦にstackされてるイメージだな。
373 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 22:49:02 ] アセンブラどころかCすらやったことないがそんなイメージだぞ おれのshift/unshiftのイメージ □□□□■■■■■■■ おれのpush/popのイメージ | □ □□□ □□□□□
374 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 22:55:40 ] スタックをピラミッドで組むのは大方のイメージとずれてると思う というか、てっぺんのアンテナは何だ
375 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 23:00:35 ] スタックっていったら重ねたお皿だろう と思ったがRubyとか高水準な言語では 要素の大きさがバラバラなスタックってのもありな気がしなくもない
376 名前:デフォルトの名無しさん [2009/04/13(月) 23:00:59 ] >>824 マジレスすると初めての場合はちゃんとしたローション使わないと痛さで糞ができなくなるぞ。 お勧めのローションはテンプレをみてくれw
377 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 23:17:50 ] >>374 真ん中を貫いてる棒だよ。 棒がないと下からひょいっと取り出せるじゃん。 ちなみに「□□□□□」は真ん中に穴があいてる円盤を表現してみた。
378 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 23:21:19 ] Perlから入った人はpush/pop/shift/unshiftはリスト操作 というイメージが定着してるからな。 アセンブラの人とはかみ合わないさ。
379 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 23:24:58 ] アセンブラとか関係なく shift や pop はキューとかスタックとかあのへんの操作だと思う が、そういや Perl は shift や pop を常用していたような記憶がある
380 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 23:25:05 ] >>369 巨大な配列にa2=a[1..-1]とかやってメモリ使用量見てみろよ
381 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 23:27:04 ] 言いたかないが、Ruby 特有の事情だぜ、 リストをイテレータアクセスする機能が標準でついてて while と shift のコンビが必要ないのとか
382 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 23:29:47 ] RubyのはPerlを継承したとして、Perlの場合、 shiftはシェルスクリプトのshift push/popはプログラマなら常識のスタック操作の名前から とここまではわかる。 unshiftは思いつくものがないんだが、 lwallは単にshiftの打ち消しとしてunshiftと名付けたのだろうか。
383 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 23:31:01 ] Cにungetcってあるな。
384 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 06:57:55 ] >>381 shift が本来の意味に集中できる余地があるのはいいことだな >>380 「速い」「遅い」と書いてあるのでメモリ使用量は参考にならない というか、Rubyの配列はオブジェクトへの参照のヒモが各要素のセルにどばーっとくっついたスダレみたいな箱だろ その箱とヒモ自体を作る速度を問題にしてるんじゃないの 莫大な配列だと参照をコピーするだけでも時間がかかると 範囲オブジェクトやInteger#uptoで添え字を増減させてアクセスするなら参照の複製すら行われないから少なくともその分速いと
385 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 07:07:07 ] Array#shift はオブジェクトそのものは維持する
386 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 08:38:39 ] >>373 はスタックとハノイの塔を脳内でマージしている。
387 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 08:52:27 ] jarp.does.notwork.org/diary/200810c.html#200810211 if (first=true)..false and first ... end
388 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 09:08:09 ] うおきめえ というか実際に動かさないとなにやってるかわからんな(w
389 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 11:15:16 ] >>384 だからメモリの使用量見れば巨大な参照の列のコピー自体が起きてないことが分かるだろうに
390 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 12:26:27 ] >>384 > その箱とヒモ自体を作る速度を問題にしてるんじゃないの 箱ごとシェアするんだよ。これ実行してみろ。 a = [1]*10000000 t = Time.now 10.times { b = a[1..-1] } p Time.now - t t = Time.now 10.times { b = a[1..-1]; b[0] = 0 } p Time.now - t
391 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 12:29:15 ] ブログラムコードに対する形容詞の「きもい」の意味がわからない
392 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 12:36:13 ] グロいってのはよく言うけど、それよりは褒め言葉に近いニュアンスがあるような気がする
393 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 12:40:44 ] { } begin endが混在するのがキモイ OOPLなのに関数があるのがキモイ
394 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 13:12:38 ] 良いプログラムの定義を仮に「単純で美しく、論理的に明確ですっきりしている」とすると、 キモイというのは「動くことは動くが良いプログラムとはほど遠い」ということだろう。 大抵「なんでこんなことやってるの?」とか感じると思う。 知ってる知識を使うことが目的になって、かえってごちゃごちゃにするやつは割と見かける。
395 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 17:44:57 ] PRaggerのTracとPRagger wikiがあらされまくってんだけど、なんとかしろよ。 どこ言えばいいんだこれ。 更新してないのかもしれんが放置せず管理しろ。 今時スパムフィルターくらいいれろ。あと、メールかなんかで通知されるように設定しろ PRagger - Trac pragger.ikejisoft.com/ FrontPage - PRaggerまとめサイト それPra garyo.sakura.ne.jp/ruby/pragger/index.php?FrontPage
396 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 18:21:02 ] おいおい落ち着けよ ・・・ってRubyでPlagger使えたのかよおぉぉおおぉおぉおおおお!!!
397 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 18:54:59 ] >>395 IKeJIだろJK
398 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 21:03:18 ] RubyでPostScriptファイルの情報を取得して表示しようとしているのですが RMagicで印刷枚数、部数、プリントサイズ、モノクロかカラーかって取得できますか? ImageMagicをコマンドラインで動かすのは面倒なんですが、 RMagicは画像の加工でしか使えないですかね?
399 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 21:16:35 ] 取得できる情報はここにあるだけかも。 studio.imagemagick.org/RMagick/doc/imageattrs.html
400 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 22:43:49 ] >>390 へえ、なるほど 部分配列のコストなんて考えたこと無かったけど 元の配列とシェアするんですね で、代入された時点で初めて完全なコピーが行われる もとの配列の要素が増減した時にもちゃんとコピーされる 上手いこと出来てるなあ require 'benchmark' def bm(mes,&b) print mes;puts Benchmark.measure(&b) end a = [1]*10000000 b =nil bm('部分削除'){a.delete_at(5)} bm('挿入 '){a.insert(5,1)} bm('部分参照'){b=a[1..-1].size} bm('部分削除'){a.delete_at(5)} bm('挿入 '){a.insert(5,1)}
401 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 22:49:48 ] あ、間違ってた bm('部分参照'){b=a[1..-1].size} じゃなくて bm('部分参照'){b=a[1..-1]} でした でも、参照した影響っていつまで残るんでしょうか 部分配列を参照して使い捨てた後でもコピーが起こってるみたいなんですけど require 'benchmark' def bm(mes,&b) print mes;puts Benchmark.measure(&b) end a = [1]*10000000 bm('部分削除'){a.delete_at(5)} bm('挿入 '){a.insert(5,1)} bm('部分参照'){a[1..-1]} #使い捨て GC.start bm('部分削除'){a.delete_at(5)} bm('挿入 '){a.insert(5,1)}
402 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 22:53:45 ] 結局動作上は即レスの>>331 が無難なのか
403 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 22:55:16 ] >>402 誰でもすぐ思いつく泥臭いのがうまくいくことも多いってことだな
404 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 23:00:41 ] ベンチマーク取ってみるとRangeとか使って添字で回すより、 部分配列でeachした方が速かったり
405 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 23:06:27 ] >>402 配列の要素が2つ以上無いと例外になるってばさ。 「最初の要素だけ特別な処理」って時に要素一つだけの配列を 渡されるケースもそんなにまれではなさそうに思うんだけどな・・・ なんか揉めてたが、動作的に無難っていったら>>341 かもよw
406 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 23:10:10 ] >>405 いやそれなら配列以外を渡されるチェックもすべきだろ Enumerable だけ対応して shift メソッドが定義されてなかったらどうする
407 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 23:12:21 ] うむ、rescue ブロックが100行くらいついてない時点でどれも論外だ
408 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 23:21:37 ] 真珠を継承しちゃったおかげで、悪い所も継承しちゃった感じだな。 そろそろ反省して次の言語来る?
409 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 23:24:34 ] >>405 irb(main):001:0> [1][1..-1] => [] 要素1つでも問題ない
410 名前:405 mailto:sage [2009/04/14(火) 23:24:51 ] なんか勘違いしてた。要素が一つあれば例外にはならないのね。 あと、その後のレスでもみんなさりげなく翻訳してるが、 arr[1,-1] は arr[1..-1] なのな。 >>406 お題が配列だし、そこまで行くと何もシンプルには書けないような(´・ω・`)
411 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 23:24:57 ] >>405 snippetとか例文とかそういう概念はないんか
412 名前:405 mailto:sage [2009/04/14(火) 23:26:57 ] なんか言い訳が間に合わなかったZE! しばらくROMってます(´・ω・`)
413 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 23:28:37 ] 要素が0個のときうまくいかねーって
414 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 23:54:38 ] a = [1,2,3,4,5] top = a.shift a.each {|x| p 1} 1 1 1 1 a.unshift top => [1,2,3,4,5] a = [] top = a.shift a.each {|x| p 1} a.unshift top => [nil] こうしてくだらないバグがこの世に一つ増えるのだった
415 名前:デフォルトの名無しさん [2009/04/15(水) 00:17:16 ] プログラム関係ないけど、Ruby使いの人はどんなエディタ使ってるの? gvim使ってるけどVisualStudioしか使ったことなかったから インテリセンスなっしんぐのエディタは結構きついです・・・
416 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 00:20:24 ] NetBeansが続々とスクリプト言語に対応していってる。 でも型情報が無いからインテリセンス並のコード補完は期待できないな。
417 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 00:24:26 ] Aptana Studio。RDTとRadRailsね。 Rubyは変数の型を動的に変えられるから、 インスタンスメソッドだとインテリセンスはほとんど役に立たないよ。 クラスメソッドならOKだけど。ステップ実行は便利。
418 名前:デフォルトの名無しさん [2009/04/15(水) 00:25:19 ] いまんとこ、対応してるIDEはNetBeansとEclipsだけですか?
419 名前:デフォルトの名無しさん [2009/04/15(水) 00:31:01 ] Rubyならばここだぜ www.tech-arts.co.jp/technologies/new-technologies/ruby-on-rails.html
420 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 01:09:54 ] >>414 「配列の最初の要素だけ別処理する」という仕様に対して、 長さ0の配列が渡されたら何もしないのが正しいと言い切れるの?
421 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 01:22:26 ] >>401 >参照した影響っていつまで残るんでしょうか sliceすると、sliceされた配列も新しく出来た配列もシェア状態になる。 シェア状態になった配列を破壊的に変更するとコピーが起きる。 コピーがされたらシェア状態じゃなくなる。 というわけで、破壊的変更がされるまで。
422 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 01:24:15 ] 以前からArrayはcopy on writeに違いないと訳もなく信じていたのだけど、 今回の話でちょっと興味を持ったので少し実験してみた。 もしかして一部分でも書き換えたら、巨大な配列だろうと丸コピーしてる? irb(main):001:0> a = Array.new(1<<24) { |i| i } # メモリ使用量70MB程度 irb(main):002:0> b = Array.new(1<<8) { a[1..-1] } # メモリ使用量そのまま irb(main):003:0> b.each { |e| e[0] = 1 } # たった256要素も変更できない NoMemoryError: failed to allocate memory from (irb):3:in `[]=' from (irb):3 from (irb):3:in `each' from (irb):3 from :0 ソースを読むだけの気力も能力もないので適当なことを言わせてもらうけど 配列をブロックに小分けするようなことはしていないようにみえる。 ガチガチの配列ならともかく、RubyのArrayってどこにでも追加削除可能な 万能コンテナみたいだから、内部的にはある程度の長さのブロック(配列)と ハッシュやツリーなんかの混合構造の方が効率良さそうに思えるけど。 それとも、やり過ぎて添字アクセスが遅くなるのを嫌っているのかな?
423 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 02:05:38 ] >配列をブロックに小分けするようなことはしていないようにみえる。 その通り。 >ハッシュやツリーなんかの混合構造の方が効率良さそうに思えるけど。 >それとも、やり過ぎて添字アクセスが遅くなるのを嫌っているのかな? たぶん、ちゃんと検討されたことはない。でも、 - この最適化で速くなるRubyプログラムは少なそう(多いというなら説得が必要) - わずかだろうけど遅くなるプログラムは結構ありそう(添字アクセス) - 配列がflatなメモリだと期待している拡張ライブラリ(非常に多い)が動かなくなる というあたりから、標準のArrayに組み込むのは微妙かなあ。 SparseArrayみたいな別ライブラリがいいと思う。やるとしたら。
424 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 03:07:21 ] java で、 Vector → ArrayList さらに LinkedList や CopyOnWriteList と、言語のバージョンが上がるごとに List の派生クラスが増えていったように Ruby も Array の派生組み込みクラスが作られていくかな? Ruby の文化からすると、あまりそういうことはしなさそうだけど。
425 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 05:18:29 ] >>422 ttp://i.loveruby.net/ja/rhg/book/object.html
426 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 05:48:59 ] >>425 422じゃないけど、Rubyの場合は 基本的に変数はすべて参照になっているって事でいいのかな。 irb --prompt simple >> a = [1, 2] => [1, 2] >> b = a => [1, 2] >> a << 3 => [1, 2, 3] >> a << 4 => [1, 2, 3, 4] >> b.size => 4 >> b => [1, 2, 3, 4] この場合、aとかbってのはただのラベルで配列の実体は別の場所にあるってことでいい?
427 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 06:53:21 ] > 基本的に変数はすべて参照になっているって事でいいのかな。 いいと思うけど、俺にアンカーつける必要なくない? 他にもいい人はたくさんいるよ
428 名前:422 mailto:sage [2009/04/15(水) 08:15:18 ] >>423 組み込みオブジェクトの内部表現が変わってもスクリプト側には 影響ないと思ってたんだけど、拡張ライブラリが駄目なのか。 >>424 の言うように派生クラスにするか、Arrayを初期化するときに 内部実装を選択するヒントとかパラメータを指定できるようになれば 面白いかなって思ったんだけど。 >>425 これ、Ruby Hacking Guideってやつだよね? Webで見れたとは、こりゃありがたい。 後でゆっくり読ませてもらうわ。
429 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 08:32:04 ] 初心者スレだったんだっけ >>426 オブジェクトを「捕まえる」「入れておく」ことはできない 名前で参照するしかない 変数に対する = は、"右辺" の指すオブジェクトに新たなラベルをつける行為で、本当は「代入」ではない irb> a = [1, 2] irb> b = a irb> a << 3 irb> p (a.object_id == b.object_id) true で、スレ的にもこれだけでいいと思うんだが、こっからがめんどい irb> a = [1, 2, 3, 4, 5] irb> p (a[0..2].object_id == a.object_id) false a と a[0..2] は違うオブジェクトなので、 [1, 2, 3, 4, 5] と [1, 2, 3] ← a[0..2] が返す、できたてほやほや配列 という2つの配列オブジェクトが(Rubyの「オブジェクト置き場」に)存在しているように感じるが、実は [1, 2, 3, 4, 5] <共有済> と <注: id:3324 の配列を共有、0要素目から2要素目までを返す、ただし、破壊的変更が来たら配列内容をコピーして保持する> という、1つの「share された」配列と1つの「share した」配列になってる これらは自分が share 関係にある配列と自分が share 状態であるということを覚えていて、破壊的変更が自分に来たら share 関係にある配列にそれを通知する 通知または破壊的変更がきた場合の動作は ・ 自分が共有元(a)である場合は share 状態を解除し普通の配列に戻る(破壊的変更を自分が受けていた場合は受け付ける) ・ 自分が共有先(a[0..2])である場合は共有元の要素の参照をきちんと複製して share 状態を解除し普通の配列に切り替える ということである、というようなてきとーな理解でいいか>>421 array.c を読めばなんか書いてあるのかね
430 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 08:40:40 ] この最適化が入ることで、逆にそれ以外のところが遅くなるはずだが、 配列って部分参照することってそんなにあるっけ?
431 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 08:43:53 ] >>429 ん、単純に [ <id:0011>, <id:0013>, <id:0015>, <id:0018>, <id:0411> ] という普通の配列と [ a[0], a[1], a[2] ] # a が変更されたらオブジェクトIDの参照に切り替えること の関係になるという話なんじゃないの? や、こんな 2段階やるくらいなら最初から [ <id:0011>, <id:0013>, <id:0015>] という配列作っとけよ、という感じではあるんだが
432 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 10:03:58 ] お、おまいらここは初心者スレだぜ( ´ー`)y─┛~~ コウドナワダイデビビラスナ
433 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 10:19:32 ] >>420 の分かってないっぷりにワロタw
434 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 10:24:56 ] >>431 オブジェクトにラベルを新たに付けるという行為が、 配列をインデックスで参照するように指定するという行為よりずっとコストのかかる行為であった場合には、 [ a[0], a[1], a[2] ] のほうが有効だと思われ ホントのとこはどうなのかは知らない
435 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 10:28:46 ] また仕様バグか
436 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 10:56:44 ] require 'benchmark' a = (1..1000000).to_a Benchmark.bmbm do |bm| bm.report('a に追加'){a.delete_at(0); a.push("s")} end a = (1..1000000).to_a Benchmark.bmbm do |bm| bm.report('部分参照して追加'){a[1..-1].push("s")} end 結果: user system total real a に追加 0.050000 0.000000 0.050000 ( 0.048458) user system total real 部分参照して追加 0.050000 0.010000 0.060000 ( 0.053062) 破壊的変更した際に別に遅くなるとも思えんのでバグではないな 部分参照だけをした場合が笑えるほど速いので問題は無い …まあ、push しただけなのにdeleteとpushの2段階と同レベルの処理速度に落ちるということ自体 コードの見かけと実際の関係上あまりよくないという観測もなくはない気もするが (つまり、「共有の配列」から「本当の配列」に変換される、Rubyの裏側の動作がかなりごっつい)
437 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 11:21:01 ] >>436 残念 遅いのは delete_at の部分 share の部分配列を通常の配列に変換する、というのは、 配列から要素を削除して詰める、という行為と大して変わらない ちなみに、これがわりと速いぞ a2 = Array.new a2.push(*a[1..-1]) 配列の一部分を得たい場合は配列のスライス arr[s..e] を使うほうがいい、ってことだな
438 名前:デフォルトの名無しさん [2009/04/15(水) 12:41:21 ] エラーが出ても処理を止めず、最後まで実行するようにしたいのですが、どうすればよいでしょうか?? PHPのようにブラウザで実行したとき、エラーメッセージをエラーが出た部分に出力するようにしたいのです。 begin とか rescue を使えばできるのかな?と思っているのですが・・ ご教示頂けると幸いです。
439 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 13:20:37 ] >>438 エラーが出たってことはそれ以上処理ができないということ で、まあ、使ってるフレームワークのヘルプでも読め 処理中に起こって止まる原因となった例外をWebブラウザ上に表示させる方法がたいてい載ってる
440 名前:デフォルトの名無しさん [2009/04/15(水) 13:24:30 ] レスどもです。 PHPの場合はエラーが発生してもなんとか最後まで実行しようとしてくれますよね?? rubyだとエラーが発生したあとの処理はどう頑張ってもやってくれないということでしょうか?
441 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 13:32:47 ] とりあえず、いきなりCGI作るのやめろ RubyはCGIを特別扱いしない 普通のコンソールのスクリプトでどういうことができるか勉強してからCGIやれ きっとそっちのほうが早い
442 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 13:37:33 ] PHPはWebブラウザから入力してWebブラウザに出力する特化型言語だからなあ… > PHPの場合はエラーが発生してもなんとか最後まで実行しようとしてくれますよね?? いいえ
443 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 13:49:20 ] PHPのエラーってWarningのこと言ってるの? それ以上処理できなかったらPHPだって止まるよ
444 名前:440 [2009/04/15(水) 14:50:12 ] あそうか、warningの時は続けて実行してくれるけれど、fatal error の時はPHPでも止まるのか・・勘違いしてました、すいません。 ありがとうございますm(_ _)m
445 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 18:26:19 ] klassってなんですか><
446 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 18:27:25 ] klassの部分をclassに修正してみれば分かるよ
447 名前:426 mailto:sage [2009/04/15(水) 19:57:26 ] 遅レスだが >>429 だいたいその理解でおk 細かいこというと、共有元を破壊的に変更する場合は、シェア状態を解除 するのではなく、複製してそっちを指すようになる。つまり共有先と同じ >>431 ,434 ちがう
448 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 21:36:05 ] >>445-446 clazzを使う流儀もあるな。
449 名前:デフォルトの名無しさん [2009/04/15(水) 23:01:12 ] このスレってmatz, yugui, yarv, shugoさんとかが名無しで答えてたりするのかなぁ
450 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 23:26:03 ] 少なくともよく答えてることはまずないと思う。 1〜2週間スレを見てればわかる。答えてたら失望するわ、おれ。
451 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 23:29:00 ] ここまでMatzの自演
452 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 23:29:53 ] こんな金にならないスレに顔出すより、 ブログに何か書く方が大事だろw
453 名前:デフォルトの名無しさん [2009/04/15(水) 23:34:02 ] しかし、こういう立場のひとってブログに大きな態度で書けないよな。 リーナス君のようにならないことを祈る。。
454 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 23:36:39 ] どっちもどっちのような
455 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 05:58:10 ] 内容見ずに態度見るような馬鹿を気にしてもしょうがないよ。 有名になると、何書いたって行為と悪意を両方増やす結果になるし。
456 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 05:59:32 ] ×行為 ○好意
457 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 09:03:10 ] >>449 Ruby1.9には2ch bot yarvを新装備!
458 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 10:00:57 ] RSpec で、 hogehoge.rb に対して hogehoge_spec.rb を作ったら、シェルの補完で hog <Tab> と打って hogehoge.rb が一発で出るとかそういうのが阻害されてしまうから不便だ、という話をしたら spec ファイルは spec/ ディレクトリにまとめて入れろバカ というツッコミが来た 知らんかった でもこれって spec ファイルのほうからどうやってオリジナルのスクリプト読むん?
459 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 10:11:22 ] >>458 > spec ファイルは spec/ ディレクトリにまとめて入れろバカ Rails on Rails の流儀だな spec ディレクトリは自動で追加される環境の人だ 自力でどうにかできるものではないので、Rails で作ってないなら無視してよし 一応 File.expand_path とか File.dirname(__FILE__) とか駆使したファイルパスを require するようにすればなんとかなるとは思うが
460 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 10:23:47 ] >>458 俺の場合は __FILE__ を基準にして、他の場所のオリジナルを読むようにしてる たとえばlibディレクトリなら Pathname.new(__FILE__).dirname.parent.parent + 'lib' で探す
461 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 10:27:58 ] RSpec使ったことないけど 補完の問題だけを考えるとspec_hogehoge.rbにするのはどうか?
462 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 10:31:18 ] >>458 $LOAD_PATH << ".." << "../lib" require 'spec' require 'hoge' ... オフィシャルなファイルと被るファイル名の自作ファイルがあると動作しないのが難点だが、 require はまあそもそもそんなもんだな ただ、下手に lib/ と spec/ があると、Rails の auto_spec.rb とか なんかあのへんが動作すると期待されてしまうかもしれない
463 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 10:37:27 ] >>461 一応、spec/*_spec.rb というファイルをまとめて実行して 一気に lib/ 内のファイルのテストを試すサポートプログラム(autospec)が存在するので、 いつか自動テスト実行を覚えた時用に hogehoge_spec.rb という名前であったほうが好ましい が、一人で使うぶんには spec_hogehoge.rb にしておくのがいちばん無難だな、めんどくさくないし
464 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 11:37:51 ] >>458-459 別にRails流ってこともないだろ。 Gemsとかつくる前提のときも spec/ に入れるのが一般的だし、 autotestも標準で spec/以下 と lib/を関連付けて見てくれる。 といっても、慣例でしかない気がするけど
465 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 14:18:57 ] >>458 $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib') とかかな。 いちいち書くのめんどくさけりゃ>>464 のいうautotestや、 Rakeにspec/rake/spectaskのSpec::Rake::SpecTaskを使って テスト実行を肩代わりしてもらう。 この二つはデフォでは spec/*_spec.rb を相手にするから たかが慣習、されど慣習と。
466 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 16:28:48 ] ねーよw
467 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 19:04:41 ] ファイルのロックを File#flock でなく IO#fcntl で実装しようかと思ったんですが、 これシステムの struct flock に依存するから簡単には portble に書けないですかね?
468 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 20:55:51 ] どこまでのポータビリティを求めてるのかによる。 Windowsとか言い出すなら問題外。
469 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 21:14:34 ] あ、rspec の、エクスペクテーションの should をまとめたいと思ってメソッド定義するよね あれってどこに書くべき? before で作ったインスタンス変数が読めなかったり def で定義したメソッドが見えなかったりでどこがどう妥当なのかよくわからん
470 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 21:59:37 ] >>469 何を言いたいのかよく分からないが it (specify) を、複数の ExampleGroup で共有したいって事なら share_as メソッドを探すと幸せになれるかもしれない
471 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 22:09:06 ] …たぶん、 describe Hoge do before :all do @val1 = ... ; @val2 = ... # (1) end (2) describe "#foo" do matomete_val_tesuto end end としたいときに、 def matomete_val_tesuto を (1) に書くか (2) に書くかって話なんじゃね (1) に書いたら describe "#foo" の中では使えないはず (2) に書いたら @val1 にアクセスできんな
472 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 00:13:56 ] setter の返り値について質問 a.hoge = b.hoge = value みたいな書き方ができるようにしようと思うのですが、 def hoge=(value) @hoge = validate(value) @hoge end と def hoge=(value) @hoge = validate(value) value end ではどちらがいいでしょうか? 場合によって value != validate(value) となります。
473 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 00:22:53 ] > a.hoge = b.hoge = value みたいな書き方ができるようにしようと思う そういうのやめとけ めんどくさいから ちなみに、 = つきメソッドは引数を返すように作られていることが期待されてる つまり、 def hoge=(val) @hoge=val end だ
474 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 00:28:15 ] 前者をよしとする人はいないんでないの a=b=c が a==b==c にならないのはバグの元だし オペレータオーバーライドの悪い点をわざわざ利用する必要はないよ
475 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 00:31:08 ] 今調べたら、セッターとして使うと引数が問答無用で返って、 sendで呼ぶと返した値が返る
476 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 00:37:49 ] >>475 うわあこれ知らんかった 今まで引数の値をわざわざ返してたのにー
477 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 00:44:12 ] …。 いや、なんつーか、 hoge = 1 の返り値は 1 だというのは知ってるよな def set_hoge @hoge = 1 end これの返り値は 1 だし、attr_* 系で作られる hoge= みたいなメソッドも引数を返す
478 名前:472 mailto:sage [2009/04/17(金) 00:48:14 ] 皆さんレスありがとうございます。 >>475 >今調べたら、セッターとして使うと引数が問答無用で返って、 ほんとだw そもそも返り値を選択できなかったとは…… def hoge=(value) return end でも引数が返ってきました。 setter の呼び出しは処理系が特別扱いしてるんですね。
479 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 01:25:51 ] [ruby-core:00637]より。 |If an assignment method which doesn't return an argument is not |intuitive, why don't ruby force it? Agreed. Last time I thought that, I was too lazy to modify compiler itself, and then forgot. I will fix it someday. だって。
480 名前:472 mailto:sage [2009/04/17(金) 02:25:15 ] >>479 なるほど。 その結果として 1.8 では setter の戻り値を破棄して 引数を返すように変更されたと 確認してみたらピッケル本にもそのことがちゃんと書いてありました(言語編 p76)
481 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 08:42:59 ] >>477 バーカ というかお前322と似てるな。バカ具合が
482 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 09:00:50 ] わざわざ終わった話題に安全圏から罵倒、というのはつい最近どこかで
483 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 09:45:27 ] クラスメソッドのエイリアスはどうやって定義しますか。
484 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 09:52:51 ] class Hoge def self.hoge ; end class << self alias hage hoge end end これ以外の方法知らん。他のやり方があったら教えて。
485 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 10:23:07 ] >>484 alias メソッドを使うとしたらそれくらいしかなさそうだな あとは普通に self.hoge の中で self.hage を呼ぶしかあんめえ
486 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 10:43:50 ] alias_methodを使うというひねりもできるが、メタクラスを使う以外の方法はない。
487 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 10:48:13 ] rubyでcgiを作ろうと思います postを受け取るにはどうすればいいですか
488 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 10:52:20 ] >>487 他の言語でpostを受け取るのと同じ方法でできます。
489 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 11:05:40 ] >>487 単純には、標準入力に環境変数CONTENT_LENGTH長だけ入ってる、はず。 マルチパートやらデコードやらいろいろあるので、ライブラリを使うのが吉。 どのライブラリをどんな風に使うのがいいのかは、詳しい人を待って(オイ)。
490 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 13:46:48 ] >>488 うん、変わらんな というか一度は自力でPOSTとか全部やってみたほうがいいと思うんだ >>487 標準で cgi というライブラリがあるからそれ使え 自力で外部ライブラリをインストールしてもいい環境なのなら、 rubyforge から cgialt をインストールしてそれを cgi 互換ライブラリとして使え 他にもいくつかあるが、cgi ライブラリの使用経験とかを前提にしてたりするんで、最初は素直に cgi ライブラリ使え
491 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 14:36:38 ] rubyのcgiはかなりアレ。
492 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 16:14:01 ] >>468 メジャーな UNIX (Linux, *BSD, Solaris あたり) で動けば十分なんですが、 Google ソースコード検索や Koders でも Ruby の fcntl の用例が少ないみたいなんで Ruby Inline か拡張ライブラリで fcntl(2) を直接使うことにします。
493 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 16:51:33 ] >>491 アレって何?
494 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 17:07:46 ] >>492 IOクラスにfcntlメソッドがあるので、わざわざそんな難しい方向に行かんでもええよ
495 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 17:07:54 ] 指示代名詞も知らないゆとり乙
496 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 17:09:43 ] >>493 491じゃないが、仕様と実装が残念だった。 1.9系で後者は改善されたけど。
497 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 17:38:58 ] >>494 その IO#fcntl ですが、例えば file.fcntl(Fcntl::F_GETLK, arg) するとき、 arg には struct flock に pack したものを指定する必要があるのですが、 struct flock にどんなメンバがあるかは Ruby レベルからは知り得ないので、 やっぱり C で書く必要があると思うのです。
498 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 18:01:32 ] >>497 なんだ、そんなレベルのポータビリティでいいのか。
499 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 19:35:12 ] >>487 今ならRack使う方がいいと思う
500 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 19:44:30 ] 初心者に標準添付以外をいきなり勧める人って何なの
501 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 20:49:03 ] 今ならgem install rackするだけだろ? rubyみたいな日本だけのドマイナー言語を選んで、さらにcgiがやりたいなんて 茨の道を歩くのは覚悟してもらわなきゃ
502 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:01:04 ] > rubyみたいな日本だけのドマイナー言語を選んで、さらにcgiがやりたいなんて 海外の開発系カンファレンスに何度か出席しているが、 どうみても日本より海外の方が、Ruby の関心が高い。 むしろ日本人は「Ruby 出来ない子」が多い、と感じる。
503 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:07:40 ] > 海外の開発系カンファレンス そういうやつらは「寿司、天ぷら、藤山、芸者」の日本好きの変わり者geekだろ。 狭いコミュニティに閉じこもって「関心が高い」じゃないだろ。 目を覚ませ。もう戦争は終わったんだ。 今は蛇言語でgwtの時代なんだよ。
504 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:12:12 ] せめてこのスレでは、Ruby初心者に有益な情報を書くように心がけられないもんかね Pythonがいいよってのも、Rubyのことを聞きに来た人間を迷わせる効果しかないと思うんだがね アンチは本スレでもアンチスレでも行けばいいんだ。 初心者スレにまで顔出すことはなかろうに。本格的に人間性を疑うわ。
505 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:12:23 ] カンファレンスは知らないがおれもそれは感じる。 新しいバージョンとかでつまづいたときググると、 役に立つのは大抵海外のサイト。向こうの方が精力的にやって気がする。 2ちゃんなんてRubyスレ全般で「1.9は使うな」だもんな。 2ちゃん見てる時点でアレだろと言われたらそれまでなのだが。
506 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:16:56 ] 裸で冬山に特攻する初心者がいれば「行くな」とも言いたくなるわな
507 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:21:08 ] >>505 お前英語苦手だろ 英語で書いてあるというだけで凄いって思ってるだろ 海外の人だって「初心者」は Ruby 1.9 を使ってない
508 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:22:39 ] Vimで入門始めたけど、アホらしくてNetBeans入れてみた 信じられないくらい快適になった
509 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:27:00 ] >>507 別に得意じゃないけど英語だけですごいなんて思わないだろ。小学生かよ。 新しいことに関して日本のサイトはほとんど引っかからないし、 読んで実際に解決することが多いからそう思う。 あと「Rubyスレ全般」ってわざわざ書いてるんだからちゃんと読んでな。 たった5行なんだからさ。初心者スレに限定してないだろ。
510 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:34:10 ] 日本人はRuby初心者が多い印象がある 外国人の人にとってのRubyは日本人にとってのPythonくらいの「詳しい人向け言語」な感じ
511 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:48:53 ] ruby-talk読んでるが、初心者らしいというかほほえましい質問が半分くらい(たいかん)
512 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 22:42:31 ] 詳しい人はこんなところこないと思うよ 前にmswinの人がキレてたじゃん わざわざ顔出して見ず知らずのしかも自分の足下にも及ばないようなやつに、 口汚くレスされたりしてストレスためる必要ないだろ あと日本のRuby好きはRubyで何か作るというよりも、メンテナとかをやるのが好きなのかもね
513 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 01:24:40 ] ゴルフやってるんじゃねーの
514 名前:デフォルトの名無しさん [2009/04/18(土) 11:16:09 ] month = 4 などの数字が入ってるとき、これを to_sなどで "04"という風に変換したいんですが、どうすればいいですか? month = 11 のときは、"11"です。 どうかお願いします。
515 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 11:23:44 ] '%02d' % 2 => "02" '%02d' % 11 => "11"
516 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 12:06:19 ] もしくは $ irb irb(main):001:0> sprintf("%02d", 4) => "04" irb(main):002:0> sprintf("%02d", 11) => "11"
517 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 12:53:26 ] MySQLをDBIを介して使おうとしているのですが、 テーブル名一覧を取得する方法をお教えいただけないでしょうか? dbh = DBI..connect("dbi:Mysql:test:localhost","user","password") table_names = dbh.execute("SHOW TABLES") p table_names とやると全然違うものが出力されてしまいます。 すいませんが、お教えいただけますでしょうか?
518 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 13:32:41 ] 聞くときだけは丁寧だな。がんばれよw
519 名前:517 mailto:sage [2009/04/18(土) 16:44:37 ] 自己レスです。 結局DBIを介して行う方法はわからなかったので、Ruby/MySQLで接続して行いました。 require "mysql" dbh = Mysql::new("localhost","username","password") dbh.query("use database") p dbh.list_tables これで取得できそうです。
520 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 19:34:20 ] FreeBSD 7.1-RELEASE-p4 で irb 使ってます Delete キーを押すと ~ が表示されるんですが、同じような症状をさくっと治したという方はいませんでしょか csh 上では普通に後ろの文字が消えます
521 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 20:26:40 ] 端末は何を使っとるん?
522 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 20:37:48 ] ええと、アプリケーションは Windows 上の PuTTY で、端末文字列は xterm-color 、 csh から bash を起動して C-v したあとに Delete キーを押すと ^[[3~ が表示されてます(csh 上ではどうやるんだろう?) screen 等は(まだ)使ってません 接続先は具体的にはさくらインターネットのレンタルサーバです なんか Ruby あんま関係ないような気がひしひしとしてます
523 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 20:43:38 ] irb を起動するとキー操作の動作が違う、という場合はいちおう Ruby スレの範疇だと思う まあ、irb 自体が独自に何かやってるわけじゃないけどさ
524 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 21:22:16 ] >>522 自分もさくらのレン鯖契約しているのでやってみた。 ログインシェルが csh なので、bash にしたあとで irb 起動してみたけど、 C-v したあとだったら delete キーを押すと再現したけど、 C^v しなければ、irb のプロンプト中に delete キーを押したら、ちゃんとカーソル位置の文字が消えたよ C-v って何のためにやっているの?
525 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 21:57:44 ] C-vは、つぎの入力文字を視覚的に表示する機能では?
526 名前:521 mailto:sage [2009/04/19(日) 00:31:07 ] >>525 C-v って vi のと同じように、次の入力をキーコードそのまま入力する機能だと思う。 PuTTY が Delete で吐くキーコードが 1b 5b 33 7e ってことだよね。 FreeBSD 7.1-RELEASE-p4 & PuTTY 0.60 ごった煮版 2007年8月6日版だけど、 カーソル位置の文字が消えた。 もし Readline を入れてなければ入れて、 それでダメなら ~/.inputrc に↓コレ書いてみて。 "\e[3~": delete-char
527 名前:デフォルトの名無しさん [2009/04/19(日) 02:37:16 ] RubyのDBIを使おうとしているのですが、 $ irb irb(main):001:0> require 'dbi' => true irb(main):002:0> DBI.connect('dbi:mysql:test','root','root00') DBI::InterfaceError: Could not load driver (undefined local variable or method `e' for DBI:Module) from /usr/local/lib/site_ruby/1.8/dbi.rb:312:in `load_driver' from /usr/local/lib/site_ruby/1.8/dbi.rb:154:in `_get_full_driver' from /usr/local/lib/site_ruby/1.8/dbi.rb:139:in `connect' from (irb):2 となってしまい、うまくコネクトできません。ドライバはインストールしたつもりなのですが、 何か間違ってるでしょうか?
528 名前:527 [2009/04/19(日) 02:50:31 ] mysql-ruby-2.8.1.tar.gz をインストールしたらできました。 DBIだけじゃなくて、Ruby/Mysqlのドライバもインストールしないとだめなんですね。 失礼しやした。
529 名前:464 mailto:sage [2009/04/19(日) 08:50:34 ] 連投規制で書き込めなかった >>464 の > autotestも標準で spec/以下 と lib/を関連付けて見てくれる。 は、厳密には間違いで、rspecに含まれる autotest用のプラグイン?が spec/とlib/を関連付けてみてくれる >>469-471 spec_helper.rb(か、もしくはそこからrequrieする.rb)内でshare_asで定義して、includeするとか
530 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 11:08:49 ] ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]を使用しています open("|")(I/Oパイプ付)で起動した外部プロセスを強制終了する事ってできますか? 外部コマンドの結果でその後の動作を変えるようなことをしていますが 大体の場合全ての結果を受け取らずとも判定が出来るので 判定が出来た時点で外部コマンドを強制終了して判定にかかる時間を短縮したいです
531 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 11:09:51 ] >>530 適当にシグナル送ればいいんじゃね
532 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 13:28:18 ] >>530 IO#pid で外部コマンドの pid が取れるみたいね。あとは >>531 の通りで。
533 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 17:25:24 ] UTF8のBOMを含むStringからBOMを取り除く方法は?
534 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 17:38:35 ] >>533 toutf8
535 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 17:41:57 ] iirb> require 'kconv' irb> text = File.open('test.txt'){|f| f.read} => "\357\273\277test\ntest\ntest\n" irb> text.toutf8 => "test\ntest\ntest\n" まあ、ある意味盲点ではあるな
536 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:05:57 ] 盲点ってかただの副作用では そういうのこそ、メソッドを用意すればいいのに
537 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:11:30 ] >>536 nkf -w8 はBOM を除去する
538 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:18:58 ] というよりは、 BOM 無し UTF-8 を出力する、だね
539 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:21:47 ] BOMについては特につけることも取ることもしない、というスタンスなんだっけか
540 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:35:22 ] .toutf8もNKFも、余計な変換をしそうで怖いです。 やりたいのはBOMを除くことだけで、変換とかいっさい必要ないんですが。 あと、BOMを含むかどうかの判定方法もお願いします。 今は str.unpack('H6').first == "efbbbf" としてるんですけど、どう考えても頭悪い方法です。
541 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:54:51 ] BOM = "\357\273\277" str[0,3] = "" if str[0,3] == BOM str.sub(/\A#{BOM}/, "") こういうのでいいんじゃない?
542 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:58:20 ] str.sub!(/\A\xEF\xBB\xBF/, '') あたりで
543 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 19:00:35 ] Ruby 1.8.7以降だとString#start_with?ってのがあるからそれで判定しても
544 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 22:53:34 ] 自分でString#bom?とか適当なメソッドを定義すればいい 表面上スマートに見えても内部は泥臭いなんて当たり前
545 名前:530 mailto:sage [2009/04/21(火) 00:17:20 ] >>531-532 レスありがとうございます やってみました…が、外部プロセスの実行が終了したあとにI/Oパイプが開いている気が… io.each_lineで読み出し中にProcess.kill(9, io.pid)しても実行時間が変わりません 仕様かな…
546 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 01:13:24 ] >>545 io.closeするだけで良いんじゃね?
547 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 10:33:13 ] require したファイルの一覧って取得できますか
548 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 10:42:06 ] 自己レスですが >>547 $LOADED_FEATURES というのがあるらしい。 マニュアルは読んでみるものですね。
549 名前:464 mailto:sage [2009/04/21(火) 12:39:37 ] riに失敗してしまうのですが、これはどのようなエラーでしょうか? 回避する方法はありませんでしょうか? > ri String#lines (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:532:in `lookup_ancestor': undefined method `+' for nil:NilClass (NoMethodError) from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:610:in `run' from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:605:in `loop' from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:605:in `run' from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:588:in `each' from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:588:in `run' from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:311:in `run' from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/bin/ri:5 from (ruby installed directory)/bin/ri:19:in `load' from (ruby installed directory)/bin/ri:19 > ri --version ri 2.2.0 >ruby --version ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
550 名前:549 mailto:sage [2009/04/21(火) 12:46:51 ] 名前の464はミスです。キニシナイでくだしあ
551 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 13:06:36 ] gemで自分でriを入れたのか。 それを消せばいいんじゃね?
552 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 21:28:24 ] 1年前のスクリプトを眺める …ライブラリそのものをナチュラルに継承すんな、っていうか重要メソッド上書きすんな ライブラリのオブジェクトをインスタンス変数に保持してメソッドを依頼するラッパー操作クラス作るだけで十分じゃねーか 来年には「この改造無駄だったなー」と思えるようになるのだろうか
553 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 22:58:43 ] 家庭用プログラムのテスト駆動開発とかなんかそのへんでしつもん a というメソッドを作ってる最中に、その中の特定の処理を a' というメソッドに分けたとして、 def a aaaaa bbbbb ccccc ... ↓ def a' bbbbb ccccc end def a aaaaa a' ..... その a' についてのテスト項目は作るほうがいい? それとも、 a についてのテストをちょこっと詳しくする程度で、a が完動したことをもって「隠して」おくのが普通?
554 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 23:35:11 ] 「普通」がまだ決まってない。 テストしろ、とかpublicなメソッドのテストがパスしてるんだからおkとか、 モックとかスタブとか使えば、とか。
555 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 01:07:07 ] privateなメソッドはそもそもテストできないようなテストフレームワークもあるような?
556 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 01:11:35 ] テストしまくり中はメソッドのアクセス制御は敢えてしないと思うんだが ユーザーからの隠蔽だけが目的の場合(つまり大多数の場合)はふつうにめんどくさいじゃん?
557 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 01:18:51 ] >>553 基本的には作らないが、他のメソッドからも使う(ような気がする)場合は仕様書的にspecファイルに書く return するものがたくさんあるようなメソッドにうっかり育ててしまった場合もやっぱ書く 最初は全部書いてたんだけど、describe がメソッド 1個に対応するような使い方をしてると引数とかで正直非常にめんどい
558 名前:549 mailto:sage [2009/04/22(水) 07:43:36 ] >>550 うは。確かにgemのrdocに入っているんですね。 gem update rdocしたらエラーでなくなった!! でも… > ri String#lines Updating ri class cache with 5126 classes... Nothing known about String#lines うーん。こういうことって普通にあるの? gemのrdocのriが駄目かと思ってrdoc消してみたら、 >ri String#lines (ruby directory)/lib/ruby/site_ruby/1.8/rubygems.rb:805:in `report_ activate_error': Could not find RubyGem rdoc (>= 0) (Gem::LoadError) from (ruby directory)/lib/ruby/site_ruby/1.8/rubygems.rb:24 3:in `activate' from (ruby directory)/lib/ruby/site_ruby/1.8/rubygems.rb:50 :in `gem' from (ruby directory)/bin/ri:18 orz
559 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 10:22:13 ] インスタンス変数へのアクセスと、クラス変数へのアクセスと、ローカル変数へのアクセスを 速い順にならべるとどうなりますか。 クラス変数へのアクセスはだいぶ遅そうだとは思いますが、インスタンス変数とローカル変数へのアクセスにどのくらい違いがあるのか知りたいです。
560 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 10:27:08 ] >>559 これが速度に影響するような用途のプログラムであるなら、Rubyで作らないほうがよい ブロックつきメソッドとか使われてたら奇声上げてキーボード投げつけるレベル ちなみに アクセス遅い アクセス速い クラス変数 > インスタンス変数 > ブロック外のローカル変数 > ブロック内のローカル変数 こんな順番だったと思うが、どっかに言及があったはず
561 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 10:38:03 ] tips: Hash[:symbol] > Struct > Hash["string"] >>>>>(越えられない壁) >>>> OpenStruct
562 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 12:57:25 ] PHPのuniqid() に相当する関数やライブラリはありますか。 uniqid()とはこんなやつです。 ttp://php.benscom.com/manual/ja/function.uniqid.php
563 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 13:05:03 ] >>562 例えば、これでどう? require "securerandom" p SecureRandom.uuid
564 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 13:09:46 ] テンプレに入れてもよさそうなRuby関連Googleブック検索 ruby - Google ブック検索 books.google.co.jp/books?lr=&as_brr=3&q=ruby&btnG=%E6%9B%B8%E7%B1%8D%E3%81%AE%E6%A4%9C%E7%B4%A2
565 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 13:14:49 ] def uniqid(prefix = "", more_entropy = false) id = "%s%x" % [prefix, Time.now.to_f*1_000_000] id << ".%.8d" % rand(100_000_000) if more_entropy id end
566 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 18:23:16 ] >>563 SecureRandom.uuidは1.8.7じゃ使えないからなぁ。 require "rubygems" require "uuidtools" p UUID.timestamp_create
567 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 20:21:26 ] >>564 「赤毛のアン」が検出されるんだが・・・?
568 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 22:18:55 ] Rubyも赤いからいいんじゃない?
569 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 08:38:48 ] どこでいいからまからんでここで聞きます 下記のようなプレゼンの外見のテンプレートがRuby界隈では最近流行っているのですが、 このプレゼンはどのようなツールもしくは、テンプレートで作られているのでしょうか? Sinatraで鼻歌まじりのWeb開発 www.slideshare.net/dara/sinatraweb
570 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 09:47:29 ] そんな「Ruby界隈」は知らない。
571 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 09:55:18 ] >>570 気を悪くしたらすいません。 なかなか見やすいと感じたので気になっているのです。
572 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 09:59:30 ] >>571 気を悪くしたんじゃなくて、それが流行ってるのは「Ruby界隈」と言えるほど広い世界でもないし中心に近くもないだろ、と。 で、その辺の人たちはKeynote使ってるんじゃないの。
573 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 10:17:56 ] もしかして、「高橋メソッド」のことを言ってるとか?
574 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 11:58:51 ] >>569 このプレゼンはおもしろかった。 このなかで Rails は「ちょっとしたことをやるには大げさ」とあるが、 自分は Java → Ruby ときたけど、Java の web フレームワークに比べれば Rails はずっと軽くて楽だと感じる。 この sinatra というのは、流行っているんですか?
575 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 12:08:02 ] 最近名前聞くねぇ。 使ったことないというか、そっち方面は全然手がけないんだが。
576 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 12:23:36 ] Winでファイルのアーカイブフラグが立っているかを判定したり フラグをセットしたりするのってどうやるの?
577 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 12:49:38 ] >>576 File::Stat に見当たらないということはサポートされてないのかなあ 自分には Win32API の GetFileAttribute/SetFileAttribute を呼ぶくらいしか思いつかない
578 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 13:25:25 ] 標準では無いよ gemのWindowsファイルシステム操作ライブラリで見た覚えがあるので適当なの使え
579 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 14:43:45 ] win32-fileにあったと思う
580 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 16:05:39 ] opensslライブラリのマニュアルを読んでいるんですけど www.ruby-lang.org/ja/man/html/OpenSSL_Cipher_Cipher.html pkcs5_keyivgen('str') で生成したキーを取り出すことってできないんでしょうか。
581 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 17:29:42 ] rubyscript2exeが動かなくなってしまいました。非常に困っています。 何か解決策はありませんでしょうか? > rubyscript2exe test.rb Tracing test ... Gathering files... c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/require2lib.rb:60:in `gatherlibs': undefined method `list' for Gem::Specification:Class (NoMethodError) from c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/require2lib.rb:30 from test.rb:1 hellow Couldn't execute this command (rc=256): d:\software\ruby\bin\ruby -r 'enumerator.so' -r 'rubygems/rubygems_version.rb' -r 'rubygems/defaults.rb' -r 'thread.so' -r 'thread.rb' -r 'etc.so' -r 'rbconfig.rb' -r 'rubygems/exceptions.rb' -r 'rubygems/requirement.rb' -r 'rubygems/version.rb' -r 'rubygems/dependency.rb' -r 'rubygems/gem_path_searcher.rb' -r 'rubygems/user_interaction.rb' -r 'rubygems/platform.rb' -r 'rubygems/specification.rb' -r 'rubygems/source_index.rb' -r 'rubygems/builder.rb' -r 'stringio.so' -r 'yaml/error.rb' -r 'syck.so' -r 'yaml/ypath.rb' -r 'yaml/basenode.rb' -r 'yaml/syck.rb' -r 'yaml/tag.rb' -r 'yaml/stream.rb' -r 'yaml/constants.rb' -r 'rational.rb' -r 'date/format.rb' -r 'date.rb' -r 'yaml/rubytypes.rb' -r 'yaml/types.rb' -r 'yaml.rb' -r 'Win32API.so' -r 'rubygems/config_file.rb' -r 'rubygems/custom_require.rb' -r 'fileutils.rb' -r 'rubygems.rb' -r 'ubygems.rb' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1' -I 'd:/software/ruby/lib/ruby/gems/1.8/gems/rubyscript2exe-0.5.3/bin' -I 'd:/software/ruby/lib/ruby/gems/1.8/gems/rubyscript2exe-0.5.3/lib'
582 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 17:30:30 ] -I 'd:/software/ruby/lib/ruby/site_ruby/1.8' -I 'd:/software/ruby/lib/ruby/site_ruby/1.8/i386-msvcrt' -I 'd:/software/ruby/lib/ruby/site_ruby' -I 'd:/software/ruby/lib/ruby/vendor_ruby/1.8' -I 'd:/software/ruby/lib/ruby/vendor_ruby/1.8/i386-msvcrt' -I 'd:/software/ruby/lib/ruby/vendor_ruby' -I 'd:/software/ruby/lib/ruby/1.8' -I 'd:/software/ruby/lib/ruby/1.8/i386-mswin32' -I '.' -I 'd:/home/test/ruby/' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/lib' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/lib' -r 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/require2lib.rb' 'test.rb' Stopped. > ruby --version ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32] > gem --version 1.3.2
583 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 18:55:38 ] undefined method `list' for Gem::Specification:Class (NoMethodError) Gem::Specification.listメソッドはgem 1.3.1になら存在する。 1.3.2では削除されたようだ。 gatherlibsを修正するか、gemコマンドをダウングレードする。 そしてrubyscript2exeの開発元に連絡をする。
584 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 19:26:02 ] >>583 ありがとう。 どうやらそのようですね。RubyGems1.3.2のスレッドでも話題になってたみたいです。 RubyGems 1.3.2 - ruby-talk-google | Google グループ groups.google.com/group/ruby-talk-google/browse_thread/thread/cc65ca7852f2d562 そこで紹介されていた、Ocraというrubyscript2exeみたいなパッカーがあったので試してみています(windowsのみですが) larsch's ocra at master - GitHub github.com/larsch/ocra/tree/master Ocraそこそこコンパクトな上に、起動が早くてよさげです。 rubyscript2exeは今まで何でもうごいてたので、同じようにスクリプトが動くか検証してみます。
585 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 19:28:40 ] x Ocraそこそこコンパクトな上に、起動が早くてよさげです。 o Ocraそこそこコンパクトな上に、exe化したプログラムの起動が早くてよさげです
586 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 23:45:20 ] どうして、ruby -pの後のgsubはレシーバが省略できるのですか? いつも使ってて便利だなあと思ってるけど不思議に思ってます。 ruby -p -i.bak -e'gsub(/hoge/, "fuga")' data.out
587 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 00:17:28 ] >>586 関数的メソッド gsub が呼ばれているだけだ(こいつは $_ をレシーバとして扱う) String#gsub が直接ワンライナー用にいじられて呼ばれているとかそういうわけではない
588 名前:デフォルトの名無しさん [2009/04/25(土) 08:35:56 ] class SomeClass @@message = "call myself Mr.#{@name}!" def initialize(name) @name = name end end このまま@@messageを参照すると、@nameが未定義の段階で定義しているため出力は"call myself Mr.!"となります。 このように後で@nameに値が入ったとき(あるいは変更されたとき) @@messageを参照する段階で@nameを再度当てはめるとしたら、どのように書けばよいでしょうか。
589 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 08:46:15 ] クラス変数を使わない いやわりとマジで 特定のインスタンスの状態に左右されるクラス変数というのは奇妙 特定のインスタンスの変数を参照する大域変数というのはそれは普通インスタンス変数にする というか、@@name を initialize の中で毎回変更してそれを @@message で参照するという形ではダメなん?
590 名前:588 mailto:sage [2009/04/25(土) 09:24:21 ] >>589 ありがとうございます。た、たしかに言われてみたら使い方もちょっとおかしいし、 そもそもクラス変数でやってたのがよくなかったんですね・・・ 試しに@@messageをメッセージを返すインスタンス"メソッド"にしてみたら問題なく置き換えられました。 なお試してみますm(_ _)m
591 名前:デフォルトの名無しさん [2009/04/25(土) 17:51:40 ] はじめまして。困ってます;至急お願いします。 Rubyをはじめようと思うのですがどうすればいいかわかりません。 まず公式HPに行ってもどれをダウンロードすればいいかわかりません。 ソースコード以外に実行ファイルが見当たりません。 何かをインストール等する必要はないのですか? 僕はパソコンは上級者と言ってもいいほどなんでもできるのですが ここまでわけのわからないことは初めてで焦っています。 まずルビーのプログラムを書く段階までのやり方を教えてください。
592 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 17:54:17 ] またそんな玄人的なネタを投下してw
593 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 17:57:30 ] 初心者だから教えてくれ、という意味? それは唯の対処療法で根本的原因の解決ではない。 頭痛がするから薬を使って誤魔化すのと同じこと。 また困った時に同じように薬使ってごまかすのかな。 使い方はそこらへんに結構転がっているよ。 自分の環境構築するのも技術の一つだよ。
594 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:00:46 ] いや、上級者だといってるだろ
595 名前:デフォルトの名無しさん [2009/04/25(土) 18:09:52 ] もしかしてメモ帳で書く、ということですか? エディターみたいなものは公式サイトで配布していないのですか? 他の候補で見ていたC#なら公式サイトでMicrosoft Visual Basic 2008 Express Editionというのが配布されていました。 簡単に作りたかったのでRubyを選んだのですが本当に困っています。 小さいころにHSP(Hot Soup Processor)をやったことがあるのですがそこの公式サイトでもエディターやテストするためのものが公式サイトで配布されていました。 僕は今そのようなものを探しているのですが見当たりません。 そのようなものは存在しないのですか?
596 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:11:17 ] >>591 > ルビーのプログラムを書く段階までのやり方 1.エディタを用意します。なんでもいいです。目的はテキストファイルを作成することです。 例えばMS-DOSに馴染んでいれば、最悪 copy con hello.rb なんてのでも大丈夫です。 2.思う通りのるびーのプログラムを書いたら、その内容をテキストファイルとして保存して下さい。 ※ 上記の2は、書くまでの段階では必要ではありませんので、飛ばしても結構です。 以上です。
597 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:13:16 ] >>596 俺は君が好きだな
598 名前:デフォルトの名無しさん [2009/04/25(土) 18:17:09 ] >>593 さんの書き込みをヒントに「ruby 開発環境」と検索したところ RDEというエディターを見つけました。とりあえず解決しましたので 回答していただいたみなさまありがとうございました。
599 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:21:05 ] IDEがないというのは上級者にとっては最初に焦る事態なのか なるほど
600 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:27:39 ] >>599 俺は20代だけど、周りみてると統合環境から入るやつが大半だった 学生の時分とかね
601 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:28:02 ] つメモ帳 でよかったのか PC上級者は、プログラムは専用アプリで書くものと思いがちってことなのかな 勉強になった
602 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:29:33 ] 時代は巡るねぇ。
603 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:31:58 ] どっちかというと 下地が分からないからIDEなんだと思う。
604 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:41:18 ] 紙に書いてパンチカードで打ってた時代があったとか、知識や想像の範囲外なんだろうな デバッグは全部プリントアウトとか そんなの実際には知らんから、もしかして俺騙されてる?
605 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:45:09 ] プログラム全体が一望できた時代は、デバッグは全部プリントアウトでも良かったし それの方が効率が良かったんだよ 今はテストケース無しでは不可能だろう、そうするとIDEの力を借りる必要が出てくる。 今ではIDEが使えないのでは上級とは言えないだろう。
606 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:49:51 ] 用は IDEしか使えないと IDEを使ってる ではぜんぜん違うということでしょ?
607 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:50:12 ] 「IDEが使えない」と 「IDEがないと何も出来ない」はぜんぜん違うよ。
608 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:50:27 ] >>605 だが待って欲しい それは本当に、まずルビーのプログラムを書く段階まで、に必要な事だろうか ってあんまりこれ引っ張るのもなw
609 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:50:52 ] 全部を知る必要も無いって事でもある
610 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:56:08 ] パンチカードの思いでをちょっと あれは一瞬で行が入れ替えられる、それを活用したデバッグやトラインアドエラー作業はいろいろと面白い効率の高さがあった。 でもね、あれはCOBOLやFORTRANの時代のプログラムが行単位で記述されているから効率がいいんだ。 今の自由文法でそれは可能だろうか?、否ですね。 今の時代には今のやり方があるって事だ。
611 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:56:46 ] 先生! make や rake は IDE に入りますか? あるいは、IDE 足り得ますか?
612 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:00:29 ] >>610 ていうかプログラミングの形態ではなくて、backgroundはどうなっているか を理解しているかどうかの話だと思ってた。
613 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:03:08 ] 背景を追うと、ではどこまで追う気だって話になる、どこかで打ち止めしておかないと、話が進まない。 まあ、中にはC++のように背景無しでは思わぬ罠にはまる、しかもはまっている事に気づいていないなどという恐ろしい言語もあるのですべてとは言わない。
614 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:04:00 ] >>611 IntegratedなEnvironmentでないとIDEとは呼べないと思う。
615 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:05:03 ] >>603 >>606-607 >>612 もちろん、言うまでもなく、そうだろ。 ネタ〜マジの間のどのへんでつきあってるのかわかりにくい流れだな、これ。
616 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:05:48 ] ネタと信じたいと思いつつマジレス、あたりで。
617 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:06:30 ] >>591 つwww.ruby-lang.org/ja/downloads/ 1.Windows版(mswin32、mingw)の場合 どこかでバイナリを配ってる 2.cygwinの場合 同じくバイナリ配られてる 3.Mac OS Xの場合 MacPortで入れればOK 4.Ubuntuの場合 sudo apt-get install ruby 5.Debianの場合 su - apt-get install ruby exit 6.Fedoraなどの場合 su - yum install ruby exit 7.その他Unix系の場合 まずgccやmakeがあることを確認 ソースコードを持ってきて解凍する(やり方はさすがに知ってるだろJK) configureのあるディレクトリにcd ./configure make su make install exit
618 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:23:48 ] >>617 で、どうやってプログラム書くんですか>< って質問だったりするんだなこれが。 解決済みだし、もういいじゃんw
619 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:25:24 ] >>618 初心者スレにはちょっとヤな感じ。自重しよう。
620 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:26:02 ] とりあえず、大体皆が同じ認識を持ってることは分かったから なんか嬉しい。
621 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 21:38:18 ] >>618 1.まず適当なテキストエディタ(Windowsなら極論すればメモ帳でもいいが あとあとつらくなる)を準備しましょう 2.次にこのようなプログラムを書きましょう puts "Hello, world" 3.これを拡張子rbにして保存しましょう(メモ帳の場合はすべてのファイルにしてから 適当な名前.rbと名前欄に入力) 4.次にこのようにコマンドを入力しましょう(カレントディレクトリはさっきの プログラムの場所で、rubyへのパスはすでに通っていると仮定する) ruby さっきのプログラム名 5.すると次のように表示されるでしょう Hello, world これでプログラムが実行できていることがわかります
622 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 03:58:24 ] IDE無しのほうが分かり易いというか、IDEの使い方覚えるのが面倒。 汎用IDEといえばこのあたり? pc12.2ch.net/test/read.cgi/tech/1218959013/ 【Java】NetBeans Part4【Sun】 pc12.2ch.net/test/read.cgi/tech/1238338503/ Eclipse統合M27【Java/C/PHP/Ruby/Python/Perl】 pc12.2ch.net/test/read.cgi/tech/1239945063/ プログラマーがよく使うソフト pc12.2ch.net/test/read.cgi/tech/1191875993/ Emacs Lisp 3 pc12.2ch.net/test/read.cgi/tech/1081517094/ 統合開発環境Eclipseプラグイン開発QA
623 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 07:44:04 ] 「IDEが面倒」と思ってる人に聞きたいんだけど Ruby開発において、それでもやっぱりIDEが役に立つ場面ってある? 何度か手を出そうとはしたんだけど、その度にやる気が出ず挫折している 「IDEのこんな部分が便利」という点があれば教えてほしい
624 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 08:41:18 ] RadRails使っているよ。補完重すぎるし、候補で過ぎて意味ねえ そんなにすごいいいかって言われると、ないよりマシって感じ。てか重い
625 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 08:51:16 ] RadRailsのいいところ ・GUIでデバッグできる。 ・メソッドにカーソル合わせるとドキュメント表示(今は日本語化ける) ・インテリセンスみたいな構文考慮した補完が効く(重い、候補多すぎ) ・ファイル構造をツリー表示 ・rake タスクをGUIで選択実行 他なにかあるかなー。文脈非依存の単語補完とかスニペットはテキストエディタでもあるしな。 基本的には、他のIDEと一緒だと思うけど、 全体的にはまだまだ。とりあえず、IDEほしいという人向け。 Visual StudioとかCodeGear(Borland)みたいなIDE想像したら駄目。 あと、>>624 も言っているけど、静的型言語のIDEみたいな補完じゃない。 インテリセンスとかで高速で補完しまくってガリガリ書いていくのを経験してきた人が使ったら、 たぶんガッカリすると思うよ。 NetBeansはプロジェクトルートに.rb置けないww ので即アンインストールした あと、クリップボード処理がうんこ。まともにコピー、ペーストもできないIDEワロタ めちゃくちゃ軽くて初見はすばらしかったんだけどね
626 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 08:54:36 ] RadRails追加。というか、ほとんどEclipseの機能だと思うけど ・インクリメンタルでメソッド選択してジャンプ ・インクリメンタルにファイル検索して開く ・指定ファイルの指定行に飛ぶブックマーク機能 Aptanaの機能も入れるなら、Aptana Cloudと連携してIDEから一発デプロイとかまあ、あるけどさ (でもどうせデプロイはCapistranoとかで書いてるでしょみなさんは)
627 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 08:56:54 ] NetBeansは、autotest対応はよかったな。 autotest/screenみたいに、エディタの下に色つきで表示出る
628 名前:デフォルトの名無しさん [2009/04/26(日) 22:43:18 ] 1.8.7とVistaHPという環境でコマンドラインからRubyファイルを実行すると pメソッドもprintメソッドも日本語が文字化けします。 起動オプションで -Ks を指定しても文字化けします。 ファイルのエンコーディングはUTF-8ですがSHIFT-JISで保存し直しても文字化けします。 NetBeansでデバッグすると、printでは文字化けしませんがpだと文字化けします。 何が原因でしょうか?
629 名前:ごすけ [2009/04/26(日) 22:59:17 ] こんばんは。質問させてください。 /*引数(自然数)n(<=1000)の入力に対して1~nの間の素数をすべて求めて、 コンソールに表示するプログラムを作成せよ。(ちなみに1は素数ではない)*/ のC言語でのプログラムの作り方を教えてください。ルートは使わず、なるべくfor文で お願いします。
630 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 00:56:22 ] pc12.2ch.net/test/read.cgi/tech/1240226599/ C/C++の宿題片付けます 125代目
631 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 09:54:55 ] >>628 Vistaのことはわかんけど、 >NetBeansでデバッグすると、printでは文字化けしませんがpだと文字化けします。 これはしょうがないんじゃないかな。他の環境でも同じだと思う。 -- hoge.rb -- puts 'ほげ' p 'ほげ' ----------- $ ruby hoge.rb ほげ "¥343¥201¥273¥343¥201¥222" 正確に言うと、これは文字化けではなくて、文字列をバイナリ表記したもの。 p は引数をinspectした結果を表示するけど、日本語を含む文字列だとinspectするとバイナリ表記になってしまう。
632 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 13:32:05 ] array への追加についての質問です。 DBのいくつかのテーブル数分検索し、検索結果を配列に追加したいです。 my_array = [] for table_name in table_names my_array.push = my_func(table_name) end 上記のコードだと、my_func が返す array を、my_array の要素とするので2重の配列になってしまいます。 result = my_array + my_func とすると、 配列の後ろにどんどん要素を追加することができ、これが自分のやりたいことなのですが、 Rubyのリファレンスをみると、array の + は my_array は変更せず、左辺に新しい配列を作成します。 上記の for table_name in table_names は結構なループ量になり、 かつ my_func が返すレコード件数(配列のサイズ)も大きいため、毎回 新しい配列を作って返すのは、コストが高いのではと懸念しています。 そこで下記のようなコードを書きましたが、+ でつなげるのと下記のコードと、 どちらがいいでしょうか? my_array = [] for table_name in table_names result = my_func(table_name) result.each do |val| my_array.push val end end
633 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 13:58:34 ] my_array.concat(my_func(table_name))
634 名前:632 mailto:sage [2009/04/27(月) 14:09:10 ] >>633 ドンピシャです!! どうもありがとうございました。 おなじ Array のマニュアルページに書いてあるのに見逃してしまった。
635 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 15:54:07 ] Singletonをインクルードしたクラスのinstanceメソッドに引数渡せないのって不便くね?
636 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 16:43:27 ] 生成時に渡す引数によってオブジェクトの振る舞いが変化するようなものは そもそも Singleton に向かないってことなんじゃまいか? 色々必要ならそんだけクラス作れよと
637 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 17:01:35 ] instanceに引数が渡せるほうが不安だ。
638 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 04:54:52 ] >>635 Singletonをインクルードしたクラスを生成するメソッドを書けばおk
639 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 13:05:27 ] どこで聞いたらいいのかわからんのですが、ここで聞きます。 Ubuntu 8.0 LTSだと apt-getで入るのが Rubyが1.8.6なのですが、1.8.7が使いたいです。 1.8.7使うには自分でコンパイルするしかないのでしょうか? Rubyスレの方がよかったら誘導してください
640 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 13:09:08 ] すいません、Ubuntu 8.0 LTS → Ubuntu 8.04 LTS です
641 名前:635 mailto:sage [2009/04/28(火) 13:17:57 ] ごちゃごちゃやってたら、頭の中がこんがらがってきた。 結局コンストラクタに引数を渡せるようにしたままsingleton化したい場合は、Singletonモジュールは 使わずに、該当クラスのnewメソッドを複数のインスタンスを生成できないように書いてしまえばいい だけ? とか思ったが、何か根本的に間違ってるような気もするw クラスメソッドとしてのnewは明示的に書けてしまうみたいだけど、その場合自分(クラス)のインス タンスを生成するコードはどうやって書けばいいのかな? newメソッドはインスタンスを返すのが 普通だから、それを生成するコードがどうしても必要だよね?
642 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 13:22:57 ] >>640 自前ビルドでRubyを入れると、他のRubyに依存してるパッケージも全て 自前ビルドするか、パッケージの依存関係をごまかすかしなきゃならない。 どちらにしてもすごく簡単ではないけど大丈夫?
643 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 15:58:25 ] >>641 自己レス。 特定のクラスが(自分の定義中で)自分のインスタンスを生成するには、クラスメソッド(たとえばnew) の中で<自分の名前>.allocateを実行すればいいらしい。(allocate自体はどこからでも呼べる) ただしそのインスタンスをinitializeするには、(自分の定義中にある)他のインスタンスメソッドを 介さなければならない。 なぜなら、<自分の名前>.allocateの戻り値をinstで受け取ったとするとinst.initializeとしたくなるが、 initializeはprivateメソッドなのでレシーバ省略形式でしか呼び出せず、レシーバ省略形式で呼び出す には、(クラスメソッドから呼び出せる)publicなインスタンスメソッドの中で呼び出すしかないから。
644 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 18:20:00 ] >>639 >1.8.7使うには自分でコンパイルするしかないのでしょうか? うんそう。 UbuntsuってDebian系だよね。DebianだとRubyが複数のパッケージに分散していてインストールするのがめんどくさいから、 おれが試した時は自前でインストールするほうが簡単だった。 以下おれの方法。rubyのバージョンごとにディレクトリを分けているので、configureするときに--prefixをつけてる(つけなければ/usr/localになる)。 wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p160.tar.bz2 tar xjf ruby-1.8.7-p160.tar.bz2 cd ruby-1.8.7-p160/ sudo mkdir -p /usr/local/ruby/1.8.7-p160 ./configure --prefix=/usr/local/ruby/1.8.7-p160 make sudo make install
645 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:24:22 ] パッチレベルすらディレクトリを分離してるのか。 まあその方が、トラブル時には切り分けやすいか…。
646 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:27:09 ] ディスクがたくさんあっていい感じだ
647 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:29:02 ] 文字列、配列、ハッシュの初期化の書き方についての質問です。 以下のそれぞれのペアは、等価?(どっちで書いても良い?) my_string = "" my_string = String.new my_array = [] my_array = Array.new my_hash = {} my_hash = Hash.new
648 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:35:46 ] >>647 Yes
649 名前:647 mailto:sage [2009/04/28(火) 19:37:17 ] >>648 どうもありがとうございます!
650 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 22:30:36 ] >>643 inst.instance_eval{initialize} じゃダメ?
651 名前:デフォルトの名無しさん [2009/04/28(火) 22:35:42 ] さすが マーチンファウラーお気に入りのベストパートナー 世界に羽ばたく Ruby on Railsオフショアアジャイル開発 www.tech-arts.co.jp/news-and-topics/press-releases/20090427.html
652 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 23:17:58 ] てか self.class.new でダメなことって少ないよな
653 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 00:17:47 ] 今まで数年間、テキストエディタのみでプログラミングしていたのですが そろそろIDEにも、試しに手を出してみようかと考えています Rubyに対応したIDEを探してみると、RDEの他には Aptana Rails、NetBeans、Eclipse DLTKが見つかったのですが これらの中で「これがオススメ」というものはありますか? シンプルで理解が難しくないものを求めているのですが……
654 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 00:44:01 ] 特にありません
655 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 01:02:37 ] テキストエディタのみとかおれには考えられん 環境がなかった昔はもちろんやってたけどな
656 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 01:23:39 ] 俺は今のところ IDE なしでもそんな不便はしてないかな Cygwin + bash + vim + rake + 自作ツールっていう構成だけど ただ、やってるうちに Rakefile がでっかくなっていくけどw
657 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 02:02:23 ] テキストエディタのみって言っても UNIX環境の支援のもとに emacs やら vim 使ってるのと Windowsでメモ帳とか使ってるのとでは全然違うよな
658 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 04:01:50 ] emacs + αで十分IDEチック
659 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 06:02:34 ] メモ帳はまさにメモ帳であって。 emacsはフルカスタマイズ可能!ってか。 変態的な操作方法をもちょっと控えて、GUIベースのタブでバッファを切り替えるような ものなら、もうちょっとご新規さんにもアピールするかと思うんだが。
660 名前:639 mailto:sage [2009/04/29(水) 09:15:30 ] >>642 そうなのかー。 >>644 バージョンごとにやってるんですか。うおすごいですね。 コンパイル自体は大変ではないみたいですね。 問題はバージョンアップかあ。 aptとかで入れれたらうpでとも自動化できるのになあ っと思って検索していたら、8.10のパッケージを使って1.8.7を入れる方法を見つけました。 最近のUbuntu では Ruby 1.8.7が標準みたいですね 簡単そうなので、まずは、これから試してみたいと思います。 Installing ruby 1.8.7 (and guessnet) on Hardy ? vanutsteen.nl => nerds only www.vanutsteen.nl/2008/06/29/installing-ruby-187-and-guessnet-on-hardy/ スレ違いそうな話題にレスしていただきありがとうございました。 とういか、Ubuntuスレに投下してたつもりでしたw
661 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 09:26:19 ] >>659 (EmacsをEmacsとして理解できないものには)Emacsを使うのは難しい。 Aquamacsだとタブが出るけどな。
662 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 11:35:56 ] >>643 たぶん普通は require 'singleton' class C include Singleton def initialize @i = nil end attr_accessor :i def self.init(i) c = self.instance c.i = 1 c end end p C.instance #=> #<C:0xb7d853e4 @i=nil> p C.init(1) #=> #<C:0xb7d853e4 @i=1> p C.instance #=> #<C:0xb7d853e4 @i=1>
663 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 12:08:41 ] >>662 それを許すんならもはや定数に代入した普通のオブジェクトと変わらない気が
664 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 12:24:00 ] ていうか、読みにくい
665 名前:635 mailto:sage [2009/04/29(水) 15:10:47 ] みなさんレスありがとうございます。 >>650 > >>643 > inst.instance_eval{initialize} じゃダメ? それでよさそうですね。初めて知りました。 もともと>>635 と書いたのは、「引数を渡したいのは初期化の時だけだが、一度instanceしてから 値を渡すのが面倒」というのがあったからなので、>>662 のやり方が簡単で良さそうです。 >>662 の中の > c.i = 1 は > c.i = i ですよね。 結局自分もsingletonにする意味あんまりないなと思い始めてしまってますが、最初の動機がたいした ことじゃなかったということですね。
666 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 15:44:41 ] ruby-pg-0.8.0ってPGresultのresultって使えますか? num_tuplesとかは正常なのにresultとかstatusだとNoMethodErrorになります。 今までずっと古いやつを使っていたんですがメソッド名が変わったりとかしたんですかね?
667 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 18:01:56 ] >>666 おお!俺も数日前にそれで困ってましたw 俺がしたこと 1) requireの置き換え require "pg" # require "postgres" 2) resultメソッドの置き換え res.map {|rowmap| res.fields.map {|f| rowmap[f]}} # return res.result resultが無くなったのか、名前が変わったのかは知りません。 statusのほうは使ったことがありませんのであしからず。
668 名前:666 mailto:sage [2009/04/29(水) 18:39:50 ] >>667 ありがとうございます!取得できるようになりました! 根本的な原因は気になりますが、 とりあえず動くようになったのでよしとします。
669 名前:653 mailto:sage [2009/04/29(水) 18:58:20 ] いろいろなご意見ありがとうございます! 基本的にエディタ派の方が多いようですね ただ、655さんの環境も気になります >>657 Windows環境で、主にNotepad++を使ってスクリプトを書いております コマンドライン環境はNYAOS+GnuWin32の構成です
670 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 12:34:03 ] >>669 >>625-627 から上の流れも参照してくれ
671 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 18:29:51 ] VRFormってどこにあるの?rubyのフォルダを検索しても見つからない。 ほとんどのコントロールはvrcontrol.rbにあるのに。
672 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 09:25:00 ] Array同士を簡単に同じでない行を調べることってできませんでしょうか? a - a2みたいだと、差分という感じではない気がします。 通常のdiffツールだと、出力結果が上から調べるので順番に依存してしまいます(´・ω・`)
673 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 09:26:40 ] >>672 あああああ、 pp (a2 - a) pp (a - a2) とお互い引けば、いいのかw 書いて気づいた 同じでない行ではあるか
674 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 09:44:33 ] メソッド呼び出しにおいて、メソッド名と引数を囲む括弧の間には、 スペースを入れないことをおすすめする。
675 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 17:16:25 ] 排他的論理和は (a|a2) - (a&a2) でも
676 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 17:32:42 ] エクスクルゥーシブー・オアッ!!
677 名前:デフォルトの名無しさん [2009/05/02(土) 19:53:16 ] 勉強始めたらいきなりこんなもん見つけたんですけど。 バグでしょ? #ruby 1.8.7p72 mswin32 module A def f() print "test ok!\n" end end #include A A::f() test.rb:7: undefined method `f' for A:Module (NoMethodError) ちゃうか〜
678 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 19:57:48 ] >>677 ttp://www.ruby-lang.org/ja/man/html/Module.html#module_function 素のままだと「Aというオブジェクト」がもってるメソッドじゃないし。
679 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 19:58:24 ] Rubyに限らないけど、まず自分のプログラムに問題がないか考えた方がいいよ。 2〜3回くらい恥をかけば直るんだけどね。最初からかかないことにこしたことはない。
680 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 19:59:58 ] Rubyのめんどくさいところにいきなりぶつかるセンスは賞賛に値すると思う
681 名前:デフォルトの名無しさん [2009/05/02(土) 20:17:12 ] そっか、バグじゃないかぁ コメントアウトしてあるinclue Aを生かすと、動作しちゃうんですけど。 変じゃね?
682 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 20:19:44 ] >>681 どうしてコメントをはずすの? なんのためにコメントをはずすの?
683 名前:677 [2009/05/02(土) 20:32:47 ] なんのためにといわれても... テストプログラムだからいろんなケースを比較して、 変じゃないかなと
684 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 20:39:47 ] つまり、意味もわからずincludeしたりしなかったりを試していると。
685 名前:677 [2009/05/02(土) 20:56:15 ] print Math::PIは動くね。 もっとも、Mathはrubyインタープリターによって 特別待遇を受けているだろうから、あまり比較にはならんだろうけど。
686 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 21:18:41 ] >>685 >>681 は目の付け所いいなと思ったけど・・・ Module#module_functionは読んだ?
687 名前:677 [2009/05/02(土) 21:37:08 ] なるほど、すくなくとも仕様であることは、理解しました。 どうもありがとうございます。 しかし、なんとも不可解に見える仕様。でも、理由があるんでしょう。 勉強します。
688 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 21:37:55 ] >>683 ちゃんと理由を考えながらテストしないと、あまり意味がないぞ 結論から言うと理解を間違えている A::f() の形でメソッドを呼びたいなら、次のような方法を使うべき (他にも特異クラスを使った方法とかあるけど、ここでは省略) 1. def A.f() end 2. module A module_function def f() end end
689 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 22:54:31 ] module_functionというのは知らなかったので試してみた。 折角なので張っておく。 これで>>677 の疑問も解けるとよいけど。 irb(main):001:0> module M irb(main):002:1> def self.f() [:module, self] end irb(main):003:1> def f() [:instance, self] end irb(main):004:1> module_function irb(main):005:1> def mf; [:module_function, self] end irb(main):006:1> end irb(main):007:0> class C irb(main):008:1> include M irb(main):009:1> def cmf() mf end irb(main):010:1> end irb(main):011:0> c = C.new => #<C:0x28de620> irb(main):013:0* M.f => [:module, M] irb(main):014:0> C.f NoMethodError: undefined method `f' for C:Class irb(main):015:0> c.f => [:instance, #<C:0x28de620>] irb(main):016:0> M.mf => [:module_function, M] irb(main):017:0> C.mf NoMethodError: undefined method `mf' for C:Class irb(main):018:0> c.mf NoMethodError: private method `mf' called for #<C:0x28de620> irb(main):019:0> c.cmf => [:module_function, #<C:0x28de620>] irb(main):020:0> include M => Object irb(main):021:0> mf => [:module_function, main]
690 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 23:12:33 ] さっきのを書いている間に生じた疑問がひとつ。 親クラスのクラスメソッドは継承されるけど、 インクルードしたモジュールのクラスメソッド(?)は継承されない。 module_functionのクラスメソッド側もやはり同じ。 いったいどういう理由でこうなっているの? irb(main):001:0> module M irb(main):002:1> def self.f() [:module, self] end irb(main):003:1> module_function irb(main):004:1> def mf() [:module_function, self] end irb(main):005:1> end irb(main):006:0> class C0 irb(main):007:1> def self.cf() [:class, self] end irb(main):008:1> end irb(main):009:0> class C < C0; include M end irb(main):010:0> C.f NoMethodError: undefined method `f' for C:Class irb(main):011:0> C.cf => [:class, C] irb(main):012:0> C.mf NoMethodError: undefined method `mf' for C:Class irb(main):013:0> C.new.mf NoMethodError: private method `mf' called for #<C:0x28d636c>
691 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 08:53:23 ] 実はrubyにはクラス(モジュール)メソッドという仕組みはなくて、クラスに定義された 特異メソッドが他の言語のクラスメソッドと同じように使えるだけ(と思ってる) クラスの継承で特異メソッドが継承され、includeでは無視されるのは仕様としか 大体「クラスメソッド」として使うんだから「クラス名.メソッド名(引数)」の クラス名にはメソッドが定義されているクラスを使うべきだろう
692 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 13:01:17 ] 継承してないから継承されない じゃ駄目かね
693 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 13:25:37 ] Mix-inてのは親子関係が木構造になるように制限をした多重継承だと 理解していたんだけど、Rubyのモジュールはちょっと違うということかな。 上のコードでいうと、c is_a M だけど C is_a M ではなかったから、一瞬 そういうものかと思ったものの、 C is_a C0 というわけでもなかったぜ。 うーん、いまいち腑に落ちないな。
694 名前:デフォルトの名無しさん [2009/05/03(日) 20:27:14 ] >>690 メソッドを継承すると遮蔽定義によって、メソッドの動作を変更できてしまう からじゃね? モジュールは多重にインクルードできるから、継承経路によって、 振る舞いが変わる可能性があるので、そういう仕様になってるんじゃねえかなぁ よくわからんけど
695 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 21:57:18 ] >>690 >親クラスのクラスメソッドは継承されるけど、 >インクルードしたモジュールのクラスメソッド(?)は継承されない。 >module_functionのクラスメソッド側もやはり同じ。 >いったいどういう理由でこうなっているの? そういう仕様だから。 もちょっというと、includeはメタクラスには影響を与えないから。 自分で調べるなら「Ruby クラス階層図」でぐぐるといいかも。
696 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 22:56:40 ] あの辺の理論はこんがらがる Class.class => Classって辺りで混乱が最高潮
697 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 23:53:39 ] 弾幕シューティングのやり過ぎで >>690-691 の irb が、全部敵弾に見える
698 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 00:47:42 ] >>697 の気持ちは残念ながらわかってやれないが 整形されてないとここまで読む気が失せるものだと再認識させられた
699 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 00:51:52 ] Linux 版のデフォルト設定の irb は死ぬほど見づらい デフォルトで行番号表示つけるならもっと履歴を使いやすくしろ っていうか irb で出る例外の 99 パーセントは直前行だろ需要考えろよ
700 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 00:58:40 ] そういや、irb使ってるとき、ついシェル感覚で !10 とかタイプ してしまう。そして => false という出力をみてはじめて気付く。 !p => true とやってしまったときは、何がおきたか一瞬わからなかった。
701 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 02:42:13 ] wirbleかutility_belt使ったらどうだろう。 utility_beltはWindowsだとダメポだったけど
702 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 11:21:11 ] ~/.irbrcに最低これくらいは書いとくよね # vim:ft=ruby require 'irb/completion' __history__ = File.expand_path('~/.irb_history') File.foreach(__history__) {|line| Readline::HISTORY.push(line.chomp) } END { File.open(__history__, 'w') {|f| f.puts Readline::HISTORY.to_a.join("\n") } } IRB.conf[:PROMPT_MODE] = :SIMPLE
703 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 11:34:09 ] あーいるよな、デフォルト設定の話してるときに「カスタマイズすればいい」とか脳のとろけた話する奴
704 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 12:06:20 ] もんだいはどちらがコストが低いかと言う話になる。 この場合、カスタマイズの例を実際に >>702 が出してくれたので、 irb本体に手を入れるよりよほど簡単である。 許されてもよいのではないか。 RubyGemsで一発で解決することに対して、数行のモンキーパッチで解決するならまだしも、 長々とスクリプトを書くのであれば、どちらがコストが低いかは自明
705 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 12:20:13 ] 自演乙
706 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 14:09:22 ] まあそのへんは果てしなくどうでもいい
707 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 14:53:41 ] 自分用のスクリプトで引数にキーワードハッシュでも文字列ハッシュでも通常引数でも動作するようにしたり クラスメソッドでparseみたいな総合一連動作メソッドを作りまくったりしてると YAGNIということばを思い出す オチはとくにない
708 名前:デフォルトの名無しさん [2009/05/04(月) 17:18:06 ] 標準入力から読み込んだ画像を表示するビューアを探しているのですが、探す暇もない(面倒)なので 自分で簡単なビューアを作ろうとruby-gtk2のリファレンス読んでいたのですが... (まあこんな感じ cat image.jpg | imageviewer) Gtk::Imageをざっと目を通したところ、画像ファイルの名前を指定するようですが $stdin.read とか指定できませんかね?
709 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 17:50:50 ] あのへんはRuby関係ないからなー
710 名前:デフォルトの名無しさん [2009/05/04(月) 17:55:29 ] 708だけど、imagemagickで実現できたわ(^^ $ cat image.jpg | display でおk。 まあimagemagickも/tmp/magick-Xxxxのような一時ファイルを作成しているから 同じようにすればいいのかな。。
711 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 18:35:20 ] >>709 2ch は、7割が脱線で出来ています。
712 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 20:05:28 ] >>708 前に画像ビューア作ってたとき、漏れはこんな感じで PixbufLoaderとcairo使ってごにょごにょやってた require "gtk2" ploader = Gdk::PixbufLoader.new ploader.write($stdin.read) ploader.close drawing_area = Gtk::DrawingArea.new window = Gtk::Window.new window.signal_connect("destroy") do Gtk.main_quit false end drawing_area.signal_connect("expose-event") do |w, e| context = w.window.create_cairo_context context.save do context.set_source_pixbuf(ploader.pixbuf) context.paint end true end window.add(drawing_area) window.show_all Gtk.main
713 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 20:29:24 ] なんでRubyでそういうの作ろうと思うのかね もしかしてRubyしか使えないとか?
714 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 20:34:41 ] Rubyからアクセスすれば簡単手軽に作れるからだろ 実際問題として簡単でも手軽でもないような気もするがまあそれはそれで
715 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 20:41:59 ] 楽だから
716 名前:デフォルトの名無しさん [2009/05/04(月) 20:44:45 ] Rubyで書くと おちんちんきもちいいお(´;ω;`) だから
717 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 22:25:51 ] 708でも712でも無いけど、どうしても速度が欲しければjavaかCで書く でも普段はそんなん必要ないから楽ちんなrubyで書く >>713 なら何で書くのさ?アセンブラ?まさかマシン語とか?
718 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 00:39:46 ] vistaのローカルにいれているRubyの1.86を 1.9xにアップグレードしたいのですが インスト方法どこかに書いてありますか?
719 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 00:58:12 ] それはアップグレードではなくアンインストール後の新規インストールになるな
720 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 01:18:23 ] >>718 あなたは、1.9x を使う要件を満たしません。 1.8x を使い続けてください。
721 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 01:20:10 ] まだヘソ曲げてんのかよw
722 名前:718 mailto:sage [2009/05/05(火) 01:57:45 ] できました。 1.86アンインスト ↓ 1.9x解凍、C:\に置く ↓ windowsのシステム環境変数書き換え でしたね、できました。 複数バージョン置けたんですかね。 記法が変わりすぎで1.9xの中心にしか 覚えませんが。。
723 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 16:05:42 ] RDEを使いたいと考えて、インストールして、実行してるんだけど 以下のコードを書いたらエラーっぽいメッセージがRDEから出でる。 ---------------------- a = [] a.each do |x| x. ---------------------- メッセージ Access violation ta address 004B0137 in module 'rde.exe'.Read of address 00000015. x.の"."を打ったところで出るので、オブジェクトのメソッドを取得しようとして失敗しでもしてるのだろうか? エラーメッセージをとりあえず無視してるのだけど、気味が悪いので、対策知ってる人がいたら教えてください。
724 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 19:19:30 ] || 時刻1 | 時刻2 | 時刻3 | … ------------------------------ 分類1 || d_1_1 | d_1_2 | d_1_3 | 分類2 || d_2_1 | d_2_2 | d_2_3 | 分類3 : というスプレッドシートっぽい概念がしっくり来るデータがあります (実際は2系統が直接関連付けられてないバラバラなハッシュです) データ.category("分類1") とすると [d1_1, d1_2, d1_3, ...] というようにす
725 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 19:21:48 ] …悩んでたら途中で送っちゃった こんなごっつい構造のデータでなくてもいいような気がさっきからずっとしてるので とりあえずキャンセルしますごめんね
726 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 19:51:04 ] キャンセル吹いたw
727 名前:受付嬢 mailto:sage [2009/05/05(火) 21:45:30 ] また、いらしてください
728 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 22:36:29 ] 以前から不思議だったんだが RDEはなぜこれほどまでにバグだらけなのだろう 何か理由があるのだろうか
729 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 22:39:43 ] マジレスすると玄人が使わないからバグ報告が少ないとかじゃないか
730 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 22:53:24 ] どこからかだったか忘れたけど require 'irb/completion' require 'irb/ext/save-history' IRB.conf[:SAVE_HISTORY] = 99999 IRB.conf[:PROMPT_MODE] = :XMP require 'pathname' require 'fileutils' require 'uri' require 'pp'
731 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 22:55:50 ] 使われない→バグが取れない→使われない・・・・の 負のスパイラルに陥ってる可能性が
732 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 23:31:59 ] 剰余の挙動が意味不明で躓きそう 0xcc.net/blog/archives/000083.html こんなもんなんすか?
733 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 23:50:54 ] >>732 スレタイのRuby初心者となんの関係もない話題だが、 Division and Modulus for Computer Scientists でも読んでみたら?
734 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 00:55:50 ] >>733 ttp://research.microsoft.com/en-us/um/people/daan/download/papers/divmodnote-letter.pdf#search=%27Division%20and%20Modulus%20for%20Computer%20Scientists%27 Floored divisionってくだりですね。 剰余と除数の符号が揃うまで 試行する。。なるほど。。 Web業界とはいえ企画職で 文系には小一時間かかりました(笑 ありがとうございます。
735 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 07:14:15 ] >>732 おいおいスクリプト言語ぜいが全然周りと違ってて吹いた。 下手するとハマるね、これは。 こういうのって何かで規定されてないのかね…。 AA化してみた 負の剰余 C Java PHP Emacs Ruby Python Perl (GCC (Sun JDK 4.3.10 22.0.50.2 1.8.2 2.3.5 5.8.4 3.3.5) 1.5.0_05) -16 -3 % 5 -3 -3 -3 -3 2 2 2 . 3 % -5 3 3 3 3 -2 -2 -2 -3 % -5 -3 -3 -3 -3 -3 -3 -3 こんなプログラムはいやだ: 負の剰余 - bkブログ 0xcc.net/blog/archives/000083.html
736 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 08:03:39 ] 個人的にはスクリプト言語勢の振る舞いがしっくり来るなあ。 しかし数学的な定義はないのか?ありそうだが。
737 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 08:16:14 ] 定義されてるよ。 「 A mod B は "AをBで割った余り"」だから「B と商 x をかけて剰余を足すと A に戻る」でいいよな? -3 mod 5 = -3 だとする場合 (C言語) 5 と 商 0 をかけて剰余 -3 を足すと 5 * 0 + (-3) = -3 に戻る…正解 -3 mod 5 = 2 だとする場合 (スクリプト言語) 5 と 商 -1 をかけて剰余 2 を足すと 5 * (-1) + 2 = -3 に戻る…正解 ということで、そもそも2通りあるから、「どっちでもいい」。 手計算の世界では「剰余は商より小さい正の整数」という条件がついてたりするんだけど (「10割る3」は「商3余り1」であるべきで、「商4余り-2」ではないと習ったはず) C言語は「割られる数が負なら絶対値で計算して結果を負に変換する」という流儀に従ってる。 まあ、剰余に関しては言語のマニュアル必ず読めって感じだな。
738 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 08:41:01 ] CやC++なんかの仕様では 「割る数と割られる数の両方が正である場合は商と剰余は必ず正であるが、 少なくともどちらかが負である場合は定義しないので処理系が得意なように作れ」 とかヤな感じに丸投げなことが書いてあったはず
739 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 08:50:02 ] >>738 CやC++の場合は、コンパイラが、「俺は知ったこっちゃねぇ。CPUに任せる」という コード生成ができるという利点がある。
740 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 08:57:32 ] ってことは正確を期したいならどんな言語使うにせよ 正負の確認処理を挟むべきってことか
741 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 09:00:49 ] 負の除算は意図をもって行われるべきだってことだね まあ、コンピュータにおける除算自体がそもそも日常視点では怪しさのカタマリだから慎重になるべきなんだけどさ
742 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 09:02:23 ] >>740 確認したってどうせ一つしか結果は出てこないんだから、 それなら最初から自分で関数組んだ方がw
743 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 09:09:01 ] 一般的用途においては割る数と割られる数の両方を事前に絶対値とって使うべきかね 剰余を使う機会で負になるのはたいてい割られる数だし
744 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 09:26:39 ] >>723 hpcgi2.nifty.com/sakazuki/forum/wwwforum.cgi?id=1&az=thread&number=250 自分の場合、ここを参考にver1.0.1をインストールした後にver1.1.1を上書きインストールしたら エラーが出なくなった。
745 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 10:09:29 ] >>744 ありがと! 足りないファイルを1.0.1からコピーしたらエラーでなくなったよ
746 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 10:23:58 ] >>735 >>736 数学的にどうこうってのは737の書いたとおりで en.wikipedia.org/wiki/Modulo_operation に、いろんなプログラミング言語でどっちなのかまとめている表があるよ。 両方持ってる奴もあるんだなw
747 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 17:37:44 ] rspec 使って遊んでます 「大量のファイルやら外部参照やらがあり、きちんと動作することが現状 おおむねわかりきってるひとまとまりの部分のテスト」 が 「今テストしたい部分を繰り返しテストして試す」 という行為にちょっとジャマ(処理に時間かかるし、ファイルアクセスがなんとなく無駄)です if false # 終わったので一旦スルー … end で囲うというのも考えたんですが、なんかこうスマートな考え方はないもんでしょうか?
748 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 18:02:36 ] >>747 つ pending 外部と接続する部分は、mockがうまく利用できる形に持っていくのもよい。
749 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 18:38:14 ] >>747 スペックファイルを分割すればいいのでは?
750 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 18:44:56 ] ネットからファイルを取得する処理のあるスクリプトなんかは困るよね specコマンド連打するたびにGETが大量に起こったり
751 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:25:25 ] そんなの、specファイルの中でメソッド再定義すればいいじゃん サーバへアクセスしてる部分を事前に保存しておいたローカルのファイルを読むように書き換えればいい
752 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:32:53 ] specファイルの中でオリジナル書き換えたらオリジナルのテストになんねえよ
753 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:35:55 ] なんという正論
754 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:39:41 ] >>752 そのメソッドをテストするときだけオリジナルの動作になれば問題ないだろ html = $TEST_HOGE ? File.read("local.html") : open(uri).read
755 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:43:27 ] 「実際にネットワークからモノを取ってくるオブジェクトX」自体 のテストではネットワークを使わざるをえないが、それのテストが 十分出来ているなら、Xの利用者をテストする際には、Xはmockで 代用できる。
756 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:50:49 ] >>754 実質的な動作は同じだしな テストできないで終わるよりずっとマシ
757 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:12:53 ] >>754 だからこうするんだってば def get(uri) return uri.read end ↓ def get(uri) return File.read('local.html') end
758 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:21:04 ] >>757 微妙・・・ テスト内の複合バグとかさくさく作り込みそうに見える。 元のコードがみんなシンプルなものならいいかもしれないけど。 mockとかstubってのはそういう書き換えをしなくていいためにあるんじゃないの? ttp://www.ibm.com/developerworks/jp/web/library/wa-mockrails/ とか ttp://d.hatena.ne.jp/takihiro/20081023/1224762895 とか読んでも全く使い方はわからんかったが
759 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:27:58 ] コストのかかる部分を全部メソッドとして吐き出せるようにクラスを作る そうすればその部分のメソッド定義を書き換えるだけでテストが書きやすい
760 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:30:49 ] インスタンス変数をメソッド内で利用するとテストで条件変えたときに書き換えられないから、 全部引数で渡すようにするのがポイント
761 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:33:50 ] RSpecのテストに対応させてスクリプトを作ると諸記述が2ランクくらい退化するというのはよくある 巷のRSpecの解説は一番大事なことをあえてすっ飛ばしてると思うんだ
762 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:35:00 ] >>759 なるほど >>760 こっちは・・・どうなんだろう。 いずれにせよ、テストしやすい書き方も大事ってことか。
763 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:39:02 ] >>761 describe と before と it と should と eql しか使わせる気がなさそうな説明はいくつか… これしか使わなくてもテストは書けるのでタチが悪い これ以上のことを説明する気がないのならむしろRSpecを使わせないほうが効率も能率も高い
764 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:41:20 ] >>763 なにそのるびま
765 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 21:11:43 ] rspec といえば、あれって「○○と表示されること」をテストするのってどうするん?
766 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 21:40:48 ] >>764 素晴らしい先駆者であるがゆえに失速の影響が… えー、「内部の○○メソッドを今は動作したことにしたい」というカジュアルな用途には、stub! が使えると思われ require 'spec'; require 'open-uri' class Hoge def get(uri); open(uri).read; end def pick_title(uri); get(uri).scan(/<title>(.+?)<\/title>/).to_s; end def main pick_title('www.example.com/ ') end end # ----------------------- describe Hoge do before :all do @hoge = Hoge.new end describe "#main: サーバからHTMLを取得してタイトルを表示する" do it "たいとる!" do @hoge.stub!(:get).and_return('<html><title>たいとる!</title></html>') @hoge.main.should eql('たいとる!') end end end 「@hoge の get メソッドが呼ばれたときは処理を横取りして and_return の引数を代わりに返すようにする」という記述 あんま小難しいこと考えなくていいのでとっても便利
767 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 22:23:06 ] …これはこれで stub! ばかりになりそうw
768 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 03:40:20 ] rspecにはTest::Unitの-nオプションみたいにテストを限定する方法はないの?
769 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 05:45:40 ] >>750 つ FakeWeb 外部URLを偽装するテスト用ライブラリ「FakeWeb」 doruby.kbmj.com/x5r_on_rails/20090427/_URL_FakeWeb_1 MOONGIFT: ≫ Web API/Mashup開発者に必須!オフラインでも外部アクセスをテストできる「FakeWeb」:オープンソースを毎日紹介 www.moongift.jp/2009/04/fakeweb/ まあ、こういうのをスタブ?っちゅーらしいが
770 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 00:15:40 ] str = String.new p str << 84 << 85 << 75 << 65 << 82 << 69 << 84 << 65 #ふー。。。
771 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 11:35:21 ] require 'pstore' h = Hash.new{|h, k| h[k] = Array.new} h[0] << 'a' << 'b' << 'c' PStore.new('_hoge_.pstore').transaction{|pstore| pstore[1] = h} これを実行すると /usr/lib/ruby/1.8/pstore.rb:349:in `dump': can't dump hash with default proc (TypeError) と言われます。 既存のハッシュを「無難な」ハッシュに変換してそれをまた戻す方法とかないもんでしょうか
772 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 11:46:17 ] うわー それじゃデフォルト値つきの配列やハッシュって駄目じゃん 普通の配列やハッシュのつもりで誰がMarshalするかわからないんだし怖くて使えん
773 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 11:48:31 ] hh = Hash[h] ではどう?
774 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 11:51:42 ] >>772 Proc つきのまま外に出すなってことなんだと思う デフォルト値つきのハッシュはデータ製作用の仮形態のみにしておく require 'pstore' def makedata h = Hash.new{|h, k| h[k] = Array.new} h[0] << 'a' << 'b' << 'c' return Hash.new.merge(h) end h = makedata PStore.new('_hoge_.pstore').transaction{|pstore| pstore[1] = h} これなら動作する 開発者側が気を遣えってことなんだろうな 既存の誰かが作った(そしてどこに初期値つきハッシュが使われてるのかよくわからん)データを マーシャル可能な形態に変換する方法は知らん
775 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:01:39 ] >>771 いっそのことYAMLにしてしまうとか require 'pp' require 'yaml' #h = {0 => Array.new} h = Hash.new{|h, k| h[k] = Array.new} h[0] << 'A' << 'B' << 'C' h["mage"] << '100' << 1234.56 << :hage pp h puts y = h.to_yaml puts y puts new_h = YAML.load(y) pp new_h pp h == new_h
776 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:05:25 ] わざわざ PStore するってことはオブジェクトとして一時保管したいのだろう YAML ではどうにもならん気もする
777 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:06:03 ] では、yaml/storeで #!ruby -Ku $KCODE='u' require 'pp' require 'yaml/store' #require 'pstore' h = Hash.new{|h, k| h[k] = Array.new} h[0] << 'a' << 'b' << 'c' YAML::Store.new('_hoge_.pstore').transaction{|pstore| pstore[1] = h}
778 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:06:48 ] あああ、てか、procごと保存して復元したいってことなのか?PStoreってそこまで対応しとるノン?
779 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:11:50 ] Rubyist Magazine - 標準添付ライブラリ紹介 【第 9 回】 PStore jp.rubyist.net/magazine/?0016-BundledLibraries > IO や Proc などの Marshal.dump が出来ないオブジェクトは保存することが出来ませんが、 > Marshal.dump 出来るオブジェクトなら何でも保存できて、Marshal.load 出来るものは何でも読み込めます。 駄目なんすね・・・まあ普通考えたらそうか procで詰まるってことは、後でevalれるコードを格納できるように、 って難しく考えないで、1個1個個別対処しかないんじゃないのかなあ。 復元時にprocを戻すようにというか、Hash.new{|h, k| h[k] = Array.new} 生成して再代入と言うか
780 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:19:55 ] 一応>>774 が答ではあるのだろう 出しっぱなしにならないようにクラス製作者に気をつけてもらうしかなさそうだ デフォルト値の動作が重要な代入可能な配列なんかを提供する場合は Procつき配列をそのまま出すのではなくそういうデフォルト動作をするメソッドを自力で作れと
781 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:22:55 ] めんどいな
782 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 15:34:57 ] class MyHash < Hash def initialize(*args) super {|h, k| h[k] = []} end def marshal_dump Hash.new.update(self) end def marshal_load(data) update(data) end end
783 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 17:43:17 ] マニュアルのとこにちょろっと書いておいてくれるとよかったのにね 「ただし、ブロックは Proc なのでこのままではオブジェクトを Marshal することができません。Hash#merge して下さい」とか
784 名前:753 mailto:sage [2009/05/08(金) 17:49:20 ] >>728 同じ事を考えたんだけどmarshal_loadしたオブジェクトは initializeされてないからdefault_procが再設定されてないのよ h = MyHash.new h[0] << 'a' << 'b' << 'c' h = Marshal.load(Marshal.dump(h)) h[1] << 'a' << 'b' << 'c' #=> undefined method `<<' for nil:NilClass (NoMethodError) initialize以外でdefault_procは設定出来ないしどうしたもんかね
785 名前:784 mailto:sage [2009/05/08(金) 17:51:39 ] 名前欄は無視してくだしあ
786 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 19:52:10 ] >>770 >p str << 84 << 85 << 75 << 65 << 82 << 69 << 84 << 65 これって fusiあな、、?
787 名前:デフォルトの名無しさん [2009/05/08(金) 20:39:17 ] TSUKARETA
788 名前:デフォルトの名無しさん [2009/05/08(金) 20:39:48 ] $ irb1.8 irb(main):001:0> str = String.new => "" irb(main):002:0> p str << 84 << 85 << 75 << 65 << 82 << 69 << 84 << 65 "TUKARETA" => nil irb(main):003:0>
789 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 21:21:55 ] String.new << e は、e.to_s した結果を末尾に追加するべきだと思う
790 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 21:26:18 ] まあ ASCII コードの取り扱いのへんはいろいろシガラミがあってだな
791 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 23:26:20 ] Rubyユーザとは思えない>>772 のレスのせいで初心者が混乱しかねないので、 一応言っとく。 ○デフォルト値はあってもMarshalできる(もちろんpstoreも) h = Hash.new(1) h = Marshal.load(Marshal.dump(h)) p h[:foo] #=> 1 ○ダメなのはdefault_proc h = Hash.new {} Marshal.dump(h) #=> can't dump hash with default proc (TypeError) ○default_procはHash#default=で消せる h = Hash.new {} h.default = nil h = Marshal.load(Marshal.dump(h)) p h #=> {} ○配列にデフォルト値などない a = [] a.default = 1 #=> undefined method `default=' for []:Array (NoMethodError)
792 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 23:31:13 ] >>784 Hash#default_proc=
793 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 01:38:12 ] >>792 このスレでは1.9をデフォと思わないほうがいい。
794 名前:784 mailto:sage [2009/05/09(土) 01:46:48 ] >>792 1.8.7だと undefined method になっちゃう(1.8.8とかで取り込んで欲しいな) てかinitialize呼んじゃってもいいのね def marshal_load(data) update(data) initialize {|h,k| h[k] = Array.new } end # あとアンカも間違えてた ×>>728 ○>>782
795 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 02:43:48 ] asobi.sqweebs.com/learn/1.php Rubyではこんなの、作れないっしょ!
796 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 05:34:28 ] てか、自分でクラス作ってるならこんな面倒なことしなくても 「該当部分の見当つくんだから空のハッシュとマージさせとけ今からやれ」で終了なわけで ソース読むのめんどいくらいの他人様のライブラリを仮定してると思われる以上 そこで「1.9ならできる」というのはいささか的外れな気もする
797 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 07:48:41 ] >>791 こういうのまとめたwikiが欲しいな… RubyのFAQ用のwikiみたいなのってなかったけ?
798 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 08:40:47 ] >>797 マニュアル嫁
799 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 08:43:37 ] >>797 WikiのURLがいつのまにかテンプレから外されてるな どっちも更新少ないから無理もないが ■ちょっと前にできたWiki Ruby 初心者スレッド Hiki starlet.s145.xrea.com/ruby/hiki/ Ruby Portal ruby.morphball.net/portal/
800 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 09:19:06 ] >>791 Ruby 初心者スレッド Hiki - PStore、Marshal関係 starlet.s145.xrea.com/ruby/hiki/index.cgi?PStore 転記しておいた
801 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 09:59:13 ] 質問です オブジェクトが、あるモジュールに含まれるクラス群のインスタンスであるかどうかを 調べる簡単な方法はありますか? 現在、 obj.class.to_s =~ /MyModule/ みたいな判定の仕方をしているのですが、こういうことに正規表現マッチを 使うのも大げさな気がします。もっと簡潔なやり方はないでしょうか。
802 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 10:15:23 ] obj.is_a?(MyModule) で用が済まなくなったらまた来てくれ
803 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 10:30:33 ] >>802 済まないと思う obj = MyModule::KlassA::Sub.new obj = MyModule::KlassB::Sub.new という可能性があるときにたとえば if class_include_klassA(obj) then # obj が MyModule::KlassA::Sub だと期待した処理 elsif class_include_klassB(obj) then # obj が MyModule::KlassB::Sub だと期待した処理 ... というようにしたいのだろう そうすること自体がなんか方向性間違ってるような気もするが
804 名前:801 mailto:sage [2009/05/09(土) 10:52:24 ] >>802 すいません。言葉足らずでした。 MyModule はトップレベルに include されているため、コアクラスもみな is_a? に対し true を返すという状況です。
805 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 10:55:06 ] ん?
806 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 11:05:52 ] >>801 あるモジュールに含まれるクラスのサブクラスのインスタンスの時はどうするの? module Mymod class A # あるモジュールに含まれるクラスのインスタンスか調べるメソッド(仮) def nesting?(mod) ; self.class.name =~ /#{mod}/ ; end # その一 def nesting?(mod) ; Class.nesting.include?(mod) ; end # その二 end end class B < Mymod::A ; end Mymod::A.new.nesting?(Mymod) #=> 0(true)/true B.new.nesting?(Mymod) #=> false/true
807 名前:801 mailto:sage [2009/05/09(土) 11:36:19 ] 皆さんレスありがとうございます。 インターフェースを揃えてそもそも処理を分けないで済む方法で自己解決しました。 お騒がせしました。 >>806 モジュールの外で継承されることが完全に抜け落ちてました(汗) 自分がやりたかったのは Class.nesting を使ってる方です。 勉強になりました。ありがとうございます。
808 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:27:32 ] 質問 my/main.rb my/mod.rb というディレクトリ構成で、main.rb に require 'mod' と書いてあるとします これ、カレントディレクトリがたとえば HOME だったりすると $LOAD_PATH の "." が HOME になって HOME/mod.rb を探してしまって希望通りに動作しませんよね 「自分が存在するディレクトリにある自分用ファイルを require する」ということをさせたい場合の 決まった書き方はありますか?
809 名前:デフォルトの名無しさん [2009/05/09(土) 15:28:32 ] require fine.join(__FILE__, $0)
810 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:34:30 ] >>808 どうするのが定石が知らんが、gemsとかのspecファイルとか見てると、 $:.unshift(File.dirname(__FILE__)) してから、require するか、 require File.join(File.dirname(__FILE__), 'spec_helper.rb') という感じだな。
811 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:37:35 ] >>808 わかりやすいとこで #!/usr/local/bin/ruby -Ku $LOAD_PATH.unshift(File.dirname(File.expand_path(__FILE__))) require 'mod' ... require は引数をフルパスにしても動作保証がなかったはずだし Ruby のめんどくさいとこだな
812 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:42:21 ] そうそう、ファイルを2つに分けただけなのに $LOAD_PATH とかいじらないと動作しないというのはどうにも カレントディレクトリをデフォで追加しようとか考えた奴はお花畑だと思う
813 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:45:13 ] …そこまで言わんでも 1.9 でこっそり追加されてるとかそういうことはないかしら
814 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:55:39 ] まあ、めんどっちいな 何が面倒かっていうと cron とかそういう絶対パスで動作させるような環境にたまたま持っていったときに その cron の内部でだけよくわからんエラーになって露見するのが嫌 「っかしーなー動くよなー mod.rb もあるしなー」と(当該ディレクトリ内で相対パスで)スクリプト動かして首捻るわけだ
815 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 18:03:59 ] rubyに限ったことじゃないような。 Windowsのソフトでも作業ディレクトリ(カレントディレクトリ)をexeと同じにしないと、 まともに動かないのはザラだからな。 何がいいたいかというと、カレントディレクトリ依存とかはプログラマの仕事でもあり、 そうじゃなかったらユーザーが気を配る話でもある。 (Windowsはショートカットだとカレントディレクトリは最初自動で設定してくれるが、 バッチ処理とか、コマンドラインから起動したりするととたんに>>814 みたいなことになるんだよな) まあ、自動的に解決してくれる言語仕様ならそれにこしたことはないけど。 どんな仕様だったらいいものなのかね?
816 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 18:12:25 ] Rubyとずれるが、Windowsでゲーム作って公開したときに、 エクスプローラーから実行すると動かないという意味不明な問い合わせがきてだな、 アドレスバーに直接exeのフルパス打ち込むと、カレントディレクトリがアプリのディレクトリと異なるのでうごかない という現象に遭遇して、 結局、アドホックに"起動直後にexeのディレクトリをカレントディレクトリに設定"などという処理を入れて、 回避したんだよ。 Rubyだったら、最初に起動するスクリプトで Dir.chdir(File.dirname(__FILE__)) なんかだせえw
817 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 20:40:33 ] >>811 > require は引数をフルパスにしても動作保証がなかったはずだし してるよ。
818 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 21:08:02 ] 1.9ならrequire_relativeってのが有る ttp://doc.loveruby.net/refm/api/view/method/Kernel/m/require_relative
819 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 21:58:40 ] 作者がウィンドウズ使ってない弊害だろう。リナックス使ってるのだっけか。
820 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 22:12:14 ] >require_relative いつのまにこんな便利メソッドが! Ruby 1.9.x で追加されたけど、あまり表舞台にあがってないメソッドっていろいろあるよね CHANGELOGとか見返せば分かるのかな
821 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 22:18:07 ] rubyにスパイウェア仕込んでメソッドの呼び出し状況を収集して ruby-lang.orgに送信して使われてないメソッドのプロモーションとかすればいいのに
822 名前:デフォルトの名無しさん [2009/05/09(土) 22:30:06 ] 推奨プラットフォームがLinuxだっけか。
823 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 23:31:32 ] *Supported* なのは唯一Debianのみ。 Supportedの意味はサイト参照。
824 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 01:37:26 ] デビアン使ってない信者は負け組だな。
825 名前:デフォルトの名無しさん [2009/05/10(日) 08:41:33 ] www.infoq.com/jp/news/2007/09/ruby-shoes のサンプルコードの一文 l = text "0" のtextとはどういう意味でしょうか?
826 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 09:03:25 ] l = text("0") メソッド text に引数 "0" を渡してるだけ スニペットってことはモジュール使用例の一部分だけを抜き出してるからこんな見かけなのだろう
827 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 10:22:26 ] ("0") < オハヨウ!
828 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 13:00:48 ] Rubyの場合、コーディングでの改行は必須なのでしょうか? (言語によっては、改行は実質無視されるものもあります) 例えば、対話環境 irb で $ irb irb(main):001:0> print "Hello world\n" Hello world => nil irb(main):002:0> を $ irb irb(main):001:0> print "Hello world\n" Hello world => nil irb(main):002:0> と書くのは不可でしょうか?
829 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 13:03:26 ] >>828 区切りに改行か ; が必要。 >$ irb irb(main):001:0> print "Hello world\n" Hello world => nil irb(main):002:0> ・・・書かなくていいところまで書くなよw
830 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 13:40:31 ] >>828 irbに対するprint1つじゃ改行もへったくれもないぞ 。
831 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 21:53:32 ] >>828 何の釣りだよw
832 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 12:28:03 ] >>828 ___ ━┓ ___ ━┓ / ― \ ┏┛/ ―\ ┏┛ / (●) \ヽ ・. /ノ (●)\ ・ / (⌒ (●) /. | (●) ⌒)\ /  ̄ヽ__) / | (__ノ ̄ | /´ ___/ \ / | \ \ _ノ | | /´ `\
833 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 19:33:10 ] ファイルの個数を拡張子ごとに数えるもっとシンプルな書き方ないですか? exts = v.inject(Hash.new(0)){|r,x| r[x['Path'][/[^\.]+?$/]] += 1; r } ちなみに、File.extname() を使っていないのはバグがあったからです。
834 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 19:37:40 ] >>833 なんかイラっとくる。いや俺も初心者だけど。vって何?
835 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:01:54 ] counts = Hash.new{|h, k| h[k] = 0} Dir.glob('*').each do |path| next if File.directory?(path) counts[File.extname(path)] += 1 end counts = Hash.new.update(counts)
836 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:02:45 ] extnameとしてくくり出す以外やること無いと思う
837 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:08:30 ] バグなら報告すればいいだろ
838 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:11:34 ] 1.8.7以降だとこうも書けるかな Hash[Dir.entries('.').group_by{|n|File.extname(n)}.map{|k,v|[k,v.size]}]
839 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:11:51 ] 97パーセントくらいまで「ディレクトリを除外しないバグ」だと思う
840 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:17:02 ] 結局>>835 が一番シンプルで一番正確な動きをするというRubyらしい結果に
841 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:24:34 ] まあ人に想像させるというか、空気を読ませる時点で「シンプル」ではないわな。 そういう意味では>>835
842 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:31:55 ] 俺は838の方がいいけどなぁ ま、人それぞれだな
843 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:43:21 ] >>838 はディレクトリ数えるぞ
844 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:45:06 ] >exts = v.inject(Hash.new(0)){|r,x| r[x['Path'][/[^\.]+?$/]] += 1; r } Ruby初心者で疑問なんですが、 injectブロックの|r,x|が何であるかとか、どこでどうやって決めているんですか? 例えばCだと、ヘッダに関数の宣言があってそれを見ればいい訳ですが。
845 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:45:33 ] というか、each 系ブロックに渡すファイル一覧として Dir.entries を使う時点でけっこうアレだ
846 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:48:20 ] >>844 vが何であるかで決まる、と思う
847 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:48:44 ] >>844 ただのブロック用の仮引数(ローカル変数)に過ぎない each do |引数| で x を使うか e を使うかどうするか程度
848 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:49:25 ] > injectブロックの|r,x|が何であるかとか、どこでどうやって決めているんですか? ソースコード的には、yieldに渡す値で決まる。 > 例えばCだと、ヘッダに関数の宣言があってそれを見ればいい訳ですが。 プログラミング時にどうしたらいいか、ということなら、リファレンスマニュアルを見る。
849 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:55:32 ] foreachの方がいいのかと思ったけどDir.foreachだと別に変数用意してやらなかったりしてショボーン
850 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 21:21:15 ] >>844 に挑戦しようとして挫折w a.inject(Hash.new(0)){|r,x| 〜 += 1; r } のinjectで+=1; rってね。これね。 今まで俺もひたすらこういう書き方してきたけど、 injectにおける; r部分はいつももやもやする。
851 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:39:34 ] 最近のruby-1.9.2 headはsolarisでビルドすると Dir.glob("/**/")で死ぬから困る
852 名前:デフォルトの名無しさん [2009/05/12(火) 05:48:28 ] (敢えて聞きます) Rubyの弱点て何ですか? Webで調べても長所しかないので。
853 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 05:52:01 ] > Webで調べても長所しかないので そんなあなたには使えそうもないところです
854 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 06:06:06 ] てか「Ruby 短所|デメリット」あたりで検索すればウンコみたく出てくると思うんだが
855 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 06:37:32 ] 今のRuby自体はそれほど問題ないよね 用途に合わない使い方をすると果てしなく糞だというだけで
856 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 06:45:36 ] Windowsでは使いづらいことが多い。 ユニコードファイル名でファイルアクセスさせてくれ。
857 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 06:50:55 ] 用途に合わない使い方をするから…
858 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 06:51:16 ] Windows使う奴は情弱
859 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 06:53:13 ] Windows上でRuby使う奴はアホ というかrequireが激遅な環境があるのをとっとと改善しろ
860 名前:デフォルトの名無しさん [2009/05/12(火) 07:33:40 ] プログラマにとっても、posix環境を対象とする方が精神的にいいのかもな。 ライブラリなんかを見てもwinのための特別なコードを目にするし。
861 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 07:39:09 ] 異なるOSを跨ぐソフトはどこもそんなもんだと思う Linux <=> FreeBSD <=> Solaris もそれなりに汚い
862 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 09:00:24 ] >>852 858や859のように、Windowsをバカにする人間が一定の割合いることが悪い点 あとは……プリコンパイルができないことぐらいかな
863 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 10:02:09 ] windowsをバカにされてムキムキする奴は情報処理から手を引いた方がいいよ
864 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 10:15:29 ] CUIからアプローチしたWindowsはヘボいという事実を認められない人はいないほうが平和だったりする
865 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 10:20:32 ] WindowsでRuby使う人は言語のためにOS選んでるわけじゃない 逆に特定の言語使うためにプラットフォームを選択しろとか理解しがたい
866 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 10:31:32 ] Windows使いたかったらPython行け
867 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 10:46:12 ] そのへん Java は使いやすいと思う c:\\ とか c:/ とか書いても動くし、/usr/local/hoge みたいなファイルを開くと、 勝手が c: だったら、c:\usr\local\hoge を開いてくれるし。
868 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 11:34:38 ] >>867 同じ事できたよ ruby 1.8.6 (2008-03-03 patchlevel 114) [i386-mswin32] puts File.read('/cygwin/home/myname/test.txt') #=> テキストの内容が出力される
869 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 11:47:27 ] >>851 > 最近のruby-1.9.2 headはsolarisでビルドすると Dir.glob("/**/")で死ぬから困る kwsk
870 名前:852 mailto:sage [2009/05/12(火) 12:59:47 ] なんかRubyって、Winsowsと相性が悪いみたいですね。 というか、Win7が出るのでさらに混沌とするのかな。
871 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:20:10 ] でも個人的には、Windows XPでRuby使ってて>>862 以外に困ったことはないなー 今はパスの問題だってそうそう起きないし (Vistaではまた違うのかもしれないが) >>868 知らなかった……いつから絶対パス指定ができるようになってたんだ
872 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:35:29 ] >>871 > 知らなかった……いつから絶対パス指定ができるようになってたんだ 大昔からできるよ。 そもそもruby内部で/と\を変換したりしてるわけじゃなくて、元々APIレベルでは どちらでもアクセスできる。
873 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:41:07 ] WindowsはPowerShellがあるからな。 Rubyの出番はもうない。
874 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:48:59 ] kogaidan 「ご愁傷さまです。UNIXなどを知ってしまうと、あまりにムカつくことが多いよ。 タダならともかく、Windowsを使うくらいなら、Mac OS XやUbuntuでもいいんじゃないのかな。」
875 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 15:04:25 ] PHP を使えば大丈夫
876 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 20:06:11 ] LinuxのGUIはWindowsのCUIと同じくらいむかつくのは事実
877 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 20:47:02 ] めんどくさかったので spec から書かずに従来どおりにスクリプト作ったら、 ある時期からスクリプトがどんな構造してるのかさっぱしわからなくなった
878 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:09:17 ] >>876 LinuxのGUIはWindowsのCUIと同じくらいオマケ機能と思えばどうということはない
879 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:23:16 ] Fusion楽しめればそれでいい
880 名前:デフォルトの名無しさん [2009/05/12(火) 21:25:46 ] 今日もキューブをまわすお( ^ω^)
881 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:34:26 ] >>871 > 今はパスの問題だってそうそう起きないし ファイル名に♥とか特殊な文字が入ってなきゃおきないけど、問題に直面したら現状回避不可能なのは問題だ。 結局このためだけにPython使ったりとか、悲しいじゃないか。
882 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:43:24 ] というか、なんで Windows で無理して Ruby 使うんだろ。 適材適所という言葉を知らんのじゃないか?
883 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:47:07 ] かといってPowerShellをわざわざ憶えるのはまんどくせ Pythonだって別にベストフィットってわけでもなかろうし
884 名前:デフォルトの名無しさん [2009/05/12(火) 21:51:39 ] だが現役シェルの中でPowerShovelが一番最強!(たぶん・・・)
885 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:52:38 ] そこでIronPythonですよ
886 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:52:47 ] Linux なり何なりをメインに使っていて、たまに Windows を使うというのなら、 他の言語を覚えるのは「まんどくせ」なのだろうが、Windows を使う機会の方 が多いんだったら、Ruby 以外を覚えて使ったほうがいいと思うけどね。
887 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:55:47 ] どのOSでも使えるのがスクリプトのメリットだろ
888 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:57:39 ] > どのOSでも使えるのがスクリプトのメリットだろ > どのOSでも使えるのがスクリプトのメリットだろ > どのOSでも使えるのがスクリプトのメリットだろ > どのOSでも使えるのがスクリプトのメリットだろ
889 名前:デフォルトの名無しさん [2009/05/12(火) 21:59:15 ] ・・・w
890 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:00:19 ] そんなメリットは聞いたことがないわ
891 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:01:14 ] 俺、北千住で聞いたことあるよ
892 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:06:14 ] Windowsしか使わないならVisualBasicがおすすめ VisualStudio,MS-Office,WSH,etcetc VBが役に立たない場所は無い 逆にプラットホーム非依存なら日本語の扱いが楽な言語がいい 個人的にはjava,rubyがおすすめ
893 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:09:12 ] なんでいまさらVB・・・C#でいいじゃん
894 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:11:03 ] 必要があってならともかく無理してまでプラットホーム非依存なんてことを 考える必要なんてないじゃん、という話の流れだと思うけどね。
895 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:11:42 ] コンパイルやらポリシーやらXMLやらでいきなりやる気90%減
896 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:23:04 ] なんかくだらない RubyやPythonやってるのにプラットフォーム気にすること自体ナンセンスだと思う
897 名前:デフォルトの名無しさん [2009/05/12(火) 22:25:16 ] しかし全くプラットフォームを意識せずにプログラミングできるかというと、そうでもない。
898 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:29:44 ] どうせ依存しなけらばならないのなら, より適したものを使おうというのは自然な発想
899 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:44:23 ] >>882 そりゃLinux文化から生まれた言語だし、Windowsが二の次なのは分かってるよ。でも > なんで Windows で無理して Ruby 使うんだろ とか本気で言ってるのか? WindowsユーザーがRubyを好きで、できるだけ楽しくプログラミングしたいと思うのは そんなに奇妙なことなのか?
900 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:49:46 ] 本人が好きで楽しいと思ってるんだったら使えばいいんじゃないの? 滝に打たれる苦行を楽しいと思い、喜んでやる人もいるわけで。 そんなのその人の勝手。 その姿を見て、変なやつ、と思い感想を述べるのは見てる人の勝手。
901 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:55:51 ] compizこそおまけ機能。OSインストールしたら速攻オフだろ、jk >>899 禿堂
902 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 23:46:05 ] 何故にこの流れの中で compiz? 素でわからん。
903 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 23:47:47 ] WindowsでRuby使っているが、ファイル名以外はそんなに困らんような…。 (webアプリはテストだけで、デプロイは動かすLinux鯖だったりするし…) >>899 不用意に煽ってるだけだから、つられなさんな Linux板とかmac板とか見ればわかるけど、不用意にWindowsユーザーを煽るというか、 何故か選民意識みたいなものがあるみたいなのでスルー推奨
904 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 00:14:16 ] >>835 いまさらだけどHash#defaultを使って欲しかったので… path = './' counts = {} counts.default = 0 Dir.foreach(path) do |filename| counts[$1] += 1 if filename =~ /\.([^.]+?)$/ end p counts
905 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 06:21:06 ] 教祖がデビアン使いの時点で選民思想だしなあ。 大多数が使ってるウィンドウズは非サポート。 マクは論外。あそこの教祖は癌らしいから余命わずかでしょ。 javaも漢字コードとか環境依存だからなんとも。おらに買収されちゃったし。
906 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 08:00:00 ] おらって書かれるとオライリーに思える
907 名前:デフォルトの名無しさん [2009/05/13(水) 09:31:48 ] >>884 www.powershovel.co.jp/
908 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 10:56:57 ] >>837 > バグなら報告すればいいだろ redmine.ruby-lang.org/issues/show/1168 これのことかも
909 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 13:33:07 ] rubyなんて所詮は新興宗教の公用語。 教祖の気まぐれで仕様が変わる。 付き合ってらんねー。
910 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:57:37 ] >>909 公開されてから仕様が追加、修正、廃止されなかった言語ってのを挙げてくれよ 今日中で頼む、知名度の低い言語はカンベンな
911 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 15:34:14 ] 909 じゃないけど、 Java の JCP や Python の PEP みたいなのあってもいいかもなーと思うときがある。 個人的に Ruby は不要だけど Rails にはほしいかも。
912 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 15:53:27 ] RCRというのもあったぞ。 今ならredmine.ruby-lang.org経由で[Feature]かな。
913 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 18:48:08 ] rspecで「この describe を一時的にテストから外す」ってできない? 重いテストや遅いテストがあって、そこは一旦外しておきたいんだけれども
914 名前:デフォルトの名無しさん [2009/05/13(水) 19:54:45 ] Rubyは仕様が文書化されておらず、 「ときどき各処理系の開発者がメーリングリストで まつもとさんに確認している状態」(前田氏)という。 またバグか仕様かはまつもと氏にしか分からないこともあり、 「しかも言ってることが時々変わっている(笑)」という。 前田氏は「ソースコードがドキュメントだ。バグも 完全に記述されている」 というまつもと氏のハッカーらしい発言を引用して苦笑いする。 ttp://www.atmarkit.co.jp/news/200809/11/ruby.html
915 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 21:52:36 ] >>913 つ pending と思ったが、example(it)じゃなくてexample group(describe)のほうかぁ。 https://rspec.lighthouseapp.com/projects/5645/tickets/790-add-pending-group-support まだないみたいだねぇ。
916 名前:デフォルトの名無しさん [2009/05/14(木) 01:08:13 ] WinXPでruby1.8.6を使っています。 ファイルを開くときの File.open('out.txt', 'w') {|f| の |f| はどういう意味なのでしょうか? 調べましたが分かりませんでした。
917 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 01:30:07 ] >>916 ブロックの仮引数。 def callback(f) のみたいなもん。
918 名前:デフォルトの名無しさん [2009/05/14(木) 02:19:22 ] >>917 さんきゅう。
919 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 02:28:53 ] いかん・・・Ageてしまった。
920 名前:デフォルトの名無しさん [2009/05/14(木) 03:43:12 ] 質問です。 Rubyでミリ秒単位の値は得られないのでしょうか? ttp://www.namaraii.com/rubytips/ などでも秒までです。 0.01秒単位のストップウォッチはRubyでは無理なのでしょうか?
921 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 04:04:25 ] Time オブジェクトを to_f すればとりあえず用は済むと思われる irb> Time.now.to_f 1242241404.3147 irb> t = Time.now; puts t.strftime("%Y年%m月%d日 %H時%M分%S秒#{t.usec}") 2009年05月14日 04時03分25秒893515 ただ、ごく一般論としては、スクリプトでミリ秒を計るのはあまり意義のあることではないんじゃないかな 1000.times {|n| print "\r残り時間:%3i/1000"%n; $stdout.flush; sleep 0.01 }
922 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 06:40:42 ] 処理系依存だしなあ。厳密じゃないし。
923 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 08:53:51 ] かなりどうでもいいんだけども、個々のデータ data の内容を適切にまとめてあるハッシュ results があって、 それに新規の key => value を1ペア追加するてきとーなメソッドを作りたいんよ def new(data) … return {key => value} end results.update(new(data)) と def add_to(h, data) … h[key] = value end add_to(result, data) ってどっちがフツーっぽいかな
924 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 09:01:06 ] そもそも change_obj(obj, data) はあまり好きじゃない obj = obj + scan_new(data) の返り値再代入(に準ずるように見える処理)が好みだ ということで前者おすすめ キーを指定する形式に比べたら明らかに処理が遅いはずだが気にしたら駄目だ
925 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 09:25:25 ] resultsをハッシュじゃなくResultsとか新しいクラスにしちゃって Results#[]=でペア追加するのがRubyっぽい気がする 使うときにはto_hash
926 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 11:45:23 ] 多少のことではそういうことをしなくて済むように組み込みコレクションが機能的なのがRubyのいいとこなんじゃないのか や、もしかしたらあちこちで使い倒されまくるハッシュでクラスにするのが妥当なのかもしれないが、 普通はハッシュで済むならハッシュのままだろ
927 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 12:45:57 ] ini.path = "c:/test" p ini.path を内部的に ini.write("settings", "path", "c:/test") p ini.read("settings", "path") に置き換えるようなのって出来ますかね。 メソッド名がなかったらコールバック的に呼ばれる機能があったようななかったような。
928 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:25:53 ] そう動作するように書けばいいじゃん def path=(s) write('settings', 'path', s) end def path read('settings', 'path') end
929 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:29:20 ] > メソッド名がなかったらコールバック的に呼ばれる機能があったようななかったような。 method_missing
930 名前:デフォルトの名無しさん [2009/05/14(木) 13:35:23 ] WinXPでruby1.8.6を使っています。 文字列中の『:』(コロン)の扱いで質問です。 tag0 = "<parm xmlns="ruby_xyz ">\n" を実行したときコロンの箇所で syntax error, unexpected tIDENTIFIER, expecting $end というエラーが出ます。どうしたらよいでしょうか? 目的はtag0と他の文字列Aを組み合わせてできる文字列Bの生成です。
931 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:43:14 ] >>921-922 どうも。一応は出来るみたいですね。 ただ、Javaでも他の言語でも、ミリ秒計測は普通にできるものかと思っていましたので。
932 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:50:01 ] > 文字列中の『:』(コロン)の扱いで質問です。 違います どの解説にもこれのやり方は載ってるはずなんだが、載ってない解説とかがあったら即晒せ ダブルクォート「"」を含む文字列を表現するには " の直前に \ を置く tag0 = "<parm xmlns=\"ruby_xyz\ ">\n"
933 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:52:55 ] >>930 初心者らしい質問でなぜか安心した エスケープしない限り「"」が次に出た所で文字列の終わりとみなされるので tag0 = "<parm xmlns="ruby_xyz ">\n" と書くと, tag0 = "<parm xmlns=" ruby_xyz ">\n" と書いてるのと大差無い エスケープして書くならこうすればいい tag0 = "<parm xmlns=\"ruby_xyz\ ">\n" 「"」をエスケープするのが面倒なら %Q を使って tag0 = %Q!<parm xmlns="ruby_xyz ">\n! とかも書ける 詳しくはマニュアルなど参照のこと > 目的はtag0と他の文字列Aを組み合わせてできる文字列Bの生成です。 の意味がよくわからないけど,これで解決しただろうか
934 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 15:08:03 ] >>931 言語に関係なくミリ秒の計測はソフトウェア上では正確にはできません ハードウェアによる直接のサポートがどうしても必要
935 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 15:14:15 ] >>932 ,933 有難うございます。エスケープ文字列の問題だったのですね。 エラーの指摘箇所がコロンのところだったので、てっきりこの文字が原因だと思っていました。
936 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 15:43:30 ] >>935 エラーメッセージが教えてくれるのは転んだ場所でしかなくて 躓いたりぶつかったりの転ぶ原因は大抵別の場所にある。 遠く離れた場所で怪我してたから転んだなんてこともあるぐらい。 ありがちなのは想定外のオブジェクトに化けているパターン。 obj = ["hello,", "world"] obj = "!" # 本当は obj << "!" puts obj.join # ここでNoMethodError
937 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:08:18 ] 文字列処理で質問です(ruby1.8.6) 日付と時刻を文字列化し、その末尾を2桁づつ抽出したいのですが、 片方で4桁になってしまいます。 nowTime = Time.now.strftime("%Y%m%d_%H%M%S") # 現在の日付と時刻 timeLen = nowTime.split(//).size # 上の長さ value01 = nowTime[timeLen-4, timeLen-3] # nowTimeの末尾4文字目と3文字目 ← ※4桁になる value02 = nowTime[timeLen-2, timeLen-1] # 同様に1文字目と2文字目 p value01+", "+value02 # 2桁づつで表示 ← 実行すると4桁と2桁 どうすべきでしょうか?
938 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:17:15 ] 『まつもとゆきひろ コードの世界~スーパー・プログラマになる14の掟』 スーパー・プログラマってのが厨臭いなあ。書き下ろしだそうだから買っちゃうかもしれないけど。
939 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:28:51 ] >>937 そんなんTimeオブジェクトのメソッドで時間とか分とか出せばいいじゃん、というのはとりあえず置いておく nowTime = Time.now.strftime("%Y%m%d_%H%M%S") mm = nowTime[-4, 2] ss = nowTime[-2,2] puts "#{mm}, #{ss}"
940 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:37:47 ] >>937 最終的に欲しいのは YYYYMMDD_HHMMSS の中の DDSS なんだよな? リファレンスマニュアルで Time#strftime とついでに String#size,String#[] を調べてこい
941 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:43:54 ] >>939-940 ゴメンなさーい(泣
942 名前:デフォルトの名無しさん [2009/05/14(木) 18:24:50 ] >>938 宣伝乙
943 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 18:44:39 ] open-uri で each_line のように一行ずつではなく、 取得した内容全部を一気にごそっと変数に入れるにはどうしたらいいでしょうか
944 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 18:49:24 ] readで全部読む
945 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 18:51:52 ] っていうかread以外用途ないよね
946 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:13:36 ] この質問、よくみるね。 www.ruby-lang.org/ja/man/html/open_uri.html に書き込める人、サンプルよろしく。
947 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:15:20 ] サーバ側がchunkedでだらだら送ってくるのをeach_lineでだらだら処理、とか できるようになって...るんだろうか?
948 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:28:48 ] >>947 膳 膳
949 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 21:01:35 ] >>946 そのマニュアル、もう凍結されてるよ 今はるりまに移行してる
950 名前:デフォルトの名無しさん [2009/05/14(木) 22:25:28 ] >>914 > ドキュメント > Document > > matzの苦手なもの。彼は普段から「ソースがドキュメントだ。 > バグも完全に記述されている」と主張しているが、誰も受け入れない。当り前だ。 ・・・w
951 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 07:25:41 ] >>942 ageてるお前が宣伝マン。
952 名前:デフォルトの名無しさん [2009/05/15(金) 08:02:23 ] >>951 宣伝乙
953 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 09:34:05 ] >>949 Google の検索では凍結されたページが上位に来るのは問題だね。 るりまに転送とかできないのかな。
954 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 09:34:45 ] Googleさんに菓子折でも持って行けばやってくれるんじゃね?
955 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 09:47:06 ] 単純にリダイレクトしたら。
956 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 10:51:57 ] ここにいる全員のドキュメント嫌いも相当なものですな
957 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 11:08:32 ] ソースがドキュメントでテストが仕様書
958 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 12:00:13 ] >>953 そういうこと言うとRubyユーザーはHTTPも知らないとか思われそうなのでやめてくれ
959 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 13:35:24 ] sinatra で require 'rubygems' require 'sinatra' get '/' do "hello" end とだけの場合、/test や /xxx みたいに定義されていない URL を叩かれるとエラーになるけど、 その場合は「ページが存在しないよ」と出すにはどうしたらいいでしょうか。
960 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 15:36:26 ] >>959 これぐらい見ろよw www.sinatrarb.com/intro.html
961 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:25:23 ] >>959 Not Found When a Sinatra::NotFound exception is raised, or the response’s status code is 404, the not_found handler is invoked: not_found do 'This is nowhere to be found' end とあるね。
962 名前:デフォルトの名無しさん [2009/05/15(金) 16:29:18 ] WinXPでruby1.8.6を使っています。 一定間隔で動作するオシレーターはどう書けばよいのでしょうか? 調べましたが差分を求める説明が見つからず、下記の記述も未だ理解できないレベルです。 ttp://archive.mag2.com/0000267290/20080803070000000.html 単純に、例えば3秒間隔で「3sec」と出力されるものを先ず作りたいと思っています。 よろしく願います。
963 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:38:08 ] >>962 そのリンク先の >○シンプルタイマー(ソースコード) がほぼそのまんま答えなんだけどな。 というか「作りたいと思っています」なら、動かないものでいいからコード書いてみ。 添削はするし、わからない部分は具体的に聞いてくれれば答えるから。 ちなみに4行で書ける。
964 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:49:05 ] >>962 猫のモフモフ・・・
965 名前:962 mailto:sage [2009/05/15(金) 17:08:54 ] >>963 レス有難うございます。 直後に時刻のエポック秒変換の記述を手元の本で見つけましたので なんとか動作するコードは書けました(下記)。 # OSC01.rb count = 0 time0 = Time.now.to_i while true if time0 +3 == Time.now.to_i puts "3sec" time0 = Time.now.to_i count+=1 end # if count>10 break # 11回以上でwhileループをBreak end end ・・・明らかに4行は超えてますw
966 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 17:21:23 ] >>965 何回で止めるっていう条件が出てなかったしね。 while sleep 3 puts "3sec" end ちなみに分岐が一文だけならこういう書き方もできることを覚えておいて。 break if count > 10
967 名前:962&965 mailto:sage [2009/05/15(金) 17:32:02 ] >>966 有難うございます。 sleepってメソッドだったのですね。
968 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 19:43:00 ] >>956 書くのも読むのも好きですが何か
969 名前:デフォルトの名無しさん [2009/05/15(金) 19:58:36 ] CRubyがMRIだから松本さんが開発されたのかと思ったのですが、 検索でトップにくるのはGCを作成している方です。 Rubyの開発とはGCを開発することなのでしょうか?
970 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:03:02 ] 最近の言語全般で強ち間違ってないような気もするが、多分そういう話でもないんだろうな
971 名前:デフォルトの名無しさん [2009/05/15(金) 20:09:51 ] loop {break if count > 10} 上にあるこういう書き方ってRuby的にどうなの? Integer#timesを使わない理由って何?
972 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:16:29 ] countが不規則に増えるとか
973 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:19:12 ] 初心者の書いたコードになに嫌味つけてんのw
974 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:26:07 ] >>971 よう初心者
975 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:26:08 ] >>969 マジレスすると、一般的にCRubyとは言わず、単にrubyと呼ぶことの方が多いからそうなる
976 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:27:08 ] モノ教えるのに幾許かでも慣れてないとこういう時困るよな
977 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:32:11 ] まあ少子化だしな 関係ねえか
978 名前:デフォルトの名無しさん [2009/05/15(金) 20:38:50 ] >>966 == >>973 == >>974 よう初心者!
979 名前:デフォルトの名無しさん [2009/05/15(金) 20:59:28 ] すみませんでした。
980 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:59:52 ] めんどくせえ >>1-1000 よう初心者!!
981 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:02:24 ] 次スレ立てろよカス
982 名前:デフォルトの名無しさん [2009/05/16(土) 04:43:41 ] ruby1.8.6です。 ファイルアクセスが他のソフトとぶつかる場合で質問です。 Rubyで周期的にXMLファイルを上書きしていますが、この上書きのタイミングと 他のソフトによるXML読み込みが衝突した場合(と思われる時)、 in 'initialize': Permission denied - new XML.xml (Errno::EACCES) というエラーメッセージが出ます。 そこでRubyの振る舞いとして、他のソフトがファイルアクセス中は上書きを延期するか、 あるいは別の方法で衝突を回避したく思います。 何か良い方法はありますでしょうか? なお別のソフト側で衝突回避を試みましたが、上手くいかないためRubyに望みを 託すことにしました。
983 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 04:59:41 ] Rubyあんま関係ないな ファイルロック(またはロックファイル)でぐぐれ たいていの場合両方のソフトが対応してないといけないが、 たいていの場合相手のソフトはそんなもん作ってない なお、直接 File.open(path,'w'){|f| f.write(data)} するのではなく File.open(path_v,'w'){|f| f.write(data)} File.rename(path_v, path) と、ファイル移動をOS任せにしたほうがファイル書き込みアクセス衝突の可能性自体は減る ただし、これだと rename でファイルを掴むまでに起こったディスク上の変更を検知できない このへんの衝突可能性に気を遣ってるソフトはあらゆる永続的データ保存に「別名保存→名前変更」のプロセスを使ってるので そのソフトの使ってる別名保存名がわかればもしかしたらロックファイルのように使えるかもしれない
984 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 09:47:20 ] Rubyで次のコードが何故かできません。 超初心者です。 codepad.org/BEAGq3lE
985 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 09:54:12 ] >>984 Rubyに関するまとまった初心者向けの解説サイトまたは書籍を通読しろ 単に基礎知識が足りない
986 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 09:57:09 ] わかりました。ありがとうございます。
987 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 09:57:16 ] Rubyだけに関する知識じゃなくて、 もっと一般的にプログラミングで使用される基礎的な概念に関する知識だな。
988 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 10:03:46 ] >>984 グローバル変数は $x と書く。
989 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 10:11:32 ] Ruby 初心者スレッド Part 28 pc12.2ch.net/test/read.cgi/tech/1242436010/
990 名前:デフォルトの名無しさん [2009/05/16(土) 10:13:56 ] 999
991 名前:デフォルトの名無しさん [2009/05/16(土) 10:15:22 ] 1000!
992 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 10:57:49 ] いやそこまでギリギリじゃないから
993 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 11:17:41 ] あれw 1000!にだまされた
994 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 13:57:06 ] 1000なら今年Ruby2.0
995 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:02:46 ] こんなスローなスレでそんなことしてもw
996 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:08:34 ] 1000ならRubyは俺のもの
997 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:15:50 ] エッチでリッチなかーちゃん、Rubyをせしめてフランスへ。
998 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:38:42 ] とうきょう ルビルビ リズム ルビルビ 心ズキズキわくわくー
999 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 16:00:01 ] >>1000 なら今のシステムをSinatraで置き換える
1000 名前:デフォルトの名無しさん [2009/05/16(土) 16:02:22 ] 10^3
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。