Ruby 初心者スレッド ..
159:デフォルトの名無しさん
09/11/01 21:12:16
>>157
HTは、1コアを2コアに見せかける技術だから、1コアをもし使いきっているなら、
タスクマネージャでどう表示されようが、100パーセント使い切ることになるように思うけど、どうだろう。
ファイルやネットワークの入出力がある場合は100パーセントになりにくいけど、
非同期I/Oを使って頑張れば100になるんじゃないかなー。
最近のCPUは2コアが普通だから、158のように複数プロセス起動しないとだめだろうね。
160:デフォルトの名無しさん
09/11/01 23:49:32
そんなことまで考えてプログラミングしてるのか
すごいなお前ら
161:デフォルトの名無しさん
09/11/02 00:06:26
"begin a,b,a,a,b end"
のような、中身が繰り返しているような文字列のマッチはどんなふうにするのがいいでしょうか?
/begin ((a|b),)*(a|b) end/
とすればできましたが、2回同じこと(a|b)を書いているのがちょっと気になります
あと、できれば繰り返しの部分を$1,$2,$3・・・のようにあとで取得したいのですが、可能でしょうか?
162:デフォルトの名無しさん
09/11/02 04:12:38
>>161
>2回同じこと(a|b)を書いているのがちょっと気になります
正規表現なら我慢して書くしかないように思う。
>繰り返しの部分を$1,$2,$3・・・のようにあとで取得したい
マッチする個数がわからないと難しい。
/begin ((a|b)(,(a|b))*) end/
として、
$1.split(/,/)
とするぐらいか?
あと (a|b) は、もしほんとにaとbを使うだけなら[ab]のほうがいい。
/begin ([ab](,[ab])*) end/
163:デフォルトの名無しさん
09/11/02 08:00:11
ここはRubyスレなので、Rubyの正規表現なら、という話なら、
(?<名前>任意の表現) と
\g<名前> の組み合わせでできる。
/begin ((?foo<(a|b)>),)*\g<foo> end/
164:デフォルトの名無しさん
09/11/02 08:06:53
Rubyの正規表現と称して>>163がOniguruma実装限定の正規表現持ち出してきたのが笑える
165:デフォルトの名無しさん
09/11/02 08:23:44
begin 〜 end だけ抽出しておいてそれに (a|b) の scan かけるんじゃだめなん
166:デフォルトの名無しさん
09/11/02 10:51:59
>>164
1.9ならOnigurumaが標準だろ
167:デフォルトの名無しさん
09/11/02 10:55:27
そんな寝言は1.8.7を撲滅してからほざくがよいぞ
それまでは両バージョン用併記か注釈で対応バージョン明記
168:デフォルトの名無しさん
09/11/02 10:58:37
スレとしては 1.8.7 が推奨バージョンなんだから、
1.9 限定動作は「1.9.1 だとこれで一発」みたいなコメントはつけとくべきかもな
169:デフォルトの名無しさん
09/11/02 11:04:48
普段く1.9の質問したら、氏ね、1.8使えと煽るくせに、
正規表現は1.9で書き込むとか、
ここの住人はダブルスタンダードだな、おい
170:デフォルトの名無しさん
09/11/02 11:24:05
1.9でレスしてもいいんだがそうと明記すべきだぬ
171:デフォルトの名無しさん
09/11/02 11:24:40
いつの話だよ
さすがに今1.9を使うなって奴はいないだろ
172:デフォルトの名無しさん
09/11/02 11:28:12
>>169
だって君の言う「ここの住人」って、一人しか居ないわけでもなければ、
まったく同じ考え方をする集団ってわけでもないもの。
ダブルスタンダード認定は、前者と後者が同じ人間によって書き込まれたことを
確認してからでないと。
173:デフォルトの名無しさん
09/11/02 11:32:48
初心者が使用すべきものと熟練者が使用して便利なものとは違うということをいまさら講釈しないといかんのか
174:デフォルトの名無しさん
09/11/02 16:05:25
1.9はsp2出るまで町だな。
175:デフォルトの名無しさん
09/11/02 16:27:06
1.9.3のこと?
176:デフォルトの名無しさん
09/11/02 17:33:30
2.0マダー
177:デフォルトの名無しさん
09/11/02 17:39:55
>>171
います
178:デフォルトの名無しさん
09/11/02 21:01:12
>>168
>1.9 限定動作は「1.9.1 だとこれで一発」みたいなコメントはつけとくべきかもな
だな。1.8.7からの新機能の場合もその旨書いておいてほしいよね。
今度から>>1に追加しといてもらおう。
>>171
>いつの話だよ
>さすがに今1.9を使うなって奴はいないだろ
おまえはまず>>1を声だして100回読め
179:デフォルトの名無しさん
09/11/02 21:27:12
>>158-159
繰り返しの計算処理なんだわ
具体的には、ニューラルネットの実装やってる
はんぱない回数の計算が学習には必要なんだけど
1プロセスだと、スレッド分けしても、複数CPUは使ってくれないってことかな?
だとすると、プロセス間通信とかを眼中にいれて設計しないとダメってことかな?
ってことは、向かうところはdRubyあたり?
180:デフォルトの名無しさん
09/11/03 01:06:18
ほう、膨大な計算量を必要とする分野にも進出してるんだなあ
181:デフォルトの名無しさん
09/11/03 03:07:06
>>180
実用とか研究とかじゃなくて趣味だけどね。
Rubyでやってもいいんじゃない?ってかんじで
182:デフォルトの名無しさん
09/11/03 06:53:38
Rubyの入門書では、サンプルプログラムの出力を大抵以下のように書いてます。
puts 'Hello World!'
ですがたまに以下のように書き方も見かけます。
$stdout.puts 'Hello World!'
どっちも正しいと思いますが行儀の良い書き方という意味では後者になるのですか?
183:デフォルトの名無しさん
09/11/03 07:07:13
意味不明。内部でやってることは同じだし後者には何のメリットも無い。
184:デフォルトの名無しさん
09/11/03 07:16:11
printf("Hello World\n");と
fprintf(stdout,"Hello World\n");の違いみたいなもんだぞ
簡略できるようにしてあるのにあえて冗長に書く必要はないと思う
185:デフォルトの名無しさん
09/11/03 07:48:49
冗長に書く意味があることはありうる
が、これに限ってはまず無いだろうな
前者の関数的メソッド puts の出力先を捻じ曲げるためには $stdout をいじるしかないわけだが
それをすると後者の $stdout.puts も捻じ曲がるんで意味がない
Ruby における 関数的メソッド puts と $stdout は不可分だ(C の puts を知ってると引っかかるかも)
もしなんらかの気の迷いで関数的メソッド puts の出力先の $stdout が標準出力以外になってるなら
それは putserr とか putsfile とかなんかメソッドを新たに作るべき
むしろ後者を書かれるとがっかりだ
むしろそのサイトなり解説書なり晒せ
186:デフォルトの名無しさん
09/11/03 11:15:02
バッチファイルの作成を自動化できないものかと思い、eruby がつかえそうだと思いました。
REM *******************************************
REM * 作成者:ビル・ゲイツ(マイクロソフト) *
REM *******************************************
のようなファイルをつくりたいのですが、
REM *******************************************
REM * 作成者:<%=PERSON%>(<%=COMPANY>) *
REM *******************************************
と定義して、行の末尾の '*' の位置を変えないことってできますか?
187:デフォルトの名無しさん
09/11/03 11:17:47
つか $stdout なら write すべきだと思うんだが
$stdout が指してるオブジェクトに puts というインスタンスメソッドが定義されてる可能性はそれほど高くない
188:デフォルトの名無しさん
09/11/03 11:20:47
>>186
文字列なんだから String のマニュアルをダメもとで読め
URLリンク(www.ruby-lang.org)
189:デフォルトの名無しさん
09/11/03 11:30:54
>>187
それはputsに応答しないオブジェクトを$stdoutに入れたヤツが悪くないか?
STDOUTがIOのインスタンスなんだし、IOやそのサブクラスのインスタンスであるか
相応のduck typingができることを期待するのは当然だと
実際に期待できない例にはどんなのがある?
190:デフォルトの名無しさん
09/11/03 11:46:20
$stdoutっていずれ廃止になるんだろ?
なるべく使わない方がいいんじゃねーの
191:デフォルトの名無しさん
09/11/03 11:48:21
$stderrなら警告メッセージのテストで使うことあるな。
begin
class << (stderr = "")
alias write <<
end
# テスト
$stderr, stderr = stderr, $stderr
ensure
$stderr, stderr = stderr, $stderr
assert_match(/.../, stderr)
end
192:デフォルトの名無しさん
09/11/03 11:49:05
>>190
廃止された$defoutと混同してないか?
193:デフォルトの名無しさん
09/11/03 12:24:41
>>190が代わりに何を使う気だったのかがちょっと気になる
194:182
09/11/03 18:12:54
たくさんのレスありがとうございます。勉強になりました。
公式も見てみましたが、
単にputsとした場合はKernelモジュールのputsを指し、
そのputsはデフォルトで$stdoutに対して出力をするようですね。
やっぱり冗長なだけなようですね。
>>187
>むしろ後者を書かれるとがっかりだ
>むしろそのサイトなり解説書なり晒せ
具体的には、「JavaプログラマのためのRuby入門」という本の初っ端の例文が
$stdout.puts 'hello world !'.upcase
となっていました。
著者のartonさんはコミッタですよね?
195:182
09/11/03 18:13:57
>>187ではなく>>185でした。すいません。
196:デフォルトの名無しさん
09/11/03 18:16:55
>>194
それはJavaのSystem.out.printlnになじんだ者が類推しやすいように
そう書いてあるんじゃあないか?
197:182
09/11/03 18:36:50
おおなるほど、そういうことだったのかな…。
198:デフォルトの名無しさん
09/11/03 19:36:32
その本は読んでないけど、読んだ者が混乱するような記述なら困りものだな
後ろの章を読めばわかるのかなとは思うけど
199:デフォルトの名無しさん
09/11/03 20:34:50
モジュールの場所を知るコマンドはありますか?
perlでいう perldoc -l のような。
200:デフォルトの名無しさん
09/11/03 20:55:12
>>199
ri
refe
他にもなんかあったような気がするけど忘れた
201:デフォルトの名無しさん
09/11/03 21:01:03
>>199
gem の場合は gem which
$ gem which nokogiri
(checking gem nokogiri-1.3.3 for nokogiri)
/home/me/.gem/ruby/1.8/gems/nokogiri-1.3.3/lib/nokogiri.rb
標準ライブラリの場所を探す方法はあれば知りたい
いちいち「/usr …のどこだっけ」と試行錯誤するのは面倒
202:デフォルトの名無しさん
09/11/03 21:23:14
>>199
gem whichはgem以外にも使えたはず
203:デフォルトの名無しさん
09/11/03 21:44:58
ほんとだ知らなかった
いいこときいた
204:デフォルトの名無しさん
09/11/03 21:54:21
$ gem which uri
/usr/lib/ruby/1.8/uri.rb
ほほう
String とか Regexp とか rb のファイルになってないものは駄目っぽいな
205:デフォルトの名無しさん
09/11/03 22:11:29
>>200-202
あざっす。
206:デフォルトの名無しさん
09/11/03 22:26:20
ライブラリもいけるみたいだな。
$ gem which Readline
/usr/local/lib/ruby/1.9.1/x86_64-darwin10.0.0/Readline.bundle
>>204
StringやRegexpでどのファイルに出てきて欲しいんだw
207:デフォルトの名無しさん
09/11/04 08:30:58
>>186
>と定義して、行の末尾の '*' の位置を変えないことってできますか?
<%= str = "#{person} (#{company)" %>
REM * 作成者:<%= '%-50s' % str %> *
とするしかない。
208:デフォルトの名無しさん
09/11/04 08:31:51
間違えた。
<% str = "#{person} (#{company)" %>
REM * 作成者:<%= '%-50s' % str %> *
209:デフォルトの名無しさん
09/11/04 09:23:58
Rubyの文字列は
"hello"と'hello'のように書けますが、皆さんはどちらをメインに使っていますか?
もちろん二つの書き方には違いがあることは理解してますが、
多くのケースではどちらの書き方でも可なので、そういう場合にどちらの書き方をすべきか迷っています。
個人的にはシングルクォートをメインにして、"my name is #{name}"のような変数展開を使う場合のみダブルクォーテーションにしています。
というのもHTMLと一緒にrubyを使うことが多く、HTMLタグの値にダブルクォーテーションを使うからです。
ただ入門書やネットに転がってるサンプルなどを見ると大抵ダブルクウォーテーションのようです。
CやJavaなどの習慣でダブルを使う人が多いのでしょうか?あるいは他にメリットがあったりしますか?
210:デフォルトの名無しさん
09/11/04 10:13:32
そもそもとして、" " でも ' ' でも処理負荷的にはたいして変わらない
文字列を数まんことか大量に使用すれば若干違うかもしれんが、たぶん他の部分チューニングしたほうが速い
よって、それ以外が効いてくることになる
で、まあ、" " が人気があるのは
変数展開を入れようとしたときにクオート部分をわざわざ書き換えなくてもいいとか
\n とかがそのまま利用できて面倒がないとか
大部分のフォントで '' の文字見栄え的な安定性が低くて使っててガッカリだからとか
そういう理由だと思う
'hello\nworld' と書いてそのまま \n が表示されて「ん?」となるのは一度や二度ではない
211:デフォルトの名無しさん
09/11/04 10:27:08
俺は両方使い分けてるな
別にダブルクォートで統一してもいいとは思うんだけど
最近、なんとなくシングルクォートの方がきれいに見えるようになった
あとシングルクォートだと「ここでは変数展開をしません」という宣言にもなる
212:209
09/11/04 10:28:08
>>210
おおなるほど…分かりやすい説明ありがとうございます。
それだけ例を示されると確かにダブルクウォーテーションのほうが理にかなってますね。
213:デフォルトの名無しさん
09/11/04 10:29:56
>>211
ダブルクォートを最終的にシングルクォートに書き換えることはよくある
それはやっぱり意思表示だな
214:209
09/11/04 10:32:10
>>211
ありがとうございます。
>あとシングルクォートだと「ここでは変数展開をしません」という宣言にもなる
これは自分も思っていました。
変数展開が必要になった時にダブルクウォーテーションを使った方が目的がはっきりするというか。
215:209
09/11/04 10:42:19
ついでにRailがgenerateで吐くコードを調べてみました。
シングルクォート
flash[:notice] = 'Profile was successfully created.'
<%= link_to 'New profile', new_profile_path %>
ダブルクォート
format.html { render :action => "new" }
どっちも使ってる…。どういう基準で分けてるのかさっぱり分からない。
ただ適当なのか、何かちゃんとした理由があるのかな。
216:デフォルトの名無しさん
09/11/04 10:49:28
アトリビュートとみなせる(小さな)文字列はダブルクォートであることが多い
ハッシュのキーとか値とか、配列の短い文字列とか
あるいは生成されて埋め込まれた文字列とか
irb> 1.upto(10).to_a.map{|e| e.to_s}
["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"] ←この部分をコピペ
深い意味は何もない
打ってる途中で
「あーシングルクォートでよかったなーと思ったが修正面倒なのでこのままダブルで閉じる未来の俺訂正よろしく」
とか普通なので気にしてたら禿げるぞ
217:デフォルトの名無しさん
09/11/04 11:08:33
String#inspect が吐く文字列がダブルクオートというのは意外と
強い動機になるよね。
218:デフォルトの名無しさん
09/11/04 14:10:01
>>209
>個人的にはシングルクォートをメインにして、"my name is #{name}"のような変数展開を使う場合のみダブルクォーテーションにしています。
このルールでいいと思う。あとは ¥n をいれるときとか。
219:デフォルトの名無しさん
09/11/04 18:36:31
そのルールに何の意味も無いだろ
面倒だし両方の表記が入り乱れることになるだけ
なんでダブルクウォーテーションだけで済ませるのが嫌なんだ?
220:デフォルトの名無しさん
09/11/04 18:48:35
変数(というか、式)展開やバックスラッシュ記法の有効化は、すこし機能が強すぎる
その機能を使用しないのなら、そもそも機能が有効になっていないほうが好ましい
めんどいからダブルでいーじゃん、というのでももちろん構わないし
スクリプトに直接リテラルで書くぶんには実際上の問題は何もないが、
慎重にシングルとダブルを使い分けるという姿勢は賞賛されるべき
221:デフォルトの名無しさん
09/11/04 18:51:52
>>219
>なんでダブルクウォーテーションだけで済ませるのが嫌なんだ?
べつに嫌いとまでだれも言ってないけど。>>213が書いたように、シングルクォートを使うことで、
式展開もなにもありませんという意思表示をしているだけ。
なんでこんな曲解するやつがいるんだろうね。
222:デフォルトの名無しさん
09/11/04 20:03:43
Railsマンセーな俺は>>215>>216辺りを見てシングルを主に使っていこうと決めた
アトリビュートというかシンボルに置き換えられるのようなケースではダブルを使ってる気がする
223:デフォルトの名無しさん
09/11/04 21:01:01
Windows環境だとパス区切りがバックスラッシュな関係で
文字としてのバックスラッシュを扱いたい場合は多いな
>>210 とは逆に、バックスラッシュが解釈されるせいで「ん?」と思う場面のが多い
224:デフォルトの名無しさん
09/11/04 21:19:40
考え方は>>220に同感だけど、職場ではダブルクォートで統一されてる。
ネットで拾うサンプルも大抵ダブルクォートだ。
単純に、ダブルクォートで文字列を表現する言語が多いという理由だけの気がする。
コーディングスタイルにおいて慣習ってのは大きな要素なんじゃないかな。
○○にすべきだ、という100%正しい解釈があったとしてもそれが慣習に反していれば採用するのはやっぱり難しい。
225:デフォルトの名無しさん
09/11/04 21:30:24
100%正しい解釈などない
226:デフォルトの名無しさん
09/11/04 21:31:39
>あったとしても
227:デフォルトの名無しさん
09/11/04 21:34:04
信念を持って慣習を破るのは悪いことじゃないな。
228:デフォルトの名無しさん
09/11/04 21:34:12
Rubyの場合%表記使うことも多いからダブルクォートに対するこだわりなんか全くない
229:デフォルトの名無しさん
09/11/04 21:34:35
無意味な仮定ってことだろ
230:デフォルトの名無しさん
09/11/04 22:10:31
> 慣習
こないだ '%s' % str したらMatzの写真で踏み絵させられた
わかる人にはわかるらしい
ちなみに初めてのRuby的には
「後述のエスケープ文字や式展開を含まない場合、
一重/二重のどちらの引用符を用いるかは好みの問題です」(p.58)
だって
231:デフォルトの名無しさん
09/11/04 22:50:02
Ruby1.8.7でsqlite3を使いたく、環境を構築しました。
sqlite3-ruby(1.2.5)
dbi(0.4.3)
dbd-sqlite3(1.2.5)
sqlitedll-3_6_19
上記の環境でDBI経由だと
ERROR DBI::InterfaceError: Unable to load driver 'SQLite3' (underlying error: uninitialized constant DBI::DBD::SQLite3)
というエラーが発生します。
ドライバが見つからないと言うようなエラーだと思うんですが、全部最新です。
何が原因でしょうか?
232:デフォルトの名無しさん
09/11/04 23:50:35
ドライバを入れろ
233:デフォルトの名無しさん
09/11/05 00:06:05
>>231
×SQLite3
○sqlite3
db = DBI.connect("DBI:sqlite3:#{filename}")
234:デフォルトの名無しさん
09/11/05 00:44:56
>>231
ごめん>>233は間違い
うちは
db = DBI.connect("DBI:SQLite3:test.db")
で接続できた
ドライバはdbd-sqlite3で Unable to load driver だから
sqlite3自体がインストールされてない?
235:デフォルトの名無しさん
09/11/05 02:13:52
>>209
>個人的にはシングルクォートをメインにして、"my name is #{name}"のような変数展開を使う場合のみダブルクォーテーションにしています。
>というのもHTMLと一緒にrubyを使うことが多く、HTMLタグの値にダブルクォーテーションを使うからです。
正解
236:デフォルトの名無しさん
09/11/05 04:09:19
%!hogehoge! 使うべさ
237:デフォルトの名無しさん
09/11/05 06:34:11
俺はハッシュの値とかも含めて基本全てシングル使ってるぞ
変数展開したい時だけダブル
これで特に困ったことは無い
空文字が''になるので、他人にソース見せる時に突っ込まれることはあるが。
238:デフォルトの名無しさん
09/11/05 08:22:34
ダミアン先生によると空文字は、%{}にしたほうがわかりやすいと
239:デフォルトの名無しさん
09/11/05 08:36:12
まあ''と"と"'と'''と''''と'"'と""と'"'と'''''の区別は咄嗟にはつけにくいからな
いちばんわかりやすいのは String.new だが
余談だが俺は配列も Array.new だしハッシュも Hash.new だ
自分から [] や {} を使うことはゼロ
240:231
09/11/05 08:39:55
>>232
>>231に書いた以外に必要なドライバがあれば
ドライバ名を教えてください。
>>234
一応 gem search を実行すると全部インストールされているんですが
sqlite3-ruby をインストールするときにリンク先のような状態になったのが
気になりました。
URLリンク(www.rubylife.jp)
そのほかはバージョンもそろえてるしSQLite3の本体も入ってるし、
もうどうすればいいのか・・・
241:デフォルトの名無しさん
09/11/05 08:51:14
新しく配列作る時って Array.new と [] って一般的にどっちがいいとかある?
好みの問題くらいでどっちでもいい?
242:デフォルトの名無しさん
09/11/05 09:12:05
初期値の存在しないふつうの空の配列を作るならどっちでもよい
10万個くらい Array.new と [] が書いてあったら、後者のほうがパース完了は遅いとは思うが
243:デフォルトの名無しさん
09/11/05 09:23:13
>>240
DBI.available_driversで使えるドライバがわかる
そこに"dbi:SQLite3:"が無ければインストールに失敗してる
244:デフォルトの名無しさん
09/11/05 10:06:41
初期値が無い場合は
var = Array.new
初期値がある場合は
var = ["hoge", "hogege"]
って感じだな。
特に理由は無いけどこういうパターンで書く人が多い気がする。
245:デフォルトの名無しさん
09/11/05 10:13:01
[] でいいじゃん
246:デフォルトの名無しさん
09/11/05 10:36:36
247:デフォルトの名無しさん
09/11/05 14:25:20
Array.new, Hash.new はメソッド呼び出しが入るので遅い。
248:デフォルトの名無しさん
09/11/05 15:03:37
>>244
そうかあ?初期値がなくても [] と {} を使うほうが多いと思うけど。
デフォルトの初期値が必要な場合だけHash.newとかを使うんじゃないか。
249:デフォルトの名無しさん
09/11/05 16:51:24
配列からある値を一つだけ削除って簡単にできる?
- とかdeleteだと複数あった時に全部消えちゃう
250:デフォルトの名無しさん
09/11/05 16:58:30
delete_at
251:デフォルトの名無しさん
09/11/05 17:01:43
>>249
簡単にはできない
若いの1個だけ消したいと予測
arr = ["a", "b", "c", "b", "a"]
arr.delete_at(arr.index('b'))
p arr
["a", "c", "b", "a"]
252:231
09/11/05 18:21:11
>>243
driver = DBI.available_driversしてみました
ArrayEmptyでした orz=3
一度アンインストールしてインストールし直しても同じです
どうやればインストール成功するんでしょうか(´;∀;)
253:249
09/11/05 18:50:35
>>250,251
なるほどね見つけてから_atで消すのね
ありがとう
254:231
09/11/05 19:19:05
sqlite3-ruby dbi dbd-sqlite のバージョンを下げたりしてみたけど
やっぱりドライバが認識されませんでした
同じコードとドライバでも1.9.1だと動きまする・・・
255:デフォルトの名無しさん
09/11/05 19:24:01
インストール手順を示さないとアドバイスしようがないと思ふ
256:231
09/11/05 20:05:44
解決しました。いや、解決はしてませんが、ドライバが原因では無いことはわかりました。
NetBeans6.7.1でデバッグをすると「ドライバがないぞゴルァ」って言われるんですが
コンソールから実行すると何事もなかったように動きます。
どうもお騒がせしました。
257:デフォルトの名無しさん
09/11/05 21:30:32
えええええw
258:デフォルトの名無しさん
09/11/05 22:32:30
コンソールから使ってるRubyとNetBeansから使ってるRuby
が違うんでないかい?
259:231
09/11/05 22:41:01
>>258
自分もそう思って確認したんですが
インストールされてるバージョンは1.8.7-p72と1.9.1-p243の二つしかなく
コンソールもねとびーんも1.8.7-p72を使ってました。
ねとびーんのGemマネージャにも、きちんとドライバは登録されていました。
その後も色々試していますが、未だに原因がわかりませんです。
260:デフォルトの名無しさん
09/11/06 01:03:10
printf("%d %d\n", n, n+1)の出力にマッチする正規表現は書けますか?
261:デフォルトの名無しさん
09/11/06 01:29:25
動的に正規表現を生成するのでも構わないのなら
n = 3
"%d %d\n" % [n, n + 1] =~ Regexp.new("%d %d\n" % [n, n + 1]) #=> 0
ところで以下には驚いた。勉強しなおさないとだ
'%d %d\n' % [n, n + 1] =~ Regexp.new('%d %d\n' % [n, n + 1]) #=> nil
"%d %d\n" % [n, n + 1] =~ Regexp.new('%d %d\n' % [n, n + 1]) #=> 0
262:デフォルトの名無しさん
09/11/06 01:40:43
>>261
s = '%d %d\n'
p /#{s}/ # /%d %d\n/と等価
文字列として\nが解釈されなくても、正規表現をパースする段階で解釈される
似たような話としては、String#gsubで引数に\を渡そうとすると
ダブルクォートの場合はエスケープの都合で\の個数がキモいことになる
263:デフォルトの名無しさん
09/11/06 02:17:32
>>262
サンクス。完全に間違って理解してた
> 文字列として\nが解釈されなくても、正規表現をパースする段階で解釈される
よく覚えとくよ
で、>>261でなんではまったかと思ったら普段あまり使わないRegexp.new使ってるからだった
'\n' にマッチする正規表現をリテラルで作ろうとしたら /\\n/ って直感的に書けるけど
Regexp.new で作ろうとすると相当キモイことになるね
264:デフォルトの名無しさん
09/11/06 06:35:26
質問です。
さくらインターネットのスタンダードプランでrubygemをインストールしたのですが,
gemコマンドを打ち込んでも
gem: command not found
と、出てしまいます。
これはインスト失敗しているのか、単に環境設定がうまくいってないのか…。
ご教授願います。
インスト時には
wget URLリンク(rubyforge.org)
tar zxvf rubygems-1.3.1.tgz
cd rubygems-1.3.1
ruby setup.rb --prefix $HOME
で、
RubyGems installed the following executables:
/home/hogehoge/bin/gem18
と出ていました。
265:デフォルトの名無しさん
09/11/06 06:38:37
じゃあ/home/hogehoge/bin/gem18って打ち込めば
266:260
09/11/06 08:02:12
>>261
動的でもいいんですがnの値は不明です。
一旦nを求めて式展開するしかないでしょうか?
一回で
line =~ /(\d+) #{\1.to_i + 1}/
みたいには書けない?
267:デフォルトの名無しさん
09/11/06 08:08:12
実効上のご利益がないのでどうでもいいのだが正規表現を先に書いてくれると嬉しい
/re/ =~ str
268:デフォルトの名無しさん
09/11/06 08:22:50
>>264
PATHの設定。
269:デフォルトの名無しさん
09/11/06 08:23:59
それと、 gem じゃなくて gem18 と入れることか。
270:デフォルトの名無しさん
09/11/06 08:29:54
>>264に足りないのは(PC-)UNIXの知識だな
Ruby関係ないシリーズの筆頭だ
はいそこさくらが使ってるFreeBSDがUNIX4文字で包括されうるかどうか議論しない
271:デフォルトの名無しさん
09/11/06 08:32:18
ruby2.0はいつ出るのじゃ
272:デフォルトの名無しさん
09/11/06 08:35:10
>>271
その質問には意味がない
273:デフォルトの名無しさん
09/11/06 08:43:54
新しいバージョンを待つ香具師は、そのバージョンが出たら
その次のバージョンを待つことになる。
274:デフォルトの名無しさん
09/11/06 10:46:28
1.9もまだ満足に移行出来てない状況でw
275:デフォルトの名無しさん
09/11/06 11:09:59
2.0になった場合の変更予定点とかってもう案があったりするの?
276:デフォルトの名無しさん
09/11/06 12:45:25
>>275
それこそ1.8の出る前からある。
277:デフォルトの名無しさん
09/11/06 16:43:52
だから待ち焦がれてる椰子が多いんだよ。
Ruby2.0が出たらそのサブセットをどっかで標準化したりするのかね。
278:デフォルトの名無しさん
09/11/06 18:15:47
2.0はこうなる!
みたいな解説どっかにある?
279:デフォルトの名無しさん
09/11/06 19:26:11
ないでもないけど(Ruby Riteで検索すれといくつか)大昔のものなので、
1.9で実現しちゃったもの(YARVとか)もあれば、方針転換があったりしたものが
(たとえば括弧の省略があまりできなくなる方向で動いてたのを、断念しちゃったり)
あったり、全く刷新の気配もないもの(GCとか)とかで、全然参考にならない。
280:231
09/11/06 19:33:23
必要ないかも知れないですが経過報告です。
全く違う別のPCで1.8.7-p72、NetBeans6.7.1という同じ環境を構築して
SQLite3をDBI経由で読んでみましたがコンソールからだと問題無く動くコードが
同じエラーになりました。ドライバが認識出来ないようです。
同じコードでも1.9.1だとNetBeans6.7.1でも問題無く動作するので環境の問題のようです。
もし上の環境でDBI経由でSQLite3が使えてる人がいたらアドバイスください。
281:デフォルトの名無しさん
09/11/06 19:50:20
txt = open('hoge.txt').read
ってするとオープンされたファイルのストリームは開いたままですか?
282:デフォルトの名無しさん
09/11/06 20:03:17
>>281
えーーーーと、
クラスメソッド File.open は File オブジェクトを返すだけ
関数的メソッド open も File オブジェクトを返すだけ
インスタンスメソッド File#read はストリームを閉じない
クラスメソッド File.read は File オブジェクトを開いて File#read して閉じて read 結果を返すユーティリティ的メソッド
File.open(path).read は不完全
open(path).read も不完全
File.read(path) は安全
File.open(path){|f| f.read} は安全
open(path){|f| f.read} も安全
ブロックつきメソッドで書けるメソッドは、ブロック作らないと危険
ブロックつきメソッドで書く意味がなさそうなメソッド(File.read、File.readlines 等クラスメソッド)はブロック作らなくても安全
クラスメソッドは「便利メソッド」として作られてることが多い
283:デフォルトの名無しさん
09/11/06 20:05:12
>>281
GCされるかスクリプトが終了するまで開いたまま
ちゃんと閉じるか閉じてくれる書き方をするクセをつけたほうがいい
手っ取り早いのはこれ
txt = File.read('hoge.txt')
本当はIO.read、ただし1.9系じゃないとこの方法でbフラグ付けるのは無理
284:デフォルトの名無しさん
09/11/06 22:39:33
IO.binreadは1.9だっけか
285:デフォルトの名無しさん
09/11/07 01:20:25
String::squeezeの使い道が分からない
286:デフォルトの名無しさん
09/11/07 02:19:12
1.9はvistaの様に飛ばして、2.0のsp2が出るまで1.8で耐えた方が良さそうw
287:デフォルトの名無しさん
09/11/07 05:32:37
今までrubygemsで取得できるもので済んでいたのですが、
tar.gzで配布されているruby-clusterやruby-gnome(gtk?)を使うことになり、
Emacsでのanythingやauto-complete-rubyでも↑のライブラリを読み出して欲しいと思って調べたのですがわかりませんでしたので質問させてもらいます。
anythingではfri -lやrefe -lの結果から候補を、auto-complete-rubyではrcodetoolsからどうにかして候補を出しているみたいなのですが、
そのソースとなるのはtar.gzがもつドキュメントorコードから生成されたドキュメント(?)を元にしているみたいなのです。
そのようなドキュメントを生成するのはrdocなんでしょうか?そうだとしたらどのように生成すればいいでしょうか?
rdoc --riとやって.rdocの中に色々とできているのですが、そこをLOAD_PATHに加えればいいのでしょうか?
長くなってすいません。
288:デフォルトの名無しさん
09/11/07 16:37:36
Rubyで外部コマンドを単純に実行したいときで質問。
変数hogeにデータが入っていてこれを引数としてコマンドを実行したい。
system("command", hoge)
なら安全?
例えば、パイプでつなげられてrm -rfされる心配はないか、とか。
289:デフォルトの名無しさん
09/11/07 16:50:01
はい
sysytem 等の第2引数はシェルを介しません
irb> system('ls', '-la|date')
ls: invalid option -- '|'
詳しくは `ls --help' を実行して下さい.
irb> system('ls -la|date')
2009年 11月 7日 土曜日 16:42:32 JST
ls が | についてのエラーを返していることに注目です
| を含んだ引数を ls コマンドに直接渡している証拠です
ただ、この場合、第1引数は完全に正しい実行可能文字列でなければなりません
オプションとかなんか余計なものを含んでいた場合はエラーです
irb> system('echo ', 'hello!')
false
irb> system('echo', 'hello!')
hello!
「echo 」という末尾に空白を含んだ実行ファイルは存在しないためコマンドが実行されず、system が false を返しています
290:デフォルトの名無しさん
09/11/07 16:55:35
>>289
ありがとう。
291:デフォルトの名無しさん
09/11/08 10:16:43
テンプレに
・Ruby 1.9.0
不安定にして先鋭機能が超満載の開発版バージョンだったもの
1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)
とありますが、どう事情が変わったのでしょうか?
"1" + 1 とするとエラーが出てしまいます。
エラー内容的には 整数を文字列に出来ないよ。 ということだと思っています。
しかし、 1.to_s を実行すると "1"が返ってきて、1.to_s.classはStringだと言っています。
数値の 1 を文字列に変換することは出来ているのに上記のようなエラーが出る理由が分かりません。
教えてください。
292:デフォルトの名無しさん
09/11/08 10:23:14
Rubyは、その種の暗黙の変換はしないので、
"1".to_i + 1 #=> 2がほしいとき
"1" + 1.to_s #=> "11"がほしいとき
293:デフォルトの名無しさん
09/11/08 10:53:20
オブジェクトが違ってるということはプログラミングの手順が間違ってるということがほとんどなわけで
こういう場面では暗黙の変換をしてもらわないほうが多くの場合は便利
動作と投入値のとり得る全てを事前に完全把握してる場合は暗黙の変換をしてもらったほうが面倒ないけどな
まあそういう時はRubyにこだわらず適当にそういう動作の言語使ってだらっとプログラム書けばええ
とりあえずRubyはその手の変換は行わないようにメソッドが作られてることが多い
困ったことに + 系のメソッド内でクラス比較して変換かけてるパターンもあるけどな
>>291
> どう事情が変わったのでしょうか?
このままだとバージョンナンバーを普通に使い切ってしまい
栄光のバージョン2.0が普通の1.9の上位バージョンになってしまうという危惧
1.9.0を元にした安定版を出す際に、通常のバージョンのつけ方なら
・ 1.9.x … 開発版
・ 2.0.x … 安定版
となるはずだし従来はこの予定だったのだが、2.0の名には値しないと判断されて、無理矢理
・ 1.9.0 … 開発版
・ 1.9.1 … 安定版
とされたということ
294:デフォルトの名無しさん
09/11/08 15:19:36
じゃあ、1.9.1は2.0ってことですか
295:デフォルトの名無しさん
09/11/08 15:23:13
matzを罵ってやる!
296:デフォルトの名無しさん
09/11/08 15:28:41
Rubyでは、2.0は人参と呼ばれている。
「開発者のモチベーションを引っ張り続けるが到達できないもの」
来世紀くらいには追いつけるかもしれないがユーザーが待つのは馬鹿。
297:デフォルトの名無しさん
09/11/08 15:46:26
まあ10年くらいしたらなんとかなんじゃねえの、とは思う
少なくとも5年では無理
298:デフォルトの名無しさん
09/11/08 15:47:49
なにが人参だか。どうでもいいわ
299:デフォルトの名無しさん
09/11/08 16:01:55
RubyにはRubyしか知らない人が多いというのはやっぱり真実なのだと思う
ようはPerl6と同じことだろ
300:デフォルトの名無しさん
09/11/08 16:23:16
>>285
String#squeezeはたぶん正規化じゃないかなぁ
require 'jcode'; $KCODE = "s" # 1.9なら不要
Words = %w(google キター).map {|s| s.squeeze }
def exist?(s); Words.index(s.squeeze); end
p exist?("goooooogle")
p exist?("キターーーー")
301:デフォルトの名無しさん
09/11/08 16:23:36
PHP6、Perl6、Ruby2のうち一番早くリリースするのはどれですか?
302:デフォルトの名無しさん
09/11/08 16:48:32
やっぱり1.9sp2まで待ちだな。
303:ダーク藤本 ◆ULFoMaooII
09/11/08 17:12:54
SB3.5改
URLリンク(ux.getuploader.com)
Rubyは多次元配列の仕様が糞すぎる
まぁ多次元配列なんてWEBプログラマーには不要なもんだがw
304:デフォルトの名無しさん
09/11/08 17:29:27
Rubyの多次元配列?
それなんていうライブラリ?
305:デフォルトの名無しさん
09/11/08 17:42:01
ruby 1.9.3あたりが安定版になっても俺は驚かない
驚かないが、「またユーザーを混乱させるのか・・・」と思う
306:デフォルトの名無しさん
09/11/08 17:56:09
>>305
1.9.1 以降は全部、1.9 系列の安定版だよ
1.9.2 が出たとしたら、それは1.9系列の最新安定版
1.9.3 が出たとしたら、それは1.9.2より新しい、1.9系列の安定版
開発版は常に 1.9.0
パッチレベルが上がるんだったかなんだったかで区別するとかしないとか
1.8.5やそれ以前のような「とりあえずリリース」はない
tenny(バージョン x.y.z の z)が 0 でないときは必ず安定版リリース
この理屈だと Ruby 2.0.0 は 2.0 系列の開発版ということになるが、まあそういうことなのだろう
情報の古いうっかりさんが「これが Ruby2.0 か」とか勘違いして 2.0.0 をインストールしてシステム壊すとかそういうの希望
まー 1.9.1 の中でもパッチレベルが違うと動作違うけどな(正しくなっただけなのだが)
1.8.6 でもあったが、なかなか酷い
307:デフォルトの名無しさん
09/11/08 17:57:08
驚き最小の法則w
308:デフォルトの名無しさん
09/11/08 17:59:44
>>307
情報の古いうっかりさんこんばんは
309:デフォルトの名無しさん
09/11/08 18:01:51
URLリンク(ja.wikipedia.org)驚き最小の原則
結城浩は1996年、この原則を人間関係を円滑にすすめるための心得に拡張し、「驚き、最小の法則」として紹介した。
たとえば、プログラムを顧客に納品する際に、判明しているバグがあるのなら、それを伝えておいたほうが顧客に
とっても利用時の戦略を立てやすくなる、といったものである。「『どうしようかな?』と思ったときには、 相手の
『驚き』を最小にするような選択をすべき」であるという[1]。
プログラミング言語 Ruby は、一時期「驚き最小の原則」とともに語られることが多かった。ただし、作者のまつもと
ゆきひろはこの原則を Ruby の設計哲学として採用したことはないと述べている[2]。Ruby については、「さまざまな
バックグラウンドの人々すべてを驚かせないことではなく、Ruby のやり方に十分に慣れた人が持つ常識が一貫して通用
するという意味」[3][4]であるとして、「Matzの驚き最小の原則」という言い方も提案された[3]。現在では Ruby が
「驚き最小の原則」とともに語られることは少なくなっている[5]。
310:デフォルトの名無しさん
09/11/08 18:04:35
驚きの連続w
311:デフォルトの名無しさん
09/11/08 18:09:19
>>309
コミュニティ内では「Rubyらしい動作」という言葉で語られる概念だな
Rubyらしい動作をするクラスやメソッドは推測が利いて使いやすい、という程度の意味
312:デフォルトの名無しさん
09/11/08 18:10:14
一時期のruby-talkとかひどかったもんな。
いろんな言語バックグラウンドを持つ香具師が、想定外の挙動に対して
「これは驚き最小に反している!」
そして「おめーにとってはそうだろうがよ」と総ツッコミ。
313:305
09/11/08 18:19:50
>>306
説明ありがとう! 1.9.1からルールが完全に変わったんだな
> ruby 2.0.0 は 2.0 系列の開発版
そうなるのか? ruby 2.0.0 からまた元のルールに戻るとかじゃなくて?
そうなるんだとすると、本当に訳が分からなくなりそうだ
314:デフォルトの名無しさん
09/11/08 18:23:52
>>313
2.0 系列の開発版は常に 2.0.0
2.0.0 で安定版が作れたと思ったら 2.0.1 としてリリース
2.0.1 がパワーアップしたら 2.0.2 としてリリース
2.0 系列の次のバージョンの開発版を作る場合は 2.1.0 でやる
こんだけ
x.y.z の y だか z だかが奇数のときは開発版で偶数は安定版、みたいな
冷静に考えるとへんてこなルールと実質上は何も変わらない
315:デフォルトの名無しさん
09/11/08 18:32:54
>>314
ソース求む。
どこにもそんな話、なかったと思うんだが。
316:デフォルトの名無しさん
09/11/08 18:46:28
ruby 1.9.3あたりが安定版になっても俺は驚かない
驚かないが、「またユーザーを混乱させるのか・・・」と思う
317:デフォルトの名無しさん
09/11/09 00:40:14
順調に迷走してるね、この言語。
318:デフォルトの名無しさん
09/11/09 01:17:13
迷走してるのはおまえの脳みそだろw
319:デフォルトの名無しさん
09/11/09 02:02:57
すくなくとも驚き最小の原則を標榜している言語が
脳みそを掻き回したらいかんだろ
320:デフォルトの名無しさん
09/11/09 02:09:56
>>319
Rubyのことなら、標榜してないよ。
321:デフォルトの名無しさん
09/11/09 02:13:44
よそから飛んできたんでひょっとしたら320は空気が読めてなかったかもしれない
322:デフォルトの名無しさん
09/11/09 02:18:43
ruby厨WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
323:デフォルトの名無しさん
09/11/09 08:23:38
一時期のRuby厨が荒らしてたPythonスレみたいになってるw
324:デフォルトの名無しさん
09/11/09 09:33:42
2.0が出てもみんな1.8.7を使いつづけるというオチでは?
325:デフォルトの名無しさん
09/11/09 09:44:20
そこはJRubyでしょ
326:デフォルトの名無しさん
09/11/09 11:24:20
C言語みたいにクラス定義を別ファイルに書きたいのですが
#include "MyClass.h"
に相当するRubyの命令がわかりません。
手持ちの本にも載っていません。
誰か教えてください。
327:デフォルトの名無しさん
09/11/09 11:27:40
require
328:デフォルトの名無しさん
09/11/09 18:12:07
>>326
require "myclass" # myclass.rb を読み込む
329:デフォルトの名無しさん
09/11/09 19:50:19
この言語って他の言語にある程度慣れてる人が多い?
プログラミングはRubyからです!って人は少なそう。
330:デフォルトの名無しさん
09/11/09 20:01:19
>>329
Ruby から始めましたが。
理由は、基本的な構文はどの言語も似ていると思ったので...
331:デフォルトの名無しさん
09/11/09 20:27:41
VBA → ちょっとだけJavaScript → VB.NET → C# → Ruby
332:デフォルトの名無しさん
09/11/09 21:14:56
rubyから始めましたってのはニート出身のPGとかだけだろ
学歴ある奴はあり得ん
333:330
09/11/09 21:19:51
>>332
大学で始めてプログラミングやった子なのかな?(^^;
334:デフォルトの名無しさん
09/11/09 21:20:44
>>332
なにその根拠のない自信?ホントにプログラマ?
335:デフォルトの名無しさん
09/11/09 21:21:53
>>332
ム板池よITドカタ
336:デフォルトの名無しさん
09/11/09 21:21:59
おまいら釣られすぎですよ
337:デフォルトの名無しさん
09/11/09 21:56:53
マジレスすると大学で覚えるプログラミングなんて大したことなくね?
いいとこの大学でもC言語を基礎から教えてたりするわけだし、そんな状態から4年間での伸びしろなんてたかが知れてる。
その周りの専門知識は大学じゃないと勉強するのは難しいかもだけど、実務で生かせてる知識がどれほどあるか。、
自分の大学生活が薄っぺらかっただけなのかな?
中卒高卒でも小さい頃から趣味でプログラミングやってた奴らには勝てる気がしないんですよ。
なんというか、雑学というか知識の幅というか、そこら辺が埋めようの無い差を感じる。
338:デフォルトの名無しさん
09/11/09 22:01:57
安心しろ、ラジオを分解すらしたことがなくても
電気電子系の学科に進学する、という人が増えている。
今はそういう時代。
339:デフォルトの名無しさん
09/11/09 22:02:52
モチベーションの差とかもあるかな
大学出てない奴は少なからず劣等感を持ってると思う
うちの会社に大学中退者が何人かいるんだが彼らのハングリー精神は恐れ入るよ
340:デフォルトの名無しさん
09/11/09 22:28:33
>>337
小さい頃からプログラミング続けてる人はベースが完璧にできあがってるし
そういう基礎的な部分で苦労しない分、応用とか開発にリソース使えるんだろうね
341:デフォルトの名無しさん
09/11/10 01:15:40
小さい頃からプログラムやってる人はうらやましいね。
田舎だとそういう情報もハードも少なくて外で走り回ってるくらいだったよ。
その年頃でマイコンとかやってる奴とかいるかと思うと・・・。
まだ、勉強し続けなきゃならないな
342:デフォルトの名無しさん
09/11/10 02:17:28
あとは環境かねぇ。
親の環境次第で当時、高価なPCを買えたかどうかとか。
343:デフォルトの名無しさん
09/11/10 03:48:57
子供の頃、親が遊びに投資してくれたかどうかで
将来がだいぶ変わるよな
ゲームばっかすんなとか言うけど
そこからプログラムに入れば職業につながる可能性だってあるんだしね
遊びの価値を理解してない人が多い気がする
自分の場合、学校で教わったことなんかより
遊んだ分の知識の方がメシの種になってる
勉強し倒したか、遊び倒したかという極端な人ほど
「使える」人になってる気がする
>>342
今は高価な PCじゃなくても、そこそこの性能で
今の子供はうらやましいよね
344:デフォルトの名無しさん
09/11/10 05:24:12
そう言われてみれば、消防ん時からプログラミングやってる俺は
親がオーバークロックとか日常茶飯事な自作erだなあ
物心ついた時には周りにPCパーツ転がってたし
俺がPCに興味持ったと知るや、いきなりパーツ屋連れてかれたなw
ま、結局それはあんまり肌に合わなくて
PCじゃなく、ソフトウェアを組む方にハマったんだが
345:デフォルトの名無しさん
09/11/10 05:52:33
今の子供は羨ましくもあるが、
ネットも無く毎日外で秘密基地とか作って遊んでた自分の小学生時代はこれはこれで良かったと思ってる。
346:デフォルトの名無しさん
09/11/10 06:23:59
一方小学生の>>344はアメリカの某サーバにバックドアを仕掛けた
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5388日前に更新/98 KB
担当:undef