Ruby について Part 4

このエントリーをはてなブックマークに追加
1Just Another Ruby 2cher
オブジェクト指向スクリプト言語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
2Just Another Ruby 2cher:03/06/30 12:35
= 関連スレ

== [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/
3
>>1000
5デフォルトの名無しさん:03/06/30 15:38
a=Hoge.new
array.push(a)
array.last.method()
p a
で、俺が何がしたいのか分かる?
どーすりゃいいの?
>>5
わからん
>>5
どう困っているのかもわからん
>>7
俺には困っているかどうかさえわからない。
>>8
日本語が不自由なことに困っていることは分かったyo
>>5
method() は Object#method のことじゃなくて、
なにか任意のメソッドを適用したいのかなあ?
array.push(a) を array.push(a.dup) に変えるのが正解と大予想
関係ないけど
> array.last.method()
の () にすげー違和感があるのオレだけ?
括弧がある方が漏れは好きカッコイイ
括弧がある方はJavaみたいでカッコワルイ
で、>>5はどこ逝ったんだ。
究極の選択:
method ()
method( )
1.8では前者は常に(-w付けなくても)警告が出る。
Float('1_000') が 1000.0 になるのに、
'1_000'.to_f が 1.0 になるのは納得いかん。
>>18
たしかに1.6は_を認識しないな。
1.8ではどっちも1000.0になる
21デフォルトの名無しさん:03/07/04 01:33
CGIのプログラムで、受け取るデータの大きさを
制限しようと思うのですが、
どうすればいいでしょうか?

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

ありがとうございました。
CGIといえば、
アップローダみたいに送られてくるデータが大きくなったとき、
データが送られてくるのが完了する前に中断されると
CGIオブジェクトの初期化のところで延々と止まってしまう。
どうしたらいいだろうか。
begin
timeout(delay){cgi=CGI.new}
rescue TimeoutError
exit(1)
end
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入れ直せば直るのかな。
mod_rubyはruby_options()もruby_script()も呼んでないので、$0が初期化されない。
バグだと思うなら、前田さんへ。

コンソールで実行ってのは、普通のrubyコマンドで$0が空だったってこと?
3028:03/07/04 12:16
>>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とやってみたが、出力には何も出てこないようだ。
うーん、やっぱりよく解らない……。
317cさん:03/07/04 13:11
$ 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?
>>30
zsh とか使ってない?プロンプトで出力が消されたんじゃない?ちゃんと改行しとけ。
33_:03/07/04 13:16
>>30
> 何でfalseが入ってたのだろう。
$0の実体はrb_prognameという変数で、これはとくに初期化されてないので0になってる。
で、CレベルではQfalse==0ということ。
>>31
部分配列の先頭自体が範囲を外れてるから。
367c:03/07/04 14:58
>>35
[1,2,3]が持つ範囲は 0..2 なわけで
a[3,5]の時点で範囲を外れている気がする。
漏れがアフォなだけですか?
この場合、先頭位置は要素の間にあると考えた方がいい。
つまり、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は無効な範囲ね。

38"c"*7さん:03/07/04 16:11
>>37
そういうイメージなのですか……。
一貫性がない気がするが……。
予備のスペースとして一個とってあるのかとか色々考えてしまった。
処理的には nil or size == 0 するだけだからいいっちゃいいんだが。
1.8でも変わらんのですか?
1.8でも一緒。

a[4,5].to_a.empty? とか。
>>39
サンキューです。
それで逝きます。
FAQっぽいけど、これって既知?
>>37 正直カンドーした。是非、次の出力も図解して下され。
p [0,1,2][-2..-1]
p [0,1,2][-2..+0]
p [0,1,2][-2..+1]
>>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]
>>42
> > p [0,1,2][-2..+1]
> [0,<1>,2] # 3-2=1

なるほど、そう考えれば 0 は入らないのか。さんくす
>>11
まさにそれです。ありがとうございました。
45デフォルトの名無しさん:03/07/06 20:06
Rubyを勉強し始めて実はよく分かってない事に気付きました。
'#' と '::' と '.' の違いを分かりやすく教えてください。
46デフォルトの名無しさん:03/07/06 20:08
#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");
}
}
}
}
>>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

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

あと、refeのドキュメントではSingletonメソッドとInstanceメソッドで '.' と '#' を使い分けてる気がします。
すみません。 '.'と'::'が同じなのはクラスメソッドの時だけですね
50デフォルトの名無しさん:03/07/06 22:47
File.openブロック内で例外を投げたらcloseしてくれますか?
>>50
ブロックを抜けるときにcloseする。
だから例外を投げれば、ブロックを抜けないように細工してない限りcloseされるよ。
52デフォルトの名無しさん:03/07/06 23:01
>>51 THX!!
53 :03/07/07 19:00
rubyを組み込んだシェアウェアを作ろうかなと思ったんだけど、
これってライセンスに問題ある?
色々検索してみたけどよく分からない・・・
54_:03/07/07 19:04
>>53
じゃあやめとけ。
ていうか作ってから言え。
rubyをシェルから簡単に動かしてみたいんですが、
どんな方法があるんでしょうか?

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

とかやってるんですが・・・。
irb じゃだめなの?
>>57
irb、知りませんでした。
これでできそうです。

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

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

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

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

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

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

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

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

while !stopFlag
    do_something
end

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

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

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

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

def q() puts yield end

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

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

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

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

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

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

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

Integerでこれができると「整数を保持するクラス」になって、
「整数クラス」にならない。これが分かりづらいって話じゃないでしょうか。
>>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
演算子の優先順位の表をにらめっこしながら括弧付けてけばわかりやすいかと。

a = 3.+(5.*(7)); p a
>>122
text processings に重きをおくPerlの経験に習ったのも理由の一つだろうね。
しかし元の文脈は Integer が immutable で String が mutable であることを
説明するであって、Integer には数学的対象としての性格を求め、
String には求めなかったというのもそれ自体は間違っちゃいないと思う。
equal? が identical? という名前だったら意味が分かりやすかったろう。
equal? と == の意味が異なるのは英語として分かりにくい。
128デフォルトの名無しさん:03/07/13 17:23
[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
でできるんだけどね(^^;
129122:03/07/13 17:24
>>126
確かに。解説どうもっす。
>>128
押してもだめなら引いてみよう。
puts [1,2,[3,[4,5]]].inspect.gsub(/\[|\]/, "\"")
# => "1, 2, "3, "4, 5"""
>>127
ナイスだとおもいます。
1.9/2.0に向けてなら、提案の価値があると思います。
132130:03/07/13 17:42
ぜんぜん違うし>>130
出直してきます
>>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\\\"\""
equal?は何でequalなんだろう。
英語のequalにidenticalの意味ってあるんだっけ?
手元に英英辞書がないから分からん。
135130:03/07/13 18:03
出直してきました。

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氏の前に完敗です。
136131:03/07/13 18:14
>>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? じゃないでしょうか。
すこしでも速いrubyスクリプトの書き方についてまとめたページってある?
むかしはloveruby.netにあったような覚えがあるんだが。
>130
うちの環境だと
3:in `foo': undefined method `spl_csv' for #<Object:0x2859618> (NameError)
っておこられるのだが、spl_csvってどっかの拡張メゾットか?
140139:03/07/13 22:56
>139の1行目は>133
の誤りです
>>138
さんきゅう
最適化という言葉が浮かばなかった
142138:03/07/13 23:44
>>141
どんまい。漏れもそういう時あるよ。…(自然・人工問わず)言語って難しい
xmlscan の上野さんが高速化のコツみたいなんをどっかで書いてたような。
ぐぐってみたけど見つからんかった。
>>139
>133は再帰のつもりだった。spl_csv を foo に書き換えて。
ruby遅いで
何をいまさら。。。
速くする話って雑誌の記事でもなんかあったような
遅くする話もしませんか
可能な限り破壊的メソッドは使わずにオブジェクトは毎回作る
ローカルでない変数の更新はすべてマルチスレッドセーフにする。
Ruby 自体がスレッドセーフにならなきゃ安心して Ruby を組み込めねーよ!
というひとの数 →
スレッドセーフになったとしても安心しては組み込めないな。
>>148
C的に書く。

例:文字列の操作
× str = str.sub(/a/, 'A')
○ cc = 'a'; str.split(//).each {|c| if c == cc then cc = nil; 'A' else c; end}.join
>>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);
>>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の物に近いはず
>>155
> scanの方が速い

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

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

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

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

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

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

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

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

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

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
商用、つーか独占的(ソース秘密主義)ソフトウェアね。

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コンパチだから、だそうで。)

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

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

んーよく分からんっす…
>>168
以前のruby-listでの議論は不毛だったので、

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

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

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

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

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

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

つーかlibrubyごとアプリケーションから分離しておけば、
LGPLには影響されないんじゃないか?
ところで、もしかして小迫タンって女性?
>>180
違う。
182176:03/07/16 18:21
>>179
そっかそっか、ていうか基本的なとこ忘れてたよ。
「L」GPLじゃん。てことはlibrubyがLGPLの下に置かれたバイナリと
しても、プロプライエタリ(商用)ソフト側と別バイナリにして
librubyをリンクだけする形にすれば、プロプライエタリ側のソースは
LGPLにはなんら影響されない、ってことだよね。
ソースレベルで直にregex.[ch]を丸呑みしなければいいだけの話か。
# 勘違いしてたら突っ込んでくれ、だれか…
>>181
ども。名前でそうかと思っちゃってた。
女っ気のないMLだな。
Ruby ちゃんがいます。
みんなにいじくり回されてます。
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
>>186
readline.soがないんでは?

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

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

p URI.decode(str.gsub(/\\x/, '%'))
こんなんどうか

str = '\x95\x5c\x94\5c'
puts str.scan(/[0-9A-Fa-f]+/).collect{|x| x.hex}.pack('C*')
196194:03/07/19 04:54
195氏の方が3倍以上早いな。
やっぱり、初心者の考え付くことはこの程度だな(w
src = "\\x95\\x5c\\x94\\x5c" ; dst = eval("%(#{str})")
>>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/,"%"))}'
199196:03/07/19 09:12
>>198
そうでつか。わざわざベンチありがとう。
-ruri ハァハァ
oriライブラリを作るべきだな
202191:03/07/19 14:06
みなさん、どうもありがとうございます。

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

あ、もしかして require の後に毎回 GC するせいかな?
1.8 を使うか、ファイルの数を減らしてみたらどうよ。
1.8 でも bison を使ってビルドしないと GC の回数は
減らないけどね。
みねたん
>>205
> みねたん
ぼやいてたね(w
>>206
あるふぁの後ろの本の山がすごっ
Riteで継続は
みねたんハァハァ。。
>>208
難しいらしい
211デフォルトの名無しさん:03/07/20 22:37
なぁなぁ、
文字列をUTF8にエンコするのに、何使えばいい?
uconvのcygwinバイナリ捜したんだけど、なくってさ。
212無料動画直リン:03/07/20 22:38
http://www.yoshidam.net/Ruby.html#uconv
これじゃだめなのか
214211:03/07/20 22:46
>>213
makeの途中で止まっちまうんすよ。
バイナリないっすかね。
もしくはPure Ruby なモヂュール。
ruby 1.6.5 (2001-09-19) [i386-cygwin]
でつ。
>>214
roughのunkfもmake出来ない?
216211:03/07/20 23:16
>>215
CVSwebの使い方がワカラン・・・
すまん。
>>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
218211:03/07/20 23:18
とおもったらzipがあった。
やってみす。
219211:03/07/20 23:24
$ 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
やってみます。
220211:03/07/20 23:56
解決しますた。
今頃
http://ftp.ruby-lang.org/
の存在を知った。

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

御面倒ですが、アドバイスをお願い致します。
出力をどうやって見てるの?

print str の結果を、(utf-8 を理解しない)端末にたれ流してるんだったら、
そんな風に見えるのが当たり前のような。
224デフォルトの名無しさん:03/07/21 16:51
>>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
全くオッペケペ
226デフォルトの名無しさん:03/07/21 21:12
>>225 ですよね(^^;
自分としては、下の例での「E4B887」がほしいんです。
「万」==>unicode:4E07
「万」==>utf-8:E4B887
----
str1 = "万"
str2 = Uconv.euctou8(str1)
print str2 <-これじゃダメです。
227デフォルトの名無しさん:03/07/21 21:13
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
★☆                       
☆★ 送料激安!!  送料激安!!  送料激安!!
★☆      http://www.get-dvd.com      
☆★  激安アダルトDVDショップ        
★☆    お買い得セール1枚500円〜980円!急げ!
☆★    インターネット初!「きたぐに割引」  
★☆    北海道・東北の皆様は送料も激安!   
☆★      http://www.get-dvd.com      
★☆        スピード発送!        
☆★      http://www.get-dvd.com      
★☆        商品が豊富!         
☆★      http://www.get-dvd.com      
★☆                       
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆   
rubyで作った拡張ライブラリではないプログラムの
インストーラは、何を使うべきですか?
229228:03/07/21 21:39
日本語が意味不明だったので訂正します。

rubyで書いたスクリプトのインストールには、どのような
インストール方法を用いるのが一般的でしょうか?
>>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
>>229
一般的かどうか知らんが
漏れはふつーに autoconf/automake でつ
>>229
標準となってるような方法は *ない*

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

欲しかったのは、string.unpack("H*")です。
「16進文字列でアンパックした要素の列」(google)ということだったのかな?
予想外のオチ。
stdout, stderr を /dev/null に吐かせつつ
popen するにはどうしたらいいのでしょうか?
>>235
質問の意味がよくわからないのですが、 Open3 が参考になりますか?
237デフォルトの名無しさん:03/07/23 02:53
正規表現で質問です。以下の式はどういうことを表現していますか?
/^Giko:/i
238_:03/07/23 03:09
>>235
command > /dev/nullでいいと思いますが。
stderrもか・・・
241デフォルトの名無しさん:03/07/23 05:34
>>237
Giko:が行頭にあるi???
>>237
giko:
gikO:
giKo:
giKO:
gIko:
gIkO:
gIKo:
gIKO:
Giko:
GikO:
GiKo:
GiKO:
GIko:
GIkO:
GIKo:
GIKO:
243235:03/07/23 09:43
>>236
open3 は見てもよく分かりませんでした。

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

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

を追加したらANSIのエスケープシーケンスが使えるんでない?
250244:03/07/24 01:50
>>249
残念ながら解決できませんでした。
スレ違いなのにレスをありがとうございました。
251244:03/07/24 02:22
Mingwと一緒にインストールしたMSYSのことをすっかり忘れていました。
MSYSのrxvt上で実行することで、エスケープシーケンスが解釈されました。
お騒がせしました。
ようやくpreview4。
>>252
shim まだぁ?
いろいろと押してるからshimまで手が回らない。
これでバグが見つかなかったら正式リリースだね。
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 文書の操作
lib/README が更新されてないね。

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

7/28 preview5 → preview6 ? → 7/30-/7/31 正式リリース予定?
今月中にリリースするつもりなのかな?
さらにメモ。
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/ のクライアント。リリースなし。
>>255
ruby-dev見始めたの最近なのでサンクス。
xmlparser 入って欲しいなぁ。
最近 Smalltalk をやって、
Ruby ならではの機能と思っていたものの多くが
Smalltalk のパクリなのに気づいて
こんなんだったら最初から Smalltalk やっときゃよかった
という気持ちでいっぱい。
前から Perl の見た目の Smalltalk と呼ばれてたじゃん。
>>257
Mac OS Xの次バージョンに入る〆切らしい。
>>263
Appleに感謝したいな。
そういう外圧的〆切がなければ、まだまだ当分リリースされなかったに
違いない。
昔のC magazineを図書館で見つけたのでちょっと見てみたら、
Javaに関してequalsはidenticalならばよかったのに、と触れてあるコラムがあった。
やっぱりそういうことを考える人は多いんだろうか。
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ではどうなってますか?
>>264
同意。バグはいくらでも見つかるもんだから、
適当なとことで踏ん切りをつけないと。。。

>>266
ブロックを指定してやると、ブロックの評価値がデフォルト値になる。
http://www.ruby-lang.org/ja/man-1.6/index.cgi?cmd=view;name=Hash#Hash.2enew_2
しかし、単に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

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

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

の出力には何を期待しているのか?
>>270
こゆこと?
"_x\n_x1,1_x,_x,_x_x:_x\n_x".gsub(/\b(_x)\b/) { "(#{$1})" }
273デフォルトの名無しさん:03/07/28 05:04
正規表現の後ろにmが付いているのは何か意味あるんですか?
>>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
275デフォルトの名無しさん:03/07/28 05:59
/.+/は全行にマッチする

/.+/mは全行にマッチする
ですよね。
276274:03/07/28 06:25
>>275
スマソ。その通りです。
277270:03/07/28 12:20
>>272
それで置換できるのかー。
Emacs の replace-regexp で \b\(_x\)\b を (\1) に
置換するとなぜか "_x\n_x1,1(_x),_x,_x(_x):_x\n(_x)" に
なってしまって、Rubyも同じだと思ってた。
278270:03/07/28 17:25
>>277
自己レスですがEmacsは構文テーブルに左右される
ようだからRubyと同じには、ならないですね。
279デフォルトの名無しさん:03/07/28 17:39
preview5 出た。
Array#sortって安定じゃないよね。

ぐぐった程度ではみつからなかったんだが
安定なsortってない?
自分で書いて Array に定義すれ。
それしたヤシいたら楽できるかと思ったが。
やっぱ書くか。

つか、rubyのmlで3年前に話がでてるが結局だれも
しなかったのな。
>>280
1.6 なら大人しく Schwartzian Transform しとけ。
安定 ソート
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待ちになる罠なのか?
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
今使ってるのは1.6.7だけど、
下のコードは最新だとエラーなしで通る?

def a; *(0..2); end; p a #=> parse error
>>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
>>287
それはどう動く (動いて欲しい) コードなの?
>>288

def a
(0..2).to_a
end

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

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

def a; return *(0..2); end; p a #=> [0,1,2]
$ ruby -ve '*(0..2)'
ruby 1.8.0 (2003-07-28) [i386-cygwin]
-e:1: syntax error
>>293
引数とそうでないものは違う。

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

↑これマッチしないの、なんでだろ〜?
文字コードが Shift_JIS && $KCODE を指定してないと見た
#!/usr/bin/ruby -Ks

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

ごめんなさい
>>306 はうまくいくのですが、

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

はだめです。どうしてですか?
>>307
リファレンスマニュアル FAQ 10.2 「オプション-K と $KCODE の違いはなんですか?」を参照。l
>>308
そのまんまの答えですね。
調べずに書き込みしてごめんなさい。
preview6 releaseされたようだ。
マジで8/1(遅くて8/4)に1.8.0出す気?
>>311
8/1にpreview7、8/4に正式リリース。
なんで Ruby って feature freeze とかしないの?
>>313
してる。matz日記参照。
ただ、freeze後もいくつか変更がはいった。
>>314
情報をよく集めているデベロッパだけfeature freezeされて、空気読まない連中は
feature freezeされない罠。
やっぱりリリースエンジニアリングが(ry
316山崎 渉:03/08/02 02:09
(^^)
BigDecimal使ってる奴、議論に参加してやれよ。
俺は使ったことないのでわからんが。
Windows上で、RubyでGUIを作ろうと思ったら何がいいんだろう?
Ruby/tk? Apollo?
>>319
Ruby/GTK2
321デフォルトの名無しさん:03/08/02 15:06
>>319
VisualuRuby
>>319
こっそり wxruby に期待
Ruby/GTK と Ruby/GTK2 は何が違うんだ?
Gtk1.xベースとGtk2.xベース。
FOXRuby
前から疑問に思ってたんだけど、

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

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

Marshal.dump(C.new)

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

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

とりあえず、祝リリース!
>>342
ヌルポ rescue ガッ
だろう。
>>334
つのだ/ひろ
>>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/
>>355
> Rubyの実装に疑問あり!
> http://pc2.2ch.net/test/read.cgi/tech/1004873294/
これはもう駄スレじゃん?
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
スレの頭の部分はタイトルどおりに内部構造の話をしているので一応入れました。
確かに今は個人叩きスレになっていますね。もったいなーい。
358デフォルトの名無しさん:03/08/05 01:10
1.8.0リリース記念age
359デフォルトの名無しさん:03/08/05 09:56
if $_ =~ /(\:)(\d+)\:/
 $_.sub!(/\:\d+\:/, "(#{$2}):")
end

をsub一回に書き換えられませんか?
ifのチェックをしないとsubの行の$2に値がセットされません。
s.sub!(/(\:)(\d+)\:/, '(\2):')
$_.sub!(/\:(\d+)\:/) {"(#{$1}):"}
じゃダメ?
Rubyをベンチしてるサイトどっかにない?
なにか表現がおかしいけど気にしない。
363デフォルトの名無しさん:03/08/05 17:47
>>357
irb.bat実行するとreadline.dllが無いって怒られるんですが、
何処から拾ってくるの?
365デフォルトの名無しさん:03/08/05 19:25
>>364
肝心のdllがどこにも見当たらないんですが・・・
>>365
MinGW pre7 のやつ使ってるけど大丈夫ぽい
るびきちのirbshの本買って、本の通りにインストールしたけど
NameError: uninitialized constant Irbsh とエラー出て
まったく動作しませんが、何か?
369デフォルトの名無しさん:03/08/05 19:54
>>368
それでokでした。
ありがとう。
>>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>
何ででしょう?
>>370
スタックが足りないから。
スタックを増やす方法をおしえてください。
今cgiとしてRubyプログラムを走らせるとして
クライアント(UNIX系OS)のディレクトリ構造をWEBに吐き出させようと
したらどうしたらええでしょうか??
(゚Д゚)ハァ?
hoge.cgiに

#!/usr/local/bin/ruby

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

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

puts `ls`
それは、サーバ上のディレクトリしかわからんと思います・・・

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

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

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

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

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

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

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

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

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

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

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

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

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


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

レシーバのクラスのインスタンスを返します。

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

/(.*?)\Z/m =~ "a\n"
p $1
# => "a"
>>421
Mutex
>>426
ばかだったもっと簡単に考えなイカン

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

結局、1.6と1.8で $ , \Z が どう変わったのか、
わかりやすく教えてもらえないでしょうか?
>>406
感謝
>>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 は文字列末尾にしかマッチしません。
文字列末尾に改行がなければ同じです。
432429:03/08/07 00:02
>>431
とてもよくわかりました。
ありがとうございました。
433429:03/08/07 00:21
全くの初心者なんで、おかしなこと言ってるかもしれませんが
1.6から1.8での >>431 に書いてあるような変更って
$の方は理解できますが、\Z の方は、なんか変な感じですね。

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

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

みなさんは、どう思いますか?
>>424

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

フロントエンドはあまり難しいことしないからPHPでもいいけど、
バックエンドで複雑なビジネスロジックを作り込む場合は、
どうしてもクラスを定義することが多いから、Rubyのほうが楽。
そうなると、フロントエンド側もRubyで揃えたくなる。
おいらはそれで全部Rubyにした。
>>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

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

1.6の方がわかりやすいな。
まあ、Perlとかに合わせたってことで、歓迎すべきなんでしょうが。。
visualurubyをちゃんと1.8に対応させてホスィ
exerbの1.8.0コアも欲しー
るびーおっそーい!
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 がないのはなぜ?
>>439
> ↑これを簡単に書くための attr_accessor がないのはなぜ?

いらないから。

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

class C
class <<C
attr_accessor :var
end
end

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

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

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

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

サンプルコードどこかで見れないですか?
>>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アプリ作ってもいいやね
while line = gets do
 print line if line !~ /var/
end

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

EXEに出来れば面白いかもしれない。
466デフォルトの名無しさん:03/08/08 03:35
VisualuRubyならexerbと合わせて使う事でEXEに出来るよ
Win環境だけであれば、これが一番お勧め
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 を見ていないのはなぜ?
>>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]
>>463 !~ は =~ の否定だよ。 String#=~ 参照。
>>469
http://www.ruby-lang.org/ja/man-1.6/index.cgi?cmd=view;name=String
での String#=~ の説明では、!~ について特に言及してないのだが。
マニュアルで !~ について言及してあるところはある?
演算子のところ。だいたい != もココ。
>>455
ttp://ponx.s5.xrea.com/bibo/20030807.html#p02
挑戦してみる気があるなら。
473デフォルトの名無しさん:03/08/08 08:50
みのるの超サイト

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

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

http://minoru_god.tripod.co.jp/profile.html
474デフォルトの名無しさん:03/08/08 09:14
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
>>474
> OSXにTclTk(8.4.2)をインストール(バイナリ版)し
ってことはTcl/Tkは標準じゃないわけ?
たぶん、tcltklibなしでコンパイルされてるんじゃないの。
OSX添付のrubyは、digest/md5あたりでも問題を聞くし、あまりうまくないのかも。

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

hash[key] = true
key.push 0

p hash[[]] #=> nil

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

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

これは変だろ。
正規表現における $ では、改行が消えてしまうので困っています。

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

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

このとき、"AAA"ではなく"AAA\n"、"BBB"ではなく"BBB\n"であってほしいのですが
そんなことは可能でしょうか。
visualuruby 1.8対応 キタ━━━━(゚∀゚)━━━━ッ!! ありがとうございます!
>>487
str = "AAA\nBBB\nCCC"
str.scan(/(^.*(?:\n|\z))/) do
 p $1
end
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/
n番目の数値を一つ増やす
cvssucc("1,2,a,4", 3) = "1,2,a,5"

という関数はどう実装すればいいですか?
数値や文字列問わずというのはできるのですが。
>>492
def cvssucc(s, idx)
 s = s.split(',')
 s[idx].succ!
 s.join(',')
end
>>492
どうでもいいけどcsvsuccだよな。
老婆心での質問だがc??succ('1,2,"a,b",4', 3)でも大丈夫なのか?
老婆は黙ってろ。
>>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)
>>489
ははあ、なるほど、$ を使わなければいいのか。
というか、今回の場合では $ を使っちゃいけないのか。
了解しました。どうもありがとう。
>>498
その例に限って言えば、これで良い気もするが。

str.each_line do |line|
p line
end
500500:03/08/10 06:13
stackless-python
csvをパースするやつって1.8から標準添付だっけ?
>>501
>>255を見ると、1.8.0(preview4)から標準らすぃ
a = [[]] * 10
a[0] << "x"
p a #=> [["x"], ["x"], ["x"], ["x"], ["x"], ["x"], ["x"], ["x"], ["x"], ["x"]]

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

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

ってあったけど、これ単項+のせいだよね?
単項+ っているの??
いる。
>>506
> ってあったけど、これ単項+のせいだよね?

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

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

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

/\(.*\)/ =~ str
517デフォルトの名無しさん:03/08/10 21:03

str.gsub!(/\(.*\)/, '')
をしたいときはどうすればよいですか?
そうしたいときはそうしろ。
何したいんだよ。
519デフォルトの名無しさん:03/08/10 21:15
いけました。動かないと思いましたが凡ミスでした。すいません。
>>518
おまえ生意気だな
すいません
ごめんなさい
もうしわけありません
522520:03/08/10 22:22
いや俺もいいすぎたよ。すまん
つられて俺も謝っとく
ほんとにすまんかった
524ruby:03/08/10 22:53
馴れ合ってんじゃねえよ
ruby 生意気だな
rubyの無礼俺が誤る。
正直すまんかった。
馴れ合いってキモイよな
すまんかった
いや、もとをただせば全部俺が悪いんだ。
すまんかった。
>>528
お前が悪い
Ruby/GtkのCListで set_row_data を使うGtkが必ず落ちる。
助けてくれ。
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]
0 は真だから。

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

HELP読んでくる。
$ refe nonzero
Numeric#nonzero?
--- nonzero?

    ゼロの時nilを返し、非ゼロの時 self を返します。
3.times{} は、あるのに 3.map{} がない理由は?


3.map{} にどんな動作を期待してる?
期待する動作がないから?
>>531
nonzero? ってなんかキモいんで俺は下のようにやる

(a.upcase <=> b.upcase) * 2 + (a <=> b)
a.sort_by{ |a| [a.upcase, a] }
>>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...) を書くのが作業的で面倒くさい。
でもmapじゃないよなぁ
>>406 を読んでたら 1.8.0 から

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

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

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

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

スタック += 1
スタック.拡大(いぱーい)

>>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>
見てのとおり、スタックが足りない。
あ、ごめん、環境を示したつもりなのか。
mswin32ならコンパイル時に
nmake STACK=0x4000000
だ。
>>554(==>>550?)
名前が今市という気がする。seqってのはどうだろう。
class Integer
  def seq(&b)
    range = 0...self
    if b
      range.collect(&b)
    else
      range
    end
  end
end

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

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

でOK?
>>562
OK.
>>562
Pythonはrubyをyieldを取り入れたそうです。

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

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




Python インデント
Ruby end end end

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

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

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

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

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

"3" までは期待通りだけど、最後の "" の意味が判らん。何にマッチしたの?
今は [-2] の末尾が区切り文字じゃない時、[-1] が空文字列なら pop して誤魔化してる。
正規表現、scan の仕様に詳しい人教えて下さい。
>>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"]になる
マッチした部分が配列で返されるから、必要な部分にマッチする正規表現を書けば良い。
579577:03/08/15 00:14
>>578
サンクスです。

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

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

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

"1|2|3" → "2|3"、["1|"]
"2|3"  → "3"、 ["1|", "2|"]
"3"   → ""、  ["1|", "2|", ""]
""    → なんでこれを処理する?
581580:03/08/15 00:24
スマソ、間違えた

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

p "aaa".scan(//)
これも空文字列の配列が返るが何か?
正規表現は最左最長マッチする
>>577
s = "1|2||3"
a = s.scan(/[^|]*\||[^|]+$/)
p a
こんなんじゃだめ?
>>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"]
>>586
正規表現に正規表現埋め込めるのは1.8から
588583:03/08/15 01:25
>>584
いきなり聞いてるのかといわれても、自分は誰にも質問した覚えは無いので、
聞いてませんとしか答えようが無いです。
Rubyも汚くなったな。
>>588
聞いてませんとしか答えようが無いといいながら、
聞いてませんと答えていない。
つまり、あなたの主張は矛盾している。
591583:03/08/15 02:04
>>590
確かにw

>>584
聞いてません
592ruby:03/08/15 03:20
>>589

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

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

p "1|2|3".scan(re)
p "1|2||3".scan(re)
593python:03/08/15 03:21
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")

微妙だがパイソンに一票
594577:03/08/15 04:31
>>585,586
ありがとうございます。

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

まだ仕様がありまして、"1|2|" → ["1|", "2|", ""] になる必要もあります(配列は必ず "|" の数+1)。
ヒントを頂いたので、自分で練ってみようと思います。
出来上がった物は近い内に公開する予定です。
>>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", "|"]
素直にsplitして終端以外を"|"追加すれば?
変に凝ると後でわかんなくなる。
>>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)
>>597
できた。要Oniguruma

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

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

と書くと bar から foo を参照できないのはなぜ?
呼べるよ。

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を定義しろ
モジュール関数ってのはインスタンスに依存しないメソッド
なんだからインスタンスメソッド呼んぢゃまずいだろ
611デフォルトの名無しさん:03/08/16 21:17
さんざん既出だと思いますが検索しようがないので質問

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"
自分はこれが納得できないのですが、どう理解すればよいでしょうか?
>>611
腐ったミカンの方程式
>>611
bar += "aho"

bar = bar + "aho"
と同じ振る舞い。
つまりbarは新しく生成された文字列オブジェクトを参照する。
もはやfooと同一ではない。
同値と同一の違い。
つまり一言で言えば>>612
>>611
矢がささってんだよ。
>>611
メソッドには破壊的なものとそうでないものがある。
pop は破壊的にオブジェクトを変更する
+ は新しいオブジェクトを生成する
代入は変数に新しいオブジェクトを割り当てなおす
ふつうはね
pop 盗んだバイクで走り出す
+= 100円玉で買えるぬくもり
618611:03/08/16 21:58
ありがとうございます。

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

Perlと混乱していますが、"="について、
a=b+'c'(右辺と左辺が違う場合)はaに新しいオブジェクトが割り当てられるが
a=b では新しいオブジェクト割り当てはせず、aとbは同じオブジェクトを指す
ということですか?
String#+(other) メソッドが新しい String オブジェクトを返す
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
621611:03/08/16 22:18
右辺、左辺の問題じゃなくて
メソッドが新しいオブジェクトを返すかどうかってことですね・・・

すみません
つまり一言で言えば>>612
ぐぐったが言わんとしてることがわからん
taint関係?
俺が腐ってる?
俺もわからん
どちらかというと、別のスレに似合う言葉だな。
>>623
なんの関係も無い。惑わされるな。
>>625 ふと別スレを覗いてみたらどうしようもなく荒れてるな…。
ある Hash から、特定のキーだけ抜き出した Hash を作るのに、なるべく簡単にやる
方法はないでしょうか? values_at は配列を返しますが、hashを返して欲しい。
given_keys.inject({}) {|h,k| h[k] = given_hash[k]; h}
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}
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}
具体的な例も書けよ。
ruby 1.8.0 (2003-08-04) [i386-mswin32] で
多倍精度の浮動小数点型を使うにはどうしたらいいのですか?
>>633
require 'bigdecimal'
a = BigDecimal("0.1")
b = BigDecimal("0.0")
10.times { b += a }
puts b == 1 #=> true

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

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

これへの反応は

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

だった。

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

つーことで、GCの専門家で、Rubyの行く末について語ってくれる
方を激しく募集。
>GCの専門家
まるっきり別なものを想像してしまった・・・
649デフォルトの名無しさん:03/08/18 01:16
先生!
open3とexecとsystemって、どう違うんですか!%x(...)とか`str`との違いも
よくわからんです。
open3が速かったりするのかな?
>>646 どうでもいいことだけど、多分すべからくの使い方間違ってる。
>>648 ワラタ。
>>648
何を想像したのか気になる・・・
> >>649
open3    子プロセスのstdin/stdout/stderrを個別に扱う。3つのIOを返す。
exec     自プロセス自体を置き換える。戻ってこない。
system   単純に子プロセスを実行。終了を待つ。正常終了(status=0)したらtrue、それ以外か実行に失敗したらfalseを返す。
%xと``   子プロセスのstdoutを読み込んで、Stringとして返す。
>>651
ゲームキューブ
>>653
ruby powerpc-nintendo-gamecubeキボンヌ。
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
p ('0377'.to_i) # → 0
p ('0b11'.to_i) # → 0
p ('0xFF'.to_i) # → 0

ショックだ。期待と違う。
3年位使ってて、さっき初めて気づいた。
657656:03/08/18 12:55
間違えた。
p ('0377'.to_i) # → 377
to_iで基数を指定できる(0なら自動判別)のは1.8から?

p ('0377'.to_i(0)) # → 255
p ('0b11'.to_i(0)) # → 3
p ('0xFF'.to_i(0)) # → 255
>>655
俺も知りたい。
set_usize, set_default_size, size_allocate, size_request が
関係してそうだけど色々試しても全然思い通りいかん。
660656:03/08/18 13:29
>>658
おお、知らなかった。サンクス。
早速1.8.0へ乗り換えよう。

こーいう差異もまとめて、またRuby本を出す予定なんてあるのかな。
matz本のruby1.8バージョン欲しいなあ。たしか1.4ベースだよね。
662655:03/08/18 18:44
自動的に縮小はしないけど、こんなかんじでどうよ?

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 でしか試してないです。
663662:03/08/18 18:45
655 じゃなくて >>655 だ。ごめん。
664デフォルトの名無しさん:03/08/18 19:21
>>646
すべからく の誤用。
半島へカエレ!
>>660
>>661
売れるのならばね…(ボソッ
666660:03/08/18 23:09
>>665
ユーザ数の事を言ってる?(w

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

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

>>671
どもです
self.flatten!も知りませんでした。
でも二次配列(?)を追加したいんで…
674673=668:03/08/19 01:26
と番号なかった
675659:03/08/19 01:33
>>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だと全然ダメだった。
676672:03/08/19 01:52
ParseDateモジュールなるものがありました。
>>673
a.insert 0, *b

>>676
time.rbもあるよ。
678662:03/08/19 04:24
>>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)
}
679675:03/08/19 11:14
>>678
再び試したけどウィンドウサイズは変わらんかった。
そもそも set_default_size は最初に開いたときのサイズでしょ。
resize っつーのがないと、後から変更するのはもう無理なんじゃないか。
680デフォルトの名無しさん:03/08/19 12:43
全ての 'test/unit' のテストの起動つてどうやるの

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

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

失礼しますた
リリース版の同梱ライブラリでも

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

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

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

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

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

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

Floatのメソッドじゃなく、関数にしちゃえば解決かもしれんけど、なんか面白くない。
>>692
できない。
694デフォルトの名無しさん:03/08/20 20:52
>>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)って意味わけ分からんやん。
695692:03/08/20 21:12
>>693,694
ありがとう。
そっかー、変数で呼ぶ事ばかり考えてて、定数で呼ぶのは想定外だった。こりゃ変だ。
どうもこの辺の発想が出来ねーんだよな俺。
「人生の脱北者でも味わえるRubyのお勉強」きぼん。
久々に初心者向けRuby本、Rubyの冒険がでたが、えっApolloでやんのってちょっと驚いた。
GUIなプログラム作れないと初心者にはガッカリ度が高いかもなので、敷居が高くなってもこの方がいいのか。
>>697
「熊谷秀武・著 吉田和弘・監修」だから、Apolloは必然と思われ。
K光ML読んで[るた]人に聞きたいんだけど、この本は正直どうなん?
K光ML読んで[るた]人じゃなくていいんだけど、この本は正直どうなん?
たしか著者は変数入れ物説を唱えていた
そのことに激しく違和感
>>686
気付いてるかもしれんが、作者さん日記に回答が。
703655:03/08/21 08:50
>>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の方が楽だね。何かと。
704655:03/08/21 08:50
>>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
>>701
そんなこといってたのか…

おれが思うに変数は紐だと思うw
Rubyの変数は入れ物ではないので、>>705が正しい。
紐だって例えは初めて聞いたけどいいな
オブジェクトが犬あたりか
誰からもつながれなくなった犬は山に帰っていくわけですな
関係ないが、変数という名前自体が間違い。
変物と呼んでくれ。
関係ないのなら、変物と呼びません。
荷札
tag
変数は紐、定数はオブジェクトにしっかり接着された紐というたとえをruby-listでみたことがある
最近は定数はあんまりオブジェクトにしっかり接着されてないけどな。
>>712
というと?
1.8で変わったですか?
>>713
いや、もっと前から。
715配列について質問:03/08/22 02:59
初心者ですが質問させてください。

2次元以上のArray(またはNArray)で、各次元についての大きさを知るに
はどうしたらよいのでしょうか。例えばm行n列の行列を表す配列について、
mやnの値を知るにはどうするのでしょうか。

array.sizeだとm・nの値が戻ってきてしまうようですが。
716715:03/08/22 03:03
(補足)

どこか別の場所でarray[m,n]が定義されていて、その形を知らずに
arrayとして受け取った場合を想定して、です。
m・n の値って何?
718715:03/08/22 03:45
>>717

mとnの積、つまり配列要素の総個数です。
2次元以上のArrayなんてないべ。

NArrayだったら NArray#shape でいいのかな?
ttp://www.ir.isas.ac.jp/~masa/ruby/na/SPEC.ja
720715:03/08/22 04:49
>>719

なるほど、わかりました。
ちょっと自分が勘違いしていました。

a=[[1,2],[3,4],[5,6]]
print a.size,"\n"
print a[0].size,"\n"

=>
2
3

ですね。有難うございます。
721715:03/08/22 04:50
失礼。

=>
3
2

でした。
変数とは窓である、と言ってる人もいたね。

ちなみにrubyで定数が再代入可能になったのは4年くらい前。
あんまり最近じゃない。
なんで再代入可能にしたの?
[ruby-dev:7484]

私見では、どっちも理由になってないとは思う。
前者はインタプリタエンジンの都合でしかないし、後者は今は本物のクラス変数があるし。
前者の回避策として「エラーにはしないけど警告は出して再代入は
しない」という選択肢は、なぜ採用されなかったんだろう。
それ、ちっとも問題が回避されてないよ。
>>726
問題は

プログラム実行中→
あるひとかたまりのソースを書き換えた→
止めずに更新したい→
再評価のためload→
定数の初期化で例外→
最後まで評価されない→マズー

ということではないの?定数初期化の変更も含めて更新したけりゃ一度止める
しかない、でいい。定数に再代入できるんじゃ実質的には変数と変わらんな。
それにしても今まで気づかなかったよ。
何に気づかなかったのですか?
>>727
定数に代入した値がまずかった場合、何度ソースを書き換えても
同じところでエラーが出る。
つまり再代入できないと問題は回避されない。

理想はインタプリタの完全な再初期化を提供することだけどね。
>>728
定数に再代入できてしまうことに。
>>729
意味わかんない。具体的にどういうシチュエーションの場合を言ってるの?
場合の場合って意味がわかりません。
まえに定数を警告なしに上書きしようと思て、継承して再代入してみたけど、
定数がレキシカルスコープなことを知らなくてはまった。
元々は次のシンプルなクラス関係だった。

class C1; def bar; 1 end end
class S1 < C1; def foo; bar end end

ところが、C1 と同じ外見の次のクラス C2 を作ることになった。

class C2; def bar; 2 end end

今後、C3 が作られる可能性もある。
そうした状況で C2 の機能を持った S2 相当を作る2つの方法を考えた。

方法1 - 継承しないで生成時にC1かC2のオブジェクトを渡す。

class S
def initialize(x); @x=x end
def foo; @x.bar; end
end

方法2 - S1の内容をモジュール化してS1とS2に入れる。

module M; def foo; bar end end
class S1 < C1; include M end
class S2 < C2; include M end

みなさんならどうする?
735734:03/08/23 04:32
追加。

方法3 - 方法1と同じ(だけどS1のコード内容をほとんど変更せずに実現する)

require "delegate"
class S < SimpleDelegator
def initialize(x); super(x) end
def foo; bar; end # @x.bar 形式に変える必要がない
end

というのも思い付いた。
そのためのmix-inだから、方法2かねぇ。

実行時に対象が変わるんなら方法3とか、
C1,C2のインスタンスに直接手を加えていいならextend(M)というのも。
737734:03/08/24 06:03
参考になりました。
※全角空白でインデントしてます。
1 : class Foo
2 :  def initialize
3 :   @bar = "test"
4 :  end
5 :  Quux = Proc.new do
6 :   print "#{@bar.size}\n"
7 :  end
8 :  def baz
9 :   Quux.call()
10 :  end
11 : end
12 :
13 : foo = Foo.new()
14 : foo.baz

6行目で、インスタンス変数@barがnilだと怒られる。
class内で定義したProcからインスタンス変数を参照する方法ってありますか?
739738:03/08/24 11:27
補足。
defなら回避出来ますけど、手続きを配列化して呼び出す必要があります。
defのメソッドをジャンプテーブル化なんて出来ませんよね?
740738:03/08/24 11:49
Quux = <<EOT
do
print "#{@bar.size}\n"
end
EOT
def baz
self.instance_eval(Quux)
end

これも駄目か。instance_evalに対する理解が間違ってるかな。
>>739
foo.method.call
@bar のスコープは Foo インスタンス変数内、
Quux, Quux 内の @bar のスコープは Foo クラスインスタンス変数内。
>>738
def quux
print "#{@bar.size}\n"
end
Quux = instance_method(:quux)

def baz
Quux.bind(self).call()
end
744738:03/08/24 14:48
>>743氏の方法で解決しそうです。
ちゃんと理解出来てないかもしれませんが、理解のきっかけは頂きました。
レスして下さった方々、ありがとうございます。
>>739
ジャンプテーブル化って何よ?
746あぼーん:あぼーん
あぼーん
747738:03/08/24 16:33
>>745
ArrayやHashにメソッドを入れて間接的に呼びたいと思い、ジャンプテーブルと表現しました。
すみません、手続き型言語に染まったオールドタイプなもので。
俺はニュータイプだ!
>>738
Proc オブジェクトでなく Method オブジェクトを利用すればいいんでない
ruby-list に痛いヤシがいないか?
参照、インスタンス=オブジェクトで十分じゃん。
万難を排して日常用語に無理やり噛み砕かなければならないなんて
聞き手を馬鹿にしすぎでないのか。本当の馬鹿が使わなければならないほど
Rubyは日常的に不可欠なツールでもないだろ。
使ってれば変数の意義がわかると思うのだがなぁ
753738:03/08/24 20:49
>>749
なんと、Methodオブジェクトなんていう物があるんですか。
うー、古いRubyで知識が停滞しちゃってるなぁ。
>>707の「山に帰る」って説明が(・∀・)イイ!!
しかし、MLであそこまでムキになる問題かなぁ…。
>>754
たぶん、今までたまっていたのが爆発したんでしょう。
>>754
野良犬は保健所に捕まって殺されちゃいます
カワイソウニ
変数は紐のようなもの、と聞いて物理の超紐論を思い出して混乱してました(w
紐というのはオブジェクトと名前の書かれたタグをつなぐ紐ということでしょうか?
女性におまんまを食べさせてもらってるような男のことでつ。
そもそも、知ったかぶって他の物に例えようとするのが間違ってんだ。
しかしRubyで変数容器論は受け入れがたいな。
新人にCを教えるのに変数容器論で説明してるのを聞いたことがあるけど、
Cではそれもいいだろう。だけど、RubyやLISPみたいな言語で、そんな
説明するのはひどくないかい。
その路線でRuby入門書を書いたとなると、ムキになるのもわからないでもない。
変数をトランシーバー(無線機?)に例えるのはどうですか?
変数にオブジェクトを代入する事は、そのオブジェクトと通信するために
周波数を合わす事。
あんまり無理してメタファにこだわるのはよろしくないのではないかと。
叩かれてるほうの人は全般的に理解が浅いし、いいかげんすぎるなあ
以前の投稿も的外れなものが多いし
あれだ、もう変数に代入というのを止めよう。
ロール名にアサインするとでもしとけばいい。
名前に束縛で良いんじゃないの?
べつに変数は入れ物でいいんじゃないの?
入れ物に紐入れるということで
>>766
それじゃ a = b = Object.new がよく分からん
イメージとしてはbindだろうけど。
束縛なんて全然語感があわない訳語を割り当てたヤシが悪い。
>>767
なんで?
紐は何本あってもいいんだろ?
boundはfreeの対義語だから自由に対して束縛というのは悪くないと思うが
Rubyの冒険、入門書全体としてはどう見ます。いや、比較の対象が少ないので・・・ですが。
数少ない初心者向けRuby本な訳で、がんばってくれるとうれしいのだが。
たのしいRubyのほうがGUIやらせなくいい分、初心者には手っ取り早くていいかという気もするが、
Rubyの冒険のほうが何かしたいって意味では具体的で、気持ち的には初心者にはとっつきやすい気も。
>>768
束縛よりもましな訳語をあげよ
ひも付け
774デフォルトの名無しさん:03/08/25 13:15
囚われの身
接続
自由変数←→ひも付けされた変数
自由変数←→囚われの身変数
自由変数←→接続された変数

どれもイクナイ!
自由変数という呼称には疑問無しなんだ?
>>777
自由よりもましな訳語をあげよ
そもそも"変数"というのがおかしい!と主張してみる。
識別子(identifier)に統一する?
オブジェクトにはすべて固有の番号がある。
変数に入っているのはこの番号。

だけでいいじゃん。紐だの矢だの持ち出さなくても。
そもそもCプログラムを知らない人はrubyを使わない。
だから「変数はポインタ」だけで通じる。
> そもそもCプログラムを知らない人はrubyを使わない。

んなわけない。
>>782
Cを知らないのに「変数はポインタ」って通じる?

野良猫メタファーを考えてたら、MLに投稿されてた。
同じ事を考える人はいるんだなー。

ま、個々人で納得がいけばいい訳であって、妙に強要されなきゃどうでもイイや。
所詮はメタファーだし。
Riteでも多重継承は導入されそうにないな。

ところで思うんだが、通常のクラスではMix-inで事足りるとしても、
例外クラスだけは多重継承を認めたほうがスマートにならないか?
>>785
どーゆーケースで?
>>786
[ruby-list:38131]とかのことかな。
>>784
あなたには日本語が通じていないようだ。

Cプログラムを知らない人はrubyを使わない=rubyを使う人はCプログラムを知っている人だ
tkて人うざいんだけど
>>787
ありがと

>>785
スマートというより例外的wでトリッキーな感じがしないでもないな。
C#/JavaみたいにException.InnerExceptionでサブ例外をぶら下げて
ExceptionがSMTPErrorでInnerExceptionがTimeoutErrorにした方が自然で手抜きしやすいかも。
#これがRuby的なアプローチかどうかは知らないけど。
>>788
そっか、スマソ。
どうも否定が複数現れるとParse errorになる様だ < 俺の脳内Parser
tkの敵が増えてきたな。でも、このまま容器論をつらぬいて欲しい。
いずれにしろ、容器でも参照でも適当に説明がつくから、
あとは、説得力のある文章を書いた方の勝ちだな。
容器はあるでいいでしょ。
容器の中に何がはいってるのかが問題なのであって。
もう秋田
禿同
それにしても、こんなので延々と叩き合いする世界ってキモイ。
ちょっと、入り込めない世界だ。村社会というか...
はやらんわけだ。
ツマンネ
詳説C言語のポインタの説明みたいなもんか?
こっちの本の著者は誰だっけ?
799初心者:03/08/26 18:19
あるメソッドが非破壊的メソッドか破壊的メソッドかが、なかなか覚えられません。
というか、混乱しまくってます。
両方あるときは ! がついてるからわかるんですが、
なにか法則みたいなのってありますか?
みなさんは、どういう風に覚えてますか?

↓こんなのだったら覚えやすいのになー。
すべてのメソッドを破壊的メソッドとして作って、非破壊的メソッドを使いたい時は
オブジェクトを複製してから破壊的メソッドを使うとか。
一貫性が無くて覚え辛いことはメモとって覚えるしかない。
でも!が付いてない破壊的メソッドで、
非破壊的メソッドと紛らわしいものって一体なんだろう?
802初心者:03/08/26 18:46
>両方あるときは ! がついてるからわかるんですが、
無視してください。

破壊的と思って使ったら非破壊的だったりする時ってないですか?
この前、Array.compactを使ったら、破壊的じゃなくて、はまってしまった。
それから、破壊的、非破壊的が妙に気になるようになって
混乱中。
警告をもっと出す様にしないと駄目だな>意味解析
>>802
ri とか refe とか常備しとけ。

% ri compact
---------------------------------------------------------- Array#compact
arr.compact -> anArray
------------------------------------------------------------------------
Returns a new array based on the arr with all nil elements removed.
[ "a", nil, "b", nil, "c", nil ].compact #=> ["a", "b", "c"]

% refe compact
Array#compact
--- compact
--- compact!

compact は self から nil である要素を取り除いた
新しい配列を返します。compact! は変更を破壊的に行い、変更が
行われた場合は self を、そうでなければ nil を返します。

例:
ary = [1, nil, 2, nil, 3, nil]
p ary.compact #=> [1, 2, 3]
p ary #=> [1, nil, 2, nil, 3, nil]
ary.compact!
p ary #=> [1, 2, 3]
p ary.compact! #=> nil
調べないとわからないということは驚き最小の法則の構築に失敗しているということだな
807デフォルトの名無しさん:03/08/27 09:01
指差された変数
というかポインタ
>>806
漏れは今まであまり破壊的か非破壊的かについては裏切られたことないんだけど、
やっぱり驚き最小の法則っていうのは、「誰にとっての驚き最小か?」ってところで、
ムラというか個人差というか向き不向きみたいなものがあるんじゃないかなぁ?
>>796

× 村社会
○ 箱社会
     ∧ ∧__
   /(  ^^ ) /\ これからも僕を応援して下さいね(^^)。  
 /| ̄ ∪∪  ̄|\/
   |  たけ  |/                            箱男
「たけの共有」でつか?
>>808
それも、変数を「箱」と見るか「参照」と見るかによって感想が違うのかな。
箱派じゃないけど、!をつけとくべきだったろうと思うのはいくつかあるよ。
「箱」と「参照」を同レベルで扱うのかァ
参照じゃ全然とたえてないでしょ
それに即値はどうすんの。やはり紐じゃなくて箱でしょ
即値ってFixnum,Symbol,true,false,nilのことか?
それだって参照。
箱派キタ━━━(゚∀゚)━━━!!!!!
お互いに強制しなけりゃ、「箱」でも「参照」でもイイよ。
遠回りの理解をしようが恥をかこうが、自己責任でいこう。
箱のほうがわかりやすいと思うけどなぁ。
つまり全部ポインタってことだろ?
819655:03/08/28 10:16
C言語知ってる人間はその方が混乱がないかもね
おわアイデンティティを示してしもた。655と819は同一デス
Rubyモデルを説明するためには紐・名札がわかりやすい。箱説を持ち出す必要なし。
rubyの実装すなわちC言語(=高級アセンブラ)レベルで説明しようとすると箱が出てくる。

という結論ではありませんでしょうか。おしまい。
>>820
あなたは>>819という箱と>>655という箱に共有されますた。
>>821
所詮ノイマン型計算機上で動くんだから、あまり抽象化すると
今度は現実とのギャップに悩むことになると思うよ。
大体 to_i や to_f なんて箱物(計算機)のイメージそのもの。
getuid 等にいたっては妥協以外の何者でもないしね。
説明だけなら「紐・名札」が良いように思えるけど、それで充分
とも思えないね。
これはまた激しくズレたやつが出てきたな。
箱モデルで初心者向けの本を出版したのが、一部の人には気にくわなかったん
だろ。
まるで、宗教論争だな。
って、作者が○モン教か!
「箱男」よりも「砂の女」のほうが万人向け。
初心者用の本を出したところで初心者は
Rubyなんか見向きもしないだろう。

初心者よりもむしろRubyにどっぷり使っている人たちが
購入し、そしてアラ探しをするだけ。
ついでに「終りし道の標べに」も読んどけ。
>>828
たしかに
んじゃ、ひさしぶりに読みます。
>>781
そのとおりだね。

そういや某オブジェクト指向言語の、オブジェクトを格納する変数の型の名前はは“id”だっけ。
だから変数は箱だろ!
 a=b
a=c
函数
どのモデルも甲乙付けがたいな
http://rex.product.co.jp/docs/support/hako/chara.html
Lisp界ではこういう論争はなかったのか?
この点ではRubyとそんなに差がないと思うのはおれの思い違い?
セルの絵の説明で話しがついちゃうからないのかね。
Lisperは頭がいいから不正確な概念のマッピングなど
しなくても直接理解できてしまうのさ。
838&rlo;:03/08/28 22:02
スマン。815の言っている即値だって参照がよくわからん
Rubyの即値とそうでないもの、
それとCの変数のポインタと値と参照、
それらを交えてだれか講義してくれ

ところでCに参照ってあったけ‥?
840lo;:03/08/28 22:13
どーでもいいじゃん
そういや、ルートオブジェクトで既にidメソッドが定義されてるのを知った時は
クソ言語かよと思った。
>>841
ふむ、なぜです?
>>838
例えば数値 の 0 を考える。
Ruby では数値もオブジェクトなので Ruby スクリプト内の 0 という記述は
Rubyシステム内に存在する「0 (という現実の数値) を表すオブジェクト」
への参照を表していることになる。
idってよく使いそうな名前だからじゃないかと
ま、 .1.8 からは object_id になったから安心しとけ。
>>837 そんなことねーだろう. Lisp の場合は変数云々より scope と extent の概念のほうが
初心者には厄介だと思うが.
Fixnumとかが即値っていうのは、実装の都合の話をしてるんであって、
モデル的には参照と同じなのよ。
もまえら過去レス嫁。おんなしことばっか何遍も繰り返して、箱男か。

「全部」をクリックして「即値」を検索してみなはれ。
849&rlo;&lro;:03/08/29 21:17
マジッスか‥
変数は参照で、即値系はその変数以外の実体があると?
ところで、過去ログ調べると即値は参照であるってあるんですか? > 848

てっきり、
即値系以外の変数は参照のように振舞って、
即値系はその変数の値自体から求まると思っていましてよ
で、idはその変数の値から算出して、ゆえに同じ数字のIntegerオブジェクトは同じidを持つと

もし即値系も参照であるとするならば、どうして同じ数字のIntegerオブジェクトは同じidなんでしょう?
即値系の実体ってRuby起動時にはじめから全て確保されているんですかね
それでハッシュでどの値がどこにあるか保持しているとか???

即値系とそうでないものを区別する実装の都合ってなんでしょう?
850849:03/08/29 21:26
IntegerじゃなくってFixnumでしたね‥
性能
とりあえず、まつもといしづかのRuby本読め。
実装について書いてるぞ。

そういえば、いしづかさんはラショナル辞めちゃったんだろうか。
「即値系」とかいう、Rubyのモデルと関係ないところから引っ張ってきた俺様概
念を捨てろよ。それから虚心坦懐に>>852のいう本を読め。

つーか、即値は>>852の本に書いてあるだろ
immutableなら即値で持ってても参照で持っててもオブジェクトとして扱う上では違わないしな
Rubyの命名者っていしづかさんだったって知ってた?
知ってた
Perlというネーミングの二番煎じみたいでださくかんじる
>>857
俺は割とイイ名だと思う。

それより、PerlのせいでPearl(真珠)の綴りを間違って覚えてるプログラマってのが大勢いそうで怖い。
誕生石の順番からすると、パール、ルビーの次はペリドットだな。
だれかペリドット言語を開発してくれ。
ペリ.NET
おれはSakuraがよかったな。
おれはKokoroがよかったな。
ちうかまつもとさんはあんまり国産ってのにはこだわってないというか
むしろ外に出て行きたいのならRubyという名前を付けた戦略はアリかと。
国産っぽくて外人が知ってそうな日本語だと侍とかでいいような。



しかし、オブジェクト指向言語侍、とか書くと
OOLじゃない言語をぶった切るストーリーの何かに見えてしまう罠。
おれはAzumiがよかったな。
萌え系の名前は人前で会話するのに恥ずかしいと思うゾ。
侍→映画「あずみ」
という連想だったんでつが
萌え系って何でつか?
>>859
和名橄欖石ねぇ。
しかしまたPではじまる言語か。
RHG本でどういう解釈をしたらいいのか、わからない部分があります。
それは93ページ「構造体の隙間」の解説 16行目
「つまり struct RObject が増えるほどポインタ二つ分のメモリが無駄になっていく」
という部分。

これは、RObjectはRStringなどに比べてポインタ二つ分の
メモリを活用していないという意味なのかな?

iv_tbl が RString などにあると RString が増えるほどメモリが無駄になる
という説明をしているんだと思うのですが、その説明がいまいちよくわからんです。
>>863
つまりこういうの?

日本発、次世代言語: 織田信長
http://pc2.2ch.net/test/read.cgi/tech/1047230229/
>>868
> これは、RObjectはRStringなどに比べてポインタ二つ分の
> メモリを活用していないという意味なのかな?

そう。オブジェクトの管理の都合上、すべて同じサイズになってる。RObject
はRBasic以外にはiv_tblしか使ってないから、それもRBasicに移動するとなる
と、三つ用意されているそれ以外の領域が全部無駄になってしまう。
> ちうかまつもとさんはあんまり国産ってのにはこだわってないというか
> むしろ外に出て行きたいのならRubyという名前を付けた戦略はアリかと。

ちうかPerlをあからさまに意識したネーミングした段階で国産であろうが
外人がつけたネーミングであろうが二番煎じでださい
C++やC#と似たようなもんじゃん。
873868 :03/08/31 02:05
>>870
レス読んで本何回も読んでやっとわかりました。
最初読んだとき、メモリを無駄にする元凶がRObjectにあるように
書かれていると受けとってしまい、それが理解の妨げになっていました。

まとめると、RStringに iv_tbl が入っていると、それが原因で RObject が
利用しない領域がさらに増えてしまう。
RObjectが利用しない領域を減らすためには RString の
サイズを減らさなければならない。だから iv_tbl を外すことになった。
ということですね。たぶん。
874868:03/08/31 02:31
「iv_tbl はメモリを節約するために外すことになった」ということは分かりました。

しかし、同じページの後の説明で、
「iv_tbl を配置することによって得られるメリットは多少のメモリ節約」
と、相反することが書かれていて混乱してます。

これは全体のメモリ節約ではなく、 generic_iv_tbl を導入しない
ということだけに対してのメモリ節約なんでしょうか。
     ∧ ∧__
   /(  ^^ ) /\ これからも僕を応援して下さいね(^^)。  
 /| ̄ ∪∪  ̄|\/
   |  たけ  |/                            箱男
./tdiary.rb:521:in `open': Too many levels of symbolic links - "/home/matz/diary/tdiary.conf" (Errno::ELOOP)

./tdiary.rb:460:in `load'
./tdiary.rb:374:in `eval'
./tdiary.rb:460:in `load'
./tdiary.rb:374:in `initialize'
index.rb:21:in `new'
index.rb:21

ところで、即値参照派(紐派)はまともな説明が>>843くらいしかなく
あとは、過去ログにあったと思うぞとか、きっとRuby本にそう書いてあるよ
しか言ってないんですけど‥
そうでない方のは>>849>>855くらいですが‥

即値ってやっぱり参照じゃないんじゃない?
>>877
確か、JRubyの実装ではFixnum等も即値でなく参照だった。

即値なのはFixnum、Symbol、TrueClass、FalseClass、NilClassだけだよね?
だけど、これらのクラスのインスタンスに対する破壊的メソッドは存在しない。
つまり、参照だろうが、即値だろうが、動作自体にほとんど変化はない。
だから、参照という前提で扱っても構わないだけなのでは?

でも、
1073741823.equal?(1073741823) # => true
1073741824.equal?(1073741824) # => false
と1違うだけで動作が違うのは嫌ですか?
>>873
RStringじゃなくてRBasic。

>>874
> これは全体のメモリ節約ではなく、 generic_iv_tbl を導入しない
> ということだけに対してのメモリ節約なんでしょうか。
そう。

あと、iv_tblをRBasicに入れれば、今のgeneric_iv_tblよりも一回ハッシュの
アクセスが減るので速くなるってのはあるけど。

RObjectとか(RFileもかな)を他のと別に管理するという手も考えられるけど、
Stringとかのインスタンス変数なんてそんなに使うもんじゃないし、第一面倒。
>>877
好きなように考えればいいけど、こういうのは参照と考えたほうが納得しやす
いような気がする。

module Kernel
  attr_accessor :foo
end
2.foo = "two"
p (1+1).foo     # => "two
>>880
p ((1 + 1).foo) では? (ver. 1.6.7)
p (1+1).foo です。(ver. 1.8.0)
883868:03/08/31 23:33
>>879
なるほどー。よくわかりました。
884デフォルトの名無しさん:03/09/01 00:32
>>880
それこそRubyレベルで即値だってことが露呈する唯一の箇所だよな
ちがうと思う
>>884
immutableと即値の区別がついてねーな。
もちろん、そもそもレイヤの違う用語なわけだが。

> Rubyレベルで即値
アホか。
なぜ1 + 1で新しくオブジェクトが生成されているようなのに
インスタンス変数にさっきの値が入っているの?
即値だからさッてことを言いたいんでしょ

取り敢えず事の発端は>>815が変なこといったからであって、
別に即値の振る舞いが参照じゃないからって、変数は箱だッて確定するわけじゃないんだし
ここらへんで平行線でおわらせましょうよ


そんなことよりRubyに文字コード指定せずに、以下のコードを実行してみてよ

s = 'ぬるぽ'
p [s.intern, s]
>なぜ1 + 1で新しくオブジェクトが生成されているようなのに
>インスタンス変数にさっきの値が入っているの?
>即値だからさッてことを言いたいんでしょ

インスタンス変数にさっきの値が入っているからこそ参照なんじゃないのかね。
>>887
> そんなことよりRubyに文字コード指定せずに、以下のコードを実行してみてよ

実行してみたが、何を言いたいのかまったくわからん。
ツマリコウシテホシインダロ
  ( ・∀・). | | ガッ
 と    ) | |
   Y /ノ 人
    / ) <  >__Λ∩
  _/し'  . V`Д´)/
 (_フ彡      /  ←>>887
>>868
Rubyって、こういう実装内部までに言及する本や議論が
多いみたいだけど、なんで?
泥臭いだけでほとんど意味ないと思うけど。
>>891
勉強できる機会だし。
日本語で質問できるし。
もったいないじゃん。
>>891
組み込みや拡張ライブラリを書くときの助けになる。
>>894
面白いから、だけではダメですか。
というか、RHG以外に実装関係の本って出てるっけ?
RHGはそのための本だし、実装について説明したのはRuby本の8〜9章くらいだろ。
896デフォルトの名無しさん:03/09/01 19:08
Rubyによるウェブサーバーの実装ってありますか?
>>897
ありがととぉぉぉぉぉぉぉぉおおおおぉおぉぉぉぉぉぉいfjxofsaifuusfuuうぅぅぅうう!!!


テンキュー
>>896

1.8から標準添付だし、WEBrickを使ってみたら?

Ruby本体の配布にはサンプルがほとんど無いから
本家サイトを漁ってみてくれ

http://www.notwork.org/ipr/webrick/
1.8にしたら Range#length が無くなってんだけど、どこやした?
% ruby -e'p((Object .. Class).length)'
0
これってなんか意味あったの?
902900:03/09/01 22:22
自己解決。代りにto_a.sizeを使えと、
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=1.6.8%A4%AB%A4%E91.8.0%A4%D8%A4%CE%CA%D1%B9%B9%C5%C0%28%A4%DE%A4%C8%A4%E1%29
に書いてあった。

それにしても1.8.0変更点のページが散乱してて
どれをメインに読めばいいのかわからんじゃねーか。

http://kwatch.at.infoseek.co.jp/ruby/changes180.html
http://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=changes.1.8.0.ja
>>896
ruby -rwebrick -e'WEBrick::HTTPServer.new(:Port=>8080,:DocumentRoot=>".").start'
おそらく、変数 v がオブジェクト o への参照であるというのは、
value(v) = o を満たす写像 value: 変数→オブジェクト が
実行時の各時点で存在するってことだろ。
で、シンボルで識別されてスコープを持つ写像のことは
我々が生活において事物を指示する際の呼称との類似性から
単に「名前」と呼ぼうや、というのは計算機屋の
割とありふれた言葉遣いだと思うが。
DNSだのファイルシステムだのがその例。
名前の集合の構造のことを名前空間なんていうわけだし。

箱という暗喩は、その箱の中に写像に相当するもののみを
ちょうど一つだけ収めらると考える場合には合法だが
箱の難点は空という状態を想起させる点にあるだろう。
しかし、いずれにせよ即値はRuby言語レベルの変数概念と関係ない。
関係あるのは実装言語のセマンティクスでオブジェクトを表現するとき。
905896:03/09/01 23:39
どれがいいか迷ったけどWEBrickがいいんですかぁ
テンキュー
>>902
> それにしても1.8.0変更点のページが散乱してて
> どれをメインに読めばいいのかわからんじゃねーか。
そんなの探さなくてもたいていリファレンス本体に変更点が書いてある

refe r len

Range#length
--- length
--- size

範囲の長さを返します。
始点と終端が Integer のインスタンスなら
(last - first + (exclude_end? ? 0 : 1))
です。それ以外では、each が実行され範囲の長さを数えます。

ruby 1.7 feature: length, size メソッドはなくなりました。
必要なら
p ("a" .. "z").to_a.size
=> 26
などとする必要があります。
ActiveScriptRubyを使って、htmlで

document.onkeydown

を使うにはどうすれば良いでしょうか。
908902:03/09/02 15:17
>>906
ホンマや。書いてあった。
でも、refe だと情報が古いって感覚があるんだよな。
実際 Dir#path とか載ってないし。
cronとかで常に最新のデータベースを作るようにできないかな。
Dir#path ってなに?
あぁ、1.8 にはあるのか。
Rubyで作ったクラスのインスタンスを、拡張ライブラリでnewするにはどうすればいいの?
class Hoge; end
hoge = Hoge.new <- これ
NEWOBJとOBJSETUPを使う? わけないよねぇ。
まさかrb_eval_string?
912911:03/09/02 21:47
>>911
自己レス
hoge = rb_funcall(rb_iv_get(rb_cObject, "Hoge"), rb_intern("new"), 0);
で行けた。
cHoge = rb_const_get(rb_cObject, rb_intern("Hoge"));
iHoge = rb_class_new_instance(0, 0, cHoge);

俺はこんな風に書いてたけど、間違ってんのかな?
914911:03/09/02 22:23
>>913
すっごく正しそうです。
自分で書いてて、rb_iv_get(rb_cObject, "Hoge")でHogeクラスが取得できたけど、
なんでかわけ分かんなかったです。
ありがとうございます! ^^
rb_path2class("Hoge")ってのもある。いくらでも階層をかける優れもの
…だが、動作は遅い実際に使う時は値を保存して使うこと。
ruby-dev 1548->1550->1552 ワロタ
>>917
ハァ?
組み込みについて教えてください。

たとえば自作のエディタにRubyを組み込んだとして
ExecuteRubyMacro("Editor.CurrentDoc.Lines[3] = ''"); // 三行目をクリアするマクロ
というメソッドを実装するにはどうすればいいのでしょうか?
Ruby側ではどういったクラスを定義してどういったAPI経由で情報をやり取りするのでしょうか?
といった情報はどこかでまとまっていたりするでしょうか?
>>919
それが自分で判らないのなら、エディタは作れないと思うんだが。
Ruby本の9章とか読んでみそ。
921デフォルトの名無しさん:03/09/05 18:52
コマンドの出力を取り込みたいのですが、
バッククォートを使わないでお手軽に取り込む事ってできるのでしょうか?

具体的には
hoge = "/home/hoge"
となどして
ls hoge
の結果などを取り込みたいのです。

open3を使わなきゃできないんですかね?
リダイレクト込みでsystemとか。
>>921
バッククォートが一番お手軽だと思うが。

> 具体的には
> hoge = "/home/hoge"
> となどして
> ls hoge
> の結果などを取り込みたいのです。

`ls #{hoge}`
ってことか?

> open3を使わなきゃできないんですかね?
stderrが必要かどうかによる。
924921:03/09/05 19:32
>>922,923
さっそくのご返答ありがとうございます。
`ls #{hoge}`でできました。
式展開はてっきりダブルクォートのみだと思っていましたです・・・。
925デフォルトの名無しさん:03/09/05 19:57
>>919
JedやVimにRuby組み込んだのがあるからそのソースを参考にするのがよいと思われ
class C
def initialize
var = 0 # ← ここ var= が呼ばれない
end
def var=(v)
@var = v
end
def var
@var
end
end

p C.new.var #=> nil

def initialize(var=0); end のとき、 var はローカル変数であるべきだけど
上記の場合、 self.var= にしなくても var= を呼んでくれてもいいんじゃないだろうか。
>>926
「上記の場合」の意味が分からん。どういう場合を想定してるの?
>>927
こういうことを言いたいのでは?

class C
attr_accessor :var
def hoge
var = 0 # self.var = 0 とみなして欲しい
end
end
祖先クラスで attr_accessor されてる事を考えたら、
おちおちローカル変数使えなくない?

class C
attr_accessor :var
end

class D < C
def hoge
var = 0 # self.var = 0 とみなして欲しい?
end
end

initialize 内に限らずローカル変数への代入とみなせるときは
常にローカル変数への代入として扱われるわけだが
これは「インスタンス変数への代入なら @var 使えばいいじゃん。
だからローカル変数とみなしちゃうよ」という実装上の都合だろう
ruby -e 'p id ; id = 0 ; p id'
932928 (!926):03/09/06 03:13
>>930
めんどくさかったので例示に attr_accessor 使っちゃったけど、
var=() がインスタンス変数への代入メソッドとは限らないわけで、
実装上の都合というのは、理由としてはちょっと違うような。

>>929
それは実装者やユーザが気をつければいい (というか気をつけるべきな) ので、
理由になんないような。


と思ったけど、 >>931 見たら妙に納得。
933930:03/09/06 03:50
>>932
>var=() がインスタンス変数への代入メソッドとは限らないわけで、

だから、そういう事態は (少なくとも実装者には) まれだろうと思われてるから
解釈の優先度が ローカル変数>メソッド なんだろう。

「あんまりないだろうけど var=() というメソッドを明示的に呼びたいときは
ちょっと長くなるけど self をつけてメソッド呼び出しだというのを明示してね」
という実装上の都合だろう。

あるいは実運用上こっちの方が簡潔になるからという言語仕様上の都合か。
C の = と == みたいに、よく使うものほど短くあるべきだから。
934926:03/09/06 03:59
>>931のは
self.id=() が定義されていないからローカル変数になって当然でしょう。
935928 (!926):03/09/06 04:46
「実装上の都合」とか「言語仕様上の都合」ってのはなんだか納得いかん。

が、『「var = 0」は「メソッド呼び出し」よりは「変数への代入」のように見える』、
つまり、『「変数への代入」と見做された方が「驚きが小さい」だろう』、
ってことならば納得できるかな。
実行効率向上のもたらす驚きは宣言かと

ruby -e 'p [ id , id = id , id ]'
ruby -e 'p [ a , a = a ]'
ruby -e 'p [ a = a , a ]'
ruby -e 'if false then a = 1 end ; p a'
「実装上の都合」じゃなくてただの仕様。
a=a+1
驚きの大きな仕様ですね。
そんなコードを書こうとするオマエラに大きな驚き
[ruby-list:33797] 変数の宣言
burn method=ビックリメソッド
burn かよ!
燃えるメソッド?
萌えメソッド
ローカル変数へのアクセスのたびにいちいち(Rubyだから動的=実行時に)
メソッド検索するのは高コストだから。作者も言ってたじゃん。

仕様だなんだというのは後付けだろう。実装の都合と折り合いが付くね、という話。
メソッド検索で速度落ちるのが嫌なら
素直に静的型導入すりゃいいじゃん・・
構文変な風にするより健全じゃないかねえ
>>947
なんでやねん
949942:03/09/07 10:19
bangとburnを間違えた
950デフォルトの名無しさん:03/09/07 11:27
RubyでCGIを作ってます。
入力された文章を改行ごとに分けて配列にいれようと思いました。
そこで
require "cgi"
cgi = CGI.new
datum = cgi.params["datum"][0]
data_array = datum.split(/$/)
としましたが、うまくいきません。

どうも、いろいろ試した結果、
datum.split(/$/)でうまく区切られてないようです。
どうすればいいでしょうか?
よくわからんが
datum.split(/\n+/)
じゃだめなのか?
>>950
まずデータを確かめたほうがいいかも。
p datum
として、中身をみてみそ。手がかりが掴めるかも。
953950:03/09/07 13:36
今の状況を、もう一度説明すると、

テキストエリアに
aaa
bbb
ccc
と入力して["aaa","bbb","ccc"]を得るCGIを作ってます。

コマンドラインで再現するために、

echo "value=aaa\nbbb\nccc\n" | ruby test.rb

としています。
これがまずいんでしょうか?
いろいろやっても["aaanbbbncccn"]
が返ってきます。

ちなみに
toshi@bsd01> cat test.rb
require "cgi"

cgi = CGI.new
src = cgi["value"]
dst = src.split(/\n/)
p dst
です。
p cgi = CGI.new
した方が状況がわかる
echo "value=aaa%0abbb%0accc%0a" | ruby test.rb
だとうまくいった
じゃあrubyの後継言語はruby=rubyということで
>>953
> echo "value=aaa\nbbb\nccc\n" | ruby test.rb

シェルが '\' を食ってる。テストのやりかたがおかしい。
これが原因だろ。

if STDIN.tty?
STDERR.print(
%|(offline mode: enter name=value pairs on standard input)\n|
)
end
readlines.join(' ').gsub(/\n/n, '')
>>956
それはシェルによるzshならオケー
>>958
誰もお前の使ってるシェルの話なんてしとらん。
>>959
うるせー馬鹿。腐ったシェル使ってる香具師は黙っとけ。
961新ネタ:03/09/08 02:10
前から疑問に思っていたけど、ruby は、$_ のグローバル変数を
嫌っているのになんで $_ を採用しているんだろ?

1ライナーが書きやすいという perl の良い面を取り入れていると
考える人もいるかもしれないけど、これは perl ユーザーに
迎合していると考えられ、腐臭を放つ原因となっている。

今からでも遅くないので $_ を完全に廃止するべきでしょう。
んじゃ 1.9.x で obsolete warning つうことで。
> $_
積極的に使わなければいーんじゃない?オレもワンライナー以外では使わないなあ。

完全になくすとすると、
% ruby -ne 'print $1 if ~/regexp/'
みたいなのはどうなる?(nやpオプションが使えなくなる?)
use strict ならぬ require 'noperl' ライブラリを用意するってのは
965デフォルトの名無しさん:03/09/08 02:53
>>961
まさに perl ユーザに迎合するため。
そしてそれは大失敗だったと後悔されている。
>>964
むしろ goperl ライブラリ
パーラーはrubyの文法どう思ってるのかね。
$_無いと困るなあ。俺、awkやsedが分からんからruby -ne使いまくりですよ。
rubyisms.pmに対抗してperlisms.rb作ろうぜ。
>>963
もちろん -n と -p も切り捨てるべきでしょう。
-n だの -p だの、また時には -ep "〜" と書いてしまい動かなかったりだの、
この2つのオプションは邪魔でしかない。

ruby -e 'ARGF.each{|line|print line if /regexp/ =~ line}'
の方が、よっぽどスラスラ書けるし読みやすい。拡張もしやすい。

>>968
使いまくっているなら、それを具体的に書こう。
もし、本当に何回も使っているのなら読みやすく書いたのを
コマンド化しておいた方がいい。
>>970

・釣り
・ディベートしたがっている
・本気
のどれよ?

「$_ を完全に廃止するべき」とまで言うには、理由が弱すぎる。
"There's more than one way to do it" なんだから、
廃止した時のメリットを言ってもらわないと。

たとえば、
> ruby -e 'ARGF.each{|line|print line if /regexp/ =~ line}'
> の方が、よっぽどスラスラ書けるし読みやすい。拡張もしやすい。
っていうのは、あなたにとってそうだ、というだけだよね?

あなたが $_ を使わないのは自由なんだから。
972デフォルトの名無しさん:03/09/08 12:14

1.8 はライブラリいろいろと入れてくれるのはいいけど、
その割に uconv や rdtool あたりは入ってないのね。

出てから言うのもなんだけど、一体どうなってんの
かっちょよくて色覚障害でも見やすいCSS作って送ってやれ。
それよりも http://www.ruby-lang.org/ が、赤ばっかで目がイタいです!!
>>975
インストールガイドで眼を休める。
ベタ塗りじゃあ全然宝石っぽくないって気はするけど、まあべつに
ああ、なるほど。
ルビーの赤のつもりだったのか>オフィシャル
>>969
おお、 rubyisms.pm なんてのがあるのか。 FreeBSD PORTS に入れてくれ〜!
>>971
もちろん、メリットはある。でも、話の流れがかわったし、
スレが終わりそうなんで書かない。
>>980
んじゃ、新スレで話を蒸し返すのでそのときはよろしく。
>>981
粘着キタ━━━━━━(゚∀゚)━━━━━━━!!!!!
男は黙って
> ruby -anal -e
>>982
アナル イ━━━━━━(゚∀゚)━━━━━━━!!!!!
970がawkなんて使ったことないのは良くわかったが
まあviで下2行を打ってみなさい
123,456,789
abc,def,ghi
そしたら次は↓のように打ってみなさい
:%!ruby -anl -e 'BEGIN{$;=","};puts $F[2]'

出来たかね?では次は君の番だ 同じことをやってみたまえ
アナルなしでな!!

正直廃止したら元awk使いはperlに再移行するしかあるまい
途中で廃止するぐらいなら最初から対応すんな糞が!!
とたまにrubyを思い出しながらperlを覚えなおすだろう
awkですむならawkでやればいいじゃん
アホか
全部Rubyでやってこそ華
とっととRubyでRuby作りなおせって感じ
Rava で JRuby 動かせ
991デフォルトの名無しさん:03/09/09 01:07
CGIを作る時にチェックボックスなどの、同じ名前に複数の値が入るのを
コマンド上で実行しようとすると、どういう風に書けばいいのでしょうか?
で、結局 $_ を廃止するメリットはなんなんだ?
>>991
次スレ行け。
994デフォルトの名無しさん:03/09/09 03:28
Eclipse Project なんかは、ロゴマークのガイドラインなんかも作っていて
http://www.eclipse.org/artwork/main.html

(漏れにはオープンソースでここまでやる理由はどこにあるんだと思ってしまうが)

何か世間的なブランドイメージを良くするためのマジックがあるのかどうなのか。

Ruby は言語への美意識はそうとうなもんだけど、アートワークに
関しては無頓着で、人は見た目から入るという特性を考えたら
もったいないのかもしれん。

ブランドマーケターを雇ったら Ruby の進化も速くなるだろうか。
>>994
へんてこりんな萌えキャラをイメージキャラにされるよりはそっちの方がなんぼかマシやね。
>>994
そこら辺はIBMが決めたんじゃないの。よく知らんけど。
Rubyはとりあえずruby.jp, ruby.orgドメイン買い取ったらお客さん3割増って気がするよ。
R
u
b
y
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。