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