Ruby について Part 3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGRuby Home Page
http://www.ruby-lang.org/ja/
<前スレ>
Rubyについて Part 2
http://pc3.2ch.net/test/read.cgi/tech/1028906179/
<過去スレ>
Rubyについて
http://pc3.2ch.net/test/read.cgi/tech/1012096319/
0449デフォルトの名無しさん
NGNGかちゅで読むとインデントされてないから無茶苦茶読みにくい
0450デフォルトの名無しさん
NGNGttp://pc.2ch.net/test/read.cgi/unix/1046402063/360
0451デフォルトの名無しさん
NGNG殺してしまい、ワトソンくんが出現します。(スタックオーバーフロー)
rubyは1.6.7のmswinです。
あと意味はないですが、CGIの先頭行に#!を記述しています。
もし何か知っている方いられましたら教えてください。
0452デフォルトの名無しさん
NGNGRubyでCGIがうんぬんというより、そもそもスクリプトがスタック食いまくりとか
だったりしませんか?
0453デフォルトの名無しさん
NGNGApacheに汁!
0454デフォルトの名無しさん
NGNGそりゃ悪かった。かちゅーしゃって行頭の空白消しちゃうのか。
module Enumerable
def insertion_sort
array = []
each do |a|
if array.each_with_index {|b, i|
if b > a
array[i, 0] = [a]
break
end
}
array << a
end
end
array
end
end
0455デフォルトの名無しさん
NGNGもしそうならWindowsはスタックサイズの上限を指定できないの?
0456デフォルトの名無しさん
NGNGできまっせ。
標準で1メガはあるはずだけど。
でもスタックオーバーフローを起こす様なプログラムは
アルゴリズム修正した方がいいんじゃねえの?
0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNGIISでmod_rubyって使えるんだっけ?
0459デフォルトの名無しさん
NGNGただのRubyプロセスでIISがシニマス。
プロセス空間を別にしてもシニマス。
CGIスクリプトは最後まで完了していて、その後もRubyがガリガリしていて
まもなくIISがシニマス。
自分のちびマシンのAN HTTPDでは問題なく動作します。
Apache+Linuxでも問題なく動作します。
仕事の都合上IISしか使えません。
ということでマイっています。
0460デフォルトの名無しさん
NGNGスタックオーバーフローって出るのはrubyに対して、それともIIS?
サーバを殺してしまうということだと、吐いてるデータに問題があるような気
がするが、nphモードにしてみるとどうなる?
0461デフォルトの名無しさん
NGNG451です。
IISに対してオーバーフローが発生します。
そのときRubyは終了しています。
一時的に標準出力に出さないようにしてテストしてみます。
勉強不足ですみませんが、nphモードって何でしょうか?
0462デフォルトの名無しさん
NGNGttp://CGI-Spec.Golux.Com/draft-coar-cgi-v11-03-clean.html#7.0
IISではCGIスクリプトを nph- で始まるファイル名にすることでNPHモードになる。
NPHスクリプトは最初に "HTTP/1.0 201 Created\r\n" を出力しなければならない。
またヘッダの改行コードは \r\n にする。
0463デフォルトの名無しさん
NGNG451です。
詳細にありがとうございます。月曜日に試してみます。
HTTPヘッダでの方法でやってみます。
0464デフォルトの名無しさん
NGNG0465デフォルトの名無しさん
NGNGやってみましたが、結果は同じでした。
RubyプロセスがIISを殺せるなんてやっぱりおかしいので、IISのバグあたりが
妥当ではないかと思っています。
0466デフォルトの名無しさん
NGNGAN HTTPDでは動くってことは、その可能性が高いと思われ。
rubyを使わずに、固定のデータを送るようなCGIにしても同じかな?
0467デフォルトの名無しさん
NGNG使うのやめたら、10秒以上掛かってた処理が1秒を切ったよ。
これに限らず、Rubyの添付ライブラリは玉石混淆過ぎ
つか、地雷原(w
0468デフォルトの名無しさん
NGNG0469デフォルトの名無しさん
NGNG0470デフォルトの名無しさん
NGNG煽りではなく、参考にさせてもらいたいので。
0471デフォルトの名無しさん
NGNGプロファイラに掛けたら、URI.parseも遅かったが、
URI#+は失禁するぐらい遅かった。
URIライブラリは、UriValidatorとUriUtilに分けたらどうだ?
CGIライブラリもなぁ、なんか使いにくいよ。
Ruby唯一の処理系に付属するオフィシャルな
おまけライブラリにしては、実装者のアクが強すぎ。
なんつーか、ツブシの効かない感じ。
0472デフォルトの名無しさん
NGNGプロファイラの結果見たい。遅いのはどのへん?
# URI::Generic#mergeあたりかな。
0473デフォルトの名無しさん
NGNGxml-parserでできますっけ。
0474デフォルトの名無しさん
NGNGhttp://raa.ruby-lang.org/cat.rhtml?category_major=Library;category_minor=XML
libxmlとかかねぇ。
0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNGX ターミナルの表示可能なカラム数を Ruby から得るにはどうしたらいいですか?
やりたいことは、Debian や RedHat の apt-get を実行したときに、画面右端に出る
[38%] などのパーセント表示を右端ぴったりに出したい、ということなのですが。
0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNG安直でよければ
columns = (columns.to_i if columns = ENV["COLUMNS"])
ウィンドウリサイズに追従したければcursesでも使うべきだろう。
$ ruby -rcurses -e 'Curses.init_screen;l,c = Curses.lines,Curses.cols; Curses.close_screen;puts "#{c}x#{l}"'
100x50
0480山崎渉
NGNG0481デフォルトの名無しさん
NGNGprint文でいいんじゃねえの?
0482デフォルトの名無しさん
NGNGCGIでRubyがIISを落とす件です。
なんとなくわかりました。
httpdはIIS4です。フォームからCGIにデータを送信して、CGIの中で
Locationヘッダを使って自分のCGIに戻すことをしています。
掲示板なんかでの再読み込み防止策としてやったのですが、
これがなぜか無限ループに陥ってしまうのです。
リクエスト内容を見るとLocationにはクエリを渡していないのに
その前のフォームのデータが流れてきています。
そしてまたLocation。
ちなみにただLocationでループさせても適度な回数でたたききられます。
0483デフォルトの名無しさん
NGNGRFC2616 の
10.3 Redirection 3xx
14.30 Location
をよく読んだら何か分かるかも。
0484デフォルトの名無しさん
NGNGのマッチのあと、$1 が 'a' ではなく '' になるのはなぜでしょうか?
0485デフォルトの名無しさん
NGNG0486デフォルトの名無しさん
NGNGつまりスレ違いだったわけでつね
空文字列にマッチするから。
0488山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0489デフォルトの名無しさん
NGNGそれじゃあ説明になってないんじゃ?
普通に考えると、a* が貪欲に 'a' にマッチすると思うんだけど。
/((a*)*)/.match('a').to_a # => ["a", "a", ""]
↑これは、ちょっと理解し難いです。
(a*) が空文字にマッチしてるのに、
どうしてその外側の ((a*)*) が 'a' にマッチし得るの?
0490デフォルトの名無しさん
NGNGだから内側のカッコは2回マッチしてるんだってば。
最終的な $~ は最後のマッチが有効になる。
これなら分かる?
$ ruby -e 'p /((ba*)*)/.match("bab").to_a'
["bab", "bab", "b"]
0491デフォルトの名無しさん
NGNGでも、なぜ(a*)が2回マッチするのかが分かりません。
1回目のマッチで文字列全部を取ってしまってるので、それで終了にはならないのですか?
0492デフォルトの名無しさん
NGNG.{0,0} は空文字列に最低一回マッチする。
0493489 (not (484 or 491))
NGNGあぁ、なるほど。理解できました。
(a*) は、1回目のマッチで 'a' を食べて、
2回目のマッチで '' を食べたところで繰り返しが終了し、
その時点のマッチの状態ってことで $1 = '' がセットされたってわけですね。
0494デフォルトの名無しさん
NGNGまあこういうのはマニュアルなんかにはあまり詳しく書かれてないから
Friedl の Mastering regular expressions でも買って読むのが吉
0495491
NGNG2回目のマッチが行われれば $1 に '' が入るのは分かるのですが、
1回目のマッチですべての文字列を食べ終わっているのに
2回目のマッチを行おうとするというのがどうも理解できません。
文字列の最後に仮想的な空文字を想定して、
1回目のマッチ後ではそれがまだ残っているというふうに考えるのでしょうか。
0496デフォルトの名無しさん
NGNGまあそうなんだが「仮想的な空文字を想定して」というのはよく分からん。
まず空文字ではなくて空文字列というべきだろう。
そして仮想的に想定しているのでなく実際にある。
0497デフォルトの名無しさん
NGNGirb(main):008:0> t = File.stat('foo').mtime.to_s
=> "Fri Jul 26 23:01:14 GMT+9:00 2002"
irb(main):009:0> Time.parse t
=> Sat Jul 26 23:01:14 UTC 2003
0498デフォルトの名無しさん
NGNG0499デフォルトの名無しさん
NGNG0500デフォルトの名無しさん
NGNGそういうTZってありだっけ?
begin-base64 644 tz.diff.gz
H4sIAAAAAAACA71Ry2rbQBRde77iLAKRMh7r4dgmA0IJKZQssknclWWKLI3C
gCyZGdmkxvTbM3rFSeqmi0LuQvcx95xzxbkrUvHMkcuVk8aVcLJSreNqpFYk
+P8gD7ePyGQuOJxkpx21Xf1ytEra4k/N4Y4oUSkpdrJ4gjJJy7KAN5qSVGYZ
2BbMB9uAKTPD8VbG2IlfGPhXuI8VfNcdw53y8RWfuGCuiUHNSSk9iRrjZtOh
fJ/7U+52KHJ9bQ64nAxnoG0ygySPtcY3w0EwGACI9EVXWYQ1GVjEbL+kVsgj
TVNd2WG0IrR7M9OndXXYVokdLhhdRmm9yEOT7Y7ocCT6uEA/UWjBLYkdkruj
15Vciy8zuRP7q7ued8Jez0N/ZO9u139uqyHrfX3d/2DojHuXbwyducMJaPN9
tXNuoARtlOa0AIXM+8G+LISZ1Gm03SSxFoS1LzKDE91YC8qWthWlUWrzsM3R
3kHwu8EQ+m455N/v54cf81s7/BcQeHeSdeYhCHDOzhGCeeDwbFyYsT+qyp/S
lFMXFGfjprWbvucQuW71a8la6K3OCx+CUAoVBAAA
====
0501デフォルトの名無しさん
NGNG0502デフォルトの名無しさん
NGNG実行結果、「123aaa456789」を期待していたのですが、
「123aaa789」となってしまいました。ファイルの途
中に追加書き込みするには、どうしたらよいのですか。
f = open("text","w")
f.print("123456789")
f.close
f = open("text", "r+")
f.seek(3, IO::SEEK_SET)
f.print("aaa")
f.close
0503デフォルトの名無しさん
NGNG直接的な手段はない。
ファイルの途中に直接挿入はできないので、
挿入したい位置から先を後ろへずらす必要がある。
0504デフォルトの名無しさん
NGNGファイルがそれほど大きくなければ
f = open("text", "r+")
img = f.read # 全部読んで
img[3,0] = "aaa" # ファイルイメージを文字列として編集して
f.truncate(0) # ファイルを切り詰めて
f << img # 書き出すのが頭を使わなくて楽
f.close
0506デフォルトの名無しさん
NGNGそのTZフォーマットの典拠を明示できるなら、
bugs-jaにでも投げといてくれるとありがたい。
0507502
NGNGどうもありがとうございます。
ファイルが大きく、編集箇所も多いので、
結局、以下のようにしました。
f_read = open("text1","w+")
f_read.print("123456789")
f_read.rewind
f_write = open("text2", "w")
f_write.print f_read.read(3)
f_write.print ("aaa")
f_write.puts f_read.gets
f_read.close
0508デフォルトの名無しさん
NGNGdef random_permutation(n,k) (0..n-1).sort_by{rand}[0,k] end
sort_by は便利だ
0509デフォルトの名無しさん
NGNG(0..n-1).sort_by{rand}
(0..n-1).sort{rand<=>0.5}
確率的な違いをどう表現したらいい?
0510デフォルトの名無しさん
NGNG(0..n-1).sort_by{rand} が以下と等価かどうかすら分からん
def perm(a, k=0, v = [])
n = (a = a.to_a).size-1
n == k ? v<<a : (k..n).each{|i| perm((b=a.dup;b[k],b[i]=b[i],b[k];b),k+1,v)}
v
end
perm(0..n-1)[rand((1..n).inject(1){|v,x|v*x})]
0511デフォルトの名無しさん
NGNG0512デフォルトの名無しさん
NGNGどれ?と聞く以上は選択肢を出していただきたい。
0513デフォルトの名無しさん
NGNGqsortの平均コスト評価で想定している分布って
(1) (0..n-1).sort_by{rand} # n個の一様乱数の順序
(2) (0..n-1).sort{rand<=>0.5} # ランダムな2分割による入れ換え?
(3) >>510 # 順列上の一様分布
(4) 上記以外
のどれ?
0514デフォルトの名無しさん
NGNGそれは (3) だが (1) や (2) が (3) と等価なのかは知らん。
0515デフォルトの名無しさん
NGNGそいういったことをしてくれるツールが検索しても見当たりませんでした。
こんなツールがあるよといった情報や、他の Ruby 用 Unit Test ツールでは実装
されているという情報がありましたら、教えてください。
0516デフォルトの名無しさん
NGNGcronの方はどうとでもなるとして、htmlのそれっぽい出力はないんじゃないかな。
ui/gtk/やui/fox/のtestrunner.rbを参考に書いてみては?
0517デフォルトの名無しさん
NGNGRubyUnitはTest::Unitに統合されてるのでそっちを使ったほうがいいかも。
HTMLでの出力というのがどういうものを求めてるのかよく分からんが、
test/unit/ui/html/testrunner.rbを他のtestrunnerを参考に書いてくれると
嬉しい人が増えると思われ。
0518デフォルトの名無しさん
NGNG0519デフォルトの名無しさん
NGNGスクリプトファイルはじまり
#!/ruby
if なんとか
i = 10 #ここではじめてiが出てくる
end
print "#{i}\n" # 10
おわり
ifの中で初めて使う変数が、ifの外でも使えます。
これってあり!?
0520デフォルトの名無しさん
NGNGhttp://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=trap%3A%3A%A5%B9%A5%B3%A1%BC%A5%D7%A1%A2%C0%A9%B8%E6%B9%BD%C2%A4
0521デフォルトの名無しさん
NGNGb=a["3"]
b[4] = b[4].to_i + 1
で、a["3"][4] が1になって欲しいんですがならないのはどーして?
0522デフォルトの名無しさん
NGNGただし、多分意図している動作とは異なる。
http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=trap%3A%3AHash
0523521
NGNGほんとだ、a["3"][4]は1を返しますね。
でも、 a.inspect => {} となってしまいます。
a.each do |key,val| とかなにも返って来ませんし、、、
Ruby 1.6.7 です。
0524デフォルトの名無しさん
NGNG調べればあちこちに書いてあると思うけど、
Hash.new(obj) の引数 obj は Hash#default の値として保持され、
このオブジェクトは存在しないキーへの参照があったときに返される。
h = Hash.new("Go Fish")
h["a"] = 100
h["b"] = 200
h["a"] #=> 100
h["c"] #=> "Go Fish"
h.default #=> "Go Fish"
h["c"] << "pond"
h["c"] #=> "Go Fishpond"
h.default #=> "Go Fishpond"
h["c"] = 300
h["c"] #=> 300
h.default #=> "Go Fishpond"
h["d"] #=> "Go Fishpond"
0525デフォルトの名無しさん
NGNG>>522のリンクを読めよ。
0526デフォルトの名無しさん
NGNG「デフォルトオブジェクト」とかにすれば勘違いしづらいかも。
0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNG↑これ読んだ人、乾燥キボンヌ。
0529デフォルトの名無しさん
NGNG乾いてたよ。
0530デフォルトの名無しさん
NGNG0531デフォルトの名無しさん
NGNGクラスのインスタンス変数をインスタンスのインスタンス変数として使っちゃだめ?
0532デフォルトの名無しさん
NGNG0533デフォルトの名無しさん
NGNGでは、クラスのインスタンスのインスタンス変数として使っちゃ駄目?
つまり「クラスのインスタンス変数」と「そのクラスのインスタンスのインスタンス変数」
の使い分けを教えて欲しいのれす。
0534デフォルトの名無しさん
NGNG0535デフォルトの名無しさん
NGNG0536デフォルトの名無しさん
NGNGそれは全然違うと思うけど。
クラスのインスタンス変数は、継承したくなくて(クラス変数じゃ駄目)、
公開もしたくない(定数も駄目)が、クラスに所属させたい名前じゃないかな。
例えば特異メソッドで使う値とか。
0537533
NGNG--(コード)--
class Person
@name
def initialize(name)
@name = name;
end
def say
p @name
end
end
p1 = Person.new("foo");
p2 = Person.new("bar");
p1.say();
p2.say();
--(結果)--
"foo"
"bar"
--
両方とも "bar" ってなってほしかったのですが、、
0538デフォルトの名無しさん
NGNG0539デフォルトの名無しさん
NGNG> class Person
> @name
この@nameと
> def initialize(name)
> @name = name;
この@nameは別物。
前者はPersonというClassオブジェクトのインスタンス変数。
後者はPersonクラスのオブジェクトの持つインスタンス変数。
0540デフォルトの名無しさん
NGNGclass C
@n = 0
def self.n() @n end
def self.new() @n += 1; super end
end
class S<C
@n = 0
end
S.new; C.new; C.new; C.new; S.new;
p [C.n, S.n] #=> [3, 2]
0541デフォルトの名無しさん
NGNGファイル無しでimage instance作りたいってこと? フツーに new すりゃいいし
0542デフォルトの名無しさん
NGNGイマイチどんなつかいでがあるのかわかんない。
サブクラスでの変更がスーパークラスへ反映されなければいいのに、
と思うことが多い。
0543デフォルトの名無しさん
NGNGつかってるよ。例えばなんかのデフォルト値とか。
サブクラスでも同じデフォルト値を使いたいからね。
定数でもいいんだけど、デフォルト値を変更したいときもあるから。
目的に応じて、クラス変数とクラスインスタンス変数を
つかいわければいいんじゃない?
サブクラスでの変更を親クラスへ反映させたければクラス変数、
させたくなければクラスインスタンス変数。
0544デフォルトの名無しさん
NGNGおお、クラスインスタンス変数ってのがあるんですね (←節穴野郎) 。
>>540 みたいに使うのか。
なんか漏れにもうまいこと使い分けれそうです。ども。
0545sage
NGNG正しい読み方ってどういう風に呼ぶのでしょうか??? > @、@@
クラスのインスタンスが持つ変数を「インスタンス変数」
クラスが持つ変数を「クラス変数」
という風に覚えていたのですけど、違ったのですか???
0546デフォルトの名無しさん
NGNGsage間違えた‥
0547デフォルトの名無しさん
NGNGあってる
@instance_variable オブジェクト毎
@@class_variable クラス毎
クラスはそれ自身がオブジェクトでもあるので両方持てる
0548デフォルトの名無しさん
NGNGhttp://jarp.jin.gr.jp/win32/aは知っているのだけれど、gdbm.soはないです。
Makefile が妙でnmake失敗してしまうです。
■ このスレッドは過去ログ倉庫に格納されています