トップページ⇒tech
709コメント191KB

Ruby について Part 4

■ このスレッドは過去ログ倉庫に格納されています
0001Just Another Ruby 2cherNGNG
オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。

Ruby Home Page
http://www.ruby-lang.org/ja/

= 前スレ
* Ruby について Part 3
  http://pc2.2ch.net/test/read.cgi/tech/1042004759/

= 過去スレ
* Rubyについて Part 2
  http://pc3.2ch.net/tech/kako/1028/10289/1028906179.html
* Rubyについて
  http://pc3.2ch.net/tech/kako/1012/10120/1012096319.html
0002Just Another Ruby 2cherNGNG
= 関連スレ

== [UNIX板]
* rubyを語るスレッド 3
  http://pc.2ch.net/test/read.cgi/unix/1045705000/
* goRua(Ruby/Gtkによる2chブラウザ)ってどうよ。
  http://pc.2ch.net/test/read.cgi/unix/1008120213/

== [プログラム技術板]
* Rubyの実装に疑問あり!
  http://pc2.2ch.net/test/read.cgi/tech/1004873294/

== [WebProg板]
* 【Ruby】RubyでCGI
  http://pc2.2ch.net/test/read.cgi/php/988948655/
* ゲームを作ろう!【PHP】【Perl】【Ruby】【ASP】
  http://pc2.2ch.net/test/read.cgi/php/1030267927/

= その他
* Matzにっき
  http://www.rubyist.net/~matz/
* Ruby Weekly News @ Ruby Garden
  http://www.rubygarden.org/rurl/html/
* <rubyXML/>
  http://www.rubyxml.com/
0003デフォルトの名無しさんNGNG
3
0004デフォルトの名無しさんNGNG
乙 >>1000
0005デフォルトの名無しさんNGNG
a=Hoge.new
array.push(a)
array.last.method()
p a
で、俺が何がしたいのか分かる?
どーすりゃいいの?
0006デフォルトの名無しさんNGNG
>>5
わからん
0007デフォルトの名無しさんNGNG
>>5
どう困っているのかもわからん
0008デフォルトの名無しさんNGNG
>>7
俺には困っているかどうかさえわからない。
0009デフォルトの名無しさんNGNG
>>8
日本語が不自由なことに困っていることは分かったyo
0010デフォルトの名無しさんNGNG
>>5
method() は Object#method のことじゃなくて、
なにか任意のメソッドを適用したいのかなあ?
0011デフォルトの名無しさんNGNG
array.push(a) を array.push(a.dup) に変えるのが正解と大予想
0012デフォルトの名無しさんNGNG
関係ないけど
> array.last.method()
の () にすげー違和感があるのオレだけ?
0013デフォルトの名無しさんNGNG
括弧がある方が漏れは好きカッコイイ
0014デフォルトの名無しさんNGNG
括弧がある方はJavaみたいでカッコワルイ
0015デフォルトの名無しさんNGNG
で、>>5はどこ逝ったんだ。
0016デフォルトの名無しさんNGNG
究極の選択:
method ()
method( )
0017デフォルトの名無しさんNGNG
1.8では前者は常に(-w付けなくても)警告が出る。
0018デフォルトの名無しさんNGNG
Float('1_000') が 1000.0 になるのに、
'1_000'.to_f が 1.0 になるのは納得いかん。
0019デフォルトの名無しさんNGNG
>>18
たしかに1.6は_を認識しないな。
0020デフォルトの名無しさんNGNG
1.8ではどっちも1000.0になる
0021デフォルトの名無しさんNGNG
CGIのプログラムで、受け取るデータの大きさを
制限しようと思うのですが、
どうすればいいでしょうか?

IOオブジェクトならgetcしながら、ファイルサイズを
計算すればいい(?)のでしょうが、
CGIオブジェクトはどうすればいいかわかりません。
0022デフォルトの名無しさんNGNG
Apacheのディレクティブ使えば?
0023デフォルトの名無しさんNGNG
>>21
向こうが送りつけてくるものは制限できないから、
受け取ったあとでちょんぎるなりsizeとってエラー出すなりすればいいんじゃないの?
0024デフォルトの名無しさんNGNG
>>21
もしCGIプロセスのメモリ消費を気にしているなら、
CGI#stdinput を再定義して自作のバッファに差し替えるという手もある。
そのバッファオブジェクトは read と binmode だけ持っていれば良い。
0025デフォルトの名無しさんNGNG
>>22
自宅サーバーじゃないから残念ながら設定できないです。
>>23
たしかに、sizeとってエラーが一番簡単そうですね。
>>24
一度、挑戦してみます。

ありがとうございました。
0026デフォルトの名無しさんNGNG
CGIといえば、
アップローダみたいに送られてくるデータが大きくなったとき、
データが送られてくるのが完了する前に中断されると
CGIオブジェクトの初期化のところで延々と止まってしまう。
どうしたらいいだろうか。
0027デフォルトの名無しさんNGNG
begin
timeout(delay){cgi=CGI.new}
rescue TimeoutError
exit(1)
end
0028デフォルトの名無しさんNGNG
RedHat8,にソースからmakeして入れたruby-1.6.8で$0の挙動がなんかおかしい。
print "ContentType: text/plain\n"
print $0
ってかいただけのファイルを作ってApache1.3.27+mod_ruby越しに見るとfalse、
コンソールで実行すると空文字列が$0に入ってた。
リファレンスとなんか違うし、このままだと$0 == __FILE__とかが出来ないので困る。
ActiveScript Rubyにくっついてたruby-1.6.8`を使って同じスクリプトを
win2kのコンソールで実行すると、$0には実行しているスクリプトの名前が
入ることは確認できたんだが、何が悪いんだろう。ruby入れ直せば直るのかな。
0029デフォルトの名無しさんNGNG
mod_rubyはruby_options()もruby_script()も呼んでないので、$0が初期化されない。
バグだと思うなら、前田さんへ。

コンソールで実行ってのは、普通のrubyコマンドで$0が空だったってこと?
003028NGNG
>>29
>mod_rubyはruby_options()もruby_script()も呼んでないので、$0が初期化されない。
$0mod_rubyが正しく動いている時、$0が初期化されていないなら、
$0にはnilが入ってるのかな?
何でfalseが入ってたのだろう。

>コンソールで実行ってのは、普通のrubyコマンドで$0が空だったってこと?
test.rbにprint $0と書いてruby test.rbとすると、出力はContentType: text/plainだけだった。
でも28を書いた後p $0って行を追加してみたら"test..rb"が出力されてきた。
ごめん、空じゃなかったね…。
あと、リファレンス見てprint $0.inspectとやってみたが、出力には何も出てこないようだ。
うーん、やっぱりよく解らない……。
00317cさんNGNG
$ ruby --version
ruby 1.6.8 (2002-12-24) [i386-cygwin]

irb(main):001:0> a = [1,2,3]
=> [1, 2, 3]
irb(main):002:0> a[0,5]
=> [1, 2, 3]
irb(main):003:0> a[1,5]
=> [2, 3]
irb(main):004:0> a[2,5]
=> [3]
irb(main):005:0> a[3,5]
=> []
irb(main):006:0> a[4,5]
=> nil

要素無しのArray?
0032デフォルトの名無しさんNGNG
>>30
zsh とか使ってない?プロンプトで出力が消されたんじゃない?ちゃんと改行しとけ。
0033_NGNG
http://homepage.mac.com/hiroyuki44/hankaku02.html
0034デフォルトの名無しさんNGNG
>>30
> 何でfalseが入ってたのだろう。
$0の実体はrb_prognameという変数で、これはとくに初期化されてないので0になってる。
で、CレベルではQfalse==0ということ。
0035デフォルトの名無しさんNGNG
>>31
部分配列の先頭自体が範囲を外れてるから。
00367cNGNG
>>35
[1,2,3]が持つ範囲は 0..2 なわけで
a[3,5]の時点で範囲を外れている気がする。
漏れがアフォなだけですか?
0037デフォルトの名無しさんNGNG
この場合、先頭位置は要素の間にあると考えた方がいい。
つまり、3だと最後の要素の後ろになる。

a[2,5] # [1, 2, < 3 ] X X >
a[3,5] # [1, 2, 3 < ] X X X >
a[4,5] # [1, 2, 3 ] X < X X X >

# Xは無効な範囲ね。

0038"c"*7さんNGNG
>>37
そういうイメージなのですか……。
一貫性がない気がするが……。
予備のスペースとして一個とってあるのかとか色々考えてしまった。
処理的には nil or size == 0 するだけだからいいっちゃいいんだが。
1.8でも変わらんのですか?
0039デフォルトの名無しさんNGNG
1.8でも一緒。

a[4,5].to_a.empty? とか。
0040デフォルトの名無しさんNGNG
>>39
サンキューです。
それで逝きます。
FAQっぽいけど、これって既知?
0041デフォルトの名無しさんNGNG
>>37 正直カンドーした。是非、次の出力も図解して下され。
p [0,1,2][-2..-1]
p [0,1,2][-2..+0]
p [0,1,2][-2..+1]
0042デフォルトの名無しさんNGNG
>>41
マイナスは末尾から数えるというだけで、とくに変わりはないんだが。

> p [0,1,2][-2..-1]
[0, <1, 2>] # size=3, 3-2=1, 3-1=2

> p [>0,<1,2][-2..+0]
(3-2=1) > 0なんで、空

> p [0,1,2][-2..+1]
[0,<1>,2] # 3-2=1
空にならないのは..はendを含むから。

p [0,<>1,2][-2...1]
なら空になる。

ちょっと分かりにくいのはこれかな。
p [0,1,2][0..-4]
X>[<0,1,2]
0043デフォルトの名無しさんNGNG
>>42
> > p [0,1,2][-2..+1]
> [0,<1>,2] # 3-2=1

なるほど、そう考えれば 0 は入らないのか。さんくす
0044デフォルトの名無しさんNGNG
>>11
まさにそれです。ありがとうございました。
0045デフォルトの名無しさんNGNG
Rubyを勉強し始めて実はよく分かってない事に気付きました。
'#' と '::' と '.' の違いを分かりやすく教えてください。
0046デフォルトの名無しさんNGNG
#include <stdio.h>
int main(){
char a='〇',b='●';
int c,n;
for(c=1;c<=91;c++){
if(c%2==1){
printf("%s",a);
}
else if(c%2==0){
printf("%s",b);
}
for(n=1;n<=9;n++){
if(c==9*n){
printf("\n");
}
}
}
}
0047デフォルトの名無しさんNGNG
>>45
ドキュメントのことだよね?

--- Hoge#moe(arg)
      Hogeのインスタンスメソッドmoe()
--- Hoge.nae(arg)
      Hogeのクラスメソッドnae()
--- Hoge::SAGE
      Hogeの定数SAGE

これは文法と言うよりドキュメントでの慣習。
実際のコードでは、

hoge = Hoge.new
hoge.moe("shine")
Hoge.nae("shine") # Hoge::nae("shine")と書く人もいる。
Hoge::SAGE

と使う。
クラスメソッドに"."を使うか"::"を使うかは好みなのかな?(意味は同じハズ)
0048デフォルトの名無しさんNGNG
ありがとうございます。
プログラム中では '::' と '.' は全く同じ意味なんですね。

あと、refeのドキュメントではSingletonメソッドとInstanceメソッドで '.' と '#' を使い分けてる気がします。
0049デフォルトの名無しさんNGNG
すみません。 '.'と'::'が同じなのはクラスメソッドの時だけですね
0050デフォルトの名無しさんNGNG
File.openブロック内で例外を投げたらcloseしてくれますか?
0051デフォルトの名無しさんNGNG
>>50
ブロックを抜けるときにcloseする。
だから例外を投げれば、ブロックを抜けないように細工してない限りcloseされるよ。
0052デフォルトの名無しさんNGNG
>>51 THX!!
0053 NGNG
rubyを組み込んだシェアウェアを作ろうかなと思ったんだけど、
これってライセンスに問題ある?
色々検索してみたけどよく分からない・・・
0054_NGNG
http://homepage.mac.com/hiroyuki44/2ch.html
0055デフォルトの名無しさんNGNG
>>53
じゃあやめとけ。
ていうか作ってから言え。
0056デフォルトの名無しさんNGNG
rubyをシェルから簡単に動かしてみたいんですが、
どんな方法があるんでしょうか?

今は
$ ruby << EOF
puts "AAAA"
EOF
AAAA

とかやってるんですが・・・。
0057デフォルトの名無しさんNGNG
irb じゃだめなの?
0058デフォルトの名無しさんNGNG
>>57
irb、知りませんでした。
これでできそうです。

情報thxです。
0059デフォルトの名無しさんNGNG
>>53
デュアルライセンスのArtisticの方を取れば平気では?
検索掛ける前にライセンス文章読むほうがいいと思われ。
0060デフォルトの名無しさんNGNG
$ ruby
puts "AAAA"
^D
AAAA
じゃだめなの?
0061デフォルトの名無しさんNGNG
perlも引数がないときは標準入力から読むのか。知らなかった。
>>60
サンキュー
0062 NGNG
>>55
作ってから「ダメでした」じゃ労力の無駄じゃないか、バカ
0063デフォルトの名無しさんNGNG
>>62
バカのためにわざわざ時間を割いてライセンスについて解説するのも
労力の無駄じゃないか、バカ
0064デフォルトの名無しさんNGNG
>>63
んな事言ってたら掲示板やMLの存在価値が薄くなるじゃん。
そういう人に限って解説出来るほど知識なかったりするんだけどね。
0065デフォルトの名無しさんNGNG
Ruby厨の本性見たり、枯れ尾花
0066デフォルトの名無しさんNGNG
>>64
で、 tarball の COPYING (COPYING.ja) は読みましたか?
0067デフォルトの名無しさんNGNG
だいたい今時シェアウェアなんてはやらねーよ。
0068デフォルトの名無しさんNGNG
>>66
それ、サイトにあったから読んだけどよく分かんない。
rubyを組み込んだシェアウェアの場合、”3”に該当すると思うんだけど、

3. 以下の条件のいずれかを満たす時に本プログラムをコンパイ
ルしたオブジェクトコードや実行形式でも配布できます.

(a) バイナリを受け取った人がソースを入手できるように,
ソースの入手法を明示する.
(c) 変更を行ったバイナリは名前を変更したうえ,オリジナ
ルのソースコードの入手法を明示する.

(a)の指すソースというのは、rubyではなく作ったソフト?
(c)で「オリジナル」ってわざわざ書いてるからには、
(a)はrubyが組み込まれたアプリのソースなんだろうな・・・
ならシェアウェアとは相容れない気がする。
0069デフォルトの名無しさんNGNG
>>68
3(a)はRubyそのものをバイナリ配布するときの規定と思われるので、
3(c)にだけ従えばいいんじゃない?

つまり、Ruby embedded なソフトウェアは
1) Ruby と名乗ってはいけない
2) Ruby の入手先を明示する

だけでいいと思う。
0070デフォルトの名無しさんNGNG
バイナリ配布のときは実質的にLGPLになるのかと思ってた
0071デフォルトの名無しさんNGNG
修正BSDくらいの緩いライセンスを志してたはず。
Rite のリリースにあわせてライセンスも変わるのでは。
0072デフォルトの名無しさんNGNG
matzに地元で採れたリンゴでも送っとけばOK。
0073デフォルトの名無しさんNGNG
どっちにしろ、 Ruby で金儲けしたいひとにもやさしいライセンスになるんでしょ?
0074デフォルトの名無しさんNGNG
>>70
regex.[ch]を含むならそうなのでは?LGPLの5と6を読む限りそうとしか思えん。
0075デフォルトの名無しさんNGNG
>>74
さらに、mswin32/mingw32/bccwin32版の場合はwin32/win32.[ch]のライセンスも
絡んでくるのでよくよく考えてみる必要がありそう。
0076デフォルトの名無しさんNGNG
flag = false
Thread.start {
    while !flag
        do_something
    end
}

while line = gets
    if line.chop == 'end'
        break
    end
end
メインスレッドはユーザーの入力待ち、生成したスレッドはユーザーの終了コマンドが
来るまでずっと何かをし続ける。というスクリプトが書きたかったのですが、
上記のスクリプトだとメインスレッドのgetsのせいで生成したスレッドが動いてくれません。
何か良い方法などがありましたら、教えてください。
007776NGNG
すみません環境を書き忘れていました。
WinXP+mswin32バイナリ
です。よろしくお願いします。
0078デフォルトの名無しさんNGNG
(σ・∀・)σgets!!
0079デフォルトの名無しさんNGNG
Winは知らんけど、Linuxだとgetsでスレッドは止まらんな。
0080デフォルトの名無しさんNGNG
Native Win32だとgetsはスレッドを止める。FAQだね。
008176NGNG
>>80
ガ━━ΣΣ(゚Д゚;)━━ン
そうですか、FAQでしたか・・・
>>76でしたいことは、
ひたすらデータを集め続け、ユーザーが任意のタイミングで
データ集めを終了させ、集めたデータをメモリからファイルに書き出す。
ということなんですが、別にスレッドを使わなくてもgetsを使わなくても
良いので何か代替案はありませんか?
0082デフォルトの名無しさんNGNG
>>81
Ctrl+Cを押す、とか。
0083デフォルトの名無しさんNGNG
>>82
それだと、ファイルへの書き出しが出来なくなりませんか?
集めたデータに対して変更をする可能性があるので
データをメモリ上に置いておきたいので、集めた物から逐一書き出し
することは出来ません。最後に必ず実行したいのです。

と、ここまで書いて思い付いたのですが、『最後に必ず』と言うことで、
例外処理のensureでやれそうな気がしました。Ctrl+CのInterrupt例外クラス
を捕捉してやってみようと思います。>>82氏サンクス。
008476 == 83NGNG
stopFlag = false
trap(:INT) {
    stopFlag = true
}

while !stopFlag
    do_something
end

ファイルへの書き出し処理コード
========================================
上記の方法で、Ctrl+Cでファイルへ書き出して終了させることが出来ました。
皆さん、ありがとうございました。
0085デフォルトの名無しさんNGNG
ruby-mswin32(static) をmfcに組み込むと、
終了時にVC.NET がmemory leakだとかいって
オブジェクトをdumpずーーっとします。
何か間違ってる可能性がありますか?
ちなみに、新規プロジェクトでなんにもない状態から、
ruby_init();
ruby_finalize();
ってやっただけです。
1.6.8 と1.8.0 で両方試してみましたが、ダメでした。
0086デフォルトの名無しさんNGNG
Rubyのメモリリークは仕様です
0087デフォルトの名無しさんNGNG
メモリリークの定義によると思うが。
そういうもんなので気にしなくてよろし。

0088デフォルトの名無しさんNGNG
>>85
組込みクラスとかシンボルテーブルとか、開放しないものはいっぱいある。
0089デフォルトの名無しさんNGNG
Perlにおいても言える事だが、Init_libraryに対するDestroy_libraryがあればいいのにな。
0090デフォルトの名無しさんNGNG
>>89
なくちゃいけない理由は?
0091デフォルトの名無しさんNGNG
>>90
別に。「あればいい」だけで「なくちゃいけない」とは誰も言ってませんが。
0092デフォルトの名無しさんNGNG
拡張ライブラリだと、見えないとこでどう使われてるか分からんから危険すぎ。
0093デフォルトの名無しさんNGNG
>>89
やっぱ処理系側が面倒見るのがいいんじゃ。
0094デフォルトの名無しさんNGNG
つーかruby_finalize()した後まで色々残ってるってのは気持悪くないのか
0095デフォルトの名無しさんNGNG
正直、これハマりました。

p {"a"=>1} # Error
p ({"a"=>1}) # OK
0096デフォルトの名無しさんNGNG
warning: (...) interpreted as grouped expression
0097デフォルトの名無しさんNGNG
>>94
それってmalloc/freeの部分の話も含んでる?
だとしたらfjでの某論争がここに再現するかも(w
0098デフォルトの名無しさんNGNG
>>97
rubyコマンドの話なら、malloc/freeはどうでもいい。
ただ、rubyエンジンをないそうしたアプリケーションの場合は、
ちゃんとfreeした方が良いんじゃないか、とは思うが。
0099デフォルトの名無しさんNGNG
a = 0
def a.foo
end

なんで定義できないんだよ!
0100デフォルトの名無しさんNGNG
実装上の仕様で、Integer オブジェクトは即値だから。
0101デフォルトの名無しさんNGNG
なんで定義したいんだよ
0102デフォルトの名無しさんNGNG
>>100
即値なのはFixnum。
でも、即値だから定義できないのだっけ?
一時期できていたのを、意図的にやめた気がします。
010397NGNG
>>98
妙に納得。純粋にライブラリとして使っている
アプリ側から見たら、確かに。
何でそうじゃないんだろ
0104デフォルトの名無しさんNGNG
ふつー寿命が同じだからでしょ
010597NGNG
フロントエンドである「ruby」から使うことが最優先だから、
ライブラリとしての完成度を高めるための余分な手間を
かけたくない、ってことでよろしい?
0106デフォルトの名無しさんNGNG
>>95
これはどうしてエラーになるの?
初心者でスマソ。
0107デフォルトの名無しさんNGNG
>>105
というよりも、その部分に手間をかけたい人が今のところいないってことかと。
ruby-dev にご参加ください。
010897NGNG
>>107
なるほど。自分はぜんぜん詳しくないけど、そういう話題が
ふさわしい時期、たぶん1.9か2.0の開発が始まる頃までに
そういう問題提起をできるまでのスキルになりたいっす。
かんばりまふ。(devは見てますよ、いちお)
010995NGNG
>>106
なんでか知らん。
0110デフォルトの名無しさんNGNG
馬具?
0111デフォルトの名無しさんNGNG
>>106
ブロックがイテレータとして扱われるからでは。
0112デフォルトの名無しさんNGNG
>>106

def q() puts yield end

for line in <<EOS do eval(line) end
q { "helo, world" }
q { 1 <= 2 }
q { 1 => 2 }
EOS
0113デフォルトの名無しさんNGNG
Rubyの+や-や*や/などってメソッドだそうですが、
a = 3 + 5 * 7; p a
の結果が、3の+メソッドに5を渡した返り値8。
返り値8の*メソッドに7を渡した返り値56がaにあると考えるのが、
メソッドだとすると普通だと思うのですが、結果は38です。
いったいこれのどこがメソッドなのでしょうか?
0114デフォルトの名無しさんNGNG
>>113
マニュアルにある理由じゃない?
>プログラミングの利便のために一部のメソッド呼び出しと制御構造は演算子形式をとります。
0115113NGNG
一応、実行される順番が文法で普通でなくてもIntegerのインスタンスメソッドを呼び出しているのですよね。
電子の妖精さんが、実行順序を算数の普通に変更してくださってると、理解しときます。

それはさておき、
Fixnumは即値であるという表現がされていますが、
そのオブジェクト自身の値を変えられないのは即値であるという理由からなのでしょうか?
Bignumは即値でないそうですが、「i++」のように、値を変えても問題ないのではないでしょうか?
0116デフォルトの名無しさんNGNG
>>115
数値を変えられないのは仕様だろう。mutableな数値はなかなか奇抜な発想では?
num0 == num1 ならば num0.id == num1.id が成り立って欲しいくらいだが、
それだと効率が悪いからFixnum以外はそこまではしないのだと思われ。
だからFixnumが即値なのは理由というより単に実現方法じゃないかな。
即値それ自体は言語仕様には関係のない用語だと思う。
0117デフォルトの名無しさんNGNG
Ruby/Gtkで、CListにappendしたデータを取得する方法ってないの?
Ruby/Gtkプログラミング入門の書籍を見てんだけど載ってない。
これは、自分で管理した方がいいということかな。
0118デフォルトの名無しさんNGNG
>>117
children かなんかで取れなかったっけ?
確か、はるか上のクラスで定義されてるんだよ。
0119117NGNG
children だと空の配列しか返ってこなくて
rbbr.rb でいろいろ調べてたら分かりました。
get_text(row,column) で取得可能でした。
0120デフォルトの名無しさんNGNG
>>117
CListはobsoleteなんで、これからやるなら
Ruby/GTK2のTreeView周りもよろしく。
0121デフォルトの名無しさんNGNG
>>115
前の方のレス見れ!!!……と思ったら、このスレじゃなかった。スマソ。

↓ i++ とか mutable とかの話をしてる。
[UNIX板] rubyを語るスレッド 3
http://pc.2ch.net/test/read.cgi/unix/1045705000/573-619n
0122デフォルトの名無しさんNGNG
一応書いとくけど、
語るスレ3 の >>619 の
> しかし文字列もそうなんだけど、Cプログラマのmatzには
> 文字列の数学的性質に馴染みがなかったから string を
> mutable にしたんだろう。

は少し的外れじゃなかろうか。
一言で言えば「Perlに合わせた」んじゃ。
つまりは、よく使われる文字列処理においては
(特にFixnumと比べて)オブジェクトの生成による性能低下が
顕著になるから、ということではないでしょうか。

ご存知の方が多いでしょうけど、
PythonやJavaにおける普通のstringはimmutableです。
思想の違い以外にも、想定用途の違いもあると思う。
0123122NGNG
微妙に文字列の話にそれるけど、要はこういうことね

S = 'hoo'
S.gsub!('o', 'e')
p S
# => "hee"

Sが指すのは「文字列『変数』」で、
Stringは「文字列を『保持する』クラス」であるっつー事にもなる。
この理由は>>122と推測。

Integerでこれができると「整数を保持するクラス」になって、
「整数クラス」にならない。これが分かりづらいって話じゃないでしょうか。
0124デフォルトの名無しさんNGNG
>>113

突き詰めれば、parse.yで
…
%left '+' '-'
%left '*' '/' '%'
…
となってるからだと思う。
要するに、+ やら * やらは、クラスやメソッド定義の内容に関係なく、
算数における優先順位と同じ順序で評価される、と。

ちなみに
>>114氏はちょっとずれてるような。
その文面だけだと、
「Fixnum#+もメソッドだけど、1.+(2) は 演算子的に 1 + 2 って書けるよ」
っていう部分のみを意味していると思う。

演算子の優先順位はここね。(114氏が引用した文章を含む)
ttp://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%B1%E9%BB%BB%BB%D2%BC%B0
0125デフォルトの名無しさんNGNG
演算子の優先順位の表をにらめっこしながら括弧付けてけばわかりやすいかと。

a = 3.+(5.*(7)); p a
0126デフォルトの名無しさんNGNG
>>122
text processings に重きをおくPerlの経験に習ったのも理由の一つだろうね。
しかし元の文脈は Integer が immutable で String が mutable であることを
説明するであって、Integer には数学的対象としての性格を求め、
String には求めなかったというのもそれ自体は間違っちゃいないと思う。
0127デフォルトの名無しさんNGNG
equal? が identical? という名前だったら意味が分かりやすかったろう。
equal? と == の意味が異なるのは英語として分かりにくい。
0128デフォルトの名無しさんNGNG
[a,b,[c,[d,e]]]という配列を
"a,b,\"c,\\\"d,e\\\"\""という文字列で表したいのだが
良い方法はないだろうか?

逆は
def csv_spl(str)

buf = (str + ',').scan(/"([^"\\]*(?:\\.[^"\\]*)*)",|([^,]*),/).collect{|x,y| y || x.gsub(/\\(.)/, '\1')}
buf2 = []
if buf == [str]
str
else
buf.each do |c|
buf2.push(csv_spl(c))
end
buf2
end
end
でできるんだけどね(^^;
0129122NGNG
>>126
確かに。解説どうもっす。
0130デフォルトの名無しさんNGNG
>>128
押してもだめなら引いてみよう。
puts [1,2,[3,[4,5]]].inspect.gsub(/\[|\]/, "\"")
# => "1, 2, "3, "4, 5"""
0131デフォルトの名無しさんNGNG
>>127
ナイスだとおもいます。
1.9/2.0に向けてなら、提案の価値があると思います。
0132130NGNG
ぜんぜん違うし>>130
出直してきます
0133デフォルトの名無しさんNGNG
>>128
仕様がいまいち分からんがこういうことか?

def foo(ary, depth = 0)
c = depth.zero? ? '' : "\\"*(depth-1) + '"'
c + ary.map{|i| i.is_a?(Array) ? spl_csv(i,depth+1) : i.to_s }.join(",") + c
end

p foo([1,2,[3,[4,5]]]) #=> "1,2,\"3,\\\"4,5\\\"\""
0134デフォルトの名無しさんNGNG
equal?は何でequalなんだろう。
英語のequalにidenticalの意味ってあるんだっけ?
手元に英英辞書がないから分からん。
0135130NGNG
出直してきました。

def foo(a)
n=0
t=''
s=a.inspect.delete(' ')
s.each_byte do|c|
case c.chr
when '[', ']'
t<<(n==1?'"':n==2?'\"':'')
n+=(c.chr=='[')?1:-1
else
t<<c.chr
end
end
t
end

p foo([1,2,[3,[4,5]]])
#=> "1,2,\"3,\\\"4,5\\\"\""

でも>>133氏の前に完敗です。
0136131NGNG
>>134
Webは手元にあるはずです。
ttp://www.m-w.com/
によれば、

1 a (1) : of the same measure, quantity, amount, or number as another
(2) : identical in mathematical value or logical denotation : EQUIVALENT
(snip)

とあります。他の部分にidenticalという単語は見当たらず。
「理論的・数学的にidentical」なのがequalなのでしょう。
Object=ものとしての同一性ならやっぱり、
identical? じゃないでしょうか。
0137デフォルトの名無しさんNGNG
すこしでも速いrubyスクリプトの書き方についてまとめたページってある?
むかしはloveruby.netにあったような覚えがあるんだが。
0138デフォルトの名無しさんNGNG
>>137
聞く前に調べる。
http://www.google.co.jp/search?sourceid=navclient&hl=ja&q=Ruby+%E6%9C%80%E9%81%A9%E5%8C%96
0139デフォルトの名無しさんNGNG
>130
うちの環境だと
3:in `foo': undefined method `spl_csv' for #<Object:0x2859618> (NameError)
っておこられるのだが、spl_csvってどっかの拡張メゾットか?
0140139NGNG
>139の1行目は>133
の誤りです
0141デフォルトの名無しさんNGNG
>>138
さんきゅう
最適化という言葉が浮かばなかった
0142138NGNG
>>141
どんまい。漏れもそういう時あるよ。…(自然・人工問わず)言語って難しい
0143デフォルトの名無しさんNGNG
xmlscan の上野さんが高速化のコツみたいなんをどっかで書いてたような。
ぐぐってみたけど見つからんかった。
0144デフォルトの名無しさんNGNG
>>139
>133は再帰のつもりだった。spl_csv を foo に書き換えて。
0145デフォルトの名無しさんNGNG
ruby遅いで
0146デフォルトの名無しさんNGNG
何をいまさら。。。
0147デフォルトの名無しさんNGNG
速くする話って雑誌の記事でもなんかあったような
0148デフォルトの名無しさんNGNG
遅くする話もしませんか
0149デフォルトの名無しさんNGNG
可能な限り破壊的メソッドは使わずにオブジェクトは毎回作る
0150デフォルトの名無しさんNGNG
ローカルでない変数の更新はすべてマルチスレッドセーフにする。
0151デフォルトの名無しさんNGNG
Ruby 自体がスレッドセーフにならなきゃ安心して Ruby を組み込めねーよ!
というひとの数 →
0152デフォルトの名無しさんNGNG
スレッドセーフになったとしても安心しては組み込めないな。
0153デフォルトの名無しさんNGNG
>>148
C的に書く。

例:文字列の操作
× str = str.sub(/a/, 'A')
○ cc = 'a'; str.split(//).each {|c| if c == cc then cc = nil; 'A' else c; end}.join
0154デフォルトの名無しさんNGNG
>>153
str = "banana"
tmp = str.dup;
for i in 0..(str.size-1)
if (str[i] == ?a) then
tmp[i] = ?A;
break;
end;
end;
str = tmp;
printf("%s\n", str);
0155デフォルトの名無しさんNGNG
>>153
すくなくともRubyではこう

× str.split(//).each { ...
○ str.scan(/./).each { ...

手元では、
i686-linux な CVS HEAD では 13%
i686-cygwin な preview3 では 72%
scanの方が速い
jcodeのString#each_charでもそうしてたはず

# CVS HEADのバイナリはデバッグ用に-O0なため
# 一般的なUnix系での実際の数値はcygwinの物に近いはず
0156デフォルトの名無しさんNGNG
>>155
> scanの方が速い

ならsplitを使うべきなのでは?
0157デフォルトの名無しさんNGNG
>>155痛すぎ。
0158155NGNG
アウチ
0159デフォルトの名無しさんNGNG
>>155
勉強になった。
0160デフォルトの名無しさんNGNG
正規表現自体の最適化について参考になるページってありませんか?
0161デフォルトの名無しさんNGNG
商用向けソフトで組み込みスクリプトとして使いたいので、
ライセンス的に不都合が無いか調べています。

LICENSE.txtの第3項で質問があるのですが、
> (a) バイナリを受け取った人がソースを入手できるように,
> ソースの入手法を明示する.
これは、組み込んだソフト全体のソースコードを公開せよ、ということですよね。

> (b) 機械可読なソースコードを添付する.
これは、どういうことなのでしょうか?
結局はコンパイル可能なソースコードを付けろ、ということですか?

自分の解釈では、商用向けには向かないと考えていますが、
実際のところどうなのでしょうか
0162デフォルトの名無しさんNGNG
>>161
作者にメール!
そういうのは、後の人のためにもメーリングリストで聞くべきでは?
0163デフォルトの名無しさんNGNG
>>160
Mastering Regular Expressions を読むのが吉
ttp://regex.info/
ttp://www.oreilly.co.jp/BOOK/regex2/
0164デフォルトの名無しさんNGNG
>>163
情報ありがとう!
0165デフォルトの名無しさんNGNG
>>161

> LICENSE.txtの第3項で質問があるのですが、
LICENSE.txtじゃなくてCOPYING.ja?

 3. 以下の条件のいずれかを満たす時に本プログラムをコンパイ
   ルしたオブジェクトコードや実行形式でも配布できます.

本プログラムってのはRubyのことだから当然Rubyのソース。

> 自分の解釈では、商用向けには向かないと考えていますが、
> 実際のところどうなのでしょうか

Ruby's Licenseは商用でも問題はないはず。
実際アプリケーション組込み用途に使ってるのは何人かいる。
# なぜか海外が多いような。
0166山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0167デフォルトの名無しさんNGNG
商用、つーか独占的(ソース秘密主義)ソフトウェアね。

3. 以下の条件のいずれかを満たす時に本プログラムをコンパイ
ルしたオブジェクトコードや実行形式でも配布できます.

の

(a) バイナリを受け取った人がソースを入手できるように,
ソースの入手法を明示する.
(b) 機械可読なソースコードを添付する.

は呑めないのだろうけど

(c) 変更を行ったバイナリは名前を変更したうえ,オリジナ
ルのソースコードの入手法を明示する.

でOKになるのでは。
ここの「オリジナルのソースコード」がruby-1.6.8.tar.gzなりなんなりに
なるのだろうから、
「XXはRubyを組み込んでます。Ruby1.6.8はこちらから入手できます。」
と書けば平気なんじゃなかろうか。という素人の考察。

最も、GNUがオリジナルArtisticライセンスを「非フリーウェアライセンス」
とする理由は「あまりにも曖昧過ぎる」「意味も不明瞭」という点にあるから、
Artistic-likeといわれるRubyのCOPYING.jaの意味をruby-listで
明確にするのも、悪い選択じゃない気がする。
ttp://www.gnu.org/licenses/license-list.ja.html#ArtisticLicense
(現状のRubyライセンスがGPLとのデュアルである理由の一つも、
COPYING.jaのみではGNU的には非フリーウェア⇒非GPLコンパチだから、だそうで。)

あ、ちゃんと過去ログ読んでからにしろよ。
0168167NGNG
と、書いた後だけど、3.(c)の「オリジナル」という単語は
本当に「改変前のオリジナルRuby」という係り方なのだろうか。

original=「原型の」だからひょっとしたら、
「バイナリに対する原型のソースコード」
ってことになったり。

んーよく分からんっす…
0169デフォルトの名無しさんNGNG
>>168
以前のruby-listでの議論は不毛だったので、

>あ、ちゃんと過去ログ読んでからにしろよ。

読まなくていいです。
0170デフォルトの名無しさんNGNG
そういえば、Rubyを組み込んだゲームって話題があったけどどうなったのかな?
0171デフォルトの名無しさんNGNG
rubyのソースを添付するか入手方法さえ書いておけば
商用ソフトに使うのはなんら問題ないでしょ。
0172デフォルトの名無しさんNGNG
MLでライセンスを話題にするとるびべん(aka ○zakit)が
しゃしゃり出てきてうざくなる罠。
0173デフォルトの名無しさんNGNG
>>172
しゃしゃり出てきたところでそのままMorpyOne関係者に引き渡そう。
0174161NGNG
みなさん、いろいろ教えてくれてありがとう。

> 3. 以下の条件のいずれかを満たす時に本プログラムをコンパイ
> ルしたオブジェクトコードや実行形式でも配布できます.
*いずれか* なんですね。すっかり、見落としていました。

今回の場合は、(c)のケースで問題なく使えそうです。

自分はクローズドソースにするつもりはなくても、
そうせざるを得ない場合がほとんどなのです。
そんなわけで、こういうライセンスは非常に助かります。
0175デフォルトの名無しさんNGNG
>>174
>>70 >>74 >>75 にも注意。
0176デフォルトの名無しさんNGNG
>>70 >>74はおそらくあってると思う。
一番の解決策は、非LGPLな正規表現ライブラリである
鬼車(onig...)をregex.[ch]の代わりに使うこと。
FTPのcontrib以下にもあるし、CVSで取って来てもいい。

将来のRubyでは標準で使われる予定のものなので、
すぐにregex.[ch]から乗り換えられるように
現状のRubyとのすり合わせも行われてるっぽいし、
ライセンス問題の解決策としては一番妥当かと。
0177デフォルトの名無しさんNGNG
普段使ってるのはonigurumaでコンパイルしてある。
たまーに既存のと動作が微妙に違うことがあるが。
0178176NGNG
from scratch だから、まあそういう時もあるよね。
物にもよるだろうけど、過去に議論されてなくてかつ
影響がそこそこありそうなどの場合、
良い子はMLかkosako氏にメールしませう。
0179デフォルトの名無しさんNGNG
>>176
あるいは、regex.[ch]を単独の共有ライブラリに分けるとか。

つーかlibrubyごとアプリケーションから分離しておけば、
LGPLには影響されないんじゃないか?
0180デフォルトの名無しさんNGNG
ところで、もしかして小迫タンって女性?
0181デフォルトの名無しさんNGNG
>>180
違う。
0182176NGNG
>>179
そっかそっか、ていうか基本的なとこ忘れてたよ。
「L」GPLじゃん。てことはlibrubyがLGPLの下に置かれたバイナリと
しても、プロプライエタリ(商用)ソフト側と別バイナリにして
librubyをリンクだけする形にすれば、プロプライエタリ側のソースは
LGPLにはなんら影響されない、ってことだよね。
ソースレベルで直にregex.[ch]を丸呑みしなければいいだけの話か。
# 勘違いしてたら突っ込んでくれ、だれか…
0183デフォルトの名無しさんNGNG
>>181
ども。名前でそうかと思っちゃってた。
0184デフォルトの名無しさんNGNG
女っ気のないMLだな。
0185デフォルトの名無しさんNGNG
Ruby ちゃんがいます。
みんなにいじくり回されてます。
0186デフォルトの名無しさんNGNG
Mac OSXでirbを使うと
カーソルキーを押したときに^[[A ^[[B ^[[C ^[[Dと表示されてしまい
うまくつかえません。
また、Ctrl+Pなども^Pと表示されてしまいます。

もちろん、他のviやシェルやemacsなどでは正常にカーソルキーも
コントールキーも使えます。
Terminal,JTerminal + bash,tcsh,zshなどの組み合わせも試しましたが
全部ダメでした。

どなたか解決方法ご存じの方いらっしゃらないでしょうか?

irb 0.7.4
ruby 1.6.7
0187デフォルトの名無しさんNGNG
>>186
readline.soがないんでは?

0188186NGNG
>>187
readline.soが無かったので、
finkのOSXデフォルトじゃないrubyを落としてきたところ
finkのrubyのほうもreadline.soは無かったのですが、
正常に動作するようになりました。

どうもありがとうございます。
0189デフォルトの名無しさんNGNG
あおきさんみたいにリッチに買い物したいなぁ、、、
0190デフォルトの名無しさんNGNG
よーし、Opteronで一台組んじゃうぞー。
0191デフォルトの名無しさんNGNG
\x95\x5c\x94\x5c
みたいな文字列を日本語に変換するにはどうすればいいのでしょうか?
0192デフォルトの名無しさんNGNG
エヴァれ
0193191NGNG
もうちょっと詳しく教えて頂けないでしょうか?
evalでやろうにもやり方の見当が・・・
0194デフォルトの名無しさんNGNG
>>191
こんなんじゃダメ?
require 'uri'
$KCODE = 's'
str = '\x95\x5c\x94\x5c'

p URI.decode(str.gsub(/\\x/, '%'))
0195デフォルトの名無しさんNGNG
こんなんどうか

str = '\x95\x5c\x94\5c'
puts str.scan(/[0-9A-Fa-f]+/).collect{|x| x.hex}.pack('C*')
0196194NGNG
195氏の方が3倍以上早いな。
やっぱり、初心者の考え付くことはこの程度だな(w
0197デフォルトの名無しさんNGNG
src = "\\x95\\x5c\\x94\\x5c" ; dst = eval("%(#{str})")
0198デフォルトの名無しさんNGNG
>>196
3倍は違わんでしょ
1.8で10**6回ずつ実行させてtimeで計ると eval:pack:decode=1:2:4.6 ってとこだった

time ruby -ruri -Kse 's="\\x95\\x5c\\x94\\x5c"; 1000000.times{eval("%(#{s})")}'
time ruby -ruri -Kse 's="\\x95\\x5c\\x94\\x5c"; 1000000.times{s.scan(/[0-9A-Fa-f]+/).collect{|x| x.hex}.pack("C*")}'
time ruby -ruri -Kse 's="\\x95\\x5c\\x94\\x5c"; 1000000.times{URI.decode(s.gsub(/\\x/,"%"))}'
0199196NGNG
>>198
そうでつか。わざわざベンチありがとう。
0200デフォルトの名無しさんNGNG
-ruri ハァハァ
0201デフォルトの名無しさんNGNG
oriライブラリを作るべきだな
0202191NGNG
みなさん、どうもありがとうございます。

やり方一つとっても何通りもあるんですね。
非常に参考になりました。
0203デフォルトの名無しさんNGNG
require すると結構時間かかるよね。
0204デフォルトの名無しさんNGNG
>>203
いったいいつのマシンを使ってるんだ。

あ、もしかして require の後に毎回 GC するせいかな?
1.8 を使うか、ファイルの数を減らしてみたらどうよ。
1.8 でも bison を使ってビルドしないと GC の回数は
減らないけどね。
0205デフォルトの名無しさんNGNG
みねたん
0206デフォルトの名無しさんNGNG
>>205
> みねたん
ぼやいてたね(w
0207デフォルトの名無しさんNGNG
>>206
あるふぁの後ろの本の山がすごっ
0208デフォルトの名無しさんNGNG
Riteで継続は
0209デフォルトの名無しさんNGNG
みねたんハァハァ。。
0210デフォルトの名無しさんNGNG
>>208
難しいらしい
0211デフォルトの名無しさんNGNG
なぁなぁ、
文字列をUTF8にエンコするのに、何使えばいい?
uconvのcygwinバイナリ捜したんだけど、なくってさ。
0212無料動画直リンNGNG
http://homepage.mac.com/miku24/
0213デフォルトの名無しさんNGNG
http://www.yoshidam.net/Ruby.html#uconv
これじゃだめなのか
0214211NGNG
>>213
makeの途中で止まっちまうんすよ。
バイナリないっすかね。
もしくはPure Ruby なモヂュール。
ruby 1.6.5 (2001-09-19) [i386-cygwin]
でつ。
0215デフォルトの名無しさんNGNG
>>214
roughのunkfもmake出来ない?
0216211NGNG
>>215
CVSwebの使い方がワカラン・・・
すまん。
0217デフォルトの名無しさんNGNG
>>211

http://ftp.ruby-lang.org/pub/ruby/binaries/cygwin/ext/ にある
uconv-0.4.10-i386-cygwin.tar.gzは使えないの?

pure Rubyならrbuconvというのがある。
http://www.yoshidam.net/diary/200305.html#15_t2
0218211NGNG
とおもったらzipがあった。
やってみす。
0219211NGNG
$ make
gcc -DUSEIMPORTLIB -Os -DRB16 -DUTF8_SUPPORT -DUSE_JUDGE_JCODE -I/usr/local/li
b/ruby/1.6/i386-cygwin -I. -I/usr/local/cygwin-local/include -I/usr/local/cyg
win-local/include -c -o unkf.o unkf.c
dllwrap --target=cygwin --as=as --dlltool-name=dlltool --driver-name=gcc --expor
t-all -s --def=unkf.def -L/usr/local/cygwin-local/lib -L/usr/local/lib -o unkf.
so unkf.o -L. -lcygwin-ruby16
/usr/lib/gcc-lib/i686-pc-cygwin/2.95.3-5/../../../../i686-pc-cygwin/bin/ld: cann
ot find -lcygwin-ruby16
collect2: ld returned 1 exit status
dllwrap: gcc exited with status 1
make: *** [unkf.so] Error 1

ぐは。
-lcygwin-ruby16てなんですか?

>>217
やってみます。
0220211NGNG
解決しますた。
今頃
http://ftp.ruby-lang.org/
の存在を知った。

217さんありがとうございました。
0221デフォルトの名無しさんNGNG
ActiveScriptRubyでそのまま使えるruby-sumoのパッケージって存在しますか?
0222デフォルトの名無しさんNGNG
少しrubyからはなれているのですが。。
str = Uconv.euctou8("夏目 漱石")
print str
とすると、"紊 羲援"こんな感じに文字化けします。XML文書中に
含ませるためにはどのような処理をしなければならないのでしょうか。

御面倒ですが、アドバイスをお願い致します。
0223デフォルトの名無しさんNGNG
出力をどうやって見てるの?

print str の結果を、(utf-8 を理解しない)端末にたれ流してるんだったら、
そんな風に見えるのが当たり前のような。
0224デフォルトの名無しさんNGNG
>>223
ありがとうございます。御指摘のとおり、ktermで見てるのでダ
メなんですね。
実は、amazon.comのWEBサービスをテストして、日本語をutf-8に
しようとしています。
実際には、utf-8をASCIIコードにすればよいのでしょうか。

(初心者で、全くオッペケペな事を言っているような気がし
ます。申し訳ないです。。)

ttp://xml.amazon.com/onca/xml3?t=myWebsite-23&dev-t=GTYDRES564THU&KeywordSearch=dogs&mode=books-jp&type=lite&page=1&f=xml&locale=jp
0225デフォルトの名無しさんNGNG
全くオッペケペ
0226デフォルトの名無しさんNGNG
>>225 ですよね(^^;
自分としては、下の例での「E4B887」がほしいんです。
「万」==>unicode:4E07
「万」==>utf-8:E4B887
----
str1 = "万"
str2 = Uconv.euctou8(str1)
print str2 <-これじゃダメです。
0227デフォルトの名無しさんNGNG
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
★☆                       
☆★ 送料激安!!  送料激安!!  送料激安!!
★☆      http://www.get-dvd.com      
☆★  激安アダルトDVDショップ        
★☆    お買い得セール1枚500円〜980円!急げ!
☆★    インターネット初!「きたぐに割引」  
★☆    北海道・東北の皆様は送料も激安!   
☆★      http://www.get-dvd.com      
★☆        スピード発送!        
☆★      http://www.get-dvd.com      
★☆        商品が豊富!         
☆★      http://www.get-dvd.com      
★☆                       
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆   
0228デフォルトの名無しさんNGNG
rubyで作った拡張ライブラリではないプログラムの
インストーラは、何を使うべきですか?
0229228NGNG
日本語が意味不明だったので訂正します。

rubyで書いたスクリプトのインストールには、どのような
インストール方法を用いるのが一般的でしょうか?
0230デフォルトの名無しさんNGNG
>>226
だからあ、表示できないのは端末の問題でしょ。
何が欲しいのか分からんが、下を実行して出来る foo.html を mozilla か IE で見れ。

require "uconv"

str1 = "\260\354\275\275\311\264\300\351\313\374"
str2 = Uconv.euctou8(str1)

open("foo.html", "wb").print(<<EOS)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>utf-8</title>
</head>
<body>
<h1>#{str2}</h1>
<p>#{str2.unpack("H*")[0]}</p>
</body></html>
EOS
0231デフォルトの名無しさんNGNG
>>229
一般的かどうか知らんが
漏れはふつーに autoconf/automake でつ
0232デフォルトの名無しさんNGNG
>>229
標準となってるような方法は *ない*

一般的なのは
* >>231 みたいに autoconf/automake
* 自作スクリプト
* 手でコピってね ♥
など……だと思うけど、もしかしたら install.rb / setup.rb がよく使われ
てるのかもしんない。ぐぐってみて。
0233デフォルトの名無しさんNGNG
>>230
ありがとうございます。

欲しかったのは、string.unpack("H*")です。
「16進文字列でアンパックした要素の列」(google)ということだったのかな?
0234デフォルトの名無しさんNGNG
予想外のオチ。
0235デフォルトの名無しさんNGNG
stdout, stderr を /dev/null に吐かせつつ
popen するにはどうしたらいいのでしょうか?
0236デフォルトの名無しさんNGNG
>>235
質問の意味がよくわからないのですが、 Open3 が参考になりますか?
0237デフォルトの名無しさんNGNG
正規表現で質問です。以下の式はどういうことを表現していますか?
/^Giko:/i
0238_NGNG
http://homepage.mac.com/hiroyuki44/jaz10.html
0239デフォルトの名無しさんNGNG
>>235
command > /dev/nullでいいと思いますが。
0240デフォルトの名無しさんNGNG
stderrもか・・・
0241デフォルトの名無しさんNGNG
>>237
Giko:が行頭にあるi???
0242デフォルトの名無しさんNGNG
>>237
giko:
gikO:
giKo:
giKO:
gIko:
gIkO:
gIKo:
gIKO:
Giko:
GikO:
GiKo:
GiKO:
GIko:
GIkO:
GIKo:
GIKO:
0243235NGNG
>>236
open3 は見てもよく分かりませんでした。

>>239
ありゃ、そんな単純なので ok だったんですね。
stderr も捨てるのは >/dev/null 2>&1 でいけました。
みなさんありがとう。
0244196NGNG
WinXPでRubyを使っています。
コンソールで、文字の色を変えたり、同じ行を書き換えたりするにはどうすればいいでしょうか。
どなたかよろしくお願いします。
0245244NGNG
しまった、名前欄が・・・
>>196氏とは関係ありません。
0246デフォルトの名無しさんNGNG
>>244
Rubyと関係ねーだろ
0247デフォルトの名無しさんNGNG
いや、「それはRubyの問題じゃない」という関係がある
0248244NGNG
>>246
すれ違いすいませんでした。
Rubyで試したらうまくいかなかったので、Rubyのせいにしてしまいました。
Cでもダメでした。じゃぁ、XPのコンソールが悪いのか。
適切なスレを探してみます。ご迷惑をおかけしました。
0249デフォルトの名無しさんNGNG
\windows\system32\config.nt に

device=%SystemRoot%\system32\ansi.sys
dosonly

を追加したらANSIのエスケープシーケンスが使えるんでない?
0250244NGNG
>>249
残念ながら解決できませんでした。
スレ違いなのにレスをありがとうございました。
0251244NGNG
Mingwと一緒にインストールしたMSYSのことをすっかり忘れていました。
MSYSのrxvt上で実行することで、エスケープシーケンスが解釈されました。
お騒がせしました。
0252デフォルトの名無しさんNGNG
ようやくpreview4。
0253デフォルトの名無しさんNGNG
>>252
shim まだぁ?
0254デフォルトの名無しさんNGNG
いろいろと押してるからshimまで手が回らない。
0255デフォルトの名無しさんNGNG
これでバグが見つかなかったら正式リリースだね。
ruby-1.8.0-preview4
http://www.ruby-lang.org/ja/20030724.html

ちょっとメモ
= 1.6.8 -> 1.8.0 追加されたバンドルライブラリ
== lib 配下
・benchmark : ベンチマーク
・csv : CSV データのパースと生成
・date::format : 日付<->文字列変換ユーティリティ
・drb : 分散Ruby
・erb : Tiny eRuby プロセッサ
・fileutils : ファイル操作ユーティリティ
・ipaddr : IP アドレス操作の低レベル API
・open-uri : net/http と net/ftp を簡単に使うためのラッパ
・pathname : オブジェクト指向なパス名操作
・pp / prettyprint : preetty printer と pretty print ライブラリ
・profiler : profile をライブラリ化したもの
・racc : コンパイラコンパイラ
・rexml : XML parser
・rubyunit / runit: unit/test による RubyUnit 互換ライブラリ
・scanf : scanf(3) の Ruby 実装
・set : 集合(コレクション API)
・unit::test : ユニットテスト
・tmpdir : tmpfile のディレクトリ版
・webrick : Web サーバフレームワーク
・xmlrpc : XML-RPC API
・yaml : yaml 文書の操作
0256デフォルトの名無しさんNGNG
lib/README が更新されてないね。

== ext 配下
・bigdecimal : 任意桁数の小数点演算
・dl : ダイナミックリンカへのインタフェース
・iconv : I18N 文字列変換
・io/wait : ノンブロックな wait
・openssl : openssl ラッパ
・stringio : IO みたいに使える String
・strscan : 高速文字列スキャナ
・syck : YAML 読み書きライブラリのラッパ yaml で使用
・zlib : zlib を使った gzip データ操作
0257255NGNG
255 は全然嘘だった。ちゃんと dev を読めと。

7/28 preview5 → preview6 ? → 7/30-/7/31 正式リリース予定?
今月中にリリースするつもりなのかな?
0258デフォルトの名無しさんNGNG
さらにメモ。
RubyForge http://rubyforge.org/ 定点観測
総計 8 プロジェクト

・Vapor : JDO をモデルとした PostgreSQL 向けの persistent Object-Repository ライブラリ
・Ruby VGA-Planets Viewer : VGA-Planets というゲーム用のデータビューアらしい
・Ruby Muravey Tools : Ruby ベースでウェブサイト構築するためのキット。まだリリースなし。
・RMagick : ImageMagick へのインタフェイス。便利。
・rGenetic : 遺伝的アルゴリズムを使ったプログラムを作るためのフレームワーク。リリースなし。
・AEditor : ペアプロ用エディタウィジェット。ncursesやQtで使えるようだ。
・Vim/Ruby Configuration Files : vim 用の設定ファイル
・Ruby Live Journal : http://www.livejournal.com/ のクライアント。リリースなし。
0259デフォルトの名無しさんNGNG
>>255
ruby-dev見始めたの最近なのでサンクス。
0260デフォルトの名無しさんNGNG
xmlparser 入って欲しいなぁ。
0261デフォルトの名無しさんNGNG
最近 Smalltalk をやって、
Ruby ならではの機能と思っていたものの多くが
Smalltalk のパクリなのに気づいて
こんなんだったら最初から Smalltalk やっときゃよかった
という気持ちでいっぱい。
0262デフォルトの名無しさんNGNG
前から Perl の見た目の Smalltalk と呼ばれてたじゃん。
0263デフォルトの名無しさんNGNG
>>257
Mac OS Xの次バージョンに入る〆切らしい。
0264デフォルトの名無しさんNGNG
>>263
Appleに感謝したいな。
そういう外圧的〆切がなければ、まだまだ当分リリースされなかったに
違いない。
0265デフォルトの名無しさんNGNG
昔のC magazineを図書館で見つけたのでちょっと見てみたら、
Javaに関してequalsはidenticalならばよかったのに、と触れてあるコラムがあった。
やっぱりそういうことを考える人は多いんだろうか。
0266デフォルトの名無しさんNGNG
hash = Hash.new([])

(1..16).each do |i|
 hash[i].push i
end

p hash #=> {1 => [1], 2 => [2], ..., 16 => [16]}

だったら嬉しいのですが(ver1.6)。
v1.8ではどうなってますか?
0267デフォルトの名無しさんNGNG
>>264
同意。バグはいくらでも見つかるもんだから、
適当なとことで踏ん切りをつけないと。。。

>>266
ブロックを指定してやると、ブロックの評価値がデフォルト値になる。
http://www.ruby-lang.org/ja/man-1.6/index.cgi?cmd=view;name=Hash#Hash.2enew_2
0268デフォルトの名無しさんNGNG
しかし、単にpushしただけだとそのまま捨てられてしまう罠。

hash = Hash.new {[]}

(1..16).each do |i|
  hash[i] <<= i
end

または

hash = Hash.new {|h,k|h[k]=[]}

(1..16).each do |i|
  hash[i].push i
end

後者は、存在しないキーにアクセスしただけで追加されてしまうという、
副作用があるけど。
0269デフォルトの名無しさんNGNG
imlib2-rubyでマルチバイトの文字を描画するって
できるんですかね?
0270デフォルトの名無しさんNGNG
"_x\n_x1,1_x,_x,_x_x:_x\n_x" の中にある _x をRubyのローカル変数名と
みなして "(_x)\n_x1,1_x,(_x),_x_x:(_x)\n(_x)" に置換する方法を教えてください。
ただし、文字列全体を置き換えるのは、なしです。
0271デフォルトの名無しさんNGNG
>>270
置換された結果として何を望んでいるのかが分からない。
その方法を foo(str) として

_x = "X"
str = "_x\n_x1,1_x,_x,_x_x:_x\n_x"
p foo(str)

の出力には何を期待しているのか?
0272デフォルトの名無しさんNGNG
>>270
こゆこと?
"_x\n_x1,1_x,_x,_x_x:_x\n_x".gsub(/\b(_x)\b/) { "(#{$1})" }
0273デフォルトの名無しさんNGNG
正規表現の後ろにmが付いているのは何か意味あるんですか?
0274デフォルトの名無しさんNGNG
>>273
それは正規表現のオプションで、複数行モードで処理しろってこと。
複数行モードだと正規表現のピリオド(".")が改行にもマッチするようになる。
/.+/は一行にマッチする
/.+/は全行にマッチする

例:
p /.+/.match( <<EOS ).to_s
line 1
line 2
line 3
EOS
p /.+/m.match( <<EOS ).to_s
line 1
line 2
line 3
EOS
0275デフォルトの名無しさんNGNG
/.+/は全行にマッチする
は
/.+/mは全行にマッチする
ですよね。
0276274NGNG
>>275
スマソ。その通りです。
0277270NGNG
>>272
それで置換できるのかー。
Emacs の replace-regexp で \b\(_x\)\b を (\1) に
置換するとなぜか "_x\n_x1,1(_x),_x,_x(_x):_x\n(_x)" に
なってしまって、Rubyも同じだと思ってた。
0278270NGNG
>>277
自己レスですがEmacsは構文テーブルに左右される
ようだからRubyと同じには、ならないですね。
0279デフォルトの名無しさんNGNG
preview5 出た。
0280デフォルトの名無しさんNGNG
Array#sortって安定じゃないよね。

ぐぐった程度ではみつからなかったんだが
安定なsortってない?
0281デフォルトの名無しさんNGNG
自分で書いて Array に定義すれ。
0282デフォルトの名無しさんNGNG
それしたヤシいたら楽できるかと思ったが。
やっぱ書くか。

つか、rubyのmlで3年前に話がでてるが結局だれも
しなかったのな。
0283デフォルトの名無しさんNGNG
>>280

1.8ならEnumerable#sort_byが使える。

http://www.ruby-lang.org/ja/man-1.6/index.cgi?cmd=view;name=Enumerable#sort_by
0284デフォルトの名無しさんNGNG
>>280
1.6 なら大人しく Schwartzian Transform しとけ。
0285デフォルトの名無しさんNGNG
安定 ソート
ttp://www.google.com/search?q=%E5%AE%89%E5%AE%9A+%E3%82%BD%E3%83%BC%E3%83%88&sourceid=mozilla-search&start=0&start=0&ie=utf-8&oe=utf-8
知らんかった
もうリリースされるんなら1.8に移行してもいいような気が。
それとも1.8が出たら1.8.1待ちになる罠なのか?
0286デフォルトの名無しさんNGNG
class Array
  def sort_stable!(&b)
    each_with_index{|x| self[x.last] = x}
    sort!(&b) && each_with_index{|e,i| self[i] = e.first}
  end

  def sort_stable(&b)
    a = dup
    a.sort_stable!(&b)
    a
  end
end

a = %w(a b a b a)
u, s = a.sort, a.sort_stable
for i in [a, s, u]
  p [i, i.map{|i| i.id}]
end
0287デフォルトの名無しさんNGNG
今使ってるのは1.6.7だけど、
下のコードは最新だとエラーなしで通る?

def a; *(0..2); end; p a #=> parse error
0288デフォルトの名無しさんNGNG
>>287

% ruby -ve '
> def a
> *(0..2)
> end
> p a
> '
ruby 1.8.0 (2003-07-29) [i686-linux]
-e:3: parse error
-e:6: parse error
0289デフォルトの名無しさんNGNG
>>287
それはどう動く (動いて欲しい) コードなの?
0290デフォルトの名無しさんNGNG
>>288

def a
(0..2).to_a
end

p a #=> [0, 1, 2]

こういうことか?
0291デフォルトの名無しさんNGNG
Schwartzian Transform したからといって stable になるわけじゃあるまい?
0292デフォルトの名無しさんNGNG
> Enumerable#sort のソートアルゴリズムは安定(stable) ではありませんが(比
> 較結果が同じ要素に対して、元の順序を保持しないことを「安定ではない」と
> 言います)、sort_by を使って以下のようにすることで stable sort を実現で
> きます。
>
> i = 0
> ary.sort_by {|v| [v, i += 1]}
0293287NGNG
>>288
なんだ、ダメじゃん。
まぁ、何かの理由で *(0..2) という表記は戻り値として使えないから
>>290のように to_a にしとけということかな。
とはいえ、下のように return を付けるとエラーにならないのが謎。

def a; return *(0..2); end; p a #=> [0,1,2]
0294デフォルトの名無しさんNGNG
$ ruby -ve '*(0..2)'
ruby 1.8.0 (2003-07-28) [i386-cygwin]
-e:1: syntax error
0295デフォルトの名無しさんNGNG
>>293
引数とそうでないものは違う。

$ ruby -ce 'foo a,b'
Syntax OK
$ ruby -ce 'a,b'
-e:1: parse error
0296デフォルトの名無しさんNGNG
>>293
で、それがエラーになると何かまずいことでもあるの?
0297デフォルトの名無しさんNGNG
ていうか *(0..2) って何
0298287NGNG
returnを特殊な構文のように考えていたけど、
普通にreturnの「引数」だから *(0..2) と書けるわけか。
0299デフォルトの名無しさんNGNG
>>297
>>287 みたいなキチガイはほっとけ。
0300デフォルトの名無しさんNGNG
>>291
ようするに286みたいにeach_with_indexと併用ってことじゃない?
0301デフォルトの名無しさんNGNG
ふつーの MSYS でふつーに mingw 版を作ろうとすると、
openssl_missing.c でエラーになるなあ (1.8.0 preview5)。
OpenSSL 入れろってこと?
0302デフォルトの名無しさんNGNG
>>301
CVS上ではもう直ってる。
0303301NGNG
>>302
おお、情報サンクス。対応早いですね。
MSYS 1.0.9 からは rxvt 上で普通にビルドできるようになってウレスイ。
0304デフォルトの名無しさんNGNG
#!/usr/bin/ruby
str='表'
if str =~ /表/ then
puts 'OK'
end

↑これマッチしないの、なんでだろ〜?
0305デフォルトの名無しさんNGNG
文字コードが Shift_JIS && $KCODE を指定してないと見た
0306デフォルトの名無しさんNGNG
#!/usr/bin/ruby -Ks

str='表'
if str =~ /表/ then
puts str
end

ごめんなさい
0307デフォルトの名無しさんNGNG
>>306 はうまくいくのですが、

#!/usr/bin/ruby
$KCODE='SJIS'
str='表'
if str =~ /表/ then
puts str
end

はだめです。どうしてですか?
0308デフォルトの名無しさんNGNG
>>307
リファレンスマニュアル FAQ 10.2 「オプション-K と $KCODE の違いはなんですか?」を参照。l
0309デフォルトの名無しさんNGNG
>>308
そのまんまの答えですね。
調べずに書き込みしてごめんなさい。
0310デフォルトの名無しさんNGNG
preview6 releaseされたようだ。
0311デフォルトの名無しさんNGNG
マジで8/1(遅くて8/4)に1.8.0出す気?
0312デフォルトの名無しさんNGNG
>>311
8/1にpreview7、8/4に正式リリース。
0313デフォルトの名無しさんNGNG
なんで Ruby って feature freeze とかしないの?
0314デフォルトの名無しさんNGNG
>>313
してる。matz日記参照。
ただ、freeze後もいくつか変更がはいった。
0315デフォルトの名無しさんNGNG
>>314
情報をよく集めているデベロッパだけfeature freezeされて、空気読まない連中は
feature freezeされない罠。
やっぱりリリースエンジニアリングが(ry
0316山崎 渉NGNG
(^^)
0317デフォルトの名無しさんNGNG
BigDecimal使ってる奴、議論に参加してやれよ。
俺は使ったことないのでわからんが。
0318デフォルトの名無しさんNGNG
>>317
ttp://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/ext/bigdecimal/bigdecimal_ja.html?rev=HEAD
読んでみる?
0319デフォルトの名無しさんNGNG
Windows上で、RubyでGUIを作ろうと思ったら何がいいんだろう?
Ruby/tk? Apollo?
0320デフォルトの名無しさんNGNG
>>319
Ruby/GTK2
0321デフォルトの名無しさんNGNG
>>319
VisualuRuby
0322デフォルトの名無しさんNGNG
>>319
こっそり wxruby に期待
0323デフォルトの名無しさんNGNG
Ruby/GTK と Ruby/GTK2 は何が違うんだ?
0324デフォルトの名無しさんNGNG
Gtk1.xベースとGtk2.xベース。
0325デフォルトの名無しさんNGNG
FOXRuby
0326デフォルトの名無しさんNGNG
前から疑問に思ってたんだけど、

Ruby/GTK
   ↑
この単語間のスラッシュは何?
0327デフォルトの名無しさんNGNG
区切り
0328デフォルトの名無しさんNGNG
割り算
0329デフォルトの名無しさんNGNG
別居中
0330デフォルトの名無しさんNGNG
左側が右側にもたれかかってる
0331デフォルトの名無しさんNGNG
Rubyなれなれしいな
0332デフォルトの名無しさんNGNG
バトル!
0333デフォルトの名無しさんNGNG
>>326
斬新な質問だな。
0334デフォルトの名無しさんNGNG
Ruby☆GTK
0335デフォルトの名無しさんNGNG
withではなかろうか。
あたかもcall with current continuationがCall/CCになるように。
0336デフォルトの名無しさんNGNG
特異メソッドを使うかサブクラシングするかはスタイルの問題ですか?
両者にパフォーマンス等でトレードオフがあれば教えて下さい。
0337デフォルトの名無しさんNGNG
パフォーマンスを知りたいなら自分で計ってみるのが
一番納得する方法だよ。
なんでもかんでも人に聞いちゃいかんよ。
0338デフォルトの名無しさんNGNG
>>335
そーか。「×× with 〜」または「×× using 〜」とも解釈できるな。
あと、分数棒として読めば「×× over 〜」になる。
0339デフォルトの名無しさんNGNG
G/W とか H/W とかの / の意味がわからん。
0340デフォルトの名無しさんNGNG
I/F、I/O
0341デフォルトの名無しさんNGNG
左の人が右の人を棒で叩いてる図
0342デフォルトの名無しさんNGNG
ガッ/ヌルポ
0343デフォルトの名無しさんNGNG
ガッ bashes ヌルポ
0344デフォルトの名無しさんNGNG
んじゃRuby/Pythonとか
0345デフォルトの名無しさんNGNG
require "delegate"

class C < SimpleDelegator
def initialize
super("A")
end
end

Marshal.dump(C.new)

> `dump': singleton can't be dumped (TypeError)

なぜ?
0346デフォルトの名無しさんNGNG
>>345
dump して load したら dup したことになるからでは。
0347デフォルトの名無しさんNGNG
BigDecimalは unix板ぐらいでしかネタにされてないか。
0348デフォルトの名無しさんNGNG
そうでし
0349デフォルトの名無しさんNGNG
なんか、Ruby 関連スレはそれぞれうまくネタが住み分けされてるね。
スレタイや板とは無関係に。
0350デフォルトの名無しさんNGNG
>>349
こことUNIX板以外にもあるの?

0351デフォルトの名無しさんNGNG
ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.0.tar.gz
0352デフォルトの名無しさんNGNG
とりあえず、祝リリース!
0353デフォルトの名無しさんNGNG
>>342
ヌルポ rescue ガッ
だろう。
0354デフォルトの名無しさんNGNG
>>334
つのだ/ひろ
0355デフォルトの名無しさんNGNG
>>350
349じゃないけど私が知っている現行スレ(駄スレを除く)は4本です。
これ以外のスレを知っていれば教えてください。

rubyを語るスレッド 3
http://pc.2ch.net/test/read.cgi/unix/1045705000/

Ruby について Part 4
http://pc2.2ch.net/test/read.cgi/tech/1056944114/

Rubyの実装に疑問あり!
http://pc2.2ch.net/test/read.cgi/tech/1004873294/

【Ruby】RubyでCGI
http://pc2.2ch.net/test/read.cgi/php/988948655/
0356デフォルトの名無しさんNGNG
>>355
> Rubyの実装に疑問あり!
> http://pc2.2ch.net/test/read.cgi/tech/1004873294/
これはもう駄スレじゃん?
0357デフォルトの名無しさんNGNG
Ruby 1.8.0 mswin32用もリリースされました。

http://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.8.0-i386-mswin32.zip
ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.8.0-i386-mswin32.zip
ruby 1.8.0 (2003-08-04) [i386-mswin32]
md5sum : eaf9263062429fd4f722d9a70a38a9dc

>>355
スレの頭の部分はタイトルどおりに内部構造の話をしているので一応入れました。
確かに今は個人叩きスレになっていますね。もったいなーい。
0358デフォルトの名無しさんNGNG
1.8.0リリース記念age
0359デフォルトの名無しさんNGNG
if $_ =~ /(\:)(\d+)\:/
 $_.sub!(/\:\d+\:/, "(#{$2}):")
end

をsub一回に書き換えられませんか?
ifのチェックをしないとsubの行の$2に値がセットされません。
0360デフォルトの名無しさんNGNG
s.sub!(/(\:)(\d+)\:/, '(\2):')
0361デフォルトの名無しさんNGNG
$_.sub!(/\:(\d+)\:/) {"(#{$1}):"}
じゃダメ?
0362デフォルトの名無しさんNGNG
Rubyをベンチしてるサイトどっかにない?
なにか表現がおかしいけど気にしない。
0363デフォルトの名無しさんNGNG
>>357
irb.bat実行するとreadline.dllが無いって怒られるんですが、
何処から拾ってくるの?
0364デフォルトの名無しさんNGNG
>>363
http://gnuwin32.sourceforge.net/packages/readline.htm
0365デフォルトの名無しさんNGNG
>>364
肝心のdllがどこにも見当たらないんですが・・・
0366デフォルトの名無しさんNGNG
>>365
MinGW pre7 のやつ使ってるけど大丈夫ぽい
0367デフォルトの名無しさんNGNG
るびきちのirbshの本買って、本の通りにインストールしたけど
NameError: uninitialized constant Irbsh とエラー出て
まったく動作しませんが、何か?
0368デフォルトの名無しさんNGNG
>>365
ttp://jarp.jin.gr.jp/win32/ とか。
0369デフォルトの名無しさんNGNG
>>368
それでokでした。
ありがとう。
0370デフォルトの名無しさんNGNG
>>357 + >>368のmswinの環境で
ここのアッカーマンが実行できませんでした。
http://www.bagley.org/~doug/shootout/bench/ackermann/ackermann.ruby

irb(main):012:0* ack(3, 8)
SystemStackError: stack level too deep
from (irb):4:in `ack'
from (irb):6:in `ack'
〜〜〜〜略〜〜〜〜〜
from (irb):8:in `ack'
from (irb):12irb(main):013:0>
何ででしょう?
0371デフォルトの名無しさんNGNG
>>370
スタックが足りないから。
0372デフォルトの名無しさんNGNG
スタックを増やす方法をおしえてください。
0373デフォルトの名無しさんNGNG
今cgiとしてRubyプログラムを走らせるとして
クライアント(UNIX系OS)のディレクトリ構造をWEBに吐き出させようと
したらどうしたらええでしょうか??
0374デフォルトの名無しさんNGNG
(゚Д゚)ハァ?
0375デフォルトの名無しさんNGNG
hoge.cgiに

#!/usr/local/bin/ruby

# 今このファイルを実行したクライアントのディレクトリ構造
# を出力する

みたいな処理はできないのですか?という意味です。

0376デフォルトの名無しさんNGNG
puts `ls`
0377デフォルトの名無しさんNGNG
それは、サーバ上のディレクトリしかわからんと思います・・・

’クライアントの’が表示したいのです。
0378デフォルトの名無しさんNGNG
クライアントからディレクトリ構造を送ってもらうcgiを作る。
というかね、サーバ側がどう頑張っても無理。
0379デフォルトの名無しさんNGNG
>>377
そういう大事なことは始めから書いた方がよい返事がもらえますよ。
このやりとりで、論点がすっきりしました。

クライアント/サーバを一から理解しろクズ! 氏ねや夏廚
0380デフォルトの名無しさんNGNG
スッタクを動的にどんどん増やしたいぞな。
0381377NGNG
理解した上で、できないかと思ったので・・・
クライアントでディレクトリ構造のデータを取得する
Rubyプログラムを動かしておいて、サーバ側に送るってやるしか
無理なのかなぁ〜?

ActiveXとかを使わないと駄目なのかな?

0382377NGNG
>>378
本当に無理なのか・・・?
できそうな気はするんだけど。
0383デフォルトの名無しさんNGNG
XML-RPC を使えば。
0384377NGNG
それでも、クライアントにWEBサーバいれとかないと駄目ではない?
どっちにしてもサーバアプリかクライアントアプリをクライアント
に常駐させておかないと、実現不可能ですかね。。。
0385デフォルトの名無しさんNGNG
>>377
クライアント側で情報垂れ流すI/Fがないと無理だと言ってるの。
それにRubyと全く関係ない。
0386デフォルトの名無しさんNGNG
httpクライアントがディレクトリリストをpostするだけだろ。
てかcgiにこだわる必要があるのか。単なるsockアプリじゃ駄目なのか。
セキュリティのことはちゃんと考えてるのか。
0387デフォルトの名無しさんNGNG
むしろ情報を抜く CGI が作りたいんでないの。
0388377NGNG
>>385
Rubyと全く関係ないというのはわかりますが、Rubyでプログラミング
したいと思ってこのスレに書き込みしました。

sockアプリでは駄目で、理由はそのsockアプリを配布して実行
しないといけないからです。

私が真にやりたいことは、ディレクトリリストを表示するだけでなくて
クライアントのあるディレクトリに目的のファイルがあるかどうか
までcgi側から調ることです。そのためには先ずディレクトリリスト
をクライアントから返すようなプログラムをcgi側から送れないか
と思ったのです。(cgiの構造はおおむね理解した上で)

セキュリティのことはこの際考えません。ActiveXのように、悪意
あるコードをクライアント側に流すような処理をするつもりは
ないです。
0389デフォルトの名無しさんNGNG
スレ違い+板違い。
ActiveX知ってるなら、それでやればいいじゃん。
0390377NGNG
>> 389
ActiveXは詳しくないのです。だから、それと似たような機能が
Rubyでできればと。

0391377NGNG
>>389
ちなみに、クライアントはUNIX-OS対象なので、ActiveXでは
駄目なのです。
0392デフォルトの名無しさんNGNG
↑だから、その実現方法はRubyと全く関係ないでしょ?
多分ね、RubyだとCで拡張モジュール作るはめになるよ。
結論としてcgiとしては実現不可能。
ここで粘着しても無駄だから、Web板とか行って。
0393デフォルトの名無しさんNGNG
Ruby的にはクライアント側にdrbオブジェクト
仕込ませて待機させて遠隔操作するのがよし。
0394デフォルトの名無しさんNGNG
普通に実行プログラム配布してチェックさせればいいじゃん。
0395デフォルトの名無しさんNGNG
>>392
関係ないけど、Cで拡張モジュール作れても全然嬉しくないよな。
0396デフォルトの名無しさんNGNG
あつくなると、おおいですね。
0397デフォルトの名無しさんNGNG
>>395
速度が速いよ。
0398デフォルトの名無しさんNGNG
まぁRubyがcgiへのディレクトリリスト送信ライブラリを備えていないのは不備と言えなくもないな。
0399デフォルトの名無しさんNGNG
>>397
cgiとかで公開できないじゃん。
環境依存だし。
0400デフォルトの名無しさんNGNG
Rubyはうんこ
0401377NGNG
>>302
Web板でも聞いてみます、不慣れな書き込みですいません。
Cで拡張モジュール…挑戦したい…具体的にはどのような
拡張モジュールにするべきでしょうか?

>>393
Ruby的にはdrb使うのが目的の処理ができそうですね。(WEBサーバ
仕込ませるのと似ているけれども、こちらのほうが軽く、速く
処理ができそう かつ しこませやすそう)

drbをつかった処理考えてみます。
0402デフォルトの名無しさんNGNG
つまりバックドア作りたいんだろ?そうなんだろ?
MLで詳しく教えてやるよ。
0403377NGNG
>>402
バックドアじゃないけど・・・それに近いといえば近い。
0404デフォルトの名無しさんNGNG
今後 >>359 みたいな超 FAQ (sub, gsub で $1, $2, ... が参照できない) を防ぐにはどうすればいいですか?
0405デフォルトの名無しさんNGNG
sub(//, '') を廃止して sub(//) {} のみにするといいと思います。
0406デフォルトの名無しさんNGNG
Ruby 1.8.0 の変更点を日本語訳してみた。
http://kwatch.tripod.co.jp/ruby/changes180.html
読みにくいかもしれんが、まあ我慢してくれ。
0407デフォルトの名無しさんNGNG
>>406
冒頭の訳注内 「語感想」→「ご感想」

to_strの説明「新しいメソッドto_strが...として扱います。」→
 「to_str()が定義されているオブジェクトを文字列とみなして取得するようになりました。」

0408デフォルトの名無しさんNGNG
>>406
訳注に突っ込んでも仕方ないが、
sprintfの"%p"フォーマットはinspect()による文字列化だぞ。
0409デフォルトの名無しさんNGNG
>>404
リファレンスのsub, gsubの項にサンプルコードと備考を追加するのがいいと思います。
0410デフォルトの名無しさんNGNG
>>409
gsubの項に既に書いてあるんだが。
0411デフォルトの名無しさんNGNG
1.8.0バグだらけじゃん。
あれだけpreview出しておきながら何やってんだか。

メンテナンスリリースとは言わず、さっさと1.8.1きぼん
0412デフォルトの名無しさんNGNG
このコードはヤバイ、
んまぁぁぁぁああああ!!
まぎゅぃぃいいぬぇえぇぃいいいいいいいいいいいいい!!
しんにゅうするつぼりゅえでえああああさあぁぁあぁぁぁああああ!!!
0413デフォルトの名無しさんNGNG
スラドに垂れ込む香具師はいないのか。


まあ、叩かれるのは目に見えてるが。
0414デフォルトの名無しさんNGNG
>>406
String/Array methods
Returns an instance of receivers class.
レシーバであるインスタンスのクラスを返します。〔訳注:???〕
→
レシーバのクラスのインスタンスを返します。

recievers は reciever's の typo かな?
破壊的メソッドも self を返すという意味だと思うけど違うかな?
0415デフォルトの名無しさんNGNG
>>414
「サブクラスのインスタンスのメソッド呼んだら、そのサブクラスのインスタ
ンスが返ってくる」みたいにも取れるかも。
0416デフォルトの名無しさんNGNG
1.8.0って1.6.8より処理おそくなってない?
0417デフォルトの名無しさんNGNG
>>416
なってない。
0418デフォルトの名無しさんNGNG
>>416
まずは profile とってボトルネック調べれ。
0419デフォルトの名無しさんNGNG
www.cygwin.com/setup.exeのrubyはいつ1.8になるの?
0420デフォルトの名無しさんNGNG
そうかRuby減速か。ニヤリ
0421デフォルトの名無しさんNGNG
質問してもいいですか?
複数のスレッド間でオブジェクトを共有したいのですが、どうすれば共有できますか?
0422デフォルトの名無しさんNGNG
"foo bar".split / /
が構文エラーで上手く行かない。
rx = Regex.new " "
"foo bar".split rx
の意味で動いてくれるとうれしいんだが。
0423デフォルトの名無しさんNGNG
http://slashdot.jp/comments.pl?sid=112000&cid=372237
2倍ってことはないと思うが、たしかに1.8 は結構速くなっているよ。
0424デフォルトの名無しさんNGNG
web用途でphpに対するアドバンテージって何かあるの?
0425デフォルトの名無しさんNGNG
1.8では正規表現の
\zと\Zが同じ意味になった気がするんですが、
片方しかマッチしない例とか教えてください。
0426デフォルトの名無しさんNGNG
/(.*?)\z/m =~ "a\n"
p $1
# => "a\n"

/(.*?)\Z/m =~ "a\n"
p $1
# => "a"
0427デフォルトの名無しさんNGNG
>>421
Mutex
0428デフォルトの名無しさんNGNG
>>426
ばかだったもっと簡単に考えなイカン

p /a\z/ =~ "a\n" # => nil
p /a\Z/ =~ "a\n" # => 0
0429425NGNG
>>426
どうも、ありがとうございます。
でも、mオプションが出てきて、なんか余計ややこしくなってきた。。

結局、1.6と1.8で $ , \Z が どう変わったのか、
わかりやすく教えてもらえないでしょうか?
0430デフォルトの名無しさんNGNG
>>406
感謝
0431デフォルトの名無しさんNGNG
>>429
> >>426
> どうも、ありがとうございます。
> でも、mオプションが出てきて、なんか余計ややこしくなってきた。。
>
> 結局、1.6と1.8で $ , \Z が どう変わったのか、
> わかりやすく教えてもらえないでしょうか?

p "\n".gsub(/\z/, "o")
p "\n".gsub(/\Z/, "o")

ruby 1.6.8 (2002-12-24) [i586-linux]
"\no"
"o\n"

ruby 1.8.0 (2003-08-04) [i586-linux]
"\no"
"o\no"

というように、\Z が改行の前と文字列末尾の両方にマッチします。
$ も同じ。perl も同じ。

\z は文字列末尾にしかマッチしません。
文字列末尾に改行がなければ同じです。
0432429NGNG
>>431
とてもよくわかりました。
ありがとうございました。
0433429NGNG
全くの初心者なんで、おかしなこと言ってるかもしれませんが
1.6から1.8での >>431 に書いてあるような変更って
$の方は理解できますが、\Z の方は、なんか変な感じですね。

"\nが文末にあると、もう一行増えたと考えることにした。"
ということなら、$の変更は理解できます。

しかし、最後に改行がある時、\Zが2箇所でマッチするように変更されたのは、
なんか気持ちわるいですね。
\Zを文末と捉えてはいけなくなった気がします。
本当に特別な表現になったような気がします。

みなさんは、どう思いますか?
0434デフォルトの名無しさんNGNG
>>424

使うのが数値、文字列、配列、ハッシュぐらいなら、PHPと比べて
特にうれしいということはないだろう。
Rubyを使ってうれしくなるのは、オブジェクト指向をバリバリ
使うとき。自分でクラスをバシバシ定義するようなプログラムだと
Rubyはとってもうれしい。

フロントエンドはあまり難しいことしないからPHPでもいいけど、
バックエンドで複雑なビジネスロジックを作り込む場合は、
どうしてもクラスを定義することが多いから、Rubyのほうが楽。
そうなると、フロントエンド側もRubyで揃えたくなる。
おいらはそれで全部Rubyにした。
0435デフォルトの名無しさんNGNG
>>433
話の発端

ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/20104
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/70243

非互換覚悟で他の言語に合わせたんだから
また元に戻すようなことがありませんように。
0436429NGNG
>>433 で書いた
"\nが文末にあると、もう一行増えたと考えることにした。"
これ、おかしいですね。
^が増えた行頭にマッチしませんね。
失礼しました。

1.6の方がわかりやすいな。
まあ、Perlとかに合わせたってことで、歓迎すべきなんでしょうが。。
0437デフォルトの名無しさんNGNG
visualurubyをちゃんと1.8に対応させてホスィ
exerbの1.8.0コアも欲しー
0438デフォルトの名無しさんNGNG
るびーおっそーい!
0439デフォルトの名無しさんNGNG
class C
def var=(var)
@var = var
end
def var
@var
end
end

↑これを簡単に書くための attr_accessor はあるのに、

class C
def self.var=(var)
@var = var
end
def self.var
@var
end
end

↑これを簡単に書くための attr_accessor がないのはなぜ?
0440デフォルトの名無しさんNGNG
>>439
> ↑これを簡単に書くための attr_accessor がないのはなぜ?

いらないから。

どうしても attr_accessor で定義したいなら

class C
class <<C
attr_accessor :var
end
end

とか
0441デフォルトの名無しさんNGNG
rubyのソースはインデントがナイト激しく見づらい!
0442デフォルトの名無しさんNGNG
インデントされてるじゃん、と思ったら navi2ch で見てるからか。
0443デフォルトの名無しさんNGNG
大丈夫Pythonよりは読める
0444デフォルトの名無しさんNGNG
>>443 不覚にもワラタ
0445デフォルトの名無しさんNGNG
>>441
インデントなしでも見やすい言語ってあるんか?
Prolog とか?
0446デフォルトの名無しさんNGNG
N88BASIC
0447デフォルトの名無しさんNGNG
それはインデントあっても見づらい言語。
0448デフォルトの名無しさんNGNG
Ruby 1.6.xからの変更点(日本語、8月7日現在鋭意編集中)
http://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=changes.1.8.0.ja
0449デフォルトの名無しさんNGNG
本でないの?
0450デフォルトの名無しさんNGNG
>>445
もちろん本物のプログラマが使うFORTRAN
0451デフォルトの名無しさんNGNG
COBOLは?
0452デフォルトの名無しさんNGNG
Cは別にインデントいらないなあ。
目が慣れてるというのもあるが。
0453デフォルトの名無しさんNGNG
>>422
"foo bar".split %r/ /
とか。

>>445
日本語
0454デフォルトの名無しさんNGNG
>>422
"foo bar".split(/ /)
0455デフォルトの名無しさんNGNG
Windowsで日本語のGUIアプリ作りたいのですが、RubyにはどんなGUIのツールキットがありますか?
0456デフォルトの名無しさんNGNG
WinでGUIアプリでしかも日本語?
そりゃ向いてないよ。
RubyはUNIXで使いましょう。
0457デフォルトの名無しさんNGNG
Apollo, VisualuRuby, ActiveScriptRubyあたり。
Tk, Gtk2…はきついかも。
0458デフォルトの名無しさんNGNG
>>455,456
HSPでも使ったら?
つーかsageろ

ActiveScriptRubyってなんだ? 初めて聞いた
0459デフォルトの名無しさんNGNG
ActiveScriptRuby
http://www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/index.html
winじゃ便利だよな。1.8はいつごろになるんだろ。
0460デフォルトの名無しさんNGNG
忘れてるぞ。
WideStudio

これが一番Rubyユーザーに合ってる気がする。
http://www.widestudio.org
0461デフォルトの名無しさんNGNG
>>459
ActiveScriptRuby いまいちピンと来ないのだがASPが例にあるし
これで元の質問にあるスタンドアローンのGUIアプリが作れるのかな?

サンプルコードどこかで見れないですか?
0462デフォルトの名無しさんNGNG
>>455
いままでTk, gtk, Apollo, VisualuRubyと試してきたけど
ちゃんと使えて安定してるのはVisualuRubyだと思った。
それでも1.8.0にちゃんと対応してるとは言えない気がする。

>>460
>WideStudio
うわー ruby bindingあるなんてマジ知らんかった。exerbと一緒に使えるといいな。

>>461
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/
1.8.0版作ってほしー
>GUIアプリ
mingw/cygwin/mswin版のようにvisualurubyつかってもいいし
ASR専用のHTAアプリ作ってもいいやね
0463デフォルトの名無しさんNGNG
while line = gets do
 print line if line !~ /var/
end

というプログラムが正常に動作してしまうのだが、
『!~』というのは何のクラスのメソッド?
Stringにはこんなメソッド、ないようだが。
0464デフォルトの名無しさんNGNG
>>463
委譲
0465デフォルトの名無しさんNGNG
>>462
??? HTAとやらを初めて見てビックリ!
HTMLでGUIアプリをコーディングしてるんですね?
なんじゃこりゃ?

EXEに出来れば面白いかもしれない。
0466デフォルトの名無しさんNGNG
VisualuRubyならexerbと合わせて使う事でEXEに出来るよ
Win環境だけであれば、これが一番お勧め
0467デフォルトの名無しさんNGNG
class C1
A = 1
@a = 2
def self.a
[A, @a]
end
end

class C2 < C1
A = 3
@a = 4
end

p C1.a #=> [1, 2]
p C2.a #=> [1, 4]

a が C2::A を見ていないのはなぜ?
0468デフォルトの名無しさんNGNG
>>467
定数のスコープが静的に決まるからじゃないかなあ

class C1
A = 1
@a = 2
def self.a
[self::A, @a]
end
end

class C2 < C1
A = 3
@a = 4
end

p C1.a #=> [1, 2]
p C2.a #=> [3, 4]
0469デフォルトの名無しさんNGNG
>>463 !~ は =~ の否定だよ。 String#=~ 参照。
0470デフォルトの名無しさんNGNG
>>469
http://www.ruby-lang.org/ja/man-1.6/index.cgi?cmd=view;name=String
での String#=~ の説明では、!~ について特に言及してないのだが。
マニュアルで !~ について言及してあるところはある?
0471デフォルトの名無しさんNGNG
演算子のところ。だいたい != もココ。
0472デフォルトの名無しさんNGNG
>>455
ttp://ponx.s5.xrea.com/bibo/20030807.html#p02
挑戦してみる気があるなら。
0473デフォルトの名無しさんNGNG
みのるの超サイト

http://minoru_god.tripod.co.jp/

めっちゃかこええ僕の自己紹介(^‥^)

http://minoru_god.tripod.co.jp/profile.html
0474デフォルトの名無しさんNGNG
GUIについて盛り上がってるみたいなので、便乗させて下さい
OSXにTclTk(8.4.2)をインストール(バイナリ版)しOSX10.2に最初からインストールされている
Rubyでrequire "tk"をすると下記のようなエラーとなってしまいます。
ソースから再コンパイルしないといけないのでしょうか?
[Macintosh:〜] % which wish
/usr/bin/wish

/usr/lib/ruby/1.6/tk.rb:7:in `require': No such file to load -- tcltklib (LoadError)
from /usr/lib/ruby/1.6/tk.rb:7
from .//test.rb:3:in `require'
from .//test.rb:3
0475デフォルトの名無しさんNGNG
>>474
> OSXにTclTk(8.4.2)をインストール(バイナリ版)し
ってことはTcl/Tkは標準じゃないわけ?
たぶん、tcltklibなしでコンパイルされてるんじゃないの。
OSX添付のrubyは、digest/md5あたりでも問題を聞くし、あまりうまくないのかも。

> ソースから再コンパイルしないといけないのでしょうか?
1.8も(一応)出たことだし、それをすすめる。
0476デフォルトの名無しさんNGNG
>>471
みつかった。さんきゅ。
そうか、演算子だったのか。
0477デフォルトの名無しさんNGNG
>>476
ページ頭の検索使っても見つかるYo
0478デフォルトの名無しさんNGNG
hash = {}
key = []

hash[key] = true
key.push 0

p hash[[]] #=> nil

なんだか、こういう挙動はあまり好きじゃないな。
たまに嵌る。
0479デフォルトの名無しさんNGNG
hash key に array を使う人はあまり好きじゃないな。
0480デフォルトの名無しさんNGNG
スクリプト 言語 にRuby使うひとあんまりすきじゃないな。
0481デフォルトの名無しさんNGNG
>>478

文字列以外は普通 freeze するべ。
文字列がキーのときは勝手にそうなってるだけだし。
0482デフォルトの名無しさんNGNG
LL土曜っていく香具師いる?
0483デフォルトの名無しさんNGNG
>>482
いきてーよ。
くそー。のんびりしてたら満席御礼だったよ。鬱だ。
0484デフォルトの名無しさんNGNG
>>480
それ日本語ですか?
0485デフォルトの名無しさんNGNG
>>484
あなた日本人ですか?
0486デフォルトの名無しさんNGNG
>スクリプト 言語 にRuby使うひとあんまりすきじゃないな。

これは変だろ。
0487デフォルトの名無しさんNGNG
正規表現における $ では、改行が消えてしまうので困っています。

スクリプト:
--------------------
str = "AAA\nBBB\nCCC"
str.scan(/(^.*$)/) do
 p $1
end
--------------------

実行結果:
"AAA"    ← "AAA\n" であってほしい
"BBB"    ← "BBB\n" であってほしい
"CCC"

このとき、"AAA"ではなく"AAA\n"、"BBB"ではなく"BBB\n"であってほしいのですが
そんなことは可能でしょうか。
0488デフォルトの名無しさんNGNG
visualuruby 1.8対応 キタ━━━━(゚∀゚)━━━━ッ!! ありがとうございます!
0489デフォルトの名無しさんNGNG
>>487
str = "AAA\nBBB\nCCC"
str.scan(/(^.*(?:\n|\z))/) do
 p $1
end
0490デフォルトの名無しさんNGNG
390 名前:830[sage] 投稿日:03/08/09 15:28
助けてー。助太刀頼む。
----------
830 名前:仕様書無しさん[sage] 投稿日:03/08/09 15:11
いまだにC++なんて低水準言語つかって時間を無駄に使っているのですか?
やはりPyやRなど高水準言語で効率よくコーディングしようよ

831 名前:仕様書無しさん[sage] 投稿日:03/08/09 15:18
VBもPyもRもガキのおもちゃに過ぎん。

http://pc.2ch.net/test/read.cgi/prog/1036581754/


391 名前:デフォルトの名無しさん[sage] 投稿日:03/08/09 19:13
「Py」はPythonのことで「R」とはRoboCodeのことだよね?

http://pc2.2ch.net/test/read.cgi/tech/1053955472/
0491デフォルトの名無しさんNGNG
Rは http://www.r-project.org/ だろ
0492デフォルトの名無しさんNGNG
n番目の数値を一つ増やす
cvssucc("1,2,a,4", 3) = "1,2,a,5"

という関数はどう実装すればいいですか?
数値や文字列問わずというのはできるのですが。
0493デフォルトの名無しさんNGNG
>>492
def cvssucc(s, idx)
 s = s.split(',')
 s[idx].succ!
 s.join(',')
end
0494デフォルトの名無しさんNGNG
>>492
どうでもいいけどcsvsuccだよな。
0495デフォルトの名無しさんNGNG
老婆心での質問だがc??succ('1,2,"a,b",4', 3)でも大丈夫なのか?
0496デフォルトの名無しさんNGNG
老婆は黙ってろ。
0497デフォルトの名無しさんNGNG
>>495
あえてインデントは気にしないよ
もちろん「詳説〜」からのコピペだ。

def csvsucc(csv, index)
ary = []
csv.scan(/\G(?: ^|,)
(?:
" ( (?> [^"]* ) (?> "" [^"]* )* ) "
| ( [^",]*)
)/x) {|qval,val|
if qval
val = qval.gsub(/""/,'"')
end
ary.push val
}
ary[index].succ!
ary
end

p csvsucc('1,2,"a,b",4', 3)
0498デフォルトの名無しさんNGNG
>>489
ははあ、なるほど、$ を使わなければいいのか。
というか、今回の場合では $ を使っちゃいけないのか。
了解しました。どうもありがとう。
0499デフォルトの名無しさんNGNG
>>498
その例に限って言えば、これで良い気もするが。

str.each_line do |line|
p line
end
0500500NGNG
stackless-python
0501デフォルトの名無しさんNGNG
csvをパースするやつって1.8から標準添付だっけ?
0502デフォルトの名無しさんNGNG
>>501
>>255を見ると、1.8.0(preview4)から標準らすぃ
0503デフォルトの名無しさんNGNG
a = [[]] * 10
a[0] << "x"
p a #=> [["x"], ["x"], ["x"], ["x"], ["x"], ["x"], ["x"], ["x"], ["x"], ["x"]]

正直、一時間ほどハマりました。
0504デフォルトの名無しさんNGNG
rubyは遅くて使い物になりませんな
0505デフォルトの名無しさんNGNG
>>503
Rubyリファレンスマニュアル - trap::Array
http://www.ruby-lang.org/ja/man-1.6/index.cgi?cmd=view;name=trap%3A%3AArray
0506デフォルトの名無しさんNGNG
trap::空白文字による違い に

b = a+2; # a と 2 の和
b = a +2; # a(+2) と解釈される.
b = a + 2; # a と 2 の和

ってあったけど、これ単項+のせいだよね?
単項+ っているの??
0507デフォルトの名無しさんNGNG
いる。
0508デフォルトの名無しさんNGNG
>>506
> ってあったけど、これ単項+のせいだよね?

括弧省略文法のせい
0509デフォルトの名無しさんNGNG
>>507
具体例キボン
0510デフォルトの名無しさんNGNG
>>508
単項+ が無ければ
空白にかかわらず2項+になるんじゃないの?
0511デフォルトの名無しさんNGNG
>>510
単項−はいるから何も解決しない
0512509NGNG
>>507
単項+ ってそのものを返すだけじゃないの?
だったらいらないと思うんだけどな。
0513rubyNGNG
うるさいな、ほっといてくれ!
0514509NGNG
>>511
たしかに。逝ってきます。
0515デフォルトの名無しさんNGNG
Ruby初心者、というかスクリプト言語初心者なのですが、正規表現中で、
括弧の含まれる文字列の扱いに困っています。
たとえば、こういった場合です。

str = "abc(inside)"
if "\(.*\)" =~ /#{str}/

この結果がfalseになります。仕様なのでしょうが、困っています。
同じ理由で、gsubなどの変換関数も使えません。
回避策はないでしょうか。

0516デフォルトの名無しさんNGNG
/\(.*\)/ =~ str
0517デフォルトの名無しさんNGNG

str.gsub!(/\(.*\)/, '')
をしたいときはどうすればよいですか?
0518デフォルトの名無しさんNGNG
そうしたいときはそうしろ。
何したいんだよ。
0519デフォルトの名無しさんNGNG
いけました。動かないと思いましたが凡ミスでした。すいません。
0520デフォルトの名無しさんNGNG
>>518
おまえ生意気だな
0521デフォルトの名無しさんNGNG
すいません
ごめんなさい
もうしわけありません
0522520NGNG
いや俺もいいすぎたよ。すまん
0523デフォルトの名無しさんNGNG
つられて俺も謝っとく
ほんとにすまんかった
0524rubyNGNG
馴れ合ってんじゃねえよ
0525デフォルトの名無しさんNGNG
ruby 生意気だな
0526デフォルトの名無しさんNGNG
rubyの無礼俺が誤る。
正直すまんかった。
0527デフォルトの名無しさんNGNG
馴れ合いってキモイよな
すまんかった
0528デフォルトの名無しさんNGNG
いや、もとをただせば全部俺が悪いんだ。
すまんかった。
0529デフォルトの名無しさんNGNG
>>528
お前が悪い
0530デフォルトの名無しさんNGNG
Ruby/GtkのCListで set_row_data を使うGtkが必ず落ちる。
助けてくれ。
0531デフォルトの名無しさんNGNG
a=['A', 'a', 'B', 'b', 'C']
p a.sort{|a,b|a.upcase <=> b.upcase or a <=> b} #=> ["A", "a", "b", "B", "C"]

sort の中身が前半が 0 であっても
or から後ろが評価されていないようなのだけど
これでいいんだっけ?

ruby 1.8.0 (2003-08-04) [i386-mswin32]
0532デフォルトの名無しさんNGNG
0 は真だから。

Numeric#nonzero? を使って
a.sort{|a,b|(a.upcase <=> b.upcase).nonzero? or a <=> b}
とやるのかな。
0533531NGNG
ありがとう。
でもそれだと、最初の条件でソートされなくならないですか?
0534531NGNG
と思ったらされてるみたいですね。
どんな仕組みになっているんだろ……。

HELP読んでくる。
0535デフォルトの名無しさんNGNG
$ refe nonzero
Numeric#nonzero?
--- nonzero?

    ゼロの時nilを返し、非ゼロの時 self を返します。
0536デフォルトの名無しさんNGNG
3.times{} は、あるのに 3.map{} がない理由は?
0537デフォルトの名無しさんNGNG
?

3.map{} にどんな動作を期待してる?
0538デフォルトの名無しさんNGNG
期待する動作がないから?
0539デフォルトの名無しさんNGNG
>>531
nonzero? ってなんかキモいんで俺は下のようにやる

(a.upcase <=> b.upcase) * 2 + (a <=> b)
0540デフォルトの名無しさんNGNG
a.sort_by{ |a| [a.upcase, a] }
0541デフォルトの名無しさんNGNG
>>537
p ((0...3).map{|i| "Title#{i.succ}"}) #=> ["Title1", "Title2", "Title3"]
p ((0...10).map{|i| i*i}) #=> [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

など。
(0...) を書くのが作業的で面倒くさい。
0542デフォルトの名無しさんNGNG
でもmapじゃないよなぁ
0543デフォルトの名無しさんNGNG
>>406 を読んでたら 1.8.0 から

> Array.new(10) { |i| i + 1 }
> => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

が、できるようになったらしい。
機能的にはとても満足。
だけど、書くのがさらに面倒だ。
0544デフォルトの名無しさんNGNG
で、ユーザーって増えてるの?
0545デフォルトの名無しさんNGNG
>>541
>>536 見て「ハァ?」って思ったけど、 >>541 でちょっと理解できた。
何かイカした名前を付けれれば、採用され・・・ないか。
zero origin か one origin か、とかそういうレベルでももめそうな悪寒。
0546デフォルトの名無しさんNGNG
>545
zero originだけで良いと思われ。
one originが必要なら
 foo= 10.map{|i| ・・・・・ }
 foo.shift
で出来るけど逆(one origineな実装時にzero origineな結果を得る)
はスッキリ書けないと思われ。
0547デフォルトの名無しさんNGNG
one origine な
foo = 10.map{|i| func(i)}
って、zero origineな
foo = 9.map{|i| func(i+1)}
と同じじゃないの?

すっきりしているかどうかという問題に関しては、
shiftするのとどっ恋どっ恋だと思うけど。
0548デフォルトの名無しさんNGNG
スタックを増やす方法をおしえてください。
0549デフォルトの名無しさんNGNG
環境を書け。
0550デフォルトの名無しさんNGNG
class Integer
def times_collect(&b)
(0...self).map{|i| b.call(i) }
end
alias times_map times_collect
end

こんな感じかの、名前どおりtimesに合わせて0オリジンで文句は出ないだろ
0551デフォルトの名無しさんNGNG
ナイスネーミング!
0552デフォルトの名無しさんNGNG
$ ruby -renumerator -e 'p 3.enum_for(:times).map{|i|i}'
[0, 1, 2]
0553デフォルトの名無しさんNGNG
面倒くさすぎ。
0554デフォルトの名無しさんNGNG
さて、どうやって matz 氏を説得するかの。
0555デフォルトの名無しさんNGNG
>>548
> スタックを増やす方法をおしえてください。

スタック += 1
0556デフォルトの名無しさんNGNG
スタック.拡大(いぱーい)
0557デフォルトの名無しさんNGNG

>>357 + >>368のmswinの環境で
ここのアッカーマンが実行できませんでした。
http://www.bagley.org/~doug/shootout/bench/ackermann/ackermann.ruby

irb(main):012:0* ack(3, 8)
SystemStackError: stack level too deep
from (irb):4:in `ack'
from (irb):6:in `ack'
〜〜〜〜略〜〜〜〜〜
from (irb):8:in `ack'
from (irb):12irb(main):013:0>
0558デフォルトの名無しさんNGNG
見てのとおり、スタックが足りない。
0559デフォルトの名無しさんNGNG
あ、ごめん、環境を示したつもりなのか。
mswin32ならコンパイル時に
nmake STACK=0x4000000
だ。
0560デフォルトの名無しさんNGNG
>>554(==>>550?)
名前が今市という気がする。seqってのはどうだろう。
class Integer
  def seq(&b)
    range = 0...self
    if b
      range.collect(&b)
    else
      range
    end
  end
end

0561デフォルトの名無しさんNGNG
times_map / times_collect ってするんなら、
そもそも times は times_each じゃないと名前が対応しない。
だから times が each という名前を含んでいないのなら、
map / collect の名前を使う必要がない。

だから seq でどうだという解釈でよろしいか?
0562デフォルトの名無しさんNGNG
Python 世界的に有名。ライブラリが豊富。
Ruby 日本でのみ有名。日本語対応で優れる。

でOK?
0563デフォルトの名無しさんNGNG
>>562
OK.
0564デフォルトの名無しさんNGNG
>>562
Pythonはrubyをyieldを取り入れたそうです。

C#は次期バージョンで、yieldを導入します。

ttp://www.microsoft.com/japan/msdn/vs/vcsharp/vbconCProgrammingLanguageFutureFeatures.asp




0565デフォルトの名無しさんNGNG
Python インデント
Ruby end end end

0566デフォルトの名無しさんNGNG
>>561
そんなとこかねぇ。あとはman 1 seq。
それと、{collect|map}_*ってのはたびたび出ても通った例がないから、
語順を逆にしてもどうかな、と。
0567デフォルトの名無しさんNGNG
>>564
yieldの実装ってどうなってるの?
yieldが合計100回呼ばれるとしたら要素100の配列を前もって作って返すのか
fiberかなにかを使ってyieldの呼出し毎に値を呼び出し側に返すのか?
0568デフォルトの名無しさんNGNG
Ruby/GTK (今は Ruby/GNOME だっけ?) で
Gtk::Entry で入力された文字列を右寄せで表示したい
のですが、どうすれば良いですか?

Gtk::Label は set_justify があるので可能なんですが、
Gtk::Entry にはそれらしきものが無いので...。
0569デフォルトの名無しさんNGNG
>>567
Rubyの?pythonの?
0570デフォルトの名無しさんNGNG
>>569
>>1
0571デフォルトの名無しさんNGNG
>>567が>>564を指してるので、どれについて言ってるのかが分からなかったんだが。

Rubyのyieldは、コールバックの呼び出しと思えばいい。
ブロックの実行環境をスタック上に再現して実行する。
0572デフォルトの名無しさんNGNG
LISPだと、こんな機能追加は一瞬でできるのに
他の言語は次バージョンまで待たされるのね。
0573デフォルトの名無しさんNGNG
できてるじゃん。
単に標準で組み込まれるかどうかだけ。
0574デフォルトの名無しさんNGNG
キモイ作者の気まぐれ次第ってことか。
0575デフォルトの名無しさんNGNG
痛い脊髄反射レスが来ましたよ
0576デフォルトの名無しさんNGNG
>>574
残念ながら。
0577デフォルトの名無しさんNGNG
ruby 1.8.0 で、ある記号処理をしてる。
行を読み、"|" で区切られた部分に分けたい。

s = "1|2|3"
a = s.scan(/[^|]*\|?/)
p a

→["1|", "2|", "3", ""]

"3" までは期待通りだけど、最後の "" の意味が判らん。何にマッチしたの?
今は [-2] の末尾が区切り文字じゃない時、[-1] が空文字列なら pop して誤魔化してる。
正規表現、scan の仕様に詳しい人教えて下さい。
0578デフォルトの名無しさんNGNG
>>577
s = "1|2|3"
a = s.scan(/[^|]+\|?/)
p a
↑これだと、["1|", "2|", "3"]になる

[^|]*・・・|ではない文字が0以上
\|?・・・・|という文字が0または1個
3の後に""(空文字)があると考えると、[^|]が0個かつ\|が0個の場合にマッチしている

s = "1|2|3"
a = s.scan(/[^|]+/)
p a
↑これだと、["1", "2", "3"]になる
マッチした部分が配列で返されるから、必要な部分にマッチする正規表現を書けば良い。
0579577NGNG
>>578
サンクスです。

"1|2||3" の様に区切りが連続した場合は
["1|", "2|", "|", "3"] の様に検出したいんですが、前者の /[^|]+\|?/ だとマズいんです。
後者は、区切り文字そのものが消えちゃうんで、今回の用途に合いません。

もう少しスマートに書けるかと思ったんですが、やっぱ誤魔化し法で行ってみます。
それとも、処理するコードでスマートにすべきなのか。

ありがとうございました。
0580デフォルトの名無しさんNGNG
"3" を抜き出した時点で元文字列は消費しきってるのに、
なんで空にマッチしてるかの説明が知りたい。
マッチする気なら無限にマッチする事も可能なのに、なぜ1回だけ余計にマッチしてるのか。

"1|2|3" → "2|3"、["1|"]
"2|3"  → "3"、 ["1|", "2|"]
"3"   → ""、  ["1|", "2|", ""]
""    → なんでこれを処理する?
0581580NGNG
スマソ、間違えた

"1|2|3" → "2|3"、["1|"]
"2|3"  → "3"、 ["1|", "2|"]
"3"   → ""、  ["1|", "2|", "3"]
""    → なんでこれを処理する?
0582デフォルトの名無しさんNGNG
// =~ "" がマッチするから。しかし、"".scan(//)がいつまでもマッチし続けると困るから一回だけマッチするようになってる
0583デフォルトの名無しさんNGNG
s = "1|2||3"
a = s.scan(/a*?/)
p a
これだと、空文字列7個の配列が返ってくる。
0584デフォルトの名無しさんNGNG
>>583
聞いてるのか?

p "aaa".scan(//)
これも空文字列の配列が返るが何か?
正規表現は最左最長マッチする
0585デフォルトの名無しさんNGNG
>>577
s = "1|2||3"
a = s.scan(/[^|]*\||[^|]+$/)
p a
こんなんじゃだめ?
0586デフォルトの名無しさんNGNG
>>579

以下でどう?

# マッチしたいものは
# (a) "|以外の文字列"の連続と "|"
a = / [^|]+\| /x
# (b) "|" のみ
b = / \| /x
# (c) "|以外の文字列"の連続と "文字列末尾"
c = / [^|]+\z /x

re = / #{a} | #{b} | #{c} /x

p "1|2|3".scan(re) # => ["1|", "2|", "3"]
p "1|2||3".scan(re) # => ["1|", "2|", "|", "3"]

以下でもいいみたいだな。

# マッチしたいものは
# (a) "|以外の文字列"の連続と "|"(または「末尾」)
# 「末尾」と言い切れるのは [^|]+ のおかげ
a = / [^|]+\|? /x
# (b) "|" のみ
b = / \| /x

re = / #{a} | #{b} /x

p "1|2|3".scan(re) # => ["1|", "2|", "3"]
p "1|2||3".scan(re) # => ["1|", "2|", "|", "3"]
0587デフォルトの名無しさんNGNG
>>586
正規表現に正規表現埋め込めるのは1.8から
0588583NGNG
>>584
いきなり聞いてるのかといわれても、自分は誰にも質問した覚えは無いので、
聞いてませんとしか答えようが無いです。
0589デフォルトの名無しさんNGNG
Rubyも汚くなったな。
0590デフォルトの名無しさんNGNG
>>588
聞いてませんとしか答えようが無いといいながら、
聞いてませんと答えていない。
つまり、あなたの主張は矛盾している。
0591583NGNG
>>590
確かにw

>>584
聞いてません
0592rubyNGNG
>>589

a = / [^|]+\|? /x
b = / \| /x

re = / #{a} | #{b} /x

p "1|2|3".scan(re)
p "1|2||3".scan(re)
0593pythonNGNG
import re

a = r" [^|]+\|? "
b = r" \| "

r = re.compile("%s | %s" % (a,b), re.X)

print re.findall(r, "1|2|3")
print re.findall(r, "1|2||3")

微妙だがパイソンに一票
0594577NGNG
>>585,586
ありがとうございます。

言葉が足りなかったんですが、言いたかった事は>>580さんの通りです。

まだ仕様がありまして、"1|2|" → ["1|", "2|", ""] になる必要もあります(配列は必ず "|" の数+1)。
ヒントを頂いたので、自分で練ってみようと思います。
出来上がった物は近い内に公開する予定です。
0595デフォルトの名無しさんNGNG
>>594

結局 "|" による split なんだけど、"|" を含まなくてはいけないのが難点で
すね。
Oniguruma (ruby を自分でコンパイルする必要あり)なら戻り読みが使えるの
で

re = / (?<=\|) /x

p "1|2|3".split(re, -1) == ["1|", "2|", "3"]
p "1|2||3".split(re, -1) == ["1|", "2|", "|", "3"]
p "1|2|".split(re, -1) == ["1|", "2|", ""]

で、すべて true になります。ちなみに先読みなら素の ruby で使えるけど
以下のようになります。

re = / (?=\|) /x

p "1|2|3".split(re, -1) == ["1", "|2", "|3"]
p "1|2||3".split(re, -1) == ["1", "|2", "|", "|3"]
p "1|2|".split(re, -1) == ["1", "|2", "|"]
0596デフォルトの名無しさんNGNG
素直にsplitして終端以外を"|"追加すれば?
変に凝ると後でわかんなくなる。
0597デフォルトの名無しさんNGNG
>>594
考えたんですが、最後の条件のせいで必ず空文字列にマッチする必要がある
そうすると最初の条件を満たさない。だからscanじゃ無理な気がします。

>>596
"|"を"|\0"とかに置換して"\0"でsplitとか

p "1|2|3". gsub(/\|/,"|\0").split(/\0/, -1)
p "1|2||3".gsub(/\|/,"|\0").split(/\0/, -1)
p "1|2|". gsub(/\|/,"|\0").split(/\0/, -1)
0598デフォルトの名無しさんNGNG
>>597
できた。要Oniguruma

re = / (?<=\| | ^) [^|]* (?: \| | \z ) /x

p "1|2|3".scan(re)
p "1|2||3".scan(re)
p "1|2|".scan(re)
0599山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0600デフォルトの名無しさんNGNG
分割文字列の最後に "|" を付け加えて /[^|]*|/ で scan して
最後だけ "|" をとればいいだろ
0601デフォルトの名無しさんNGNG
めんどくさいにょ
0602デフォルトの名無しさんNGNG
RAAに登録するときって英語のページを用意しなきゃいけないんだっけ?
0603デフォルトの名無しさんNGNG
>>602
そのほうが望ましい
0604デフォルトの名無しさんNGNG
>>603
さんくす。
MUSTじゃなくてSHOULDなんですね。
0605デフォルトの名無しさんNGNG
質問があるのですが、
シンボルと文字列はどう使い分けたら良いのでしょうか?
0606デフォルトの名無しさんNGNG
つかどう混同したら良いのでしょうか
0607デフォルトの名無しさんNGNG
つか同根どうしてしまうのでしょうか
0608デフォルトの名無しさんNGNG
module M
def foo
1
end
module_function
def bar
foo
end
end

と書くと bar から foo を参照できないのはなぜ?
0609デフォルトの名無しさんNGNG
呼べるよ。

module M
def foo
1
end
module_function
def bar
foo
end
end
p Object.new.extend(M).send(:bar) #=> 1

どうせ、M.barでfooを呼べないとか言ってるんだろうけど
selfが違うからな。M.fooを定義しろ
0610デフォルトの名無しさんNGNG
モジュール関数ってのはインスタンスに依存しないメソッド
なんだからインスタンスメソッド呼んぢゃまずいだろ
0611デフォルトの名無しさんNGNG
さんざん既出だと思いますが検索しようがないので質問

Ruby 1.6で
hoge=[1,2,3]
piyo=hoge
piyo.pop
p hoge,piyo # hoge=[1,2] piyo=[1,2]
foo="baka"
bar=foo
bar+="aho"
p foo,bar # foo="baka" bar="bakaaho"
自分はこれが納得できないのですが、どう理解すればよいでしょうか?
0612デフォルトの名無しさんNGNG
>>611
腐ったミカンの方程式
0613デフォルトの名無しさんNGNG
>>611
bar += "aho"
は
bar = bar + "aho"
と同じ振る舞い。
つまりbarは新しく生成された文字列オブジェクトを参照する。
もはやfooと同一ではない。
0614デフォルトの名無しさんNGNG
同値と同一の違い。
つまり一言で言えば>>612。
0615デフォルトの名無しさんNGNG
>>611
矢がささってんだよ。
0616デフォルトの名無しさんNGNG
>>611
メソッドには破壊的なものとそうでないものがある。
pop は破壊的にオブジェクトを変更する
+ は新しいオブジェクトを生成する
代入は変数に新しいオブジェクトを割り当てなおす
ふつうはね
0617デフォルトの名無しさんNGNG
pop 盗んだバイクで走り出す
+= 100円玉で買えるぬくもり
0618611NGNG
ありがとうございます。

foo="baka"
bar=foo
bar<<"aho"
p foo,bar # foo="bakaaho" bar="bakaaho"
ですね。

Perlと混乱していますが、"="について、
a=b+'c'(右辺と左辺が違う場合)はaに新しいオブジェクトが割り当てられるが
a=b では新しいオブジェクト割り当てはせず、aとbは同じオブジェクトを指す
ということですか?
0619デフォルトの名無しさんNGNG
String#+(other) メソッドが新しい String オブジェクトを返す
0620デフォルトの名無しさんNGNG
s1 = "baka"
s2 = "aho"

s3 = s1 + s2
s4 = s1 << s2

p s1.object_id
p s2.object_id
p s3.object_id
p s4.object_id

p s1
p s2
p s3
p s4
0621611NGNG
右辺、左辺の問題じゃなくて
メソッドが新しいオブジェクトを返すかどうかってことですね・・・

すみません
0622デフォルトの名無しさんNGNG
つまり一言で言えば>>612
0623デフォルトの名無しさんNGNG
ぐぐったが言わんとしてることがわからん
taint関係?
俺が腐ってる?
0624デフォルトの名無しさんNGNG
俺もわからん
0625デフォルトの名無しさんNGNG
どちらかというと、別のスレに似合う言葉だな。
0626デフォルトの名無しさんNGNG
>>623
なんの関係も無い。惑わされるな。
0627デフォルトの名無しさんNGNG
>>625 ふと別スレを覗いてみたらどうしようもなく荒れてるな…。
0628デフォルトの名無しさんNGNG
ある Hash から、特定のキーだけ抜き出した Hash を作るのに、なるべく簡単にやる
方法はないでしょうか? values_at は配列を返しますが、hashを返して欲しい。
0629デフォルトの名無しさんNGNG
given_keys.inject({}) {|h,k| h[k] = given_hash[k]; h}
0630デフォルトの名無しさんNGNG
h = {1=>1,2=>2,3=>3}
newh = h.reject {|k,| k % 2 == 1}
p h
p newh

{1=>1, 2=>2, 3=>3}
{2=>2}
0631デフォルトの名無しさんNGNG
h = {1=>1,2=>2,3=>3}
need_keys = [1,3]

h2 = h.reject {|k,| not need_keys.member?(k)}

p h2 # => {1=>1, 3=>3}
0632デフォルトの名無しさんNGNG
具体的な例も書けよ。
0633デフォルトの名無しさんNGNG
ruby 1.8.0 (2003-08-04) [i386-mswin32] で
多倍精度の浮動小数点型を使うにはどうしたらいいのですか?
0634デフォルトの名無しさんNGNG
>>633
require 'bigdecimal'
a = BigDecimal("0.1")
b = BigDecimal("0.0")
10.times { b += a }
puts b == 1 #=> true

# ただし、Floatとの演算では暗黙のうちにBigDecimalがFloatに
# なってしまうため、一箇所でも間違ってFloatのリテラルを
# 混じらせると任意精度が保てなくなる事には注意。
0635デフォルトの名無しさんNGNG
BigDecimal を使わない方法で教えてください
0636デフォルトの名無しさんNGNG
Ruby を使わない方法も教えてください
0637633NGNG
>>634
ありがとー。
0638デフォルトの名無しさんNGNG
Pythonに乗り換える方法を教えてください。
0639デフォルトの名無しさんNGNG
Pythonから乗り換える方法を教えてください。
0640デフォルトの名無しさんNGNG
素直にどっちも使えば?
0641デフォルトの名無しさんNGNG
>>100
違います。immediate だからではなく、 immutable だから、だよ。
0642デフォルトの名無しさんNGNG
ぶへ、リンクたどってきて激しく前のレスに反応してしまった。スマソ
0643デフォルトの名無しさんNGNG
>>629
ruby 1.6.8 で、inject を使わない場合は?
each でまわすしかないかなあ。
0644デフォルトの名無しさんNGNG
RubyのGCについて語ってくれる人募集
0645デフォルトの名無しさんNGNG
>>636
perl使え
0646デフォルトの名無しさんNGNG
>>635
すべからく整数として扱ってBignum+指数の演算で処理しろ。
ttp://homepage2.nifty.com/cat-chy/software/
の「big-decimal」参照。
0647デフォルトの名無しさんNGNG
>>644
別スレからこぴぺ

matzは彼の博論を受け取ったらしいが、そういえば
matzはちまたの論文を最近も読んでるのだろうか?
もしそういう時間を取れていないのなら、Rubyの実装も
古い世代の設計のままになるという事だよね。

これへの反応は

かなり前だが1.8ではrandのアルゴリズムが変わってるみたいだし。
そういう情報は勝手に入って来るんじゃね?

だった。

自分としては、「勝手に」というのはちょっと違うかと。
randの話なら、MTは他の言語処理系やGLibなどでも
採用されはじめたことで(加えて国内の研究の成果であったことも
ちょっと心理的な追い風となって)Rubyでも採用されたという
経緯があると思う。
確かに、例えばBohemGCを参考にする必要はあるだろうが、
「勝手に入ってくる」範囲内の、つまりはオープンソースの他の
処理系の実装の情報だけでGCを実装していたら、
Rubyの拡張ライブラリでもPythonのようにリファレンス・カウンティングを
するはめ(失礼)になっていただろう。

つーことで、GCの専門家で、Rubyの行く末について語ってくれる
方を激しく募集。
0648デフォルトの名無しさんNGNG
>GCの専門家
まるっきり別なものを想像してしまった・・・
0649デフォルトの名無しさんNGNG
先生!
open3とexecとsystemって、どう違うんですか!%x(...)とか`str`との違いも
よくわからんです。
open3が速かったりするのかな?
0650デフォルトの名無しさんNGNG
>>646 どうでもいいことだけど、多分すべからくの使い方間違ってる。
>>648 ワラタ。
0651デフォルトの名無しさんNGNG
>>648
何を想像したのか気になる・・・
0652デフォルトの名無しさんNGNG
> >>649
open3    子プロセスのstdin/stdout/stderrを個別に扱う。3つのIOを返す。
exec     自プロセス自体を置き換える。戻ってこない。
system   単純に子プロセスを実行。終了を待つ。正常終了(status=0)したらtrue、それ以外か実行に失敗したらfalseを返す。
%xと``   子プロセスのstdoutを読み込んで、Stringとして返す。
0653デフォルトの名無しさんNGNG
>>651
ゲームキューブ
0654デフォルトの名無しさんNGNG
>>653
ruby powerpc-nintendo-gamecubeキボンヌ。
0655デフォルトの名無しさんNGNG
gtkでVBoxにボタンを追加した後にそのボタンを削除しても
ウィンドウが元の大きさに戻らないけどどうすればいい?

require 'gtk'

w = Gtk::Window.new
w.add v = Gtk::VBox.new
v.add button = Gtk::Button.new("delete button")
v.add vbox = Gtk::VBox.new

10.times {|i|
vbox.pack_end Gtk::Button.new(i.to_s)
}

button.signal_connect('clicked') {
vbox.each {|b|
vbox.remove b
}
}

w.show_all

Gtk.main
0656デフォルトの名無しさんNGNG
p ('0377'.to_i) # → 0
p ('0b11'.to_i) # → 0
p ('0xFF'.to_i) # → 0

ショックだ。期待と違う。
3年位使ってて、さっき初めて気づいた。
0657656NGNG
間違えた。
p ('0377'.to_i) # → 377
0658デフォルトの名無しさんNGNG
to_iで基数を指定できる(0なら自動判別)のは1.8から?

p ('0377'.to_i(0)) # → 255
p ('0b11'.to_i(0)) # → 3
p ('0xFF'.to_i(0)) # → 255
0659デフォルトの名無しさんNGNG
>>655
俺も知りたい。
set_usize, set_default_size, size_allocate, size_request が
関係してそうだけど色々試しても全然思い通りいかん。
0660656NGNG
>>658
おお、知らなかった。サンクス。
早速1.8.0へ乗り換えよう。

こーいう差異もまとめて、またRuby本を出す予定なんてあるのかな。
0661デフォルトの名無しさんNGNG
matz本のruby1.8バージョン欲しいなあ。たしか1.4ベースだよね。
0662655NGNG
自動的に縮小はしないけど、こんなかんじでどうよ?

button.signal_connect('clicked') {
window_size = w.size_request

vbox.each {|b|
window_size[1] -= b.size_request[1]
vbox.remove b
}

w.resize(*window_size)
}

ちなみに、gtk2 でしか試してないです。
0663662NGNG
655 じゃなくて >>655 だ。ごめん。
0664デフォルトの名無しさんNGNG
>>646
すべからく の誤用。
半島へカエレ!
0665デフォルトの名無しさんNGNG
>>660
>>661
売れるのならばね…(ボソッ
0666660NGNG
>>665
ユーザ数の事を言ってる?(w

でも、コード書いてて引っ掛かった時に、リファレンス代わりになる物が欲しいと思う。
Web やら ML やらから今までの変更を断片的に追うより、網羅的な物が。
0667デフォルトの名無しさんNGNG
つかバイブルが最新の仕様に対応するのは当然だろう。
と無責任に言ってみる。
0668デフォルトの名無しさんNGNG
質問です

http://www.ruby-lang.org/ja/man-1.6/index.cgi?cmd=view;name=Array#insert
を見つつ
ruby 1.6.7 (2002-03-19)で

class Array
def insert( n, *vals )
self[n, 0] = vals
self
end
end

a = [3,4,5]
b = [1,2]
a.insert 0, b
p a # => [[1, 2], 3, 4, 5]

となるんですが
[1, 2, 3, 4, 5]
ってしたい場合はどうやればいいんでしょう?
0669デフォルトの名無しさんNGNG
a = [3,4,5]
a[0,0] = [1,2]
p a #=> [1, 2, 3, 4, 5]
0670デフォルトの名無しさんNGNG
>>666
リファレンス代わりの本だったらprogramming rubyじゃねえの。
おれはWebのマニュアルが最新情報に対応して検索もできていいと思うけどね。
0671デフォルトの名無しさんNGNG
>>668
どうしてもそのメソッドでやるんなら、返値の self を self.flatten! にするとか。
0672デフォルトの名無しさんNGNG
HTTP::Responseでres['last-modified']をepocにしたいのですが
0673デフォルトの名無しさんNGNG
>>669
即レスどうもです
わざわざinsertを用意しなくてもできるんですか
全然しらんかった

>>671
どもです
self.flatten!も知りませんでした。
でも二次配列(?)を追加したいんで…
0674673=668NGNG
と番号なかった
0675659NGNG
>>662
p w.size_request #=> ( 84, 242)
p w.size_request[0] #=> undefined method `[]' for ( 84, 242):Gtk::Requisition (NameError)
p w.resize(10,10) #=> undefined method `resize' for #<Gtk::Window:0x4025ed68> (NameError)

gtk1だと全然ダメだった。
0676672NGNG
ParseDateモジュールなるものがありました。
0677デフォルトの名無しさんNGNG
>>673
a.insert 0, *b

>>676
time.rbもあるよ。
0678662NGNG
>>675
こんなんでどう?(もう試してるかもしれないけど)

button.signal_connect('clicked') {
window_size = w.size_request

vbox.each {|b|
window_size.height -= b.size_request.height
vbox.remove b
}

w.set_default_size(window_size.width, window_size.height)
}
0679675NGNG
>>678
再び試したけどウィンドウサイズは変わらんかった。
そもそも set_default_size は最初に開いたときのサイズでしょ。
resize っつーのがないと、後から変更するのはもう無理なんじゃないか。
0680デフォルトの名無しさんNGNG
全ての 'test/unit' のテストの起動つてどうやるの

Dir.glob(**/*_test.rb') { |f|
require f
}

なんてやっても自動的にテストが呼び出されてテスト始まるんだけど、
しかし、setup が実行されなかったりする
0681680NGNG
ファイルが違って同じテストクラス名だと setup が実行されないことがあるようですた

失礼しますた
0682デフォルトの名無しさんNGNG
リリース版の同梱ライブラリでも

C:/ruby/lib/ruby/site_ruby/1.8/amrita/xml.rb:101: warning: toplevel constant File referenced by REXML::File

てな warning が出るのはどうにかならないだろうか
0683デフォルトの名無しさんNGNG
何に同梱されてたんだよ。
0684662NGNG
>>679
set_usize は?
0685679NGNG
>>684
も、変化なし。
0686デフォルトの名無しさんNGNG
VisualuRubyでフォーム作るときに背景色指定するには
どうすればいいんでしょうか?
0687デフォルトの名無しさんNGNG
コントロールパネル → 画面 → デザイン あたりで好きにいじってください。
0688デフォルトの名無しさんNGNG
>>647
LL2とかOOPSLAとかOSCONとかに行ってるんだから、最近の研究(最新、じゃない
かもしれないけど)の話が出てこないわけがないでしょ。
もちろん、話を聞いたからといって、採用するかどうかは別でしょうし、
いまいち理解できない分野もあるんでしょうけど(特に数学方面とか)。
0689デフォルトの名無しさんNGNG
>>686は陰嚢湿疹
0690655NGNG
>>685
元の655だけども、同じくうまく行ってない。まだ
いろいろは試せてないけど。もうちょっとあがいてみます。

ちなみに、ruby-gnomu CVS (gtk-1.2) と ruby 1.8.0 CVS でした。
gtk2.0 にしてみます。

返事遅れてスミマセソ
0691デフォルトの名無しさんNGNG
ASP(active server page)使わなきゃいけない仕事で、できること
ならrubyで書きたいんだけど、仕事でASPをrubyで書いている人い
ますか?ついでに何でそんなもん使うんだという問いに対する効果
的な解答例も。

Windows 2000のサーバで、drbのサーバを動かしっぱなしにして仕
事させてる人はいますか?
0692デフォルトの名無しさんNGNG
selfを書き換えるにはどうするの?
Stringにはreplaceってメソッドがあるらしい事は判ったんだけど、
やろうとしてるのはFloat。

より具体的に、saturate!(min,max)というのを考えてる。
selfがmin未満ならminに、maxを超えてたらmaxにする。
組み込みでもうあるかな。

Floatのメソッドじゃなく、関数にしちゃえば解決かもしれんけど、なんか面白くない。
0693デフォルトの名無しさんNGNG
>>692
できない。
0694デフォルトの名無しさんNGNG
>>692
代入を伴ってもよいんなら、
class Float
 def saturate(min, max)
  return min if min > self
  return max if max < self
  self
 end
end
やね。
でも、1.1.saturate!(2, 3)って意味わけ分からんやん。
0695692NGNG
>>693,694
ありがとう。
そっかー、変数で呼ぶ事ばかり考えてて、定数で呼ぶのは想定外だった。こりゃ変だ。
どうもこの辺の発想が出来ねーんだよな俺。
0696デフォルトの名無しさんNGNG
「人生の脱北者でも味わえるRubyのお勉強」きぼん。
0697デフォルトの名無しさんNGNG
久々に初心者向けRuby本、Rubyの冒険がでたが、えっApolloでやんのってちょっと驚いた。
GUIなプログラム作れないと初心者にはガッカリ度が高いかもなので、敷居が高くなってもこの方がいいのか。
0698デフォルトの名無しさんNGNG
>>697
「熊谷秀武・著 吉田和弘・監修」だから、Apolloは必然と思われ。
0699デフォルトの名無しさんNGNG
K光ML読んで[るた]人に聞きたいんだけど、この本は正直どうなん?
0700デフォルトの名無しさんNGNG
K光ML読んで[るた]人じゃなくていいんだけど、この本は正直どうなん?
0701デフォルトの名無しさんNGNG
たしか著者は変数入れ物説を唱えていた
そのことに激しく違和感
0702デフォルトの名無しさんNGNG
>>686
気付いてるかもしれんが、作者さん日記に回答が。
0703655NGNG
>>690
最終的に>>662で行けました。
ruby-1.8.0 CVS
ruby-gnome2 CVS (ruby-gnome「2」ってあるの知らなかたよ。まぬけ)
gtk+-2.2.2
っとすべて最新で以下
>>678のは残念ながら
undefined method `height' for [93, 308]:Array (NoMethodError)
と出てダメでした。
どもありがと。これを元に勉強させてもらいます。
しかしTkの方が楽だね。何かと。
0704655NGNG
>>703
require 'gtk2'

Gtk.init
w = Gtk::Window.new
w.add v = Gtk::VBox.new
v.add button = Gtk::Button.new("delete button")
v.add vbox = Gtk::VBox.new

10.times {|i|
 vbox.pack_end Gtk::Button.new(i.to_s)
}

button.signal_connect('clicked') {
 window_size = w.size_request
 vbox.each {|b|
  window_size[1] -= b.size_request[1]
  vbox.remove b
 }
 w.resize(*window_size)
}

w.show_all

Gtk.main
0705デフォルトの名無しさんNGNG
>>701
そんなこといってたのか…

おれが思うに変数は紐だと思うw
0706デフォルトの名無しさんNGNG
Rubyの変数は入れ物ではないので、>>705が正しい。
0707デフォルトの名無しさんNGNG
紐だって例えは初めて聞いたけどいいな
オブジェクトが犬あたりか
誰からもつながれなくなった犬は山に帰っていくわけですな
0708デフォルトの名無しさんNGNG
関係ないが、変数という名前自体が間違い。
変物と呼んでくれ。
0709デフォルトの名無しさんNGNG
関係ないのなら、変物と呼びません。
■ このスレッドは過去ログ倉庫に格納されています