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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
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を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。