トップページ⇒tech
1001コメント292KB

Ruby について Part 3

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。

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

<前スレ>
Rubyについて Part 2
http://pc3.2ch.net/test/read.cgi/tech/1028906179/

<過去スレ>
Rubyについて
http://pc3.2ch.net/test/read.cgi/tech/1012096319/
0653デフォルトの名無しさんNGNG
ary.sort_by { rand }
0654デフォルトの名無しさんNGNG
Enumeration#sort_by の実装の話?
0655デフォルトの名無しさんNGNG
Enumerable の typo だとしても、何を言いたいか分からない。
0656デフォルトの名無しさんNGNG
>>652
> >>650 スマン、最後はselection sortってどういうこと?
勘違い。ruby_qsort()は切替えたりしてないな。

> それは抜きにしても左右に振られるのがランダムであることから
> 等確率であることをいうのは飛躍が大きいと思われ。
というか、順次比較して行くから等確率じゃないな。
0657デフォルトの名無しさんNGNG
>>645の意図が分かった気がする。
>>643の場合、停止確率は1だが停止しない場合もあると言いたかったんだろう。
それならば正しい。
しかし>>647は間違いだな。確率0の事象を実際にみることはないに等しい。
0658デフォルトの名無しさんNGNG
>>657
>>643については正しいが、確率1だからといって見ることができるとは限らないので
「確率0の事象を実際にみることはないに等しい」は言い過ぎかと。

class Array
  def shuffle!()_=self;1.upto(size-1){|i|j=rand(i+1);_[i],_[j]=_[j],_[i]};_ end
  def shuffle() o = dup ; o.shuffle! ; o end
  def sorted?() empty? or !! inject{|i,j| i <= j ? j : break} end
  def bogosort!() until sorted? do shuffle! end ; self end
  def bogosort() o = dup ; o.bogosort! ; o end
end

100.times do |i|
  STDERR.printf("%2d: ", i)
  a = (1..i).to_a.shuffle ; t0 = Time.now ; b = a.bogosort ; t1 = Time.now
  STDERR.printf("%f sec [%s] --> [%s]\n", t1-t0, a.join(","), b.join(","))
end
0659デフォルトの名無しさんNGNG
>>656
> というか、順次比較して行くから等確率じゃないな。

それも明らかじゃないと思う。難しい。
0660653NGNG
>>653って何かおかしい? スマートな実装だと思ったんだけど……。
0661653NGNG
つーか、>>508 あたりから既出なのか。スマソ。
0662デフォルトの名無しさんNGNG
[ruby-dev:20209] からのスレッドを見ると、>>491 のような疑問は尤なような。
0663デフォルトの名無しさんNGNG
rdoc なんだけど、ここ
ttp://rrr.jin.gr.jp/doc/http-access2/
の rdoc の出力は、rdoc-0.9.0 の標準 (Squeak のクラスブラウザみたいに、上半分に
クラス階層やメンバが表示されているやつ) とは違って、左半分にクラス階層やメンバが
表示されているんだけど、

これって rdoc の CVS 版使うとこうなるのかな?誰か知っている人いますか?

0664663NGNG
>>663
すいません、自己解決しました。

ttp://rrr.jin.gr.jp/doc/Makefile
をみたら、--template kilmer っていうオプションが rdoc にあるみたいね。
0665デフォルトの名無しさんNGNG
rubyで、文字列が'aaa', 'bbb', 'ccc'のどれかであれば真、
それ以外では偽という条件を書くとき、
if str=='aaa' || str=='bbb' || str=='ccc' then
 ...
end
としているのですが、もっとうまい書き方はありますか?

case str
 when 'aaa', 'bbb', 'ccc'
 ...
end
でもよかったんだけど、if修飾子としても使いたいので
できればif文での書き方を希望。
0666デフォルトの名無しさんNGNG
>>665
Rubyスレをあげないでください。
0667デフォルトの名無しさんNGNG
>>665
if %(aaa bbb ccc).include?(str)
0668667NGNG
うおお、ミスった。
if %w(aaa bbb ccc).include?(str)
0669デフォルトの名無しさんNGNG
>>668
なるほど、配列の要素として含むかどうかで判断するのね。
ちなみにこれ、実行するたびに配列が作成されるのかな?
erubyやmod_rubyで使用すると、実行するたびにオブジェクトが
増えてしまう?
(仕方ないか)
0670667NGNG
>>669
実行のたびに配列は生成されちゃうだろうね。
それがいやだったら、配列を定数に入れとくとか。

ifの評価が終わったら参照されない配列になるから、
gcされちゃうんで増え続けることはないだろう。
0671デフォルトの名無しさんNGNG
漏れならこっち
if /\A(?:aaa|bbb|ccc)\z/ =~ str
0672669NGNG
どうもありがとう。
いろんなやりかたがあるのね。
0673デフォルトの名無しさんNGNG
>>671
なるほど。正規表現のリテラルだったら毎度同じオブジェクトなのか。

$ ruby -e '2.times do p /hoge/.id end'
538146270
538146270

$ ruby -e '2.times do p ["hoge"].id end'
538146160
538146130

VALUE * を使い回す話とごっちゃになってた。
0674デフォルトの名無しさんNGNG
>>673
> VALUE * を使い回す話とごっちゃになってた。
何それ?
0675デフォルトの名無しさんNGNG
>>674
たぶんC言語レベルでのソースコードの話。
VALUEって型があって、それへのポインタのことでは?
0676デフォルトの名無しさんNGNG
>>673
そうとも限らないんだけどね。

ruby -e '2.times do |i| p /mona/.id end'
ruby -e '2.times do |i| p /#{i}/.id end'
ruby -e '2.times do |i| p /#{i}/o.id end'
0677デフォルトの名無しさんNGNG
真中のは厳密にはリテラルと言わないような気もする。
0678デフォルトの名無しさんNGNG
真中のは言わなくても最後のは言うの?
0679デフォルトの名無しさんNGNG
>>675
それは分かるんだけど、「使い回す」ってのが何の話だかが。
0680デフォルトの名無しさんNGNG
>677 はリテラルとは何か定義してみれ。
# 最近fj.lang.cでフレームになってたような気もするが。
0681デフォルトの名無しさんNGNG
fj.lang.cだと最近じゃないわけだが。
0682デフォルトの名無しさんNGNG
文脈によっては、たとえ100年前でも最近ていうからなぁ。
0683デフォルトの名無しさんNGNG
で、そういう文脈なの?
0684デフォルトの名無しさんNGNG
俺様のニュースサーバで expire されてなければ最近。
0685デフォルトの名無しさんNGNG
で、あなた様のニュースサーバはどこにあるんですか?
0686山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0687デフォルトの名無しさんNGNG
http://www.rubyist.net/~matz/slides/ipsj-hi103/index.html
にあるグラフはどっからのデータのグラフなんだ
もしかしてmatzが主観で書いたグラフか?
0688デフォルトの名無しさんNGNG
客観データだとしたらむしろびっくりだ
0689デフォルトの名無しさんNGNG
lzhやzipなどの書庫ファイルの中身を
Rubyからアクセスしたいのですが、どうしたらいいでしょうか。
0690デフォルトの名無しさんNGNG
list = `"lzh lq #{archive}")`.split(/\n/)
list = `"zipinfo #{archive}"`.split(/\n/)[1...-1]
0691デフォルトの名無しさんNGNG
Array#sort が比較関数をブロックで渡せるんだから、
Array#uniq も比較関数をブロックで渡せたら…と思いませんか?
0692デフォルトの名無しさんNGNG
>>691
思わないなぁ。めんどくさいと思うよ。
それなら俺様 uniq を作った方が早いと思う。
0693デフォルトの名無しさんNGNG
>>690
どうも。
書庫内のファイルの中身も見たいので、DLLのAPIヘルプを見ているところです。

0694デフォルトの名無しさんNGNG
>>693
環境はWindowsなのか?
なら「Ruby+統合アーカイバ+DLL」でぐぐるとなんか出てくる。

zlibを使ったRubyZipってのもあったはず。
0695デフォルトの名無しさんNGNG
というか、RAA。
0696デフォルトの名無しさんNGNG
>>694
情報どうもです。いろいろ試してみます。
0697デフォルトの名無しさんNGNG
pythonマンセ〜
0698デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1047970129/782 に出ている、
遅延評価に対応した ruscheme というのを試してみたいのですが、
どこかダウンロード可能なところは無いでしょうか?
0699デフォルトの名無しさんNGNG
>>698
ぐぐれ。ちなみに綴りが間違ってる。 Rucheme だ。
0700デフォルトの名無しさんNGNG
綴り間違い失礼。

rucheme003 はまだ遅延評価に対応していないみたいなんです。
もっと新しいのはダウンロードできないんでしょうか?
0701デフォルトの名無しさんNGNG
まつもっちゃんよ・・・

頼 む か ら ソ ケ ッ ト の g e t c で デ ッ ド ロ ッ ク す る の 直 し て く れ

これじゃネットワーク全然使えねーよ
0702デフォルトの名無しさんNGNG
>>701
再現出来る短いコードを書き環境を明示して晒してみたら?
0703デフォルトの名無しさんNGNG
ごめ。スレッド使えばデッドロックにはならないぽい。
でもスレッドは止まる。timeoutも効かん。

再現?簡単だYO!
TCPServerとTCPSocketで試してみ。

ソケットオープソ
↓
接続
↓
getc (getsでもreadでも何でもいいが)
↓
受信データを送らない
↓
あぼーん
0704デフォルトの名無しさんNGNG
>>703
だから、再現コードと再現環境を晒せっての。
どんなコードや環境でも再現するようなら
今頃 Ruby なんか使ってる香具師なんかいねえよ。
0705デフォルトの名無しさんNGNG
>>704
ワカタ。ゴメン。ちょと待ってろ
0706703NGNG
uwaaaaaaan

書き込めねえよ

でけえとかなげぇとか言うなよ

>>704スマソ
環境だけ書かせてもらうわ

Ruby1.6.8 無印とCVS版200304全般
mswin32、mingwは全滅。Cygwinは送信だか受信のどっちか×だった。

1.8pre2のLinux版では問題なし。
0707デフォルトの名無しさんNGNG
ttp://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=trap%3A%3Atimeout
これってまだ直ってないんだっけ
0708703NGNG
少なくとも上の環境では無理ぽ
0709デフォルトの名無しさんNGNG
>>706
> mswin32、mingwは全滅。
winsockの呼び出しは中断できないから。

ついでにいっとくと、Windows対応はまつもとさんにいっても無意味。
0710デフォルトの名無しさんNGNG
つか、デッドロックの意味がわかってない悪寒
0711デフォルトの名無しさんNGNG
Rubyでcrc32を求める一番無難な方法は何でしょう?
それともMD5使っとけばいいんですかね。
0712デフォルトの名無しさんNGNG
単なるブロックをデッドロックと言うのは最近の流行か何かですか?
0713デフォルトの名無しさんNGNG
ネットワークプログラミングをするべきでない人たちが
ネットワークプログラミングをするのが流行っているようです。
0714デフォルトの名無しさんNGNG
こうしてRubyは消えていったとさ。



     〜〜 完 〜〜
0715デフォルトの名無しさんNGNG
まだ粘着がはりついてるのか(藁
0716デフォルトの名無しさんNGNG
藁って久々に見ました。
0717デフォルトの名無しさんNGNG


701 名前: デフォルトの名無しさん [sage] 投稿日: 03/06/05 02:18
まつもっちゃんよ・・・

頼 む か ら ソ ケ ッ ト の g e t c で デ ッ ド ロ ッ ク す る の 直 し て く れ

これじゃネットワーク全然使えねーよ

0718デフォルトの名無しさんNGNG
module ComparisonChainable
def self.append_features(mod)
mod.module_eval do
alias lt < ; def <(x) lt(x) && x end
alias gt > ; def >(x) gt(x) && x end
#ailas le <= ; def <=(x) le(x) && x end
alias ge >= ; def >=(x) ge(x) && x end
alias eq == ; def ==(x) eq(x) && x end end end end
class FalseClass
def <(x)false end; def >(x)false end; def <=(x)false end; def >=(x)false end
end
[Fixnum, Bignum, Float, String, Module].each do |k|
k.class_eval do include ComparisonChainable end end

p 1<2<3
p 1<2<2

文法スレ読んでてこういうの考えたんだけど、
コメントアウト外すと parse error になるのはバグ?
0719デフォルトの名無しさんNGNG
>>709
selectはできるかな。
0720デフォルトの名無しさんNGNG
ruby 1.6 と 1.8 の両方で動作するプログラムを書こうとしていますが、
Hash#indexes をつかうと 1.8 だと warning がでます。
Hash#values_at をつかうと 1.6 では動きません。
どうすればよいですか?
0721デフォルトの名無しさんNGNG
class Hash
alias values_at indexes unless self.instance_methods.include? "values_at"
end

こう?なんか違ってそう。
0722デフォルトの名無しさんNGNG
method_defined?
つーかshim使えよ。
0723デフォルトの名無しさんNGNG
>>719
ソケットに対しては使える。
0724デフォルトの名無しさんNGNG
>>718
ailas

ruby-mode.elとか、強調表示できるエディタを使え。
0725デフォルトの名無しさんNGNG
>>722
shim は嫌
0726デフォルトの名無しさんNGNG
>>721-722
なんかかっこ悪いなあ。1.8 でも indexes で warning を出さないべきだと思うのは
漏れだけ?
warning を出したければ 1.9 以降にして欲しい。
0727デフォルトの名無しさんNGNG
>>726
いまさらそんなこと言っても...
0728デフォルトの名無しさんNGNG
>>727
1.8はまだ出てないじゃん。

次のレスの予想:
ここでそんなこと言っても...
0729デフォルトの名無しさんNGNG
Rubyの質問スレがないようなので,ここに投稿させてもらいます.

10人が受講する科目Aの成績平均を計算するため
「氏名,成績点」をキーボードから入力して,
連想配列に格納する.得られたデータから平均値を算出し,
最後に,氏名,素点,平均からの偏差を画面出力したい.

という問題があり
dt = ArrayScore.new(10);
dt.inputData();
dt.meanCalc();
dt.outputData();
と実行するみたいなんですけどうまくできません.
リファレンスマニュアル見ながら作ってみたんですが
エラーが直りません.どなたか直してもらえませんか.
次に全文載せます.
0730デフォルトの名無しさんNGNG
class ArrayScore
@hash = {}; @num = 0; @mean;

def new n
@num = n; return self;
end

def inputData
@hash.clear;
for i in 1..@num
gets;
tmp = split(",");
@hash.store(tmp[0],Integer(tmp[1]));
end
end

def meanCalc
@mean = 0;
@hash.keys.each do |key|
@mean += @hash[key];
end
@mean /= @hash.size;
end

def outputData
@hash.keys.each do |key|
p key, ",", @hash[key], ",", @mean - @hash[key];
end
end
end
0731729NGNG
dt = ArrayScore.new(10);
dt.inputData();
dt.meanCalc();
dt.outputData();

これで全文です.
0732デフォルトの名無しさんNGNG
- def new n
+ def initialize n
0733729NGNG
>>732
ありがとうございます
最初のエラーが消えました.
ただ次に
`inputData': undefined method `clear' for nil (NameError)
と出てきてしまいました.
リファレンスマニュアルのHashのところには
たしかメソッドとしてclearがあったと思うんですが
これはどういうことでしょう.
hashを使うのに最初になにか宣言がいるんでしょうか.
0734デフォルトの名無しさんNGNG
頭悪すぎ……。メッセージよく読めよ。
0735デフォルトの名無しさんNGNG
>>728
1.7 で既に出ている warning を 1.8 で出すなとおっしゃるのですか?
0736デフォルトの名無しさんNGNG
>>733
@hash = {}; @num = 0; @mean;
を initialize メソッドの中に。

どのスコープの中にいるかをよく考えてね。
0737デフォルトの名無しさんNGNG
>>735
1.7は開発途上のバージョンだし、最初のほうと今では仕様が違っている点は
いくらでもあるし、別に関係ないんじゃない?
0738729NGNG
>>736
ありがとうございます.
やっと動きました.
メソッドの中に入れたら
他のメソッドで使えないとか思ってました.
0739デフォルトの名無しさんNGNG
Ruby用の、Windowsで使えるおすすめエディタってどんなのがありますか?
0740デフォルトの名無しさんNGNG
>>739
なんでんかんでんMeadowでよかとよ。
0741デフォルトの名無しさんNGNG
>>739
とくにおすすめはしないがMeadow。
おれはとても便利に使ってるが、
windowsアプリケーションとして見たら癖ありすぎだもんで。
0742デフォルトの名無しさんNGNG
>>740
どうもです。探してみます。
0743デフォルトの名無しさんNGNG
Emacsみたいなエディタかぁ
0744740NGNG
Linuxやるときに、CUIでエディタ使えるようになるから一石二鳥。
0745740NGNG
>>743
emacsのwin版 = Meadow
0746デフォルトの名無しさんNGNG
Ctrlキーに指が届かないからvi使っている。。。
0747デフォルトの名無しさんNGNG
>>742
もしMeadowを使うことに決めたのなら、
rubyのパッケージについてくるruby-mode.elを使うようにしなよ。
これを使わないとMeadowを使う意味が半減だ。
0748デフォルトの名無しさんNGNG
xyzzy用のruby-mode.lもあったよな。
0749デフォルトの名無しさんNGNG
RDEも挙げてみる。使ったことないけど。
0750デフォルトの名無しさんNGNG
自分自身の言動を「〜していたらしい」と書く人がいるが何度見てもキモい
0751デフォルトの名無しさんNGNG
Eclipse はどうなん?
0752740NGNG
>>746 余談だが・・・
Ctrlキーを指ではなく、手のひら(小指の付け根よりちょっと下)
で押すと良いらしぃ。
■ このスレッドは過去ログ倉庫に格納されています