[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 22:42 / Filesize : 246 KB / Number-of Response : 911
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 24



1 名前: 【大吉】 mailto:sage [2009/01/01(木) 13:13:22 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
   【最新安定版の Ruby1.8.7 の使用をお勧めします】
    ※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
      1.9 の新機能の一部が利用可能なので初学者にお勧めです。
    ※ただし十分安定しているとは言えないので
      プロダクション環境での利用にはお勧めしません。

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

294 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:20:49 ]
オライリーの "プログラミング#{言語名}" という本は総じてガチ初心者お断りだから、
間違って買ってしまう人以外は平気だと思う

295 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:22:04 ]
設計者の書いた本は、仕様と同時に言語の思想とかも与えてくれるから
バイブル扱いされやすい気がする
K&R、ラクダ、D&Eみたいに・・・・・本家amazonの評価が異様に良いのも気になる

296 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:23:12 ]
>>293
だよなぁ・・。

なんかこう、プログラミング初心者向けですよ〜みたいなこと言っておいて
「プログラミングの世界ってどんなんだろう?」という純粋な初心者が、いつのまにか「Rubyだけの世界」に洗脳されそうだ。
もっとプログラミングの本質にこだわった本かと思ったのに。。

297 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:28:58 ]
プログラミングの本質に触れたいなら特定の言語名を冠した本は違うと思うな。
といってプログラミングの初心者にそれを理解しろってのは酷だけど。

298 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:31:12 ]
>>297
> プログラミングの本質に触れたいなら特定の言語名を冠した本は違うと思う
ttp://www.amazon.co.jp/dp/4873112923
イエスこの本マジお勧め

299 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:33:12 ]
>>298
それなんでRuby採用したんだろうな

300 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 01:51:35 ]
> Rubyは変なキツネの漫画を読んだだけなので
www
ホワイの感動的なやつだな

>>205
C++のプロは「C++のプロ」とは自分で言わんだろ。
自称「C++のプロ」と言えばなんとなくニュアンスはわかる

301 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 02:40:12 ]
>>285
>ふつう、その章に出てくる練習問題は、その章までに学んだことを応用できるような
>問題にするべきなのに、Stringクラスの練習問題では、次の章に出てくるハッシュや
>正規表現を使わせる問題が出てくる。
>これじゃプログラミング初心者はつまずいてしまうのではないだろうか。

それは既にhashや性器表現を知ってるからそう思うだけで教育的効果はあると思うよ
初心者の場合hashや性器表現を使わずにその問題を解こうとして悩むのがいい
そうすれば次の章で出てくるhashや性器表現の意味や必要性を理解しやすい
唐突にhashや性器表現が出てくる方が初心者は混乱する

>なんとなく、プログラミングの感覚を「Ruby」に染めさせるような本に思えてくる。

どの辺が?

302 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 02:43:11 ]
>>300
大学生のときは上には上がいる、というか、上しかいない状況だったが、
就職してからは、下が果てしない、というか、下しかいない状況だった。
プログラミングで食ってりゃプロなのは間違いないが、それとスキルは直結しない。



303 名前:デフォルトの名無しさん [2009/01/10(土) 02:52:58 ]
まつもとゆきひろって2ちゃんねるの管理人だった人?

304 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 03:33:40 ]
>>301
ネタとわかってても性器表現が気になってしょうがないんだがw

305 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 07:07:39 ]
>>302
下ばっかり見てると腕落ちますよ

306 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 09:24:05 ]
rubygemsってどう呼ぶんですかね?
ルビィゲムズ?

307 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 09:28:57 ]
>>306
gem(ジェム): 宝石。宝玉。
ttp://dictionary.www.infoseek.co.jp/?ii=2&lp=0&sm=1&sc=1&gr=ml&qt=gem&sv=KO&se=on


308 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 09:44:34 ]
>>307
d

309 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 13:08:05 ]
>>266
>>269

遅くなりましたがありがとうございます!!
perl と同じなんですね
助かりました!

310 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 13:10:27 ]
>>301
なるほどね。

311 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 14:01:03 ]
青空文庫形式のテキストを処理しています。
青空文庫形式では親文字とルビを次のように書いています。

 |親《おや》|文《も》|字《じ》

これを一つにまとめる形で、

 |親文字《おやもじ》

という形に変換(置換処理)したいのですが、どうすれば良いでしょうか。
親文字が幾つあるかは一定していません。
この処理を一行毎に行いたいのです。

312 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 14:59:15 ]
>>311
irb> s = '|魑《ち》|魅《み》|魍《もう》|魎《りょう》が|跋《ばっ》|扈《こ》する'
irb> 1 while s.gsub!(/|(.*?)《(.*?)》|(.*?)《(.*?)》/, "|¥¥1¥¥3《¥¥2¥¥4》")
=> "|魑魅魍魎《ちみもうりょう》が|跋扈《ばっこ》する"

gsub!は置換が行われればレシーバ(s)を、行われなければnilを返す。
1っていうのはとくに意味はない。後置whileを繰り返すためだけの存在。




313 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 15:13:57 ]
s.gsub(/(|.+?《.+?》)(?!|)/){"|%s《%s》" % $1.scan(/|(.+?)《(.+?)》/).transpose}

正規表現であまり悩みたくない人向け

>>312
gsub の第 2 引数は使うなとお達しが来てるはずだが

314 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 15:27:57 ]
初心者スレで transpose と sprintf 使って手抜きしてる人には言われたくないだろうな

s.gsub(/(|.+?《.+?》)(?!|)/){
base = Array.new
ruby = Array.new
$1.scan(/|(.+?)《(.+?)》/){|m|
base.push(m[0])
ruby.push(m[1])
}
# 以下の文字列が gsub(re){str} の str に当たるもの
"|#{base.join('')}《#{ruby.join('')}》"
}

前にも gsub の 2番目の引数使ってた人がいたけど同一人物かね
無駄にエスケープ連打せずにブロック使えという認識になってたと思う




315 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 15:42:35 ]
>>312
s = "|日《に》|本《ほん》|語《ご》の|漢《かん》|字《じ》"
1 while s.gsub!(/|(.*?)《(.*?)》|(.*?)《(.*?)》/, "|\\1\\3《\\2\\4》")
puts s

|日本語字《にほんご》の|漢《かんじ》


316 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 15:43:46 ]
> gsub の第 2 引数は使うなとお達しが来てるはずだが
kwsk

317 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 16:28:35 ]
正規表現で漢字のかんむりやへんやつくりをマッチさせるにはどうするんですか?

318 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 16:32:31 ]
>>317
無茶言うな

どっかの誰かに「部首と漢字文字との対応表データ」を作ってもらうしかないね
ネット上には適当なデータを作ってる熱心な人がいるから、それをRubyでどうにか使うしか

319 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 16:37:40 ]
発想としては斬新でけっこう好きだ
その視点を失わずにプログラミングして欲しいなと思う

320 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 17:11:49 ]
このスレの少し前でRackの話が出てたけど
実際のところ、Rackって日本ではどのくらい使われてるんだろうね
日本語の解説記事もいくつかあるから、少なくともドマイナーって程ではないと思うが

321 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 17:49:37 ]
流石って
さす+が
さ+すが
どっちになってます?

322 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 17:56:54 ]
>>321
熟字訓だから「さすが」で分かれない
明日が「あし - た」でも「あ - した」でもないのと同じ



323 名前:デフォルトの名無しさん [2009/01/10(土) 19:33:38 ]
(3.2-2.0) == 1.2 がfalseの理由を教えて下さい。

324 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:34:58 ]
>311です。皆さんありがとうございました。

325 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:47:19 ]
>>323
等しくない
たぶん浮動小数点数の誤差のせい

irb(main):024:0> sprintf("%.16f", 3.2 - 2.0)
=> "1.2000000000000002"
irb(main):025:0> sprintf("%.16f", 1.2)
=> "1.2000000000000000"

326 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:51:08 ]
>>323
浮動小数点だから

何かを計算した結果の浮動小数点の値と、
それ以外の数式で何かを計算した(あるいは計算していない)浮動小数点の値が、
全く同じになるというようなことはふつう無い

だから、小数を含んでいる数値は絶対にイコールで比較してはいけない

どうしても比較したい場合は、たとえばその差を誤差並に小さな数 Float::EPSILON と比較する

irb> (3.2 - 2.0) -1.2 < Float::EPSILON
false
irb> (3.2 - 2.0) -1.2 < Float::EPSILON*10
true

10倍や100倍以内なら同じ数値とみなしてよい

327 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:53:11 ]
>>323
なるほど。
てことは、浮動小数点数の比較は安易にするなってことですかね。


328 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:55:18 ]
>>326
ありがとうございます!
そうゆうもんなんですね。
PHPから入った素人なんで、勉強になりました。

329 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:55:38 ]
あ、いかん、絶対値とらないと

((3.2 - 2.0) -1.2).abs < Float::EPSILON*10

こういうのでよろしこ

330 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:55:47 ]
rubyに限らず実数の比較をしないってのは基本
おおむね>>326の通りなんだけど、欲を言えば絶対値を取っておくほうがいい

331 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:57:40 ]
厳密じゃなくていいのなら、文字列にして比較してしまうというのがいいかもしれん
一般的な用途では文字レベルでしか判断しないからな

irb> (3.2-2.0).to_s == 1.2.to_s
true

332 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 20:29:17 ]
なぜ文字列にして比較を??
数値の比較の話じゃなかったの?



333 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 20:59:37 ]
>>332
文字列は

てか浮動小数点の指数の基数って
初心者の頃はずっと10なんだと思ってた。
で、なんで誤差が発生するんだとさんざん悩んでみたり
今からしたら俺アホかと




334 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:02:00 ]
しまったメインの話題を途中やめにしてた

数値を文字列に変換する過程である程度の誤差を丸めてくれるなら、
>>329みたいな過程を記述する必要がないってこと

たとえruby内で記録されている値が
1.19999999999 であっても
1.20000000001 であっても
表示するときは最下位を丸めて 1.2 になると。

浮動小数点はちょっとわかりにくいからwikipediaで調べてみそ
ja.wikipedia.org/wiki/浮動小数点数

335 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:05:56 ]
irb> (3.2 - 2.0) -1.2 < Float::EPSILON
false
これが true になるような左辺ってあるんだろうか

336 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:09:41 ]
左辺が絶対値ってことだと思うが左辺の方が小さかったらEPSILONの意味がないな


337 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:10:10 ]
0では?

338 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:11:50 ]
nil?

339 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:19:19 ]
www.google.co.jp/trends?q=php%2Cperl%2Cruby%2Cpythoin%2CASP.NET

ちょびっと逆転してる

340 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:20:10 ]
www.google.co.jp/trends?q=php%2Cruby&ctab=0&geo=US&geor=all&date=all&sort=0

間違えたこっちだった

341 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:27:17 ]
>>332
目に見える範囲の小数が等しいかどうかを調べるだけなら
これが「我々がアタマの中で考えてる」処理に一番近い

どちらが大きいかということが必要な場合はあまり(あるいは全く)使えないので用途に注意

342 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:32:43 ]
>>335
irb> (5.5 - 2.25) - 3.25 < Float::EPSILON
=> true



343 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:40:17 ]
>>326
<=にしたらtrueになった

irb> (3.2 - 2.0) -1.2 <= Float::EPSILON
true

344 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:41:18 ]
>>342
それは単に 0.0 なのでは
0.5 も 0.25 も割り切れてるもの

345 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 22:25:21 ]
Float::EPSILON < Float::EPSILON
false

Float::EPSILON <= Float::EPSILON
true

0.0 < Float::EPSILON
true

って話?


346 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 22:27:51 ]
Float::EPSILON とは <= で比較するのが正しいのかな


347 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 22:30:50 ]
A <= B と A < B || A == B の動作違うのってまずくね

348 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 23:00:14 ]
rubyってDLL作れる?

rubyで作ったプログラムをVBAやC#みたいな他ので使いまわせるようにしようと思ったら
どういう形式がいい?

349 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 23:05:35 ]
>> 336
マシンイプシロン Float::EPSILON は
1.0 + Float::EPSILON != 1.0
になる最小の数って意味だから違う。

IEEE754 の浮動小数点表現では、32 ビットの単精度でも指数部は 8 bits、仮数部 23 bit あるから
EPSILON はせいぜい 2.0**(-23) 程度

>> Float::EPSILON + 1.0 == 1.0
=> false
>> Float::EPSILON/2 + 1.0 == 1.0
=> true
>> 1e-20 < Float::EPSILON
=> true

だから、ちゃんと比較するなら絶対値で割ってから比較するべき
abs((a-b)/b) < Float::EPSILON
とか。b < Float::EPSILON のときの処理も必要だけど。



350 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 23:23:19 ]
1.0 + Float::HOGE == 1.0
になる最大の値 HOGE のことを何と言いますか

351 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 23:25:12 ]
マシンウプシロン

352 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 23:29:49 ]
Delphiだと引数にEpsilonを指定できる浮動小数用の比較関数(SameValueだっけか)が
あるんだけど、Rubyにはないのん?

いちいち絶対値とってそれがEpsilon以下って書かなきゃならない?
組み込みかライブラリであれば教えて頼む



353 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 23:32:30 ]
i.loveruby.net/d/20040502.html

354 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 00:00:41 ]
Ruby Cookbookに載っているコード

class Float
def approx(other, relative_epsilon=Float::EPSILON, epsilon=Float::EPSILON)
difference = other - self
return true if difference.abs <= epsilon
relative_error = (difference / (self > other ? self : other)).abs
return relative_error <= relative_epsilon
end
end

100.2.approx(100.1 + 0.1) # => true
10e10.approx(10e10+1e-5) # => true
100.0.approx(100+1e-5) # => false

355 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 00:04:56 ]
浮動小数点を比較しなきゃ逝けない用途って何?
コンピュータに向いてない作業の一つだな。

356 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 00:14:26 ]
シミュレーション?

357 名前:デフォルトの名無しさん [2009/01/11(日) 00:27:31 ]
RubyでGUIアプリケーションは作成可能でしょうか?
友人からは、GUIアプリケーションは
VC++、VBとかじゃないと無理と聞いたのですが・・・

358 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 00:37:12 ]
>>340
日本ではまだまだ遠いな
www.google.co.jp/trends?q=php%2Cruby&ctab=0&geo=JP&geor=all&date=all&sort=0

359 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 00:37:34 ]
>>354
self と other を比較する前に絶対値とらないと駄目なんじゃ。

360 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 00:38:08 ]
def check(name)
/name/ =~ "hiroyuki"
以下略

で/name/ をnameでマッチさせるのではなく引数の値を使うにはどうすればいいでしょうか?


361 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 00:50:37 ]
>>357
pc11.2ch.net/test/read.cgi/tech/1200175247/302-312

362 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:08:45 ]
ここまでBigDecimalへの言及無し。
ttp://www.ruby-lang.org/ja/man/html/BigDecimal.html

irb> require 'bigdecimal'
=> true
irb> BigDecimal.new("3.2") - BigDecimal.new("2.0") == BigDecimal.new("1.2")
=> true




363 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:11:56 ]
浮動小数点数の比較の話をしてるんだからBigDecimalの出る幕は無いだろ

364 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:20:00 ]
>>354
サンクス。組み込みではないっつーことか。

>>355
まーゲーム作るときとかちょっとした数値計算、
後ユニットテスト書くときなんかにはいるけど、
確かに最後の例以外Rubyには不適だかなあ

365 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:21:22 ]
>>360
def check(name)
name =~ "horioyuki"

で、
check呼ぶ時に正規表現リテラル渡せばよいのでは?
check(/.+oyu.+/)

366 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:26:58 ]
ちょっとお聞きしたいのですが、
wikiとかの表示によくあるプログラムの実行時間を
自分のスクリプトで表示したいのですが、
簡単にmsecの実行時間を測る方法はないでしょうか?

スクリプトの終了前に
puts Process.times.to_yaml
とかやってみたんですが、表示がさっぱり?です。
utimeとstime を足したものが実行時間なのかな?

367 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:28:51 ]
あれは単にWikiテキストの処理開始時と
処理終了時の差を取っただけなんじゃないか?

368 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:31:14 ]
>>366
基本的な計測はbenchmarkライブラリ(標準添付)でOK
あと、「Ruby プロファイラ」で検索すると色々出てくる

369 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:33:47 ]
>>363
おおもとは、>>323
> (3.2-2.0) == 1.2 がfalseの理由を教えて下さい。
だから、小数を含む数の扱いについて一通り言及すべきだと思うんだ。

370 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:40:08 ]
>>365
nameに渡す文字列はARGV.shiftで受け取ったものなんですよ・・・。
グローバル変数にすればよかったりしますかね・・・。


371 名前:370 mailto:sage [2009/01/11(日) 01:54:40 ]
グローバルしてみましたが結局 =~ の 左辺,右辺に変数がきてもいいのでしょうか?

372 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 02:10:29 ]
def check(name)
/#{name}/ =~ "hiroyuki"
end

p check("hiroyuki") # => 0



373 名前:370 mailto:sage [2009/01/11(日) 02:17:30 ]
>>372
ありがとうございました!!!!!!!!!うまくいきました。
=~の左辺の#{name}っていうのは変数としてみるってことですか?

374 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 02:18:34 ]
>>368
サンクス
benchmarkクラス使ってみる

375 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 02:28:14 ]
>>373
まあそんな感じだ
「式展開」について勉強すればよくわかる
www.ruby-lang.org/ja/man/html/_A5EAA5C6A5E9A5EB.html#a.bc.b0.c5.b8.b3.ab

376 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 02:28:22 ]
変な質問なうえにおそらく出来ないんだろうけど一縷の望みをかけて質問
メソッドの入れ子って出来ますか?
たとえば、
def method1
 処理
 def method2
  処理
 end
end
としたら、method1だけ呼びだしたらmethod1の処理のみで終了。
method1.method2みたいに呼びだしたら両方の処理を実行、みたいな。

この書き方だと
ttp://www.ruby-lang.org/ja/man/html/_A5AFA5E9A5B9A1BFA5E1A5BDA5C3A5C9A4CEC4EAB5C1.html#a.a5.e1.a5.bd.a5.c3.a5.c9.c4.ea.b5.c1.a4.ce.a5.cd.a5.b9.a5.c8
みたいになっちゃうから無理なのは明白だけど・・・

method1に引数を与えてmethod2の処理をif文でくくって引数の値で処理するか否かを
決めるって方法もあるけど、見た目的にごちゃごちゃするから嫌というか・・・

なんかいい方法あったら教えてください。

377 名前:370 mailto:sage [2009/01/11(日) 02:31:30 ]
>>375
ありがとございます。
昨日Rubyはじめたばっかりでいろんなサイトからつぎはぎで趣味プログラムしてたんで
リファレンスマニュアルというのをみてませんでした。まず、一読してみます!

378 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 02:32:20 ]
>>376
無理
素直にモジュール使って、Mod1.method1としなされ

379 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 02:34:20 ]
>>376
それではmethod2を定義しているだけで,method2を呼び出してはいない

def method1
puts "call method1"
def method2
puts "call method2"
end
method2
end

380 名前:379 mailto:sage [2009/01/11(日) 02:35:59 ]
ごめんはやとちりした

381 名前:376 mailto:sage [2009/01/11(日) 02:45:25 ]
>>378
無理かぁ・・・ありがと
Mo1.method1・・・method2はどこへ?
実はmethod1の処理がイテレータを含んでいて、変数を一周するたびに初期化して使うんだけど、
場合によっては初期化する前にmethod2の処理でその変数を使いたいから↑のようなことに・・・
モジュールだとダメそうなのでおとなしく引数と条件文で動かします。。

>>380
ドンマイw

382 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 02:47:47 ]
>>376
def method1
 処理1
 Proc.new do
  処理2
 end
end

method1
method1.call

近いことを無理やりやろうとすれば、
こんなのは思いつくが、普通はやらない
端的に言って不気味すぎる



383 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 03:00:57 ]
いやいや、初心者のこんな突拍子もないアイデアから、すごいアイデアがでたりする。
1000個に1個ぐらい。
だから初心者は1000個のアイデアを出すんだ!

384 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 03:14:53 ]
callが気に食わない

def method1
 処理1
 pr = Proc.new do
  処理2
 end
 pr.instance_eval "alias :method2 :call"
 pr
end

method1
method1.method2



385 名前:376 mailto:sage [2009/01/11(日) 03:22:55 ]
>>382
おお、できるんだ!?
ありがと〜

ぶ、不気味なのか・・・

>>384
求めていたものが完璧に・・・お見事です。

お二方、ありがとうございます。

386 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 03:40:36 ]
開発環境なに使ってますか?
自分はLinuxでは基本Netbeansで、ちょっとした修正はemacsで。
eclipseとかもあるけどどんな開発環境使っているか気になったので・・・。

387 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 03:59:55 ]
vi

388 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 04:07:59 ]
今時 vi はないだろう vi は。
俺は断然 vim だな。

389 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 04:10:20 ]
メモ帳

390 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 04:14:26 ]
俺はEclipseにRubyプラグイン
editer使ってる人は補完なくて大丈夫なの?

391 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 04:25:12 ]
いや、もちろんエディタにも補完はあるよ
VimのRubyに対する補完はかなり強力。それ以上に操作性が好きで使っているけど

392 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 04:29:52 ]
ずっとEmacs
ちなみにMatzもEmacs

まあ人に何が良いか,って聞かれたらNetbeans勧めるかもな



393 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 04:30:07 ]
viの学習曲線の最初でくじけたのでemacsで

394 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 07:48:14 ]
俺は断然 vi






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<246KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef