Ruby 初心者スレッド Part 30
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2009/08/08(土) 08:21:23★注意★ Ruby 1.9.1 は初心者には時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
(理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に未対応であるためです。)
なお 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 で勉強すれば将来スムーズに 1.9 系に移行できるでしょう。
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・モジュール名やエラーメッセージでググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0831デフォルトの名無しさん
2009/09/10(木) 18:43:05http://doc.okkez.net/static/187/method/Object/i/respond_to=3f.html
0832デフォルトの名無しさん
2009/09/10(木) 18:50:55ありがとうございます!なるほどrespond_toメソッドのことでしたか。
ruby(というかプログラミング)特有の言い回しは慣れないと難しいですね。。
0833デフォルトの名無しさん
2009/09/10(木) 18:57:01def move_lower
Item.find(params[:id]).move_lower
flash[:notice] = '並びかえました。'
respond_to do |format|
format.html { redirect_to :action => 'index' }
format.xml { head :ok }
end
end
def move_higher
Item.find(params[:id]).move_higher
flash[:notice] = '並びかえました。'
respond_to do |format|
format.html { redirect_to :action => 'index' }
format.xml { head :ok }
end
end
def move_to_bottom
:
def move_to_top
:
(うつく)
0834デフォルトの名無しさん
2009/09/10(木) 19:01:56ドキュメント書く人もある程度従うから、メソッド一覧が辞書的・用語的に使える場合があるという感じ
というわけだからその部分は「第一引数がopenメソッドに応答するなら」で、いわゆるduck typing
http://ja.wikipedia.org/wiki/%E3%83%80%E3%83%83%E3%82%AF%E3%83%BB%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0
0835デフォルトの名無しさん
2009/09/10(木) 19:12:11DRYしたくて、この場合、どのような書いたものでしょうか?
例えば、以下のような感じにしたいのですが、Item.find(params[:id]).methodのところがうまく行きません (´・ω・`)
def move_lower
do_move(:move_lower)
end
def move_higher
do_move(:move_higher)
end
def move_to_bottom
do_move(:move_to_bottom)
end
def move_to_top
do_move(:move_to_top)
end
def do_move(method)
Item.find(params[:id]).method # ←?????
flash[:notice] = '並びかえました。'
respond_to do |format|
format.html { redirect_to :action => 'index' }
format.xml { head :ok }
end
end
0836デフォルトの名無しさん
2009/09/10(木) 19:17:02Item.find(params[:id]).__send__(method)
0837デフォルトの名無しさん
2009/09/11(金) 00:00:270838デフォルトの名無しさん
2009/09/11(金) 01:08:11いけますね
Item.find(params[:id]).send(method)
ではダメなんで書馬、
0839デフォルトの名無しさん
2009/09/11(金) 01:20:39Object#__send__は原則として書き換えてはいけない
Object#sendは上書きされることが予想(許容)される
http://doc.okkez.net/static/187/class/Object.html
>send が再定義された場合に備えて別名 __send__ も用意されており、ライブラリではこちらを使うべきです。また __send__ は再定義すべきではありません。
じゃあsendはなんで存在するのかというと・・・俺も聞きたいw
0840デフォルトの名無しさん
2009/09/11(金) 01:26:07class C
def send; end # Cの都合に合わせたsendに書き換えてOK
# def __send__; end # __send__の再定義はマナー的にNG
end
Itemの中身は(ほぼ)間違いなくObject由来のオブジェクトだからsendも__send__も使えるけど
sendが再定義されたクラスの可能性もあるから
Object#sendの機能が使いたいなら__send__のほうが確実ということ
0841デフォルトの名無しさん
2009/09/11(金) 02:52:17-スペース×2
-全角スペース
-
0842デフォルトの名無しさん
2009/09/11(金) 03:05:49nbspな書き込みが多かったから2ch側で自動的に置き換えてくれるようになったのか、
と思ったけど違ったみたいだ
0843デフォルトの名無しさん
2009/09/11(金) 05:30:26再定義のないプレーンな状態では send が使えてしかるべき
object_id と __id__ の関係に近い
個人的には __class__ もあってしかるべきだったと思うのだが
あんま __ つきメソッド作ると Python ぽく動作しなければならない気分になるかも
0844デフォルトの名無しさん
2009/09/11(金) 05:32:33navi2ch は文頭から始まるスペースを に書き換える
本来はやってはいけないことなんだがまあそれはそれで
0845デフォルトの名無しさん
2009/09/11(金) 05:35:48RubyのThreadでの引数の役割りって、何ですか?
(どういう場面で役立つのか分からない)
関数なら y = f(x) で引数xを元にyが決定されプロット
できますが、Threadも左右されるのでしょうか?
すいません、ググっても分かりませんでした。
0846デフォルトの名無しさん
2009/09/11(金) 06:19:04という話ではなさそうだな
Thread.new の引数の話なら、これはそのまんまだ
説明読んで実際に動かしてみてわからんのなら、きっとまだ早い
1ヵ月後くらいに再読すると結構わかるので今は諦めれ
0847833
2009/09/11(金) 06:34:05ありがとうございます。
本当だ、Railsだとsend上書きしてたりしますね。
ちょっとした使い分けですね。上書きされるような挙動を許したければsend、
そうでないなら、__send__
使ってみます。ありがとうございました。
0848デフォルトの名無しさん
2009/09/11(金) 06:44:42「送る」メソッドとして名称が被ってもいいように __send__ がある
たとえばメール用ライブラリでは送信用のメソッドがどう考えても send になるが、
そういうクラスで send を作っても元の send の機能が失われないように __send__ がある
他の Object のメソッドはまあ上書きで消えちゃっても仕方ないかなあと思えるものが多いが、
send の機能だけは特別
この機能が使えない状態のクラスは Ruby としてヤバい
0849デフォルトの名無しさん
2009/09/11(金) 06:56:46インライン要素に囲まれた空白文字は空白として保存する、みたいな仕様になっていれば
今ごろ世界中ハッピーだったと思うんだ
0850デフォルトの名無しさん
2009/09/11(金) 09:10:15RailsだけじゃなくてSocket#sendなんてのもあるしな
0851833
2009/09/11(金) 09:34:56あー、ほんとうだ。
Railsのsend(ActiveRecord)と、Socket#sendは全然意図が違いますね。
前者はフックして処理追加みたいな感じですが(superよんでるし)、
後者は、__send__関係ねえw
上の方で教えていただいた事柄は、後者のことですね、たぶん。
別の意味のsendが定義されてる場合、__send__よべと。そりゃそうだ。
Railsの場合は、むしろ、sendとしてsendが呼ばれるのを期待しているみたいなので、
__send__直接でなく、sendを呼んでやらないととおかしなことになりますね。
0852デフォルトの名無しさん
2009/09/11(金) 09:39:130853デフォルトの名無しさん
2009/09/11(金) 11:26:06bar = Foo::Bar.new
baz = (bar.class + Class.new('Baz')).new
p baz.class #=> Foo::Bar::Baz
eval するしかないとしたら、なにかより安全な方法はありますか?
0854デフォルトの名無しさん
2009/09/11(金) 11:43:37Foo::Barのスコープ下に可変な名前の新クラスを定義したいという意味?
0855デフォルトの名無しさん
2009/09/11(金) 11:47:59できね
文字列としてクラス名を適当に作ってからevalしろ
定数になる書式しか受け取らないevalはあれば楽しいが多分無い
0856デフォルトの名無しさん
2009/09/11(金) 11:49:54new_class_name = 'Baz'
Foo::Bar.const_set(new_class_name, Class.new)
0857デフォルトの名無しさん
2009/09/11(金) 15:36:36○HogeはFooの内部クラス
○HogeはFooの内部モジュール
○HogeはFooで定義された定数
のいずれかと思っていれば間違いないでしょうか?
ドキュメントを見て自分で調べた限りではこのような使われ方がされているようです。
継承したクラスや、インクルードしたモジュールなどは、Hoge::Fooのような書き方をしていないようなのですが、継承・インクルード用の表記法はあるのでしょうか?
0858デフォルトの名無しさん
2009/09/11(金) 15:42:06というのもクラスもモジュールも、ClassインスタンスやModuleインスタンスが定数に代入されているだけに過ぎないから
継承はC < Object
モジュールにお約束はないと思うけど、リファレンスでは継承と同じように書いてるね
C < Enumerable < Object
0859845
2009/09/11(金) 15:50:03レスどうも。
理解の助けになるようなサンプルがググっても見つかりません。
(手元の本のサンプルはやたら行数が多いし)
適当なサンプルコードってありますか?
0860857
2009/09/11(金) 15:52:25ありがとうございます。すっきりしました。
モジュールのインクルードもHoge::Moduleと書きたくなっちゃうけど違うんですね。
公式HP見たら、ご指摘どおり、Array < Enumerable < Object < Kernelとなってました。
Java厨の自分にはObject < Kernelはとっても違和感がw
0861デフォルトの名無しさん
2009/09/11(金) 15:56:46x = 1; t = Thread.new(x){ sleep 1; p x }; x += 1; t.join #=> 2
x = 1; t = Thread.new(x){|y| sleep 1; p y }; x += 1; t.join #=> 1
こういう話?
0862デフォルトの名無しさん
2009/09/11(金) 15:58:14x = 1; t = Thread.new{ sleep 1; p x }; x += 1; t.join #=> 2
0863デフォルトの名無しさん
2009/09/11(金) 16:00:41公式のどこ?その書き方おかしいだろ
モジュールは何個でもincludeできるから一つの流れでObjectまで辿り着けるわけじゃないし
0864デフォルトの名無しさん
2009/09/11(金) 16:07:39http://doc.okkez.net/static/187/class/Array.html
p Array.ancestors #=> [Array, Enumerable, Object, Kernel]
いくつでもincludeはできるけど、優先順位はきっちり存在する
0865デフォルトの名無しさん
2009/09/11(金) 16:16:07p String.ancestors #=> [String, Enumerable, Comparable, Object, Kernel]
矛盾してるぞ
0866デフォルトの名無しさん
2009/09/11(金) 16:22:560867デフォルトの名無しさん
2009/09/11(金) 16:26:59あまり階層を意識しないでとりあえずincludeしてるモジュールが分かればいいって程度の表記なんじゃない?
0868デフォルトの名無しさん
2009/09/11(金) 17:12:56既存のHogeというライブラリがあって、それの非公式エクステンションぽい感じなんだけど
require 'hoge-ext'
require 'hoge_ext'
require 'hogeext'
require 'hogeExt'
どれになるのがそれっぽいかな
0869デフォルトの名無しさん
2009/09/11(金) 17:18:20OpenURIにPOST機能をつけた場合
module OpenURIPost
require 'open-uri-post'
これがフツーだと思う
というか、require名はハイフンになるようにライブラリ作れというお達しがどっかに…
0870デフォルトの名無しさん
2009/09/11(金) 17:59:10その中ならhogeextかhoge-extかな
個人的にはこっちのほうが良いと思う
require 'hoge/ext'
0871デフォルトの名無しさん
2009/09/11(金) 18:07:41いや、見栄えもいいのはわかるんだが
本家 hoge の下に foo とか bar とかあった場合ちょっと微妙に
0872デフォルトの名無しさん
2009/09/11(金) 18:35:19挿入してそこに指定モジュールからメソッドを追加する感じ(てきとう)。
別のモジュールのincludeではその結果出来る階層にさらに別のダミー
クラスを挿入するので、内部的にはモジュール(ダミークラス)が線形に
階層を成している。
ドキュメントにそれを意識して反映してるかはシラネ。
0873デフォルトの名無しさん
2009/09/11(金) 18:49:21require 'hoge/plus' とかそういうのにすれば違和感が
0874デフォルトの名無しさん
2009/09/11(金) 18:57:17ruby script/generate scaffold book title:string author:string
これでbooksテーブルを作成するmigrationファイルが出来るのは分かるのですが、
NOT NULL制約やstringの長さの制限などを指定することはできないでしょうか?
generate scaffoldでテーブルを作ると全てのカラムでNULL可、文字列は255文字になってしまいます。
仕方なく、作成されたmigrateファイルを修正することで対応していますが、これは正しいやり方でしょうか?
0875デフォルトの名無しさん
2009/09/11(金) 19:15:40WebProg板のなら、最終投稿10日だし、別に過疎ってないと思う。
やりかたはそれでOK
全くカラム情報を与えずに作って空のmigrationに一から手で書いても
構わない。
そもそもmodelのgenerator templateの中身は
t.<%= attribute.type %> :<%= attribute.name %>
だし。
0876874
2009/09/11(金) 19:37:46http://pc12.2ch.net/test/read.cgi/tech/1216829388/このスレのことを言いました。
WebProg板の存在は知りませんでした。誘導ありがとうございます。次からはそちらで質問します。
migrationに手を加えるやり方でよかったのですね。railsの精神に反する気がして少し躊躇してました。
ありがとうございました。
0877デフォルトの名無しさん
2009/09/11(金) 19:43:18でしょうか?
たとえば
size = [2, 3, 4]
というサイズ指定配列を渡されたら、
a = Array.new(2).map{Array.new(3).map{Array.new(4, 0)}}
と等価なことをしたいです。
0878デフォルトの名無しさん
2009/09/11(金) 19:50:04単なるネストした配列だ
ということで、ネストしてるだけなのでネストしてnewする
a = Array.new(2).map{Array.new(3).map{Array.new(4, 0)}}
0879デフォルトの名無しさん
2009/09/11(金) 19:53:46open("010.pdf", "r") do |f|
f.gets
end
pdfファイルを読み込むには何か正しい方法があるのでしょうか。
最初はpdftotextでtextファイルに変換してから読み込もうと思ったのですが、
pdftotextを使う方法が分からなかったので直接読み込む方法を探しています。
環境はwindowsです。よろしくお願いします。
0880デフォルトの名無しさん
2009/09/11(金) 19:58:51というかそのエディタで開くということと同じことしかしてないわけだが
0881デフォルトの名無しさん
2009/09/11(金) 20:01:55そのへんの説明はあるはずなんだが
とりあえず gets ではどうにもならんと思うんで
素直に read してその pdftotext なりなんなりで解析してもらえ
0882デフォルトの名無しさん
2009/09/11(金) 20:04:48> a = Array.new(2).map{Array.new(3).map{Array.new(4, 0)}}
それじゃダメなので質問してるんですが。
size が必ず [2, 3, 4] と指定されるのでしたら
def foo(size)
return Array.new(2).map{Array.new(3).map{Array.new(4, 0)}}
end
で OK なんでしょうけど、渡される size は [5, 4, 3, 2] だったり
[2, 3, 4, 5, 6, 7] だったりとサイズも次元も可変なのです。
0883デフォルトの名無しさん
2009/09/11(金) 20:09:19Mac OSX最新版のSnow Loepardなら
テキスト、画像、動画、PDF、MS Officeをプラグインなしで統一的に扱えるのに。
0884デフォルトの名無しさん
2009/09/11(金) 20:12:26Rubyの配列に次元は存在しない
お帰りください
0885デフォルトの名無しさん
2009/09/11(金) 20:26:180886デフォルトの名無しさん
2009/09/11(金) 20:27:16case sizes.size
when 0
[]
when 1
Array.new(sizes[0], 0)
else
Array.new(sizes[0]){
make_nested_array(*sizes[1..-1])
}
end
end
0887デフォルトの名無しさん
2009/09/11(金) 20:36:09Stack、ListはArrayで間に合うだろう。
Queueは、優先度が付かないならArrayを使え。
このへんは大クラス主義。
標準では、他にSetが付いてくるが、組み込みではないので要require。
Treeは標準にはない。
0888デフォルトの名無しさん
2009/09/11(金) 20:37:35Rubyで? すごいねー
0889デフォルトの名無しさん
2009/09/11(金) 20:54:07なるほど。
*size を size に替えてうまく動きました。
ありがとうございました!
0890デフォルトの名無しさん
2009/09/11(金) 21:17:37テキストエディタで開くと文字化け?してしまいます。
>>881
pdftotext.exeは実行ファイルなのですが、Rubyのスクリプトから使用する方法が分かりません。
何度も申し訳ないのですが、教えて頂けないでしょうか。。
0891デフォルトの名無しさん
2009/09/11(金) 21:22:120892デフォルトの名無しさん
2009/09/11(金) 21:22:58横からだけど
make_nested_array([2, 3, 4])
よりは
make_nested_array(2, 3, 4)
のほうが素直というかRuby的だと思う
ary = [2, 3, 4]
で渡された時のことを考えているんだろうけど
make_nested_array(*ary)
とやれば引数を展開できる
>>890
pdftotext.exeは知らないけど、コンソールでできることなら大抵system関数でできる
コマンドラインを関数に渡せばいい
0893デフォルトの名無しさん
2009/09/11(金) 21:53:150894デフォルトの名無しさん
2009/09/11(金) 22:00:330895デフォルトの名無しさん
2009/09/11(金) 22:03:58ruby pdfでググると色々出てくるので好きに選べばいいじゃない
0896デフォルトの名無しさん
2009/09/12(土) 07:51:58ぶっちゃけ、基本ただのテキストファイル。仕様どおりに作ればいい。
適当に一部分だけgzipかけてみたりフォント埋め込んでみたり暗号化してみたり
してる部分もあるが、それは全部付加的なものだし。
現実的には、>>895。RubyならHaruでいいんじゃね?
0897デフォルトの名無しさん
2009/09/12(土) 08:33:37ハイハイ、マルチポスト、マルチポスト
Rubyでpdfファイルを読み込む方法 -OKWave
http://okwave.jp/qa5281984.html
こっちで、解決したらあっちのも答え書いとけよ
0898デフォルトの名無しさん
2009/09/12(土) 09:15:54簡単にできるのならやってみようかな
0899デフォルトの名無しさん
2009/09/12(土) 09:35:10PDFをプレーンテキストにする外部プログラムにファイルを渡して
標準入力から受け取って文字列にしてるだけ
0900デフォルトの名無しさん
2009/09/12(土) 15:15:55def hoge arg
p arg
end
hoge( :a => 1, :b => 2 ) #=> {:a=>1, :b=>2}
hoge( {:a => 1, :b => 2} ) #=> {:a=>1, :b=>2}
0901デフォルトの名無しさん
2009/09/12(土) 15:24:48{}はHashを意味している。
メソッド引数の最後のものがHashである場合に限り、{}を省いてよい。
0902デフォルトの名無しさん
2009/09/12(土) 15:28:06そうなんですか。
�d
0903デフォルトの名無しさん
2009/09/12(土) 16:44:490904デフォルトの名無しさん
2009/09/12(土) 17:03:010905デフォルトの名無しさん
2009/09/12(土) 19:24:560906デフォルトの名無しさん
2009/09/12(土) 21:54:36何を以って強さとするかによる
0907デフォルトの名無しさん
2009/09/12(土) 22:09:19書きやすさ
読みやすさ
インストールのしやすさ
ライブラリの使い勝手
リファクタリングの効率
配布
どれをとっても(ry
0908デフォルトの名無しさん
2009/09/12(土) 22:43:510909デフォルトの名無しさん
2009/09/12(土) 23:27:500910デフォルトの名無しさん
2009/09/13(日) 00:19:22pythonスレではまじめにレスするかスルーされるケースが多い
よってruby埼京
0911デフォルトの名無しさん
2009/09/13(日) 00:23:54そんなに寂しいのか彼らは
0912デフォルトの名無しさん
2009/09/13(日) 02:08:10おまえはボケのセンスがないんだな
0913デフォルトの名無しさん
2009/09/13(日) 12:39:10(@@connections ||= []) << self
上記のコードの
@@がクラス変数, << が配列への要素の追記ということはわかったのですが
||= の記号の意味がうまく調べられませんでした
どなたか教えていただけないでしょうか?
0914デフォルトの名無しさん
2009/09/13(日) 12:42:560915デフォルトの名無しさん
2009/09/13(日) 13:08:12||=は左辺がnil、falseでないときは何もしない
もしnil、falseなら右辺を代入する。
0916デフォルトの名無しさん
2009/09/13(日) 13:29:01http://doc.okkez.net/static/187/doc/spec=2foperator.html
0917デフォルトの名無しさん
2009/09/13(日) 14:10:48foo ||= []
は
foo = [] unless foo
とおなじ。
(foo ||= []) << "aaa"
は
foo = [] unless foo
foo << "aaa"
とだいたい同じ。
0918デフォルトの名無しさん
2009/09/13(日) 15:18:56これはこれで面倒な話でありましてですな
0919デフォルトの名無しさん
2009/09/13(日) 15:34:47irb> (p "ok") if foo
NameError: undefined local variable or method `foo' for main :Object
from (irb):1
from :0
がエラーで
irb> (foo = "ok") if foo
nil
が OK というのは不条理っちゃ不条理ではある
ちなみに (foo = "ok") if foo のあと、 foo は nil を返す
0920デフォルトの名無しさん
2009/09/13(日) 15:42:16どういう基準で分かれてるんだろう?
0921デフォルトの名無しさん
2009/09/13(日) 16:11:24FAQ にもあるんだが、ローカル変数は、構文解析で代入が見つかるかどうかだけが鍵
実際に(いつ)実行されるかどうかは関係がない
if false
foo = "OK"
end
foo
上記は NameError を起こさないが、以下は foo が NameError を起こす
for e in [1, 2 ,3]
if e == 2 then
foo
else
foo = "OK"
end
end
動作は同一なはずの unless で 代入記述の順番を変えると NameError は起こらない
for 構造はスコープを作らないことに注意
for e in [1, 2 ,3]
unless e == 2 then
foo = "OK"
else
foo
end
end
0922デフォルトの名無しさん
2009/09/13(日) 16:15:42ttp://www.ruby-lang.org/ja/man/html/FAQ_CAD1BFF4A1A2C4EABFF4A1A2B0FABFF4.html#a2.2e3.20.a5.ed.a1.bc.a5.ab.a5.eb.ca.d1.bf.f4.a4.cf.a4.a4.a4.c4.bb.b2.be.c8.b2.c4.c7.bd.a4.cb.a4.ca.a4.eb.a4.ce.a4.c7.a4.b7.a4.e7.a4.a6.a4.ab
長い長すぎる
FAQでは昔ながらに「nil で初期化しとけ」と書いてあるが、
こんな繰り返しのスコープを意図的に利用するスクリプトを書くことのほうがヤバい兆候であることがわかってる
素直に他の方法を考えるのがよい
そもそも一般的な each ではスコープが毎回切れるからこれの再現すらできないしな
0923デフォルトの名無しさん
2009/09/13(日) 16:16:02気持ち悪くないのかな。それとも、別に実装の都合ではなくてポリシーなのか?
0924デフォルトの名無しさん
2009/09/13(日) 16:31:24ブロックでスコープをわけないようにするという話もあったりするので、
遠い未来の2.0あたりでは>>921の例も動くようになるかも。
0925デフォルトの名無しさん
2009/09/13(日) 16:41:100926913
2009/09/13(日) 16:46:38ご丁寧にありがとうございます。
ソース読んでいてここだけわからなくて困っていたのですが助かりました。
0927デフォルトの名無しさん
2009/09/13(日) 16:48:29if ARGV
opt1 = ...
end
opt1_runner(opt1) if defined?(opt1)
これが期待通り動作しないということなんだぜ
たかがローカル変数で
opt1 = nil
if ARGV
opt1 = ...
end
opt1_runner(opt1) if opt1
とか書かなければならないのは流石にバカっぽい
0928デフォルトの名無しさん
2009/09/13(日) 17:13:360929デフォルトの名無しさん
2009/09/13(日) 17:15:13いわんとすることはわかるが
0930デフォルトの名無しさん
2009/09/13(日) 17:18:18ローカル変数を初期化不要にしてしまうと、フィールド変数を参照してるつもりでスペルミスしてもエラーにならなくなる。
あらゆる場所で意図しないローカル変数が勝手に生成される可能性があるわけで何とも気持ち悪い。
フィールドはオブジェクトの属性という意味合いから初期値があるのは自然だけど、
ローカル変数はちょっと値を保存しておく場所って意味合いしかないから、ソースコードを簡略化するために初期値を設けるってのも設計上美しくない
レス数が900を超えています。1000を超えると表示できなくなるよ。