- 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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
- 29 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:30:11 ]
- autoload は概念は便利だが実際には注意深く使わないといけないので微妙に面倒
- 30 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:35:24 ]
- 指定されたファイルに存在する全てのファイルのクラスとモジュールを精査して
自動で全てを autoload する auto_require というのを作ってみるというのはどうだろう
- 31 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:38:16 ]
- >>30
requireするファイル名とクラス名に一定のルールを課すならできなくもない。 ActiveSupportにあるね。
- 32 名前:デフォルトの名無しさん [2008/04/14(月) 22:47:17 ]
- Rubyには名前付き引数はないみたいですが
どう実現するのがスマートでしょうか?
- 33 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:49:05 ]
- def moge(x, y, options={})
... end のように最後に省略可能なハッシュを引数にとるようにし、 呼び出すときは moge(100, 200, :foo => 0, :bar => 1) のようにシンボルを使う。 1.9だとこれを foo(100, 200, foo: 0, bar: 1) とも書ける。 fooの定義ではoptions[:foo]などとして参照する。
- 34 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:50:11 ]
- fooじゃないmogeの定義
- 35 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:09:00 ]
- >>33
ありがとうございます わりと自然な形で書けるんですね
- 36 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:22:49 ]
- 言うほど自然でもないようにも思う
まあ、RoR以外のRubyではそれほど一般的ではない あまり使わず紛らわしいオプションをユーザーに記述させたいときとかだな
- 37 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:48:00 ]
- なんか馬鹿ばっかだな
ソース読んでる?MLとか見てる?
- 38 名前:デフォルトの名無しさん [2008/04/15(火) 00:03:32 ]
- オブジェクトの中から、自分のクラス名を取得するにはどうしたらいいですか?
- 39 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:16:34 ]
- >>38
obj.class
- 40 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:17:06 ]
- self.class.to_s
- 41 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:20:32 ]
- self.class.name
- 42 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:30:58 ]
- >>36
RoR系統儀とgems系統を引いたら現状のRubyはほとんど残らんと思う どっちかに依存してると思うぞ 添付ライブラリだけの「ぴゅあ」なRubyでスクリプト作ってる人はそう多くないはず
- 43 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:42:13 ]
- >>42
んなわきゃない
- 44 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:48:36 ]
- 「blank?が公式に載ってないのでおかしいと思ったらこれActiveSupportなのね」
という内容のブログの投稿が普通にある時代だからなあ
- 45 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 09:32:30 ]
- >>32
どちらかといえば、名前付き引数を使わないのが一番スマート 引数が複雑になりそうならこういうやり方もある Foo.new(x, y) do |foo| foo.target = './dest/' foo.index = 10 end この方法の利点は Fooに存在しない名前のパラメータを設定しようとしたとき、即座にエラーを出してくれること >>36 ハッシュで名前付き引数を渡すのは、RoR以前から広まってたぞ
- 46 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 11:49:20 ]
- RoRな人たちに多用というか乱用されてる感はなくもないな
- 47 名前:11 mailto:sage [2008/04/15(火) 13:29:46 ]
- なんかタイムリーな話題が ruby-dev に出ちゃっているようなのですが、
件の改行の制限は、設計方針的なものというよりも、 yacc (というか LALR(1) ?) の制限によるものなんでしょうかね。 これで私が当初からもやもやしていた疑問が大体解けた気がします。
- 48 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 13:35:12 ]
- 「それだと正確にパースするのめんどいから」というのに類する問題っぽいのは
かなり自明だと思ってたんだがそうでもないんか
- 49 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 13:49:18 ]
- 質問。MechanizeでWikipediaからページを取ってくるとハングアップしませんか?
agent.get('ja.wikipedia.org/wiki/%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8%E3%82%86%E3%81%8D%E3%81%B2%E3%82%8D')
- 50 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 13:58:39 ]
- >>49
それFAQ。ていうか「Mechanize Wikipedia」で検索くらいしろ。 あと、ハングアップではなくサーバへのアクセスの無限ループなので試すな。迷惑だから。 引数をURIオブジェクトにすると一応動作するが、それだけではURLエンコードされたリンクはたどれない。 RubyのMechanizeではパーセントつきURL文字列を処理できない ttp://d.hatena.ne.jp/kitamomonga/20080410/ruby_mechanize_percent_url_bug ここではto_absolute_uriを動的に書き換えろって言ってるな。
- 51 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 14:16:01 ]
- >>50
要はバグなんですね agent.get(URI.parse('ja.wikipedia.org/wiki/%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8%E3%82%86%E3%81%8D%E3%81%B2%E3%82%8D')) なら動作しました
- 52 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 17:13:37 ]
- 拡張モジュールをデバッグするために、-g をつけてコンパイル
したんですけど、Ruby 本体も -g をつけてコンパイルしなきゃ いけませんか。 初心者でごめん。
- 53 名前:11 mailto:sage [2008/04/15(火) 17:51:13 ]
- >>48
一連のレスの中でそう指摘してくださったのは >>48 さんが初めてだと思いますので、 自明というわけでもないのではないでしょうか?
- 54 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 18:08:51 ]
- 当たり前のことは誰も説明しない、というそれだけの話かもしれない。
- 55 名前:11 mailto:sage [2008/04/15(火) 18:20:04 ]
- うーん、当り前の話でしたか・・・
まああまりこれ以上引っ張るネタでもなさそうですし、 私も今は、世界のナベアツ Golf の方に興味が行っていますので、このへんで。
- 56 名前:デフォルトの名無しさん [2008/04/15(火) 19:27:40 ]
- 指定したハッシュのキーがあればその値、
なければ指定した値を取り出すための もっとも短い書き方を教えてください 今は hoge = moge.has_key?(key_name) ? moge[key_name]:default_value と書いていますがmogeとkey_nameが重複していて気になります
- 57 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 19:31:57 ]
- hoge = moge[key_name]||default_value
とか?値が nil にも対応しないといけないんだとダメだけど。
- 58 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 19:34:05 ]
- hoge = moge.fetch(key_name, default_value )
- 59 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 19:36:21 ]
- h = Hash.new(default_value)
じゃだめかな
- 60 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 20:05:37 ]
- >>57-59
ありがとうございました fetchがそのためのものですね
- 61 名前:デフォルトの名無しさん [2008/04/15(火) 22:09:41 ]
- Rubyの流儀ではファイルとクラスの関係はどうですか?
他言語では一ファイル一クラスが多いようですが
- 62 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:34:36 ]
- >>52
拡張ライブラリだけ-gついてりゃ大丈夫 デバッグ情報付きのrubyがあればあったでいいとは思うけど
- 63 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:44:52 ]
- >>61
てきとう RoRの流儀は知らない
- 64 名前:デフォルトの名無しさん [2008/04/15(火) 23:40:04 ]
- コンストラクタでsyslogを開いてログを取ってるのですが
デストラクタがないためcloseする場所がないです。 どうするのがペターでしょうか?
- 65 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 23:48:20 ]
- 明示的にcloseを外にさらけ出すとか、
ブロック構文にしてyieldからもどってきたらcloseするとか、 define_finalizerしといて適切にGC.Collectしてねと言い捨てるか。
- 66 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 23:48:28 ]
- >>62
さんくす
- 67 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:36:00 ]
- >>65
ありがとうございます define_finalizerってやつ使うか…と思っていたのですが syslogは複数ハンドルオープンできないんですね コンストラクタで開いて開きっぱなしにする方法がそもそもマズいのでは と思い直し 書く時だけオープンしてすぐ閉じるようにしました
- 68 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 01:16:29 ]
- www.kuwata-lab.com/rubyflow-ja/
- 69 名前:デフォルトの名無しさん [2008/04/16(水) 03:16:58 ]
- 正規表現を使ったディレクトリの再帰コピーってどうしたらいいですか?
Dir.globはワイルドカードしか使えないので困ってます
- 70 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 04:04:40 ]
- 再帰関数作ればいい。
- 71 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 07:02:43 ]
- Dir.glob("**/*")の戻り配列をgrepして処理すれば。
あ、再帰じゃねーや(w
- 72 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 07:56:03 ]
- >>69
1. FileUtils.cp_r を参考にする 2. Find.find {|path| do_somthing_with(path)} 3. Dir.open {|dir| dir.each {|entry| do_somthig_with(entry)}} ……こんなもん?
- 73 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 14:45:54 ]
- 0001.gif 0002.gif
を 179.gif 180.gif に変換したいのですが。。 ぐぐって参考にしたのですがあってますか? require 'fileutils' $name = ARGV.shift $ext = ".gif" i = 0 ARGV.each do |file| i = i + 179 $newname = $name + sprintf("&03d", i) + $ext print "renaming " + file + " ---> " print $newname + "\n" FileUtils.mv(file, $newname) end
- 74 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 15:05:41 ]
- >>73
require 'fileutils' ARGV.each do |before| # 0001.gif から拡張子 .gif を取り出す ext = File.extname(before) # 0001.gif からディレクトリ名を取り出す(無いので ./) dirname = File.dirname(before) # 0001.gif から拡張子抜きファイル名 0001 を取り出す basename = File.basename(before,ext) # 0001という文字列を数字にして178を足して0詰め数字3文字に after_basename = sprintf("%03d", basename.to_i + 178) # ディレクトリ名+数字3文字+拡張子 というファイル名に合成 after = File.join(dirname, after_basename + ext) # リネームしまーす puts "renaming: #{before} -> #{after}" FileUtils.mv(before, after) end # 実行結果 ~$ ruby rename.rb 0001.gif 0002.gif renaming: 0001.gif -> ./179.gif renaming: 0002.gif -> ./180.gif
- 75 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 15:15:53 ]
- で、
# 0001という文字列を数字にして178を足して0詰め数字3文字に after_basename = sprintf("%03d", basename.to_i + 178) のとこだけど、178を足してる時点で数字3文字になることはほぼ確定なんで、イマイチよくわからん もし、0900.gif が 1078.gif にリネームされてもOKなのなら、単に after_basename = (basename.to_i + 178).to_s とでもしてくれ >>74のままでも4桁動くから使用上は問題ないけどな あと、フルパスや相対パスを引数にしてもそのディレクトリでリネームされるのでよろしく
- 76 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 15:23:52 ]
- ありがとう><
0001.gifから0200.gifまでとかだと どうするとよいですか!? 0詰めは、100以下のときだけですね^^;
- 77 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 15:30:19 ]
- 適切なファイル名を200個作って引数を200個渡す
以上 どこにどんなファイルがあるか知らんのでこれ以上はどうにもならん 汎用的な条件つけて頼めばもう一回くらいは誰か作ってくれるかも 引数として指定されたディレクトリのファイルを全てリネームするとか
- 78 名前:デフォルトの名無しさん [2008/04/16(水) 20:46:32 ]
- シェル呼び出しの時間を計るにはどうしたらいいですか?
Benchmark.measure { `sleep 10` } これだと何故か実行時間が0になってしまうのです
- 79 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 21:55:08 ]
- その間自プロセスはwaitしてるだけだから時間が掛かってないってことだよね。
tms = Benchmark.measure { `sleep 10` } tms.real #=> 10.0072751045227 あと、``は結果を文字列で得たいときに使うものだから、system 'sleep 10' のほうが行儀がよいと思う。
- 80 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 21:59:04 ]
- ていうか
irb> Benchmark.measure { `sleep 10` } #<Benchmark::Tms:0x401fae88 @utime=0.0, @cstime=0.0, @total=0.01, @cutime=0.01, @label="", @stime=0.0, @real=10.0146338939667> これは妥当だと思うんだけど というか user time や system time の違いってわかってもらえてるのかな
- 81 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 22:15:13 ]
- 「たぶんtotalだけみとけばいいんだな」くらいの理解だと思われる。
- 82 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 22:33:13 ]
- >>76
ruby 連番 rename あたりでググると吉。
- 83 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 02:45:11 ]
- >>50
初めて見たんだがそれ有名なのか?
- 84 名前:デフォルトの名無しさん [2008/04/17(木) 05:28:30 ]
- Rubyってタイプヒンティングやインターフェイスがないですが
引数にある型のオブジェクトが欲しい場合、 どうするのが普通ですか?
- 85 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 07:11:30 ]
- >>84
お好きなのをどうぞ * ダックタイピングを実践する * 自分で引数を解析し例外送出などの処理を記述する * Sapphireがリリースされるのを待つ * いつかrubyに実装されるのを待つ * PHPを使い続ける
- 86 名前:デフォルトの名無しさん [2008/04/17(木) 07:26:32 ]
- プログラミングRubyのダックタイピングの項を読み直してみました
ダックタイピングというのは 引数リストでフィルタせず、メソッドがあるものと前提して呼び出し、 ないときには発生する例外によってコーディングの間違いを知る といったスタイルですね 基本ダックタイピングで、 厳格にしたいケースではメソッドの有無をたしかめる といったあたりが現実的なところでしょうか・・
- 87 名前:デフォルトの名無しさん [2008/04/17(木) 07:46:22 ]
- テンプレートメソッドを
継承でするか、mixinでするかの判断基準は 何でしょうか?
- 88 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 10:24:10 ]
- >>83
試してみるといい まあ、Mechanizeしたいと考えるようなページなんて大体決まってるってことなんだろうな 引っかからない人は全く引っかからないバグだ、これ
- 89 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 10:32:00 ]
- >>87
勘 いやマジで どっちも「使ったから便利明快になる」というものではない (サンプルコードでは明快だけどな) 継承を試してわけわかめだったらmix-in用に思考を切り替えるのが一般的かもしれん
- 90 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 10:42:07 ]
- >>87
テンプレートメソッドパターンとかはまず置いといて、継承が妥当か否かだったら こんなんがあるな。 jp.rubyist.net/magazine/?0015-CodeReview#l11 Mixinとか委譲のおかげでRubyでは比較的あんまり継承しない気がするのは俺だけ?
- 91 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:00:55 ]
- どんだけ注意深く作る(作らなければならない)かの話だな
private を書くかどうかに似た話
- 92 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 15:31:03 ]
- privateとか何のためにあんの?
使わないメソッドなんて使わないんじゃね?
- 93 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 15:39:49 ]
- >>92
うん、まあ、君の感覚はある意味正しい ある一定規模未満の素朴なプログラムでは単にめんどくさいだけとも言える 「グローバル変数が危険とか言うけど変数の場所とか名前とか被らないようにしておけば問題なくね?」 という問題と根っこは一緒だ
- 94 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 17:15:17 ]
- >>77
*.gifとかならできそうですかね。ありがとうございました!
- 95 名前:デフォルトの名無しさん [2008/04/17(木) 17:18:11 ]
- 引数を()で囲まない
Class.method arg という書き方をした時に、 「この書き方は今後のRubyではサポートしない可能性がある」というような 警告が出る時と出ない時がありますが これはどういう時に出るのですか?
- 96 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 17:29:31 ]
- >>95
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/17868 > 具体的には > 引数として与えるメソッド呼び出しの括弧を省略しない > ということです。文法的に値と文の区別をはっきりさせようという > 思いです。 っていうか関数型メソッド以外ではカッコ省略する必要ないじゃんという気はする あとRiteって今で言うところのRuby2.0のことね
- 97 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 18:25:10 ]
- >>96
ありがとうございます マッツの設計思想はわかりますが 引数が一つの時は()書きたくないですね この警告抑制したりできるのでしょうか
- 98 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 18:27:43 ]
- ruby -W1 hoge.rb
もしかしたら W0 でないとダメかもしれん
- 99 名前:デフォルトの名無しさん [2008/04/17(木) 18:54:52 ]
- eachのブロックの中からループのカウント数を知る方法があれば教えて下さい。
- 100 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 18:57:08 ]
- つ each_with_index
- 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)
|

|