1 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:26:33 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 【Ruby1.9 は不安定な開発版であり初心者には全く向きません】 【最新安定版の Ruby1.8.6 の使用を強くお勧めします】 関連スレやURLは>>2-8 あたりを見てください。Ruby on Railsの質問は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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
101 名前:デフォルトの名無しさん [2008/04/17(木) 19:05:36 ] 数値をゼロパディングする方法は printf("%010",NUM) 以外にないですか?
102 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 19:12:44 ] number.to_s.rjust(width, "0")
103 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 19:19:02 ] >>100 こんな便利なものが ありがとうございました
104 名前:デフォルトの名無しさん [2008/04/17(木) 20:24:07 ] 文法的なエラー、 たとえばendが足りなかったりすると ファイルの最後の行を指示してエラーが出たりします。 変更箇所が多かった場合、どこで間違えたか分かりにくいです。 どこで間違えているかすぐにわかる方法があれば教えて下さい。
105 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 20:51:58 ] ruby/sdlをつかってプログラムを作ろうと思っているのですが 常に最前面に表示し続けることは可能でしょうか?
106 名前:デフォルトの名無しさん [2008/04/17(木) 21:02:48 ] >>102 ありがとう神様
107 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:10:49 ] >>104 ブロックの開始と終了の知識を確実にした上で、 ブロックをインデントしてくれるエディタを使う インデントが大きくなるべきでないところで大きくなってるところがあれば そこが閉じ忘れ 同様に "" や '' や () の対応を表示してくれる(色分けしてくれる)エディタを使うと 多くの場合「閉じ忘れ」がすぐ見つかるというか閉じ忘れることがない あと ruby -c ./hoge.rb とすると文法チェックだけをしてくれる 自信ないなら中規模な変更ごとにチェックしてもらうといい
108 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:24:31 ] >>105 たぶん不可能 ちなみにRuby/SDLの話なら、ゲーム制作スレの方がいい pc11.2ch.net/test/read.cgi/gamedev/1207069887/
109 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 22:12:21 ] >>107 エディタのインデントは完全ではないから、ちょっと複雑になるとあてにならないよ。 Rubyの文法は複雑だから、エディタごときが完全にパースできるわけではない。 だからエディタに任せてもendの閉じ忘れは検出できないことがよくある
110 名前:デフォルトの名無しさん [2008/04/17(木) 22:15:27 ] >>104 ・classやmoduleの閉じ忘れ 最初に書け。 ・defとかその中のifとかの閉じ忘れ メソッドでけぇ。 対処法にあんまなってないけど考え方としてはこんな感じかなぁ。
111 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 22:16:11 ] >>109 出たな100パーセント厨 口癖は「それは完全ではない」 90パーセントの達成度の価値を認めない人間だ
112 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 22:27:51 ] 90パーセントかどうかはともかく、8割くらいはエディタの自動インデントで見つかるよな エディタとして何を使ってるかとRuby編集モードの出来に依存するのが難点か Emacsのruby-modeはわりと優秀
113 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:31:12 ] >>104 www.logic-junction.com/products/rubyend.html patch をあてなきゃだからちょっと敷居は高いけど。
114 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:10:16 ] >>113 これよくないですか? なんで本体に取り込まれないんだろう
115 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:59:32 ] parse.yをいじるからじゃないの。 Ruby2.0あたりではyacc捨てたいねえとか言う話もあったんじゃなかったっけ。
116 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 02:09:29 ] >>113 どうでもいいが、ページの上にある「Abount」に吹いた。
117 名前:デフォルトの名無しさん [2008/04/18(金) 02:43:58 ] プログラミングRubyに ブロックの記述は、一行の場合は{} 二行以上の場合はdo〜endを使うのが Rubyコミュニティーのコンセンサスだと書いてありましたが ブロックは複数行になる場合も{}の方が視認性よくないですか? すべてendだと、何を閉じるものなのか、頭を見ないと分かりませんが、 {}だと、閉じカッコを見るだけで 何を閉じているのかがだいたい推測つきますし。 endにする合理的理由ってあるのでしょうか?
118 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 02:56:59 ] 主観的な問題
119 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 03:06:49 ] ・whileやifとの統一性 ・だいたいソースは上から読む>何を閉じるものなのか、頭を見ないと分かりません ・Hashリテラルだって}で閉じるし、%{...}文字列リテラルなんかもある でも結局は>>118 か。
120 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 04:50:55 ] end地獄が大嫌いだからdo〜endなんか絶対に使わない
121 名前:デフォルトの名無しさん [2008/04/18(金) 06:09:35 ] ってか、 そもそもなんでendなの? 文と紛らわしいしタイプも面倒くさい。 Rubyの最大の欠点がend。
122 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 06:48:00 ] }地獄が大嫌いだから(複数行で){}なんか絶対に使わない >>121 主観的な問題
123 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 06:56:24 ] 主観で片付けるのはおかしいよ 文と紛らわしいのも、タイプ数が多いのも 定量的な問題じゃん 理性的な判断を下せる範疇にあるはずだよ
124 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 07:49:21 ] end end end end end end
125 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 07:52:02 ] 主観的な問題でないのなら なぜ「do〜end超読みやすい! すっきりする」って人と 「do〜end読みにくい上に紛らわしすぎ」って人とに分かれるんだ
126 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 08:04:48 ] だって引数の記述と通常の文との違いを明確にしたいmatzだよ その認識の延長線上には、文と紛らわしいendの否定があるはずなんだよ endをすぐに完全に廃止しろとは言わない 試しに{}も許容するようにしたらいいんだよ コストはそんなに高くないだろう その小さな変化は きっと世界中の開発者に歓迎されると思うよ。
127 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 08:07:12 ] ・yaccの能力で、beginとcaseの文法が上手く纏められなかった ・endを使うとruby-mode.elが書けそうだった こんな理由じゃなかったっけ。 ifやwhileのこと? >試しに{}も許容するようにしたらいいんだよ
128 名前:デフォルトの名無しさん [2008/04/18(金) 09:04:24 ] endでいいと思うけど、emacsとかで 対応するclass,def,if,forにジャンプする 機能って無いですよね?
129 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:16:27 ] >>128 あるなら俺も使いたい。 {} の方ならこれでジャンプできるけどな。 ttp://www.bookshelf.jp/soft/meadow_42.html#SEC635 ;; By an unknown contributor (defun match-paren (arg) "Go to the matching paren if on a paren; otherwise insert %." (interactive "p") (cond ((looking-at "\\s\(") (forward-list 1) (backward-char 1)) ((looking-at "\\s\)") (forward-char 1) (backward-list 1)) (t (self-insert-command (or arg 1))))) (global-set-key "%" 'go-to-paren)
130 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:43:04 ] M-x ruby-beginning-of-block
131 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:44:51 ] あ、>>130 は「このブロックの最初」にカーソルを移動な カーソル移動がめどいという場合には妥当な機能
132 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:55:22 ] ああ、キー操作あった C-M-p ちなみに {} のブロックでも有効 ただ、厳密には「インデントつける」計算上のブロックの最初に移動する だから、 File.open('hoge.txt'){|f| f.puts data } の場合は { ではなく File の F に移動する File.open('hoge.txt'){|f| f.puts data } の場合は検知できなくて、「ひとつ上」のブロックの最初に移動する
133 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 11:06:13 ] end は予約語だから、Rubyスクリプトを読んでるという頭の中では何かと間違えることはないなあ (むしろ bashスクリプトで doneではなく endと書いて動作不良に首を傾げる) 慣れと主観っちゃそのとおりだがそれはそれで台無しな意見だ(w 素直に着色なエディタを使うというのはどうだろう
134 名前:デフォルトの名無しさん [2008/04/18(金) 17:11:08 ] モジュールの中で、 自分を読み込むクラスに実装を期待するメソッドを定義あるいは明示するには どうしたらいいですか?
135 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:19:34 ] まにゅあるに「hogeとhageはつくってね」とかく
136 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:28:37 ] え・・ Javaでいうabstractみたいな方法はないのでしょうか
137 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:46:52 ] def hoge raise "override me!" end
138 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:46:54 ] 実行中にメソッドを追加したり削除したりできるRubyではそもそも無理 別途ユニットテストとかでソースコード自体を検査させるべき
139 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:47:05 ] こういうのとか? ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/15841
140 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 18:39:10 ] The Ruby Way 第2版 ttp://www.amazon.co.jp/dp/4798115339/ おおむね今週に発売(たぶんたいていの本屋に並んでるはず) ボリュームアップし過ぎて5千円札では足りなくなりました
141 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:09:25 ] 結局実行時だけど、自分はこうしてる def foo bar end private def bar raise NotImplementedError end
142 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:14:58 ] モルボル教だかのお布施額がアップしたんだろ
143 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:20:36 ] def SomeModule.included(klass) raise unless klass.method_defined?(:foo) end とかやればいいんじゃね?
144 名前:デフォルトの名無しさん [2008/04/18(金) 19:20:54 ] 19種類のRubyテンプレートエンジンレビュー Mini reviews of 19 Ruby template engines www.hokstad.com/mini-reviews-of-19-ruby-template-engines.html 19種類ってありすぎww
145 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:23:31 ] 実行時にエラーが出るというのは致命的 実際にそのメソッドが使われないと、未定義かどうかのエラーが出ないんだからね それこそ、めったに起きないエラー処理のメソッドだった場合は、 まともに動作して安心してた頃になって致命的なことになる ソフトウェアテストでチェックすることをお勧めするよ
146 名前:105 mailto:sage [2008/04/18(金) 19:26:28 ] >>108 ありです
147 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:28:13 ] >>140 翻訳が変わってるのがすごく気になるな・・
148 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:39:37 ] rubyはスペルミスがあってもそのまま動きますから、小さいことは気にしませんw
149 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:48:44 ] >>147 同じく クイープの翻訳は最近アテにならないからなあ
150 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:00:08 ] Ruby初心者ですアドバイスよろしくお願いします。 .txtファイルに書かれた半角スペースで区切られた単語郡を それぞれ配列に格納するスマートな方法があればお教えいただけないでしょうか。 汎用性を持たすために、ファイルの読み込みは ruby test.rb < gomi.txt にしたいです。 windowsXP ruby1.8.6
151 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:07:20 ] つsplit
152 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:10:48 ] a bb ccc dddd eeeee ffffff ggggggg というようなテキストだと仮定 「それぞれ」という言葉から、1行目の配列と2行目の配列は別だと推測 ruby test.rb < hoge.txt でも ruby test.rb hoge.txt でも動作する # 配列を格納する配列 all_arr = Array.new # readlines は 引数のファイル、無ければ標準入力から読み込んで各行を配列にして返す readlines.each do |line| # chomp で line を区切って配列にする # 区切る"文字"は 正規表現の / / にマッチするものつまり半角スペース1個 arr = line.chomp.split(/ /) # push メソッドで arr を all_arr の要素の末尾に追加する # all_arr を「長くする」のではないことに注意 all_arr.push(arr) end # all_arr の中身を表示 p all_arr
153 名前:150 mailto:sage [2008/04/19(土) 01:40:27 ] 150です。早々の回答を有難うございました>151,152 二次元配列のような形にしたかったので、152さんのおっしゃるとおりです。 配列の値をActiveRecordでsqlに挿入しようと思っていました。 本当に助かりました、有難うございました。
154 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 05:12:28 ] スキルレベルの微妙なちぐはぐさ加減が怖い
155 名前:デフォルトの名無しさん [2008/04/19(土) 06:21:48 ] emacsをruby-modeで使っています この環境で定義済みクラスやメソッドのリストを見たり、 定義済みのメソッドを自動補完させたりすることは出来ますか?
156 名前:デフォルトの名無しさん [2008/04/19(土) 18:18:04 ] mixinとコンポジットの使いわけがよく分かりません mixinがないほとんどの言語では、mixin的なことはコンポジットで実現しますよね どういう時にmixinを使うんですか?
157 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 18:22:53 ] mixin は mixin 先の実装に依存した実装を追加したい時に使う。
158 名前:デフォルトの名無しさん [2008/04/19(土) 19:44:38 ] ファイルパスから親ディレクトリを取得するにはどうしたらいいですか?
159 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 19:47:52 ] >>158 File.dirname(file_name)
160 名前:158 mailto:sage [2008/04/19(土) 20:01:35 ] DirとかFileUtilsばかり見てました ありがとうございます
161 名前:デフォルトの名無しさん [2008/04/19(土) 20:05:51 ] ライブラリのクラスメソッドを使う場合に それを後に書く方法があれば教えてください たとえば File.dirname 'hogehoge' を 'hogehoge'.(File.dirname) みたいな形で書きたいんです
162 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 20:10:40 ] >>161 そうですか
163 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 20:15:50 ] どっかでそんな後置の言語を見た気がする 仮にRubyで実現するとしても、それを繋ぐのは . ではないだろうな
164 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 20:22:51 ] 気持ち悪いと思わないなら class String def dirname File.dirname(self) end end あとはpathnameというライブラリもある。
165 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 20:38:34 ] というか何のためにそうしたいのかによるな
166 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 21:08:19 ] class Object def callback(method, mypos=0, *args) args.insert mypos, self method.call *args end end p Math.sqrt(400) #=> 20.0 p 400.callback Math.method(:sqrt) #=> 20.0 p [1,2,3,4,5,6][2,3] #=> [3, 4, 5] p 3.callback([1,2,3,4,5,6].method(:[]), 1, 2) #=> [3, 4, 5] こんなもんでどうかな
167 名前:166 mailto:sage [2008/04/19(土) 21:09:58 ] 上のは >>161 宛
168 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 21:46:47 ] >>165 クラスとオブジェクトとメソッドの理解がまだ足りないんだと思う 気持ちはわかるが考え方が不当 欲しいのはいわば pathenize_dirname メソッドと推測 p '/usr/local/bin/ruby'.pathenize_dirname "/usr/local/bin/" メソッドの引数形式を「カッコ悪い」と感じる時期に罹るハシカみたいな病気だ
169 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 22:30:45 ] え、>>161 は見た目が気に入らないというだけ? 機能的な話かと思ったら、どうやら明後日を向いていたようだ。 そういうことであれば >>166 は>>161 の美意識には適うまい。
170 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 22:33:10 ] こんなのもありか。 class String def to_path Pathname(self) end end p '/usr/local/bin/ruby'.to_path.dirname
171 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 22:33:40 ] いや、pではto_strは呼ばれないな。putsで。
172 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 15:48:07 ] ERBについて教えてください。 railsのテンプレートでERBが使われてますが、 これは何かのタイミングで一度rubyのクラスに変換されてからHTMLに再び変換されるのでしょうか? 例えばJavaのJSPがJSP→サーブレット→HTMLと変換されるのと同じ流れですか?
173 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:05:58 ] >>172 <%%>の中身がそのままRubyコードとして抜き出され、 それ以外は_erbout.print ... という形に変換されてから Rubyで評価される感じです。
174 名前:172 mailto:sage [2008/04/20(日) 16:30:00 ] >>173 なるほど、jspみたいにrhtmlファイルがクラスに対応するわけではないんですね。 あまり綺麗な仕組みではないですね…。 ありがとうございました。
175 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:31:52 ] 単純に、ERBの簡単な使い方勉強するとイメージしやすいと思うよ eRubyの仕様じゃなくて、ライブラリの使い方ね
176 名前:デフォルトの名無しさん [2008/04/20(日) 17:47:33 ] mixiの「メッセージ」を送信したくて、d.hatena.ne.jp/emergent/20070321/1174472206 を参考にして、以下のように書いてみました。 基本的にeditの部分だけを変更し def edit title, content @id = "12345"#相手のid @edit_page = @agent.get('mixi.jp/send_message.pl?id= '+@id) edit_form = @edit_page.forms.name("messageForm").first edit_form['subject'] = title.toeuc edit_form['body'] = content.toeuc confirm_page = @agent.submit(edit_form) conf_form = confirm_page.forms[0] p @agent.submit(conf_form) end 以下を実行しました。 def mixi_message mdw = MixiMessage.new("hoge@hoge.com","hogehoge") mdw.login mdw.edit "テストタイトル", "テスト本文" end
177 名前:デフォルトの名無しさん [2008/04/20(日) 17:48:07 ] 結果、次のような出力になり、メッセージは送信されていませんでした。 #<WWW::Mechanize::File:0x4b03cdc @response={"connection"=>"close", "date"=>"Sun, 20 Apr 2008 08:11:37 GMT", "x-dealer"=>"034093", "content-type"=>"text/plain; c harset=euc-jp", "server"=>"Apache", "content-length"=>"0"}, @code="200", @uri=#< URI::HTTP:0x2583fc0 URL:mixi.jp/send_message.pl?id=12345>, @filename="s end_message.pl", @body=""> 送信できていない原因は何でしょうか?
178 名前:デフォルトの名無しさん [2008/04/20(日) 17:49:28 ] 結果、次のような出力になり、メッセージは送信されていませんでした。 #<WWW::Mechanize::File:0x4b03cdc @response={"connection"=>"close", "date"=>"Sun, 20 Apr 2008 08:11:37 GMT", "x-dealer"=>"034093", "content-type"=>"text/plain; c harset=euc-jp", "server"=>"Apache", "content-length"=>"0"}, @code="200", @uri=#< URI::HTTP:0x2583fc0 URL:mixi.jp/send_message.pl?id=12345>, @filename="s end_message.pl", @body=""> 送信できていない原因は何でしょうか?
179 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:16:00 ] >>176 WWW::Mechanizeは実際にサーバから送られてきたHTMLから指定された要素を抽出して実行している 素直に読むと mixi.jp/send_message.pl?id= ユーザーIDというページの結果を取得し、 <form name="messageForm"> というフォームで1番最初にあるフォーム中にある、 <input name="subject"> という、type が text か何かの入力欄に引数titleの内容を日本語EUCで入力 <input name="body"> という、type が text か何かの入力欄に引数contentの内容を日本語EUCで入力 <form name="messageForm"> のsubmit ボタンを「押して」結果のページを取得する 取得した結果の中の最初の <form> の submit ボタンを「押して」結果のページを取得する という処理なんだけど、mixiのページ構成はきちんとそのようになってるかい?
180 名前:デフォルトの名無しさん [2008/04/20(日) 18:55:48 ] 176です。お返事ありがとうございます。 p conf_form としてみたところ、出力に #<WWW::Mechanize::Form::Field:0x4ba0de8 @name="submit", @value="confirm"> があり、これは、 「確認画面」の <input type="hidden" name="submit" value="confirm"> と一致しているので、 おそらく「確認画面」までは到達していると思います。 「確認画面」では formはひとつしかなく、 <form action="send_message.pl?id=1056392" method=post> <input type="hidden" name="submit" value="confirm"> <!--略--> <input name=yes type=submit value=" 送 信 "> <!--略--> <input name=no type=submit value=" 修 正 "> </form> という構成になっており、submitが二つあるのが怪しいかなと思っているのですが、 指定のない場合は、先にある「送信」が押されると思うので、条件は満たしているような気がします。 ほかに問題となりそうな点は何でしょうか?
181 名前:デフォルトの名無しさん [2008/04/20(日) 20:37:02 ] num++ みたいな書き方が他言語とは挙動が異なるみたいなんですが これはどういう動作をしているのでしょうか?
182 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 20:47:58 ] そもそも ++ はないよ
183 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 20:48:11 ] rubyにそんな演算子は存在しない
184 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:54:38 ] >>182-183 ありがとうございました なんでないんでしょうね? 実装も単純そうなのになぁ
185 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 00:08:05 ] ま た か 説明するの面倒なのでぐぐってくれ インクリメントの実装自体は簡単なんだが、Rubyのほうそくが みだれる ので採用されない
186 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 00:12:19 ] かっちょええ説明法があればたぶん普通に採用されると思う さあ頑張って 「自分を破壊し別のオブジェクトを生み出して置き換える」 メソッドの意味を説明して説得するんだ
187 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 00:18:12 ] モルモン教義的に不死がタブーでないのなら Rubyでベニクラゲをモデリングしたいと言ってみる
188 名前:デフォルトの名無しさん [2008/04/21(月) 00:23:36 ] ループが正常に実行した時にのみ、ある処理を実行する というプログラムを美しく書く方法があれば教えてください。 フラグを用意し、ループを抜けてからフラグをチェックするのが 普通だと思いますが、フラグの存在が冗長な気がします 例外を使うのも、何かやりすぎのような気がします
189 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 00:56:43 ] do_this if array.all? {|x| ... } とかじゃなく?
190 名前:デフォルトの名無しさん [2008/04/21(月) 03:20:44 ] どこでもrescueされなかった例外を補足するには どうしたらいいですか?
191 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 03:27:37 ] rescue すればいい
192 名前:デフォルトの名無しさん [2008/04/21(月) 03:56:54 ] 全体を囲む大きなbeginブロックを書くということですか? 視認性が悪くなるので、 前もってエラーハンドラみたいなものが登録できたらいいと思うのですが・・
193 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 04:07:33 ] 基本的には処理はトップレベルにベタ書きすべきじゃないと思うから (変数はなるべくローカルスコープに入れた方がいいので)、 C などの main 関数みたいに全ての処理を囲んだ関数を作って トップレベルに記述する処理はその関数のみにしておくと良い。 そういう状態であれば、begin で囲むのもそこだけで済む。
194 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 04:18:35 ] ふーむなるほど… ありがとうございました
195 名前:デフォルトの名無しさん [2008/04/21(月) 06:16:46 ] Timeオブジェクトを引き算するとfloatが返ってきます 時間の差をあらわすオブジェクト(間隔オブジェクト?)が 返ってきて欲しいのですがどうしたらいいですか?
196 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 07:44:30 ] >>196 返って来たFloatがその間隔オブジェクト(秒.マイクロ秒) 欲しい単位が分なら (t2 - t1).to_i / 60 すればいい
197 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 10:59:01 ] >>186 代入演算子の一種として実装すればよい 例:a += 1
198 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 21:39:36 ] このへんを蒸し返してみたら? blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-list/6233?6096-6403
199 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 22:23:48 ] num++に問題があるというより ++numとnum++の挙動の違いをRubyの中に組み込むのに難があるという感じ?
200 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 22:32:18 ] succはあるんだから、前置++は構文だけの問題だね 後置は……
201 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 22:42:48 ] > succはあるんだから ほほう 君のRubyでは 3.succ として 3が 4になるのか?