1 名前:デフォルトの名無しさん [2010/03/04(木) 11:00:57 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 ★注意★ 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つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
152 名前:149 mailto:sage [2010/03/09(火) 01:41:46 ] それは、知らんかった。 音(的には)P-TOSのなんとかに似ているね。
153 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 01:42:02 ] >>150 こんなのあるのか。笑ってしまった。
154 名前:デフォルトの名無しさん [2010/03/09(火) 02:31:05 ] >>145 まさにその茨の道を進もうとしてるようですよ。 >>147 正直よくわかんね!ってところだからですよ、ええ('A`) 学生の頃も本職になった今もC++で離散系のシミュレーションとかやりつつ時期によっては しょぼいエクセルの業務システム作りをやってますよ。(VBA嫌いなので得意じゃない) sed,awkはそんなものがあるのは知ってたけど,perlでやってました。 バイナリとはいいつつ、ファイルレイアウトを見ると間違いなくパック10進数といった類 の補足説明があるので文字だけってことはないようですね。 とまあそんな自己紹介はいいから、とりあえず明日明後日ともうちょっと下調べして出直 してくる。納期もあってないようなもんなのでまったりやりますよ。 >>146 手掛かりくれてありがとう。
155 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:01:13 ] >>114 freeze は(少なくとも組み込みや添付では)破壊的動作のメソッドの動作を禁止させるフラグ立て def hoge! raise "can't modify frozen Hoge" if self.frozen? ... end というメソッド定義に「自分でする」 破壊的動作や内部構造への再代入をされるとどっかに @foo||= なんかで残ってるインスタンス変数とかが 変更前のまま残ってて場合によっては食い違い動作の原因になりそうだとか そういうおそれがあるクラスに提供する ぶっちゃけこれ使わずに「お前が困る動作組み合わせは全部書いてあるからちゃんとマニュアル読め」でもいい マニュアル読まない人が(あるいはうっかりで)よくないタイミングで破壊的動作をしてしまっても 変更して欲しくないとタグ付けされたオブジェクトだったらメソッド動作の時点でエラー出して守ってあげよう、 そんな若さと渋さの間で揺れるナイス・サーティのアナタに贈る鼻歌みたいな応援歌
156 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:32:47 ] a = [ [ ] ] a.freeze a.frozen? #=> true a[0].frozen? #=> false なんだよな。 当然といえば当然なんだが。
157 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:36:24 ] >>156 それは a つまり Array の freeze メソッドの動作に依存する 配列中の全要素に freeze を適用するという動作にしても構わない(不便だとは思うが) Array#freeze がそういう「外の入れ物だけフリーズさせる」ような動作にたまたまなってるだけ freeze の実装自体はもっと柔軟に対処が可能
158 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:50:48 ] freeze は def hoge! raise_if_frozen … end とか def hoge! … end freeze_method :hoge! とかいう仕組みを作って簡易に利用できるほうがよかったと思う
159 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:58:03 ] freeze 自体が Ruby 文化とあまり適合しないと言われているから うまい構文糖や実装ポリシーが 熱心に研究されていないんじゃないかなあ
160 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 13:11:39 ] evil rubyたのしいです。
161 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 13:11:51 ] private や protected の動作がイマイチなのと根っこはたぶん一緒だよね
162 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 13:44:44 ] if hoge && fuga.size > 0 と if hoge && !fuga.empty? どっちがいい? どっちでもない別の表現がいい?
163 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 13:46:31 ] あと if fuga.size > 0 は unless fuga.empty? にした方がいいんだろうか? どれもお好きなようにっていう程度だろうか
164 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 14:07:25 ] >>162-163 字面が違うから意味が違う が、fuga が配列みたいなもんなら、俺は empty? の活用をまず考える empty? を使うことで否定要素が複数混じってしまうようならすっぱり諦めて size の比較とかにする そんな感じ あと配列なら Enumerable 由来の any? とか all? とかの利用も考えるといい
165 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:21:52 ] >>164 書き忘れてましたfugaはArrayインスタンスです 配列であれば162も163もそれぞれ動作は同じですよね?
166 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:51:22 ] なにを心配してるのかわからん sizeが整数や実数を返す可能性とか考えてる?
167 名前:162 mailto:sage [2010/03/09(火) 17:42:10 ] 心配しているわけじゃなく 意味が同じなら書き方としてどっちがRubyっぽいのかなと思って >>162 ,163で例に出した形の文は今まで前者で書いてたんですけど empty?を使う方がいいという意見を別のところでも見たので。 特に>>162 の方は否定(!)をつけてまでempty?にするのがいいのかどうかってことです
168 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 17:49:23 ] ? を使う述語があるならそっちのほうがいいという話にはどうしてもなるな !foo.empty? みたいなのにはうんざりしてるのか、 ユーザーの作るライブラリでは相反する述語がセットで定義されてることも多い && などで繋ぐ場合は !foo.empty? みたいな記述はけっこう容認されてる雰囲気 if !foo.empty? だけだったら unless foo.empty? 使えという話になるんだけど
169 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 18:26:00 ] >>162 fuga.size > 0 より断然 fuga.empty? をお勧めします。 理由は、fuga.empty? はまさに「空かどうか」を調べるメソッドであり、やりたいことを明確に示しているからです。 これに対し、fuga.size > 0 は「サイズが0より大きいか」を表しており、「空かどうか」を直接表しているわけではありません。 つまり、fuga.size > 0 より fuga.empty? のほうがより抽象度の高い記述になっています。 なお Ruby では .empty? のほうが若干ですが動作速度が速いはずです。
170 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 19:01:57 ] 「要素があるか」を調べたいのに「空か」を調べてさらに加えて否定まで付けなきゃならんのは如何なものかってことじゃろ
171 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 19:35:09 ] だから標準で all? とか any? とかあるって それで不足ならメソッドに掃き出すことを厭ってはならね
172 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 19:41:12 ] unlessがあるんだから使おう、と思うか、他の言語と同じようにifで書こう、と思うか、は 微妙なところだな。自分の場合、何年かの周期でふらふらしてる。
173 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 19:42:39 ] メソッドフル活用派とプリミティブ派のたたかいはまだつづく
174 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 19:44:37 ] Pythonスレ 社会人が多く、大人の発言 初心者に優しい Rubyスレ キチガイ、偏執狂、厨房の巣窟
175 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 19:49:56 ] 要素の数が0以外なら真を返す、みたいなメソッドがないことが問題をややこしくしてる 本当はこのへんは対称性があってもいい(なくてもいいが) うまいメソッド名が思いつかなかったっぽい雰囲気はあるが
176 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 19:56:30 ] >>170 (誤) さらに加えて (正) かてて加えて
177 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 20:05:28 ] any? はよいんだけど、 [ nil ].any? #=> false なので 要素が1つでもあるか、という判定としては万能ではないかもなー。
178 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 20:11:51 ] 万能ではないも何も > 要素の数が0以外なら真を返す、みたいなメソッドがない という話が既に
179 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 20:18:35 ] def hage? … end def fusa? !hage end みたいなメソッド定義はよく見る empty? も時流に乗るべきだとは思う
180 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:24:10 ] 富士通御謹製エフトランを知らん奴が意外と多いんだな 汎用機、オフコンを知らん世代が増えて来たったことだな z/OSで仕事してたころはデータセットをFTPのBINでダウンロードして shift-JISに変換とかよくやってたぜ
181 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:33:53 ] 懐古厨乙
182 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:37:02 ] >>181 レスしたのお前だけだぞ
183 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:41:39 ] おっさん多いなこのスレ。。
184 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:51:59 ] うんにゃ、知らない奴はレスしないだけ バックグラウンドがたまたま見えただけに過ぎない
185 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 04:22:42 ] メソッドと変数が見分けがにくいな
186 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 09:11:00 ] ローカル変数のように見えて実はメソッド、というのはままある。
187 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 09:19:08 ] 「値は必ず確固としたオブジェクト」なので、メソッドだろうがローカル変数だろうが 値を返すキーワードが実際は何でできてるのかは使用者からは区別する必要ないよねというポリシーがある mes(foo) としたとき、foo が変数なのかメソッドなのかは実際どうでもいい foo という名前が解決されてその結果返されるオブジェクトだけが重要 代入が文脈依存なのはそれなりに面倒 selfの有無で同じ名前を2回使い分けられるということでもあるが
188 名前:デフォルトの名無しさん [2010/03/10(水) 09:26:35 ] さすがにそれはどうでもよくないだろー local_var()もできないんだし
189 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 10:01:42 ] 問題になる状況自体が問題だと思うぞ どういうネーミングだよ
190 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 10:10:12 ] めっちゃプリミティブな名前のインスタンスメソッドを作って、なおかつローカル変数もそのままの名前である場合 uri とか
191 名前:デフォルトの名無しさん [2010/03/10(水) 10:34:48 ] 下記コピペの拡散、お願いします! -- ここから -- 欠陥だらけの悪法、民主党が準備を進めている「子ども手当」がまもなく国会を通過する見込みです。 そこで、この法案に対するクレームを直接政府に届けて、少しでも本法案を阻止できるよう動きませんか!? クレーム先:www.cao.go.jp/sasshin/hatomimi/re_hato/uketsuke.html ハトミミ「国民の声」 受付窓口 の「■ 一般受付窓口 【おかしなルール(規制・制度)】」に、「基準や要件の見直し」として、本件に関する 抗議をお願いします。実名とメールアドレスが必要となります。○制度の所管省庁 は、厚生労働省です。 なぜ本法案がまずいのか?子ども手当支給対象者、民主党支持者もじっくり考えてみてください。 【子供手当て驚愕の真実】 www.youtube.com/watch?v=Y4wuKv8ExeM&feature=related 驚愕の子供手当て 5959goc.iza.ne.jp/blog/entry/1475880/ 2010/3/10付の中日新聞 up3.viploader.net/pic/src/viploader1186653.jpg viploader.net/pic/src/viploader1186654.jpg 要件をまとめると、 「外国籍の人間も支給対象」「海外在住の日本人は支給対象外」「養子も支給対象」「財源が赤字国債」 「子どもが外国にいても支給対象」「子どもの存在証明として、法的な力を持つ手段がない」 となります。これにより、以下のことが考えられます。 1. この手当目的に、日本より経済状態が低い外国において不当な養子縁組を作るケースが激増する。 2. この手当目的に、日本にやってくる外国人(特に中国人)が激増する。 3. なによりも、負担は将来の子ども達が背負わなければならない。 国会答弁にて、政府も設計に難があるのは認めていますが、今後検討するという理由で、この欠陥を そのまま推し進めようとしています。まだ諦めるのは早いです。できる限りの手を尽くしましょう!! -- ここまで --
192 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 10:57:01 ] スレ違い
193 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 10:58:59 ] >>192 レスしたのお前だけだぞ
194 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 13:02:57 ] >>191 民主は売国政党だからな
195 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 17:09:34 ] 初心者は1.8.7をインストールすればいいんでしょうか?
196 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 17:36:37 ] はい、そうです。
197 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 17:37:07 ] はい Windowsならarton.hp.infoseek.co.jp/indexj.html ただしコマンドプロンプトの知識がどうしても必要
198 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:11:43 ] def method1(x) return true if (0...1000).include?(x) return true if (2000...3000).include?(x) return true if (4000...5000).include?(x) return false end --- def initialize @arr = [] for i in 0...1000 @arr.push(i) end for i in 2000...3000 @arr.push(i) end for i in 4000...5000 @arr.push(i) end def method2(x) return @arr.include?(x) end 上のmethod1とmethod2をそれぞれ呼び出したとき、 結果は変わらないと思うんですが、処理速度に違いは出ますか?
199 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:49:57 ] def method3(i) case i when 0...1000, 2000...3000, 4000...5000 then true else false end end ほんとうに整数ならこれが速くてわかりやすい 整数なのならわざわざ配列作る必要はない
200 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 19:22:30 ] int x=1000; for(int i=0;i<=x;x*i) { }
201 名前:デフォルトの名無しさん [2010/03/10(水) 19:40:05 ] (0...1000).include?(x) は 0<=x && x<1000 と同じだけど (0...1000).to_a.include?(x) は配列の要素を一つずつ比較するので当然遅くなる
202 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 19:48:12 ] 処理が遅いってどういうとき遅いの?
203 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:05:01 ] >>202 実際に遅いかどうかプログラム作って確かめてから考えたほうがいい 机上で遅そうだと思っても意外と許容範囲内であることは多い
204 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:09:02 ] .NETで作ったdllは参照できますか?
205 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:16:00 ] dll <-> COM <-> Ruby
206 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:18:58 ] へー、COMなら参照できるのか どういう原理なんだ?
207 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:38:42 ] COM Ruby でぐぐると…わあ微妙
208 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 22:27:35 ] pause(2) に相当するメソッドでないんですかね。 とりあえずKernel.#sleepによる無限スリープで代用していますが > sleep(sec = 0) -> Integer > sec が省略されたり 0 を指定した場合、他スレッドからの Thread#run > などで明示的に起こさない限り永久にスリープします。 sleep(0) してもすぐ戻ってきやがる。 マニュアルと実際の挙動が違うのはなぜ? ちなみに引数を省略した場合は仕様通りなんですけど。
209 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 22:33:11 ] pause(2)ってサスペンドの時に発行される奴だっけ? Process.kill :STOP, $$ じゃだめですかね?
210 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 22:34:53 ] >>209 ああ、それいいかもです。 ところでKernel.#sleepの挙動がマニュアルと異なるのが気になりますw sleep(0) ですぐリターンするのは何故でしょう??
211 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 22:38:10 ] まあ個人的にはただしい挙動だとは思いますが。 シェルから sleep 3 を実行すると0秒後に復帰しますし、永久にスリープはしませんね。はい。
212 名前:198 mailto:sage [2010/03/11(木) 00:38:23 ] みなさん、ありがとうございます。 method1の代わりには、ご提示くださったmethod3が確かに良さそうですね 0...1000等はデータ的な数値(整数)で、頻繁に比較するのですが、 データ専用のクラスに数値の配列とmethod2を定義して呼び出し側のクラスから参照して比較したほうが、 呼び出し側のクラス内に直接method1を書くよりも記述のまとまりとしては良いと思ったんです かと言って、データのクラスにmethod1や3のような記述をしても、 データを管理しているイメージはないですよね
213 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 00:58:39 ] www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html ここには0の場合永久スリープとは書いてないな。 RubySpecには it "pauses execution indefinitely if not given a duration" (引数がないなら無限に止まる) はあるけど0を指定した場合の仕様は書いてない。 github.com/rubyspec/rubyspec/blob/master/core/kernel/sleep_spec.rb でもって、るりま doc.okkez.net/static/187/class/Kernel.html には0だと永久スリープとある。 るりまの間違いだろうか。
214 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 01:02:12 ] >>212 え、なにそれ class HogeDataRange def include?(x) case x when 0..1000, 2000...3000 then true else false end end end puts "13は含まれてるよー" if HogeDataRange.new.include?(13) とかやる気なの?
215 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 01:24:00 ] Rubyでできないことって何?
216 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 01:26:47 ] >>215 あなたができそうだと思っているようなことは全てうまく行えない と答えるのが一番実態に近いと思うん 説明してだいたいをわかってもらえるような人はそういう聞き方しないので
217 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 01:33:05 ] そっか
218 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 02:40:42 ] ものそい他人任せだが、他の初心者にやさしい「見た目わかりやすい」言語を学んでからだと Rubyのような言語の立ち位置がよく理解できるかと思う 最初からRubyだけ与えられている状態はけっこう不幸だ だから大学1年の授業にRubyを使うとかいうのは俺はあまりいいと思わん
219 名前:212 mailto:sage [2010/03/11(木) 02:53:01 ] >>214 そんな感じのをやる気なのですが
220 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 04:49:39 ] pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=%B5%D5%B0%FA%A4%ADRuby%2FTk ここの一つ目のサンプルコードをコピペして実行したのですがエラーになってしまいます それとサンプルのVisualnovelも他のrbファイルを取り込むところで 見つけられないらしくエラーが出てしまいます requireをしないコードは普通に実行できます それと実行はRDEでやっています Pathはbinが環境変数のところで通っています 何がいけないんでしょうか? XPsp3 Ruby1.8.7 RDE1.1.1.1 C:/DOCUME~1/***/LOCALS~1/Temp/rbF.tmp:1:in `require': no such file to load -- tk (LoadError) from C:/DOCUME~1/***/LOCALS~1/Temp/rbF.tmp:1 Complete(1)
221 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 06:08:59 ] tcl入れてないんじゃね?
222 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 10:16:02 ] そのRuby自体が、tkをサポートしてないRubyに見える
223 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 11:27:44 ] net/httpライブラリでデフォルトのリクエストヘッダを設定する賢い方法ない? http.rbのHTTPGenericRequest#initializeを直に書き換えるのは気持ち悪いよな
224 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 11:44:58 ] そのような動作をするクラスやメソッドを別途作る net/http そのものを弄ることは推奨されない 固定の HTTP ヘッダが必要なら、固定の HTTP ヘッダを追加して Net::HTTP オブジェクトを作るメソッドを作る
225 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 11:46:51 ] 手順的に不正確だった > 固定の HTTP ヘッダを追加して Net::HTTP オブジェクトを作るメソッドを作る は Net::HTTP オブジェクトを作って固定の HTTP ヘッダを追加して返すメソッドを作る
226 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 11:57:11 ] そこまで書くなら Net::HTTP オブジェクト自体はヘッダのデータ持たないと思うにゃん
227 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 12:16:18 ] よーわからんがこういうの? require 'net/http' # Net::HTTP.version_1_2 # 1.8.7では既にtrue def http_get(uri, header={}) Net::HTTP.start(uri.host, uri.port) do |http| req = Net::HTTP::Get.new(uri.request_uri) header.each_pair{|k, v| req[k] = v} return http.request(req) end end uri = URI.parse('www.ruby-lang.org/ ') p http_get(uri, {'Accept-Language' => 'ja'}).response['location'] p http_get(uri, {'Accept-Language' => 'en'}).response['location']
228 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 12:19:50 ] /aaa\/bbb/ という正規表現文字列にマッチする正規表現というのはどう書けばいいんでしょうか。 \/.*?\/ と書いて、中の\/にマッチしないように \/[^\\\/]*?\/ としてもダメでした。
229 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 12:37:15 ] irb> Regexp.new(Regexp.quote("/aaa\\/bbb/")) =~ "/aaa\\/bbb/" 0 irb> Regexp.new(Regexp.quote("/aaa\\/bbb/")) /\/aaa\\\/bbb\// irb> p "/aaa\\/bbb/".scan(/\/aaa\\\/bbb\//) ["/aaa\\/bbb/"] nil irb> p "/aaa\\/bbb/".scan(/\/.+?\\\/.+?\//) ["/aaa\\/bbb/"] どこまで汎用になればいい? 本当にマッチさせたいものはなに?
230 名前:220 mailto:sage [2010/03/11(木) 12:41:00 ] jp.rubyist.net/magazine/?0011-CGIProgrammingForRubyBeginners-2#l2 ここに書いてある通り、One clickインストーラーをインストールしたので tkは自動で入っているらしいのですが tk.rbで検索してもHDD内のどこにもなかったんですが やっぱりインストールされていないということなのでしょうか?
231 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 12:53:06 ] >>230 OneClickInstallerを使って1.8.7になるはずがない あれは1.8.6しか存在しない 君が使ったのはRubyInstallerで、これはtkライブラリは含まない Windowsでtkライブラリを使いたいのなら>>6 のActiveScriptRubyを使うべき これならActiveTclが別途入ってればなんとかなる 余談だけど > 更新日時:2005/11/16 21:36:46 5年も前の記事をほいほい参考にすべきではない
232 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 13:47:54 ] >>224-227 Thanks! やっぱソコソコ手間かかるか 目的を正直に白状すると,デフォルトのUAがアレなので 常時ナチュラルなUAでライブラリを使用したいだけなんだよね 俺仕様ってことで推奨されない方法で行きます
233 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 13:53:49 ] >>228 str = "hoge/aaa\/bbb/fuga" re = /\/[^\/]++\/[^\/]++\// p str.slice(re) #=> "/aaa/bbb/"
234 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 13:59:46 ] >>232 Net::HTTP を直接使用することは極力避けたほうがいい(第一面倒だ) 自作のスクリプトで何度も使うというのならそのようなライブラリを自作するチャンス 俺は wget を定義して require 'orelib/wget' してしばらく使い回してたぞ
235 名前:232 mailto:sage [2010/03/11(木) 14:15:56 ] >>234 >極力避けたほうがいい それはどうして? net/httpのAPIは結構気に入ってるんだけど コネクションがスレッドセーフじゃないとか Errno系の例外が不親切とかそこら辺?
236 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 14:28:03 ] Net::HTTP は抽象度がわりと低いほうだからじゃないでしょうかぬ システム的な問題ではないと推測
237 名前:220 mailto:sage [2010/03/11(木) 15:25:24 ] >>231 仰る通り単体のRubyを入れていたようです oldと書いていたので新しいもののほうがいいと思って そっちをダウンロードしてしまったみたいです ActiveRubyをダウンロード gemのアップグレード この時点で試しに require "tk" したけどエラー、tcltklibbなどtk関連のファイルがあるのに開けないみたい >これならActiveTclが別途入ってればなんとかなる この一文がなければここで挫折してました そしていろいろぐぐっているとVisualuRubyはすでに入っているようなので こちらでGUIを作りたいと思います ありがとうございました
238 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 16:51:12 ] すみません。お尋ねします。 ファイル上書き確認のコードを書いているのですが if File.exist?(outfile) print "#{outfile} は存在しています。上書きしますか ? (y/n): " answer = STDIN.gets if /y/i !~ answer exit; end end 問題ないときもあるのですが、状況によっては(その状況が いまいちよく分からないのですが)printが実行される前に STDIN.getsに入って、何も表示されないまま待ち受け状態に なってしまいます。printの対象を事前にflush(?)するには どうしたら良いのでしょうか?
239 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 17:08:07 ] >>213 あんまりよくわからんなりにソースを読んで見たところ(Windows版Ruby1.8.7だとして) sleep は引数が無いなら WinapiのSleep(INFINITE)で無限に待つみたいで 引数があるなら Winsockのselectっていうのを呼んでた selectはタイムアウト0秒だとすぐに帰って来るみたいなので sleep(0) だと sleep() とは違ってすぐに帰ってくるようだ るりまが間違ってるんじゃないだろうか? あんまり自信があるわけじゃないので だれか詳しい人、正確な説明よろしく
240 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 17:08:27 ] 自分で答言ってる if File.exist?(outfile) print "#{outfile} は存在しています。上書きしますか ? (y/[n]): " $stdout.flush exit if $stdin.gets =~ /\Ay/i end
241 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 17:09:19 ] >>238 flushって言葉を知ってるなら IOのインスタンスでありprint等の出力先である$stdoutにそれをすればいい と言えばわかるんじゃないかな
242 名前:238 mailto:sage [2010/03/11(木) 17:25:47 ] >>240 , 241 バッチリ動きました。ありがとうございました。 情けないことに$stdinの方をflushして 動かんなー、と悩んでました・・・。
243 名前:220 mailto:sage [2010/03/11(木) 18:02:05 ] tkの方が解説サイトや機能が多いので TCLフォルダにActiveTCL入れてみたけど実行するとエラーになる いろんなサイトみて環境変数にパスもちゃんと入れたのに TCL_LIBRARY TKL_LIBRARY INCLUDE LIBなど 実行するとここを読みに行ってエラー /Ruby/lib/ruby/1.8/i386-mswin32 ここにもActiveRuby入れたときのTCLがあるのになぜエラー? もう疲れたよ・・・
244 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 18:11:21 ] ActiveScriptRuby(ActiveRubyというものは存在しないしこう表現してもいけない)は デフォルトで C:\Program Files\ruby-1.8 にインストールするはずだが C:\Ruby にインストールされるのは RubyInstaller の Ruby
245 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 18:18:22 ] RubyInstallerをアンインストールしなかったのか 予想外だ というかRubyでGUIなんかわざわざやろうという人はもっと熟練して賢いもんだと思ってた
246 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 18:24:04 ] やはりTkへのアクセスの存在は隠したほうがいいのかもしれない もう応対がめんどくさすぎる デフォルトOFFのRubyInstallerの判断は賢い …正式版じゃないからかもしれないが どうしてもTkに処理を渡したいとき用のライブラリであって、 Rubyでウィンドウを作るためにあるわけじゃない なんでRubyでウィンドウアプリケーションを作ろうと考えるのかもう全く理解できない
247 名前:220 mailto:sage [2010/03/11(木) 18:32:29 ] 簡単なのはRubyと聞いたのでやろうと思ったんだけど まさかインストールするだけで2日かかるなんて
248 名前:220 mailto:sage [2010/03/11(木) 18:35:42 ] >>244 空白開いてるといけないとかどこかで見たから デフォルト変えてD;\直下にインストールしただけ エラー表示されるときのパスもちゃんとインストールされた 場所のTCLを参照しているし、でもエラーが出る RubyInstallerはActivescriptRubyを入れる前に ちゃんとアインインストールしました 残ったフォルダも直接削除しましたし
249 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 18:38:28 ] >>247 簡単だよ ただ、OS操作とコマンドライン文化に不慣れなプログラミング初心者が独学でやっても簡単だと言った人がいたなら 俺が許可するのでグーで殴れグーで
250 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 18:40:00 ] >>249 スレのテンプレすら読めない人も追加で
251 名前:220 mailto:sage [2010/03/11(木) 18:46:47 ] >>246 >なんでRubyでウィンドウアプリケーションを作ろうと考えるのかもう全く理解できない ここを見たので、この通りやろうとして躓きました jp.rubyist.net/magazine/?0002-FirstProgramming 逆になぜ作ってはだめなのか私にはわかりません そういった説明もないですし
252 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 18:48:50 ] >>250 そだな、>>1 の注意書きとか読めてないような人にはたぶん無理だな