トップページ⇒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/
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キーを指ではなく、手のひら(小指の付け根よりちょっと下)
で押すと良いらしぃ。
0753デフォルトの名無しさんNGNG
>>746
ESC キーの方が遠くないか?
0754デフォルトの名無しさんNGNG
窓使いの憂鬱で CapsLock と Ctrl を変えれば。
0755デフォルトの名無しさんNGNG
>>750
昨日ウェブを巡回していたらしいたけ皮膚炎という病気の存在を知った。
0756デフォルトの名無しさんNGNG
>>752
変換/無変換をCtrlに割り当てる。これ最強。
0757デフォルトの名無しさんNGNG
>>756
そのどっちかをshiftに割り当てようよw
0758デフォルトの名無しさんNGNG
>>757
いや、shiftよりCtrlの方が使用頻度高いし。
代わりにカタカナひらがなをshiftに割り当ててみたんで、しばらくこれで試してみよう。
0759デフォルトの名無しさんNGNG
あるクラスの中で、

def +=(i)
end

def -=(i)
end

def *=(i)
end

def /=(i)
end

がsyntax errorになります。
これらの実装はどうやんの?
0760デフォルトの名無しさんNGNG
+=などは+などから自動的に定義されます。
独立して定義することはできません。
0761デフォルトの名無しさんNGNG
>>753
上(ESC)は届くけど、下(Ctrl)はホームポジションから離れないと届かないよぉ ちなみにノートPCのキーボード
0762デフォルトの名無しさんNGNG
++も自動的に定義してくれよ。
0763デフォルトの名無しさんNGNG
++ など必要ではありません。
0764デフォルトの名無しさんNGNG
はっちゃけた!!
succ!のaliasにすればいいんだよ>++
0765デフォルトの名無しさんNGNG
実際のところ++があったとしてRubyで使う場面てそんなにないような。
…ってこのての議論はもう飽き飽きw
0766デフォルトの名無しさんNGNG
まつもとさんは確か++を実装しないと言ってたと思った。
だから誰か++を実装したRubyをブランチしなよ。名前はRuby++w
0767デフォルトの名無しさんNGNG
Emacs系エディタを使うか使わないかに関わらず,
AltIME等でCtrlとCapsLockを入れ替えたほうがなにかと左手小指にやさしいかと。
保存やコピペなど,Ctrlキーを使う機会は多いから。
ついでに"Ctrl+["でESCを押したのと同じだからviユーザにとっても
押しやすいCapsLockの位置にCtrlがあったほうが幸せでしょう。
0768デフォルトの名無しさんNGNG
>>767
Aの隣にCtrlがあったほうがいいか、というとそうでもないらしい。
おれはそっちのほうがいいんでmayuで設定しているが。

一般的な106とか109キーボードのCtrlの位置(左Shiftの手前)に
あったほうが使いやすいという意見もある。
それはそれでうなずける主張だと思うんだな。
0769デフォルトの名無しさんNGNG
CapsLockはCapsLockとして使うよ
0770デフォルトの名無しさんNGNG
つまらない話題ですね。
0771デフォルトの名無しさんNGNG
rubyって何に使うの?
車輪の再発明?
0772デフォルトの名無しさんNGNG
>>771
そういう批判をするならばCOBOLでも使ってろw
0773デフォルトの名無しさんNGNG
>>770
この間の読書会ではこれでかなり盛り上がってた。
0774デフォルトの名無しさんNGNG
ルビ基地に逢いたい
0775デフォルトの名無しさんNGNG
マツモト ユキヒロ どっかの店みたい・・・
ハァハァ(°д°;)ハァハァ
0776デフォルトの名無しさんNGNG
>>766
メソッドの実体は実装しなくていいから、せめて演算子として ++ 使わして欲しい。
0777デフォルトの名無しさんNGNG
まだ ruby 初心者だった頃、++演算子はあるもんだと思って

++i

とかやって、無限ループになってはまった。
0778デフォルトの名無しさんNGNG
ょぅι゙ょ
0779デフォルトの名無しさんNGNG
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |  次でボケて!    |
 |_________|
    ∧∧ ||
    ( ゚д゚) ||
    / づΦ
0780デフォルトの名無しさんNGNG
goto >>778
0781名無しさん@xyzzyNGNG
だれかLL Saturday行く人いる?
0782デフォルトの名無しさんNGNG
郁代。
0783デフォルトの名無しさんNGNG
ょぅι゙ょ
0784デフォルトの名無しさんNGNG
refe.elの最初の補完リストを作るのに失敗するのですがどうすれば
いいんですかぁ。

環境が Meadow + ruby 1.6.8 (2002-12-24) [i386-mingw32] なので
(refe-call-process t "*") の * を ruby が自前で展開して
refeに*が渡らないのが原因だと思うのですが・・・
* を '*' にして展開しないようにしてもだめでした。
0785デフォルトの名無しさんNGNG
>>784 追記
M-x refe して * を指定するとrefeのusageが出て
'*'だとno such class or method: '*'になりまちた。
微妙にスレ違いですけど、どなたか・・・たすけて・・・
0786デフォルトの名無しさんNGNG
>>784
まず、ReFeのバージョンは0.7だよね?
それが大丈夫なら、refe '*[#,]*' でやってみ。
0787デフォルトの名無しさんNGNG
>>786
ReFe 0.71でつ。
M-x refe '*[#,]*'の結果は
not match: '*[##]*'だそうです。

0788784NGNG
さらに実験。
(defvar refe-program-args
'("-e" "puts ARGV"))
と書き換えてみると
M-x refe * の結果は refe.elをおいてるディレクトリのファイル一覧が出ました(゚Д゚)
'*'だと'*'と出ました。

もしかしてワイルドカードの展開ってmeadowさんがやってるの???
0789デフォルトの名無しさんNGNG
>>787
わかった。ruby を経由するのは潔くあきらめよう。
ReFe のデータベースディレクトリに method_document_comp という
ファイルがあるから、それを elisp を使って読み込んでくれ。
構造は中を見れば一瞬でわかるから。
0790デフォルトの名無しさんNGNG
>>784
(refe-call-process t "*")
を
(refe-call-process t "")

にしたらどうなるん?
0791789NGNG
>>790
あ、そうか。そっちのほうが賢いな。すまん。
0792784NGNG
>>790
> (refe-call-process t "*")
> を
> (refe-call-process t "")
no such class or method: ""
です。というか最初は""だったけどruby-listでWindowsでうごかねーよ
ってなって"*"になったんです。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/37546

>>789
こんなナイスなものがあったんですね。ありがとうございます。


・・・でも、なにがだめなんだろう。
xyzzyではうまくいくのになぁ。meadowさんがなにかごにょごにょしてるのかな。
まあいいやmeadowつかわねーし。
0793784NGNG
> > (refe-call-process t "")
> no such class or method: ""
> です。というか最初は""だったけどruby-listでWindowsでうごかねーよ
> ってなって"*"になったんです。
> http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/37546
スマソ。勘違いだった。
最初は引数なしだったんですね。
0794デフォルトの名無しさんNGNG
ruby foo.rb みたいに直接呼ばれたのか
他のスクリプトから load 'foo.rb' されたのかを,
foo.rb の中で見分けるにはどうしたらいいんでしたっけ?
0795デフォルトの名無しさんNGNG
if __FILE__ == $0
0796デフォルトの名無しさんNGNG
Hashの中身を表示する際に
「値」で降順ソートして「キー」と「値」を出力するのに
簡単な方法ありませんか?

valuesで全値の配列を返してもらって
それをsortメソッドでソートして
次にkeysで全キーの配列を返してもらって
そのキーに対応する値を順に見ていって
ソートした値の配列の前から順に対応してるのが
見つかったら出力していくって方法しかないでしょうか

これは一つ一つのキーで毎回値の配列を
全部確認するので効率悪い気がします

値は重複しているものもあるので
index(val)は使えなさそうです

0797デフォルトの名無しさんNGNG
Hash 使うの止めれば。
0798デフォルトの名無しさんNGNG
Hash#to_a
0799デフォルトの名無しさんNGNG
hash.map{|k, v| [v, k]}.sort.reverse_each{|v, k| puts "#{k} => #{v}"}

1.8ならこうもできる。
hash.sort_by{|k, v| v}.reverse_each{|k, v| puts "#{k} => #{v}"}
0800デフォルトの名無しさんNGNG
よくわかんねーけど、こういうこと?

hash = {'a' => 3, 'b' => 1, 'c' => 2}
p hash.sort {|a,b| b[1] <=> a[1]}
----------------
[["a", 3], ["c", 2], ["b", 1]]
0801デフォルトの名無しさんNGNG
あ、800ゲト
0802デフォルトの名無しさんNGNG
ordered_hashみたいなのって誰か作ってなかったっけ
0803デフォルトの名無しさんNGNG
>>802
http://raa.ruby-lang.org/list.rhtml?name=pseudohash
これかな。使ったことがある。
でもvalueに重複があってしかもinvertした結果、
つまりkeyが重複するようなのにつかえんだろう。
0804デフォルトの名無しさんNGNG
>>803
う。意味がとおらねえ。
valueに重複がある場合invertして果たしてそれが使い物になるかどうかわからん、
といいたかった。
0805デフォルトの名無しさんNGNG
拡張ライブラリについて質問!
Integer から size_t に入れたいときはどうすればよろしいの?
NUM2ULONG でいい?
0806デフォルトの名無しさんNGNG
hash.keys.sort {|a, b| hash[a] <=> hash[b]}.each do |key|
  p hash[key]
end
0807デフォルトの名無しさんNGNG
<=> の両辺が反対か。
値でソートしたいならすりゃいいじゃんってこった。
0808796NGNG
>>798>>799>>800>>806
ありがとうございます.

やりたかったことは>>799>>806です.
おかげでできました.

hashにmapなんてのがあるんですね
http://www.ruby-lang.org/ja/man-1.6/index.cgi?cmd=view;name=Hash;em=hash
ここにあるHashのメソッドしか知りませんでした.
0809デフォルトの名無しさんNGNG
>>808
> hashにmapなんてのがあるんですね
> ここにあるHashのメソッドしか知りませんでした.

漏れもよくはまるんだけど、Array や Hash は Enumerable を include してるので、
そっちのメソッドもチェックしる。
■ このスレッドは過去ログ倉庫に格納されています