1 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 17:31:07 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 ★注意★ Ruby 1.9.1 は初心者には時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。 (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に未対応であるためです。) なお 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 で勉強すれば将来スムーズに 1.9 系に移行できるでしょう。 関連スレやURLは>>2-5 あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
306 名前:デフォルトの名無しさん [2009/09/24(木) 17:08:05 ] Mix-inが言語的にサポートされていると聞いてRubyに心ひかれてます。 とはいえまだ使ってませんが。普段はC++/Javaを使っています。 Mix-in するモジュールを A、その中で定義されているメソッドを foo とすると、foo からは A を Mix-in した側のクラス C1 内のメソッドを 使うことができるんですよね? そのクラス C1 をさらに継承して C2 としたらその C2 で定義した メソッドも呼び出せるんでしょうか? C++の仮想関数や仮想関数テーブルとのアナロジーで説明してくれている ページってありませんか?
307 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:23:53 ] これ貼ると人によってはなぜか大変がっかりされるんだけど >>306 irb> module A; def foo; 'foo!'; end; end irb> class C1; end irb> p C1.ancestors [C1, Object, Kernel] irb> class C2 < C1; end irb> p C2.ancestors [C2, C1, Object, Kernel] irb> class C1; include A; end irb> p C1.ancestors [C1, A, Object, Kernel] irb> p C2.ancestors [C2, C1, A, Object, Kernel] irb> p C2.new.foo "foo!" こうなる Ruby のクラスは再オープン可能でそれが日常であることに注意のこと Ruby は ancestors に含まれている「前のほうのクラスやモジュール」からメソッドなどを探す C2 は [C2, C1, A, Object, Kernel] になっているが、 これだと C2 を探して C1 を探して A を探して Object を探す もし C2 に foo が定義されていれば、 順番表の下にある A の foo は呼ばれない もし C1 に foo が定義されていれば、 順番表の下にある A の foo はやっぱり呼ばれない Ruby の include はこの検索順番表(の2番目)に自分を追加するだけのシンプルな機能 継承もこの検索順番表(の2番目)に継承元クラスを追加するだけのシンプルな概念 irb> module B; end irb> class C2; include B; end irb> p C2.ancestors [C2, B, C1, A, Object, Kernel]
308 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:25:10 ] C++ の vtbl の仕組みでは説明できません。 Ruby の場合「頼んで答えられれば答える」ただそれだけです。
309 名前:306 [2009/09/24(木) 17:26:45 ] もう一つの疑問です。 二つのMix-inモジュール A, B をクラス C でMix-inしたとき、 AのメソッドからBのメソッドを呼び出すこともできるのでしょうか? つまり A のメソッド foo を書くにあたって、foo の中で 呼び出す bar というメソッドを呼び出したいけど、 それはまぁどこかで実装されてるんだろうと思って 書いて構わないですよね? その bar の実装は A を Mix-in するクラス C に書くべきなのか ほかの Mix-in で bar の実装を提供することができるのか、 という質問です。
310 名前:306 [2009/09/24(木) 17:35:01 ] >>307 , >>308 ありがとうございます。分かってきました(気がします)。 RubyというかMix-inという以前に頭が動的型付けの言語に 慣れていないことが原因だったように思います。 >Ruby の include はこの検索順番表(の2番目)に自分を追加するだけのシンプルな機能 >継承もこの検索順番表(の2番目)に継承元クラスを追加するだけのシンプルな概念 その解説ですっきりしました。 ということは >>309 も当然可能で 複数のモジュールを Mix-in したりさらに継承を続けたりして メソッドの名前が重複する場合には、要注意、 つまり include の順番も依存するということですね。
311 名前:306 [2009/09/24(木) 17:38:28 ] ということは言語仕様としてMix-inとしての制約を 課しているという点以外は Python の多重継承と 良く似ているなぁ・・・ どうしても業務が静的型付け・手続き型言語 べったりなんで、まだこっち方面(どっち?)は 指をくわえて見てるだけしたが、そろそろ。
312 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:40:18 ] Matzは恥ずかしい表紙の本でMix-inは多重継承って言い切ってたな
313 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:44:20 ] >>311 そんなあなたに Scala をどーぞ。
314 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:47:26 ] >>312 多重継承の形してないだけで、実際は多重継承だと思う ・ 自作以外を include すると地獄 ・ 自作でも 2つ include するとわけわかめ ・ 下手に include せずにクラスメソッドとして単体利用すると異常に楽 とか一緒
315 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 18:12:17 ] 弱めた多重継承には違いない 実装を共有しつつ、ダイヤモンド継承とか面倒な問題は生じなくなる まあRubyの場合、今度は変数がぶつかる問題があるけど・・・・・ なんかSchemeの健全なマクロみたいに、 名前の衝突を自動回避できないのかね
316 名前:306 mailto:sage [2009/09/24(木) 18:26:57 ] >>315 モジュールのメソッドの中で自由にインスタンス変数作れちゃうんですよね そうするとたしかに変数名は衝突しますね。
317 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:13:26 ] ま、>>315 の言う通りだね。 多重継承には嫌な問題がたくさんあるけど、あれば便利な場面もある。 そこで、通常の継承は単一継承のみに制限した上で、多重継承したい場面のためにMix-inを用意してある、と。 この辺のバランスの取り方は、まさにRuby的。好き嫌いはあるとは思うが。
318 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:19:22 ] 実際問題として include ってあまりしないよねえ やろうと思えばできるって感じ 慎重に設計した上で組み込む必要があるから、あまり気軽ではない あと NameSpace::Application を include NameSpace して使う人はトイレのドア開けた瞬間に漏れろ
319 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:36:13 ] Ruby1.8 で include REXML したときの defined?(Encoding) の誤爆なんとかしろとか言ってた奴もうんこ漏れろ なんでもかんでも include するんじゃねえ include は「クラスパス」を短くするために使うもんじゃねえ irb> require 'rexml/document' irb> "s".force_encoding('BINARY') if defined?(Encoding) nil irb> include REXML irb> "s".force_encoding('BINARY') if defined?(Encoding) NoMethodError: undefined method `force_encoding' for "s":String from (irb):4 from /usr/lib/ruby/1.8/rexml/namespace.rb:37 これ関連で Ruby1.9 の文字列処理の場合分けを defined?(Encoding) でやってる奴も漏れなくうんこ漏れろ
320 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:41:52 ] Ruby のバージョンだけが問題なんだから RUBY_VERSION で場合分けすべきだよね defined?(Encoding) は時々見るんだけど、何が目的なのかな
321 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:51:16 ] defined?(Encoding)って何がまずいの?
322 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:00:52 ] Encoding という名前のモジュールまたはクラスまたは定数が定義されていること、ということしか調べられないこと >>319 のような問題が起こるし、Encoding という名前のクラスかモジュールがどこかに存在してさえいればいいとか Encoding という名前のクラスにならほぼ確実に存在して動作も確定なメソッドがあるという問題でもないわけで 文字列のエンコーディング処理に本当に必要なのはナニかというと Ruby 1.9.1 なわけで、 じゃあ素直に 1.9.1 の存在をチェックしたほうが素直なんじゃね、ということに
323 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:19:57 ] >文字列のエンコーディング処理に本当に必要なのはナニかというと つーか例えば>>319 の場合ならforce_encodingの存在チェックをするほうがよくね?
324 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:27:53 ] ダックタイピングとして意味がありゃあな
325 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:38:25 ] エンコーディングではなさそうだけど: 1.9以降の機能と思ってバージョンでチェックしていたら 1.8.8にバックポートされたでござる、という場合を考慮すると バージョンで全部OKというわけでもないだろうな。 ケースバイケースとしか。
326 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:43:06 ] いやそれでもそれはバージョンでチェックすべきだろう Rubyのバージョン名と機能の関係はそんなにまでも信頼できない魔境ではない ソース触れる人がアップデートすべきだ
327 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 09:01:16 ] ダッチタイピングに空耳した
328 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 15:43:22 ] だからRUBY_VERSIONで分岐すんなつってんだろ Encodingで被るなら::Encodingとか String.method_defined?(:encoding)とか 使えよ
329 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:03:28 ] ある機能を備えているかが定数の存在やメソッドの存在でしかわからないのが問題なのかな。 Open Classなのでいくらでも後から定数やメソッドを追加できるわけで。 かといって、Javaのパッケージみたいにドメイン名使って一意にするのも鬱陶しいけれど。
330 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:45:12 ] RUBY_VERSION 否定派は何も根拠がないのが笑える
331 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:54:42 ] やはり組み込みと添付は Std モジュールに全部入れておくべきだった
332 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 17:41:18 ] >>330 1.9の機能を模倣する外部ライブラリができるかもしれないし Ruby実装だって今やMRI一択じゃない それと機能の有無で分岐してくれた方が後で読んだときに意図がつかみやすい といっても俺自身否定派でもないから好きにすればいいと思うよ できれば1.9スレや本スレとか然るべき場所でやってくれればなお良い
333 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 17:47:57 ] 涙拭けよ
334 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:12:41 ] 配列の中にハッシュ作りたいんですけど不可能ですか?
335 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:16:30 ] irb> foo = [{"a"=>0, "b"=>1}] => [{"a"=>0, "b"=>1}]
336 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:17:59 ] >>334 入れ子にすることは普通にできる [{'key1' => 'val1'}] 以下のようなことはできそうだができない ['key1' => 'val1', 'key2' => 'val2'] 以下のような使い方は一見無駄で遅いっぽい上に実際無駄だが、 Ruby ではけっこう普通にやってるのでどんどん使え arr = [{'key' => 'val1'}, {'key' => 'val2'}, {'key' => 'val3'}] arr.each do |h| p h['key'] end
337 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:27:42 ] >>336 それって全部同じ 'key' でも何か意味があるの? keyは色々なものでってこと?
338 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:54:14 ] 結局、Encoding関連で今まで出た案をまとめると 1. RUBY_VERSIONで分岐 2. defined?(::Encoding) 3. str.respond_to?(:force_encoding) あたりが現実的な解か
339 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:03:11 ] >>336 みたいなのは {'title' => 'タイトル', 'author' =>'著者', 'date' => '日付'} という固定フォーマットのハッシュを、何らかの理由で順番を保持したまま 深く考えずに適当に処理したいというときに時々見る
340 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:30:24 ] data = { 1 => {'title' => 'タイトル1', 'author' =>'著者1', 'date' => '日付1'}, 2 => {'title' => 'タイトル2', 'author' =>'著者2', 'date' => '日付2'}, 3 => {'title' => 'タイトル3', 'author' =>'著者3', 'date' => '日付3'}} 0.upto(data.keys.size).each do |i| p data[i]['title'] end イエス超解決 data を作るときにキーのためにわざわざ整数をカウントしないといけないのが不便
341 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:40:37 ] dataは配列でいいんじゃないか?
342 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:42:22 ] railsのソースコード読むとハッシュの上手な使い方が理解できるよネー
343 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:48:45 ] >>341 敢えて全部ハッシュにするという例なんじゃないのか
344 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:25:41 ] >>339 つまり1.9なら不要の発想ってことでおk?
345 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:32:52 ] 1.9.1 (以降)でしか使わないスクリプトであるなら、ハッシュ入り配列は不要だな 普通にハッシュを each で回せばいい 個人的には Hash の順番保持は 1.9.3 くらいで唐突に無くなりそうな機能だと思ってて これに依存したスクリプトはあまり作りたくないなあと思ってるんだが
346 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:39:09 ] え!Hashの順番保持されるようになったのか
347 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:46:43 ] えー 1.9.1 でめちゃくちゃ話題になったじゃん $ irb1.9 irb> h = {2 => 'two', 3 => 'three', 1 => 'one'} irb> h.each_pair{|k, v| puts "#{k} => #{v}"} 2 => two 3 => three 1 => one $ irb irb> h = {2 => 'two', 3 => 'three', 1 => 'one'} irb> h.each_pair{|k, v| puts "#{k} => #{v}"} 1 => one 2 => two 3 => three
348 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:51:52 ] どちらかというとネガティブな方向で話題になった気がする 順番記憶したら Hash じゃねえとか Rubyオワタ\(^o^)/ とか
349 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:57:26 ] 確かにHashはあるキーに対応する値を保持するだけのものな気がするな 順番保持したいなら配列にしろ・・・・・ とこんな話もすでにさんざんしたわけか
350 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 23:13:16 ] Java風に言うなら単なるLinkedHashMapでしょ 単なるハッシュとして使う分にはそれでもいいし、 追加コストは定数だからRuby的には許容範囲だとの判断があったのだろう
351 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:16:02 ] 標準でOrderedHashクラス作って、Hashの仕様が変更されてもOrderedHashだったら大丈夫って風にしないと まったく意味ないんじゃないの?
352 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:16:16 ] ruby をスクリプトエンジンとして使用するフリーソフトを作ったんですが、 Artisticライセンスな windows 版 ruby ってありますか?
353 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:38:34 ] yugui氏が担当している間は大丈夫そうなイメージがある、なんとなく 最悪OrderedHash < Hashになったとしても 互換性が必要な場面でHash = OrderedHashとかしときゃいいんじゃねw 冗談はともかく、現時点であらかじめこうしてから利用するとか class OrderedHash < Hash; end 順列が必要な連想配列だというのが明確になるし obsoになったときの対応も比較的容易なはず まあ俺はArrayクラスがArrayとQueueとStackに七変化するようなもんだと思うから抵抗はないし 消える心配も今のところしてない
354 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:42:41 ] Hashでも順番持ってた方が普通に便利なんだが 別に深刻な害があるわけでなし、何が不満なんだがさっぱりわからん
355 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:49:15 ] >>354 ・性能落ちるかもしれない不安 ・今後消えるかもしれない不安 だと思う
356 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:52:52 ] 言語処理系としてのruby1.9独自仕様なのか、 それともプログラミング言語Ruby1.9の仕様と解釈していいのか混乱があるのでは もし前者だとしたら、処理系依存には抵抗がある ハチドリ本いわく >Ruby 1.9 では、ハッシュの要素は、実装によっては挿入された順序で反復処理される。 う〜ん・・・・・
357 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 01:19:10 ] >>355 性能というのが速度のことであれば逆に速くなった。 というか、だからこそ入った。
358 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 01:22:27 ] 確かに列挙は早そうだな
359 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:14:22 ] 実装依存じゃOrderedHashのつもりで使うのは御法度か
360 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:16:02 ] rubyの開発グループは本当に人材酷いな。Railsに全部任せちゃえよ
361 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:36:06 ] いやいやRailsの人たちに任せたら新機能と非互換がTINYごとにどんどん増えるよ。
362 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 04:38:27 ] >>360 お前Rails使ってないか、あるいは使い始めたの今月だろ
363 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 05:31:14 ] 来月には後悔するのか、流動性速すぎだろRails
364 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 07:24:58 ] Railsは、こっち推奨になりました→やっぱやめました→ごめん、やっぱこれ とかバージョンアップのたびにあったりして笑うw いや、使っている方としてはどっちだよ!とか思うけど
365 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:11:13 ] 前田さんたちに頑張ってもらって、言語仕様で明文化してもらうまでは Hashのキー順序については昔ながらの意識でいることにする。
366 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:28:47 ] JISの話なら、1.8ベースだから順序の保証は入らんと思うぞ
367 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:37:01 ] >>338 >>328 のmethod_defined?も。 >>329 ある機能自体がある定数やメソッドで提供されてるんだから、最も自然だろう。
368 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:22:53 ] defined? や responsed_to? はダックタイピング用の機能であって モジュール存在判定に使うもんではないと思う
369 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:48:38 ] むしろモジュールの存在を問わず メッセージに応答できるか否かだけを問うべきでは?
370 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:54:42 ] 実際に必要なのは処理結果であって返事そのものではないというのが理想と現実の深くて暗い谷間
371 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:01:47 ] >>368 ダックタイピングならそんな判定はしない
372 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:04:48 ] ていうかさあ、responed_to? 使ってる奴だって その名前のメソッドを持っていることを期待してるのではなく 「Ruby 1.9 の」 force_encoding であることを期待しているんだろ じゃあそれの条件をきちんと書けよ
373 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:08:05 ] >>372 期待していない不正なメソッドが動作した場合はたいてい例外が発生してプログラムが止まる
374 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:26:09 ] if str.respond_to?(:force_encoding) && defined?(::Encoding::ASCII_8BIT) && str.respond_to?(:encode) && str.respond_to?(:encoding) && defined?(::Encoding::UTF_8) && str.class.new.encode(::Encoding::UTF_8).encoding == ::Encoding::UTF_8 && (_ = str.class.new.encode(::Encoding::UTF_8).force_encoding(::Encoding::ASCII_8BIT); _.encoding == ::Encoding::ASCII_8BIT) then str.force_encoding(::Encoding::ASCII_8BIT) end
375 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:35:44 ] プログラムが止まったあと>>373 がどう改修するのかにちょっと興味がある どうせ基本雑談なので次の質問の方気後れせずにどうぞ
376 名前:デフォルトの名無しさん [2009/09/27(日) 00:35:12 ] blog.livedoor.jp/dankogai/archives/51183588.html 上のページに掲載されているjavascriptを使って、ブラウザ上で文字列にRaw Deflateにかけた上で Base64 encodeしたデータをサーバへ送信し、 サーバ側ではrubyでBase 64 decode、標準のzlibライブラリを用いてRaw Inflateしたいのですが、 「Zlib::DataError: incorrect header check」が発生しうまく圧縮データを伸張できません。 サーバ側のrubyは以下のようなコードです。 #!/usr/bin/ruby require 'zlib' data = "(javascriptで生成した圧縮データ)" p Zlib::Inflate.inflate(data.unpack('m')[0]) ちなみに、perlだと同じように標準的なライブラリを使って以下のようなコードで圧縮データを伸張できましたので、このjavascriptのコードが特殊なことをやっているというわけではないのかな?と思います。 #!/usr/bin/perl use IO::Uncompress::RawInflate ':all'; use MIME::Base64; $data = "(javascriptで生成した圧縮データ)"; $decoded = decode_base64($data); rawinflate(\$decoded => \$inflated); print $inflated; このJavascriptライブラリ特有の問題なのか、rubyの問題なのか切り分けができておらず微妙かと思ったのですが、 perlで動いたので一度ruby界隈で聞いてみようと思い書き込みしています。 何か分かりましたらご教授いただけないでしょうか。
377 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 00:49:00 ] unpackが怪しい気がするから、Base64デコードしたデータのハッシュを、Perlのやつと比べてみたらどうかな? あと、詳しくないんだけど、そもそもRawDeflateと普通のDeflateって同じものじゃないとか?
378 名前:デフォルトの名無しさん [2009/09/27(日) 01:20:21 ] >>377 まさかと思って調べたところ、RawDeflateと普通のDeflateが違うものでした。 考えが及びませんで、ありがとうございました。 RawDeflateにchecksumなんかが頭についたものがDeflateのようで、以下のようにしたら動きました。 p Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(data.unpack('m')[0])
379 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 03:45:29 ] 配列の中にハッシュ入れたんですけど a = [0, {1 >= 5}, 3] これの配列データがFixnumかハッシュかどうかで処理を分けたいんですが is_a?(Fixnum)で分岐させようとしたらエラーが出ました classで調べたらエラーが出ます どうすればいいんでしょうか?
380 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 03:56:08 ] {1 >= 5} でエラーという落ちじゃないだろうな ちょっとコードをはってみろ
381 名前:379 mailto:sage [2009/09/27(日) 04:07:10 ] class hogehoge def mastery_open_flag MASTERY_ARRAY::HASH_DATA[1].each{|i| open_flag = true if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum) MASTERY_ARRAY::HASH_DATA[1][i].each{|index, level| unless @actor.mastery_level_data[index] >= level open_flag = false end } if open_flag @actor.mastery_open_data[i] = true end end } end end エラーはTypeErrorで cannot convert Hash into Integerと出ます
382 名前:379 mailto:sage [2009/09/27(日) 04:08:30 ] module MASTERY_ARRAY HASH_DATA[1] = [ 0, 0, {0 => 5, 1 => 3}, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ] end モジュールの配列です。
383 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:19:58 ] どの行でそんなエラー出てるんだい
384 名前:379 mailto:sage [2009/09/27(日) 04:28:48 ] if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum) ここです 配列のインデックス2のハッシュ読もうとしたら出ます
385 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:35:08 ] mastery_open_flag の MASTERY_ARRAY::HASH_DATA[1].each{|i| ... } の i に hash が きてるからだろう。 i = {0 => 5, 1 => 3} if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum) 状態で配列のインデックスにハッシュをブチ込んで、 整数に変換できないよエラーになってる。eachの i にインデックスが入ると勘違いしてない?
386 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:38:30 ] www.ruby-lang.org/ja/man/html/Array.html の each と each_index をよく読むといい って、eachの例がeach_indexの結果と区別つきにくいね…1,2,3じゃない例つかえばいいのに
387 名前:379 mailto:sage [2009/09/27(日) 04:40:24 ] あーそういうことですか インデックス入らないと困るんですが 何かうまい書き方ありますか? とりあえず考えてみます あったらお願いします ありがとうございました
388 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:47:09 ] each {|要素| ... } each_index {|インデックス| ... } each_with_index {|要素, インデックス| ...}
389 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:49:28 ] 用件は「要素が整数であること」なんだろうか 「要素がハッシュであること」なんじゃなかろうか MASTERY_ARRAY::HASH_DATA[1].each{|e| open_flag = true if e.kind_of?(Hash) e.each_pair{|index, level| open_flag = false unless @actor.mastery_level_data[index] >= level } end @actor.mastery_open_data[e] = true if open_flag end
390 名前:379 mailto:sage [2009/09/27(日) 04:58:13 ] おーすごいさすがプログラム板 each_indexで動きましたありがとうございます 389さんが書いたとおり「要素がハッシュであること」が評価の大筋です kind_of?(Hash) これは知りませんでした なんとかいけそうですありがとうございました
391 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 05:02:31 ] >>389 @actor.mastery_open_data[e] = true の e は each_with_index の i だと思う 要はナントカデータは全部要素数 100の配列なんだろう マス目みたいに決まっててアクセス手段がインデックスしかないんだ MASTERY_ARRAY::HASH_DATA[1].each_with_index{|e, i| open_flag = true e.each_pair{|index, level| open_flag = false unless @actor.mastery_level_data[index] >= level } if e.kind_of?(Hash) @actor.mastery_open_data[i] = true if open_flag }
392 名前:デフォルトの名無しさん [2009/09/27(日) 13:24:58 ] Win32で一文字入力してすぐ制御を返すサンプルないですか?
393 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:44:36 ] Curses.getch は?
394 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:44:37 ] ありがとう。 Winにもcursesってあるのか。
395 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:53:34 ] >>394 普通に導入可能だよー
396 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:22:24 ] rubyでCGIの勉強しようとおもって lighttpdをインストールしました。 ところが、設定方法がわからず、htmlは表示出来るのですが cgiが動きません。涙目状態です。あちこちググりました・・・ 途方にくれています・・・
397 名前:デフォルトの名無しさん [2009/09/27(日) 21:25:08 ] mongrelをいれるといいよ
398 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:26:57 ] 力になっちゃあげたいけど、スレ違いかな・・・ WebProg板か、どっかにLighttpdのスレがあるから、そこで質問したらいいよ
399 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:28:09 ] SocketってライブラリがあるからそれでWebサーバ書くのがいいと思うな というか環境や参考にしたページをどこまで試してどこで詰まったとか そういうのも無しに答えられるわけないので
400 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:30:33 ] それが無いこと自体が答だろ つまり、サーバ立てる知識が無い
401 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:32:26 ] >>398 lighttpdのスレは先に見ました。最終書き込みが8月、その前が6月くらいと 人の気配が感じられませんでした・・・
402 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:36:43 ] どう転んでもWebサーバの挙動の知識は必要になるわけなんだし 普通にゼロから勉強したほうが早いんだけどね
403 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:36:52 ] Linuxなら各ディストリの初心者スレにいけば、誰かが教えてくれそう。
404 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:40:14 ] >>402 まったくだぬ 「WebサーバやHTTPはお着せとコピペで済ませて本題のRubyの学習をしよう」というのは CGI関連に限ってはありえん
405 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:44:58 ] >>404 翻訳しながら、lighttpdの本家のページ見てみます。 mongrelも検討してみます。 apacheの設定よりは、ずいぶん楽そうに見えたんですが。。
406 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:47:26 ] 中途半端にマイナーなサーバソフトウェアだと情報が全くないということはばしばしある めっちゃメジャーなのを小規模で使うのが結局マシだったりすることは意外と多い