1 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 16:10:50 ] オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。 Ruby Home Page www.ruby-lang.org/ja/ = 前スレ Rubyについて Part 32 pc11.2ch.net/test/read.cgi/tech/1215531152/ 過去スレ・関連スレは >>2-
182 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 16:00:22 ] > これ何ですか? 大雑把な疑問だなオイ 書いてあるそのまんまだと思うぞ 自分の環境が該当するものでないのなら無理に導入しなくてもいい 1.9サポートって言っても文法エラー取り除いた程度だと予想
183 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 18:31:41 ] ついったーの様子だと、 とりあえず1.9で動くようにした程度かな。 twitter.com/shugomaeda
184 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 23:18:23 ] mod_ruby も、スクリプトごとにRubyインタプリタ起動すれば使う気になるのに。
185 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 00:11:15 ] >>182 > 1.9サポートって言っても文法エラー取り除いた程度だと予想 もっといろいろ大変だったんだよ つーか昨夜リリースできたのは驚異的
186 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 00:14:36 ] >>184 MVMが実装されるまで待て。
187 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 01:22:56 ] RubyキモいよRuby www
188 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 01:35:22 ] >>184 mod_rubyの意味ないじゃんじゃん?
189 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 15:01:28 ] >>184 >mod_ruby も、スクリプトごとにRubyインタプリタ起動すれば使う気になるのに。 それはCGIのことか?
190 名前:184 mailto:sage [2008/11/09(日) 16:16:31 ] >>189 スクリプトというか、アプリケーションごと? インタプリタはリクエストごとに起動するわけではなく、 Apacheとともに常駐するんだけど、 全部のスクリプトでそのインタプリタを共有するわけじゃなくて、 スクリプトごとに固有のインタプリタがあると良い。
191 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:28:55 ] グローバルな状態をアプリケーション単位で分けたいということですかね。 >>186 が言うようにMVM待ちかなぁ。
192 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:42:41 ] FastCGI等のプロセス常駐じゃだめなの? よくわからんけど
193 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 18:59:13 ] FastCGIはたしかにスクリプトごとにパーシステンスプロセスを起動するね。 CGIと違ってリクエストごとには起動しない。 >>184 のやりたいことはこれかなあ。
194 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 20:09:18 ] Ruby 的には mod_ruby と FastCGI とどっちがおすすめなんでしょうか。 mod_ruby って実は mod_php や mod_perl とかと相性悪かったりしない?
195 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 21:07:16 ] rubyは汎用なんでおすすめApacheモジュールとか言われても困るんじゃないの。 オススメはwebrickかmongrel
196 名前:184 mailto:sage [2008/11/09(日) 22:10:00 ] うん、だからFCGIやmongrel使うことになって、 mod_ruby を使いたいんだけど使えないなあと。 ほんとは mod_wsgi みたいに mod_rack が欲しい。
197 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 22:49:25 ] Phusion Passengerってのが別名mod_rack/mod_railsらしいけど詳細は知らない
198 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 00:32:36 ] アプリがrackやrailsだったらpassengerが希望のものかと。
199 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:04:46 ] >>148 日本語SPAMフィルターでrubyのやつがあったね そういえば
200 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 14:08:08 ] rubyのコードを書けるコマンドラインのリネーマーツールってない? rren -recurse *.txt "$_.upcase!" で aaa.txt bbb.txt が AAA.TXT BBB.TXT になるようなのでもっと至れり尽くせりなやつ。
201 名前:デフォルトの名無しさん [2008/11/13(木) 14:13:02 ] >>200 > もっと至れり尽くせりなやつ。 単に ruby でワンライナー書くのが一番至れり尽くせり。
202 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 14:20:37 ] 定型処理には、ワンライナーは不便かもしれない。 rename [-g "グロブ記述"] "正規表現" くらいのインターフェイスでコマンドを書けばいいんじゃね?Rubyで。
203 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 14:55:57 ] for filename in *.txt; do echo $filename `mv $filename | ruby -n -e 'print $_.upcase'`; done ファイル名に空白とか入ってておかしなことになっても知らん
204 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 14:56:49 ] あ、間違えた for filename in *.txt; do mv $filename `echo $filename | ruby -n -e 'print $_.upcase'`; done
205 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 18:33:16 ] >>203 は、echo で一回テストしてみる慎重な人。
206 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 18:53:48 ] mv はよく痛い目に遭うから。 mv <パターン> <ディレクトリ> で、ディレクトリを入力し忘れたら、パターンに マッチしたファイルが2つで、2つめのファイルが消えちゃったとか。
207 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 21:42:08 ] echo で試した後、ヒストリ戻って | sh と付けたりする。
208 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 07:04:10 ] 1.9.1-preview1のバグ? subの第二引数にSJISの文字列を渡すと、2バイト目の\に反応しちゃってる >ruby19 -Ks -ve "puts 'test'.sub(/test/,'表0')" ruby 1.9.1 (2008-10-28 revision 19983) [i386-mingw32] 付est 「+暗が gsub できない」のブログエントリを見て そりゃあJISコードを直接扱うのは無理があるだろっ でもSJISも2バイト目に\が来たら、-Ksとかでちゃんと$KCODEをSJISにしておかないと引っかかるよなぁ だがしかし、1.9ならば文字列のエンコードさえしっかりしておけば無問題だぜ! >ruby19 -Kn -e "puts 'test'.sub(/test/,%!\x95\x5c0!.force_encoding('SJIS'))" 付est だめじゃんorz
209 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 08:09:14 ] Rangeに x < first ? first : x > last ? last : x なメソッドってないもんかね。あってもよさそうな気がするのだが。
210 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 09:31:27 ] いい名前がないからじゃないかな ぴったりな名前ある?
211 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 13:02:14 ] limit か bound 辺りかな? (1..10).limit(11) => 10
212 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 13:25:05 ] 俺は以前、こんなメソッド定義してた (1..10).fold(11) #=> 10 11.fold_in(1..10) #=> 10
213 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 14:27:05 ] なんか fold っていうと inject を思い出すな
214 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 16:59:52 ] >>209-213 自分はclampってのを使ってるけど、何故その名前を 使い始めたか思い出せない。合ってるのか?
215 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 20:21:02 ] >>214 いまいちな感じ ━━ n., vt. 締め金(で締める); (駐車違反車を)車輪止め(wheel 〜)を掛けて動かせなくする. * clamp down (on) (…を)押えつける; (…を)厳重に取締る. * clamp・down 取締り.
216 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 20:41:36 ] 以下カードキャプター禁止
217 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 20:49:25 ] >216 Holicやツバサなら良いのか
218 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 22:48:26 ] >>208 thx 珍しく田中さんのバグかと思ったらまつもとさんだった。
219 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 00:02:19 ] Range#clip とか。clipping の clip。
220 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 02:00:14 ] clipだと、される側が値じゃなくて範囲のように思える。
221 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 02:09:57 ] imprison は?てかclampよくね
222 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 03:17:36 ] >>211 のboundでいいと思うがなー。 bindの過去分詞じゃなくてboundaryのほうの動詞型だよな?
223 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 21:40:25 ] 以下のようなコードなのですが ruby -v #=>ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32] <-- $KCODE='s' t = <<TEXT \"<src>\" TEXT t.sub!('<src>',"C:\\うた\\01.txt") p t --> #=>"\"C:\\うた<src>1.txt\"\n" となってきちんと置換されません。 "C:\\うた\\01.txt"の部分は起動時の引数を 考えています(運用時に変化する) どのようにすれば #=>"\"C:\\うた\\01.txt\"\n" のように置換できるでしょうか?
224 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 21:46:48 ] www.ruby-lang.org/ja/man/html/String.html >注意: gsub の項には sub/gsub を使用する上での注意点が書かれています。 >置換文字列 replace 中の \& と \0 はマッチした部分文字列に、 >\1 ... \9 は n 番目の括弧の内容に置き換えられます。 というわけで。 t.sub!('<src>'){"C:\\うた\\01.txt"}
225 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 22:51:46 ] 文字列をevalすると中を評価してしまう副作用があるけど、 評価しないで文法エラーがあるかどうかだけ知る方法はないだろうか。 1.9ならripperでやれると思うのだが、あいにく1.8。 いま考えているのは ruby -w をforkして標準入力から流し込む。
226 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 22:56:26 ] eval("if false \n"+ program +"\n end") で例外が起きなければ多分正しい気がする
227 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 23:00:56 ] >>226 なるほど3Q
228 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 23:05:43 ] eval "proc {" + program + "}" とかでもいいのかな。
229 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 23:15:04 ] おれも eval "proc { #{program} }" 派だ。 begin eval "proc { #{program} }" rescue SyntaxError => ex puts ex.message end
230 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 23:16:52 ] program='end;exit;begin' とかやるとexitしちゃうので信頼できないソースにやるのは駄目だな
231 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 01:14:49 ] >>225 そっちでいくなら ruby -c で終了コードを見た方が。 > ruby -ce 'p 0' || echo error Syntax OK > ruby -ce 'p 0.' || echo error -e:1: syntax error, unexpected $end error
232 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 03:35:41 ] お前ら、ちょっとくらいソースのぞいてみろ。 sample/test.rbにそのまんまのがある。 def valid_syntax?(code, fname) code = code.sub(/\A(?:\s*\#.*$)*(\n)?/n) { "#${"\n" if $1 && !$2}BEGIN{return true}\n" } eval(code, nil, fname, 0) rescue Exception puts $!.message false end
233 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 11:23:07 ] がんばってみたけどやっぱりダメみたいだ。 ごめんなみんな。
234 名前:223 mailto:sage [2008/11/18(火) 13:02:24 ] >>224 レスありがとうございます 思った通りに処理できるようになりました
235 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 03:03:37 ] 国籍法改正案について語ろうぜ
236 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 03:29:00 ] >>235 mamono.2ch.net/newsplus/
237 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 03:30:35 ] +(笑)
238 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 21:28:32 ] Ruby-Gnome2にはお世話になってるので、GUIに関するアンケートに答えたけど、 英語が苦手なのできつかった。。
239 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 23:16:02 ] what?
240 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 23:30:32 ] これこれ blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/45649
241 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 09:47:40 ] thanks. (あれ?一度レスしたつもりだったが、してなかったか)
242 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 11:09:42 ] メソッド呼び出しの括弧を省略したらProcオブジェクトが とれるようにしようぜ 今みたいに関数オブジェクトを名前で指定するって ダサすぎね?
243 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 11:58:49 ] それは何を中心に考えるかによるからなあ。プロパティ指向と考えれば今のもあり。 それより、 Rubyって関数とかブロックとかクロージャ類の扱いがなにげに冷遇されてるというか あんまりきちんと整理されていないというか。 他の言語でクロージャ使って書くつもりのことがRubyだとすんなり書けないね。 表層的には ・ブロックが関数と同等でない(ブロックをとれないなど) ・内部関数(Schemeのinternal defineみたいの)を書けない Rubyという言語の設計において、クロージャ類は従属的な存在なんだと思う。
244 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 13:03:31 ] >242 名前っつーか、そのためのシンボルのハズなんだが ちとシンボルと実体が疎に過ぎる気はするなあ。 >243 Rubyに純粋な意味での「関数」は無いからね。 文の塊をつくる手段は所属するオブジェクトが必要な「メソッド」と オブジェクトそのものである「ブロック/Proc」の2種類。 PythonやJavaScriptみたいな設計は 「publicな属性が存在する」ことが前提。 「メソッドはpublicな属性に、クロージャが入ったもの」という感じ。 この設計では、関数もメソッドも似たような存在。 ところがRubyはpublicな属性をいきなり排除して 「オブジェクトの属性にはメソッドを通してしかアクセス出来ない」 としてるから、その設計が出来ない。 というのもRubyで「メソッド=クロージャ」…としてしまうと public属性にアクセスできない=クロージャにもアクセスできなくなるんだよね。 だからRubyがpublic属性を否定する限り メソッドは特別な存在でなければならず、クロージャではありえない。 …お陰で、相対的にクロージャの地位が下がっちゃってる。
245 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 13:07:21 ] ただ、もう少しProcとメソッド双方歩みよって 「違うけど、似たように扱える」仕組みがあっても良いとは思う。
246 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 20:25:17 ] メソッド呼び出しの括弧の省略を許す限りなかなか難しいだろうなあ
247 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 23:20:48 ] フリーの統合開発環境「NetBeans 6.5」正式版リリース
248 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 02:07:28 ] メソッドをProcにするのなんか、 x = proc {obj.foo} でいいんじゃね?
249 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 04:22:24 ] 1.9だと ブロック引数にデフォルト値の指定ができるし、ブロックも渡せる block=lambda{|a,b=2,&c| p [a,b,c.yield]} block.call(1){'block'} #=> [1,2,'block'] もう、いっそのこと {|| 〜} って書いたら、それはProcとして扱ったらいいんじゃね?
250 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 04:41:37 ] あと、素人の浅知恵&妄想だが selfを省略した括弧付きのメソッド呼び出しに限定して メソッドが存在しない時に、同名の変数があって それがProcオブジェクトなら call する 同名変数が存在しないか、変数がProcオブジェクトでなければ method_missing 今だって def a;'def a';end a = 'var a' なんてしたときは 字面の a だけをみても変数なのかメソッドなのかわからんのだし p a, a() で、呼び分けるんだから a()がメソッド呼び出しなのか 変数aのProcオブジェクトをcallしてるのか判らなくてもいいんじゃね a = lambda{'proc a'} p [a, a(), a.call] # => [#<Proc:〜 (lambda)>, "def a", "proc a"] で呼び分けれるし
251 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 04:49:18 ] で、 alias func lambda などとすれば x = func{p 'function'} x() あらまぁ、もはや関数と見分けがつかない なんちゃって
252 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 05:54:47 ] >selfを省略した括弧付きのメソッド呼び出しに限定して selfじゃなくてレシーバの省略だった おまけで __proc__みたいな感じでProc自身が取れたりすると Procの再帰がさせやすくなったり
253 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 15:42:42 ] >>250 > 今だって > def a;'def a';end > a = 'var a' > なんてしたときは 字面の a だけをみても変数なのかメソッドなのかわからんのだし これはメソッドaの有無にかかわらず常にローカル変数になるんじゃないか?
254 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 16:47:35 ] 代入があればローカル変数 そうでなければメソッドaの呼び出し
255 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 12:30:01 ] 先生、アンケートです。 あるデータから引数に該当するオブジェクトを検索抽出するメソッドがいくつかあります。 該当が無かった場合は nil やら空配列 [] やらが返ります。 で、このメソッドはブロックをとります。 data.search(cond){|e| e.process } こんな感じで、抽出したオブジェクトのメソッドを使った処理をブロック内でしたいです。んで、このブロックは ・ 該当オブジェクトを探せなかったときには何もしないで処理を継続させる(抽出失敗はここではわからない) ・ 該当オブジェクトを探せなかったときにも nil を渡して NoMethodError でそれを報せる のどっちがいいかな? String#match なんかは前者で、ブロック内で作った変数が空かどうかでマッチの成功失敗を調べたりするよね
256 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 12:38:10 ] >>255 前者はエラートラップ不要で手軽。 後者は込み入った処理ができる。どっちもどっちだと思う。 そのメソッドの用途によるけど、マッチしなかったときの処理が 重要になるかどうかで決めつけていいんじゃない?
257 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 12:54:51 ] うん、どっちも採用理由があるなあ、とは思った。 どっちにしても、失敗検知用の if 文みたいなのはいるなーとか。 いや、これ、他人様のライブラリの便利メソッドの挙動なんだよね。 現行は後者なんだけど、前者のほうが便利なんじゃないかという気がひしひしと…。 「偽や空が渡ったら規定の例外を吐くブロック」とかないかなあ。 ああ、この便利メソッド自体が nil だったとき特定の「DataNoMatchError」とか吐けばいいのか。 場合によっては抽出失敗はしょっちゅう起こるし、そんな細かい例外も面倒だなあ。 でも「nil がどっかで出た結果、あのへんの処理が滞りました」としかわからない現状よりは、 特定の例外でエラー情報がわかったほうが便利なのかも。 …ありがとう。ちょっと考えてみる。 ちなみに、HTML から特定の要素や属性を抽出するメソッドです。サーバの HTML が変わって要素が無くなったら nil。
258 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 13:05:52 ] 「そんなん見ればわかるわボケ」という例外はイライラする 捕捉する機会があれば便利なのかもしれないが、普通の人はこんなん捕捉しないだろうな、みたいな
259 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 19:57:39 ] Ruby/DBI のプリペアドステートメントで使える変数の個数に制限ってありますか? 変数9個の場合なんですが、 mysql = DBI.connect(ry mysql.execute("SET NAMES utf8") mysql.execute("INSERT INTO example_table (a, b, c, d, e, f, g, h, i) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)", var1, var2, var3, var4, var5, var6, var7, var8, "ENCRYPT(var9)") というような文を実行すると、 Too many SQL parameters (RuntimeError) from /usr/lib/ruby/1.8/DBD/Mysql/Mysql.rb:569:in `execute' from /usr/lib/ruby/1.8/dbi.rb:893:in `execute' というエラーになります。 また、Ruby/DBI を使う上でのドキュメントを探しているのですが、 Ruby DBI モジュールを使う www.jiubao.org/ruby-dbi/ruby-dbi.html 以外でおすすめがあったら教えてください。
260 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 21:04:55 ] >>257 searchって名前で検索抽出するのに、抽出失敗時にもブロック呼ぶの? 変だろうそれは。 探すのと辿るのでは目的が違うんだから、全部辿って何かしたいなら foreach とか scan とか search_all とか、そんな名前にすると思うけど。
261 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 21:12:55 ] >>259 実は MySQL の制限だったりしないかと思ったりしつつ。 irb(main):005:0> db = DBI.connect("dbi:sqlite3::memory:") irb(main):006:0> db.do("create table tt (a1 integer, a2 integer, a3 integer, a4 integer, a5 integer, a6 integer, a7 integer, a8 integer, a9 integer, a10 integer, a11 integer, a12 integer)") => 0 irb(main):007:0> db.do("insert into tt values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", *(1..12)) => 1 irb(main):008:0> db.select_all("select * from tt") => [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
262 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 21:39:49 ] search って名前ではないだろう、さすがに いやわからんけど
263 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 15:09:38 ] 便利メソッドだってのがポイントかね Array#findでなんとかなるけどこれを使うと何か便利、みたいな
264 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 17:29:39 ] data.traverse do |t| t.match do |e| e.process end t.failure do |e| ... end end みたいなインタフェースはどうだろう。 自分で言うのも何だけど、match/failureって名前でいいのかとは思うがそれは置いといて。
265 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 17:59:25 ] ちょいと質問。 HTMLのリンクとか面倒な部分をカンタンな記述→複雑なデータのように自動で変換記述する自分用スクリプト作ってます。 Wiki の [[キーワード]] みたいなやつ。 pstore の DB つきで、[[hoge-12]] と書いたら DB 内の Hoge の 12 項の説明文つきリンクで置き換わる、みたいな。 で、置換なんだけど、一般的に、ファイル全体に対して置換ワードごとに何度も gsub するしかない?
266 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 18:02:03 ] >>265 str.gsub(/\[(.*)\]/) {|s| table[s] } こんな感じ。
267 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 18:03:00 ] てきとーに書きすぎたw リファレンス見ながら察して。
268 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 18:08:16 ] 初めのころはgsubで書いて、 そのうちcase文とかif文とかの使用を考えて、 大量の一時状態保持変数とバカみたいに複雑な分岐処理で破綻して、 結局gsubに戻ってくる 正規表現をワードタイプの通知も含めて複雑にするか([[〜]]と<<〜>>は違う、みたいな)、 ワードタイプごとにgsubを分けて何度もgsubするかは好みと処理時間で
269 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 18:21:40 ] あ、一時保持変数で思い出した [[hoge-13]] だとHogeの13なんだけど、[[-13]] だと、その [[-13]] が言及してる文章のセクションの13項目なんだよね ファイル名とかで区別できるんじゃなくて、文章の中の、HTML でいうとこの <h1 class="about_hoge">Hoge について</h1> リンクだよ→ [[-11]] <h1 class="about_mage">Mage について</h1> リンクだよ→ [[-12]] で、[[-11]] は [[hoge-11]] で、[[-12]] は [[mage-12]] なんだよ gsubと相性悪いなあと思う
270 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 18:48:56 ] >>269 そんな表現認めたほうが悪いというのはさておきw そこまでコンテキスト依存度高くしたら、スキャナで頭から舐めるか 構文木みたいな内部表現にしてから処理と出力するしかないんじゃ?
271 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 19:23:45 ] strscanでスキャナ書いてしまうのが楽。
272 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:03:45 ] break と next と continue と return の使い分けがわかりません。
273 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:07:56 ] >>272 break:ループ全体を打ち切り next:ループ1回分だけ打ち切り continue:なにそれ? return:関数を打ち切り
274 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:08:27 ] continue じゃなくて retry でした
275 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:12:23 ] retryはループを振り出しに戻して最初からやり直す
276 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:15:21 ] たいていの解説には嬉々として例が載ってるはずなんだけどな
277 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:27:11 ] def foo(&x) @x = x end def bar() @x.call end foo{ if $hoge xxxx 1 else xxxx 2 end } xxxxに何を入れたらいいかわかりません
278 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:33:17 ] >>275 retryってループそのもののやり直しだったのか ループのその回をやり直しっていうキーワードはないの?
279 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:35:04 ] つーかここ初心者スレじゃないじゃん。 >>277 たぶんbreak。だめならreturn。irbで叩いてみ。 >>278 リファレンス嫁。
280 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 15:14:54 ] retryはhttp扱ってるときに503を返しやがったときに使うわ。 rescue節でちょとsleepしてからretry
281 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 15:25:52 ] >>278 redo 微妙なネーミングだなあ
282 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:17:10 ] >>277 exit