トップページ⇒tech
982コメント427KB

Ruby初心者質問スレPart1

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさんNGNG
オブジェクト指向スクリプト言語Rubyについての質問スレッドです。

雑談、ML・blogウオッチはこちらでどうぞ。
むーんうるふ Part13 【Rubyについて】
http://pc5.2ch.net/test/read.cgi/tech/1100533226/

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

前スレ - Rubyについて Part 12
http://pc5.2ch.net/test/read.cgi/tech/1100199861/
0932デフォルトの名無しさん05/02/03 13:21:49
>>927

orig = [10, 1, 3, 0]
sorted = orig.sort

sorted.each{|e|
p orig.index(e)
}

じゃだめなの?

origIndx = {}

orig.each_with_index{|e, i|
origIndx[e] = i
}

sorted.each{|e|
p origIndx[e]
}

とか
0933デフォルトの名無しさん05/02/03 13:26:44
ああ降順かsort.reverse
0934デフォルトの名無しさん05/02/03 13:46:10
>>932
重複があったときは大丈夫?
0935デフォルトの名無しさん05/02/03 13:50:42
a = [0, 3, 1, 10]
a.zip((0...a.length).to_a).sort { |x, y| x[0] <=> y[0] }
0936デフォルトの名無しさん05/02/03 14:00:00
>>929
いけました!!
大分すっきりしました。

def get_sort_rank_indexes(array)
  tmp = []
  array.each_with_index do |item, index|
    tmp.push([item, index])
  end
  tmp.sort!{|b, a| a[0] <=> b[0]}
  tmp.each_with_index do |item, index|
    tmp[index] = item[1]
  end
end

p get_sort_rank_indexes([10, 1, 1, 3, 0])

>>932
すみません。
[10, 1, 1, 3, 0]みたいな同数も、考慮しないといけないのでした。
0937デフォルトの名無しさん05/02/03 14:07:14
>>935
Enumerable#zip使うのですね。盲点でした

def get_sort_rank_indexes(array)
  tmp = array.zip((0...array.length).to_a).sort { |y, x| x[0] <=> y[0] }
  tmp.each_with_index { |item, index| }
    tmp[index] = item[1]
  }
end

p get_sort_rank_indexes([10, 1, 1, 3, 0])
0938デフォルトの名無しさん05/02/03 14:24:27
だったら

def get_sort_rank_indexes(array)
array.zip((0...array.length).to_a).sort { |y, x| x[0] <=> y[0] }.map{|a|a[1]}
end

で
0939デフォルトの名無しさん05/02/03 14:43:53
メソッドにするなら、ブロック引数も取れるようにした方が良いような。
def get_sort_rank_indexes(array, &b)
array.zip((0...array.length).to_a).sort { |x, y| (b)? b.call(x[0], y[0]) : x[0] <=> y[0] }.map{|a|a[1]}
end
0940デフォルトの名無しさん05/02/04 01:05:04
windows環境でsocket使ってて、大きな値をwriteしたとき
「Invalid argument (Errno::EINVAL)」エラー出ません?

これだと動くんですけど、サイズを+1するとエラー出ます。

require "socket"
s = TCPSocket.open( 'localhost', 18181 )
sz = 1024 * 228 - 560
bn = ( "\0" * sz )
s.write( bn )
s.close

環境はw2k sp4、ruby 1.8.2 (2004-12-25) [i386-mswin32]です。
knoppix_v3.7_20041208-20050125に収録されてるrubyで試したら
問題なく動きました (´・ω・`)
0941デフォルトの名無しさん05/02/04 08:48:52
>>939
すげー
それいただきます
0942デフォルトの名無しさん05/02/04 09:25:12
>>940
wxp sp2で試したけど、特に問題はないね。
w2kのせいかな?
0943デフォルトの名無しさん05/02/04 13:38:10
Perl の MLDBM みたいなものってある?
0944デフォルトの名無しさん05/02/04 16:03:22
>>943
知らない人も多いからCPANのリンク貼らないと答えにくいと思うっすよ。
http://search.cpan.org/dist/MLDBM/
0945デフォルトの名無しさん05/02/04 16:31:38
MLDBM ってよく知らなかったんですが、簡単に調べた感じでは、 PStore が似
てるのかも。
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=PStore
0946デフォルトの名無しさん05/02/04 20:43:08
>>942
サンクス。1.8.1では 1024 * 228 - 1 が境界だったんですよ。
だからrubyの問題だと思ったんですけど、w2kか僕の環境が
問題なんでしょうね。今はこうやってしのいでます。

class BasicSocket
 alias _w_i_n_3_2_write write
 def write( iBin )
  oLength = 0
  sz = 1024 * 16
  ( 0...iBin.length ).step( sz ) do |i|
   oLength += self._w_i_n_3_2_write( iBin[ i, sz ] )
  end
  oLength
 end
end
0947デフォルトの名無しさん05/02/05 12:09:04
既にインスタンスが二つある場合ディープコピーってどうやるの?
0948デフォルトの名無しさん05/02/05 12:39:55
>>947
ん?Arrayの内容も含めて丸ごと複製するということですか?
Marshal.dumpやMarshal.restoreを使うという方法は?
0949デフォルトの名無しさん05/02/05 13:30:38
>Marshal.dumpやMarshal.restoreを使うという方法は?
これは重そうだな・・・
シャロウコピー(clone)の代入バージョンはあるの?
0950デフォルトの名無しさん05/02/05 15:12:24
>>947 >>949
意味がわからない。
0951デフォルトの名無しさん05/02/05 18:07:15
>>949
Marshalを使う以外に汎用的にディープコピーをする手段はないと思う。

あと代入はオブジェクトに新たなラベルをつけるという意味しかもたないから、
コピーも何もしないよ。代入はオブジェクトの操作ではない。
だからシャロウコピーの代入バージョンなんてものは存在できない。
0952デフォルトの名無しさん05/02/05 20:54:00
>>947
「既にインスタンスが二つある場合」が通じてないと思われ
0953948 ◆m7YeytgDFE 05/02/05 21:31:28
>>952
a = '2ch'
b = [ a ]
...のように"インスタンスが2つある場合"に、
それらを丸ごと複製する方法についての質問だと理解しました。
もしかしてとっかかりから誤解してますかね?
0954デフォルトの名無しさん05/02/05 22:22:01
意味わからん。
0955デフォルトの名無しさん05/02/05 22:30:28
a = Foo.new
b = Foo.new
a.setBarBaz
b.deepCopy(a)
つうことじゃないのか
0956教えて君05/02/06 07:56:25
ExerbでApolloでつくった。やつは EXEに できますか。
0957& ◆6g4XpN.URU 05/02/06 08:02:05
Windows で RDtool(rdtool-0.6.16.tar)を解凍し
ruby setup.rb
しましたが、使えません。(インストールできない)
どうして

0958デフォルトの名無しさん05/02/06 08:12:12
>>956
できません
>>957
ruby は入れたか?
0959デフォルトの名無しさん05/02/06 08:57:45
>>957
raccが必要だったと思ったが、その辺どう?
0960デフォルトの名無しさん05/02/06 09:51:25
>>958
最近ではそういう仕様になってるのか?
昔のExerbでは、ちゃんとApolloをphi.soごと固められたはずだが
0961デフォルトの名無しさん05/02/06 10:59:48
alexandriaをインストールしてみたのですが
次のようなエラーが出て解決できません。
alexandriaのホームページへいってもわかりません。
なにがいけないのでしょうか?
Alexandria just crashed
-----------------------
Timestamp: 日 2月 06 10:50:40 JST 2005
Message: undefined method `map' for nil:NilClass
Backtrace:
/usr/lib/site_ruby/1.8/alexandria/book_providers.rb:146:in `update_priority'
/usr/lib/site_ruby/1.8/alexandria/book_providers.rb:142:in `initialize'
/usr/lib/site_ruby/1.8/alexandria/book_providers.rb:18:in `new'
/usr/lib/site_ruby/1.8/alexandria/book_providers.rb:18:in `new'
以下中略
/usr/bin/alexandria:10
Release: 0.4.0

Uname -a: Linux localhost.localdomain 2.6.9-1.667smp #1 SMP Tue Nov 2 14:59:52 EST 2004 i686 i686 i386 GNU/Linux
--
Please report this dump to '[email protected]' with some additional
information, such as the description of the crash and the steps to reproduce it
(if it's possible).
0962デフォルトの名無しさん05/02/06 14:31:58
>>957
インストールできないじゃ状況がよくつかめんが・・・。

raccを解凍して
> ruby setup.rb install
rdtoolを解凍して
> ruby setup.rb install
その後、rd/dot.rd2rcがないぞって怒られれたから
rdtoolのlibの下にあるdot.rd2rcをrd/にコピーした。
うちはそれで動いてるよ。
0963デフォルトの名無しさん05/02/06 14:41:36
>>960
いや、できるはずだが。
少し前のバージョンは問題なかった。
phi.so以外の拡張ライブラリのバイナリを突っ込んだらエラーになる場合はあるかも知れないが。
0964デフォルトの名無しさん05/02/06 15:11:47
>>961
とりあえず初心者の質問じゃないと思うので、できればAlexandriaの開発者とやりとりするか
そっちのMLに入って話を汁。でなきゃRuby本スレにでも行くべし。

エラーの意味としては、mapというメソッドを持ったオブジェクトが
入っている必要がある変数にnilが入ってしまっている。
あとは中身見ないとわからんだろう。ちなみに以下の条件は満たしているか?

Requirements
------------
Ruby >= 1.8.0
GNOME >= 2.6
Ruby/Amazon >= 0.8.3
Ruby-GetText >= 0.6.1
Ruby-GNOME2 >= 0.10.1 [*]

[*]: Required libraries are: Ruby/Libglade2, Ruby/Gnome2, Ruby/GdkPixbuf2
and Ruby/GConf2.
0965デフォルトの名無しさん05/02/06 16:16:44
>>964
ありがとうございます。
Requirementは、満たしております。
他で聞いて見ます。
0966デフォルトの名無しさん05/02/06 20:03:02
いまだにイテレータが理解できん。
0967デフォルトの名無しさん05/02/06 20:11:10
理解しなくいい。感じろ。感じるんだ。
0968デフォルトの名無しさん05/02/06 20:30:33
>イテレータ
わりとするり、と理解できた(ような気になった)漏れは特殊なのか。
0969& ◆or0XnlxUXQ 05/02/06 20:50:51
>>962
ありがとうございます。
ruby setup.rb install
の 「install」 が抜けていました。 ^^;
ところで、 ruby 1.8.2(Apollo Version) でも racc は 
別途インストールする必要があるでしょうか。

0970デフォルトの名無しさん05/02/06 22:33:38
>>969
俺が見た資料には「あったほうがよい」のような意味合いに書いて
あったな。実際は別途インストールしなきゃ動いてくれんかったが。
0971デフォルトの名無しさん05/02/06 23:34:46
>>968
説明読んでただけじゃよくわからなくて、
チュートリアルだかにあったコードをいじくってみて
「なーんだ、コールバックじゃん」とすぐに理解できたな。
0972デフォルトの名無しさん05/02/06 23:36:28
forで十分じゃんと割り切った俺は最強四天王の一角
0973デフォルトの名無しさん05/02/07 00:03:15
>>967
むぅ。それはまったくもってそのとおり。
0974デフォルトの名無しさん05/02/07 02:59:38
>>972
そりゃ使う側だろう…。eachメソッドが定義されていてそいつがイテレータを取るならば、
forメソッドが適用できるって事だ。each以外のイテレータはどうすんの?
イテレータを定義したりしない?(しないんだろうな)
0975デフォルトの名無しさん05/02/07 03:01:20
うわ、ごめんforメソッドじゃねえよ。for構文な、すまん。
0976デフォルトの名無しさん05/02/07 03:13:41
スクリプトごときでイテレータ定義している奴は負け組み
0977デフォルトの名無しさん05/02/07 09:43:02
スクリプトを「ごとき」とかいう認識でいる奴は負け組
0978デフォルトの名無しさん05/02/07 09:44:44
イテレータごときの定義になんだかんだケチ付ける奴は負け組
0979デフォルトの名無しさん05/02/07 11:30:35
新スレをッ!
0980デフォルトの名無しさん05/02/07 21:05:33
>>979
消費具合からみてここで医院で内科医?
http://pc5.2ch.net/test/read.cgi/tech/1106572657/
0981デフォルトの名無しさん05/02/08 00:45:13
JRubyでjava.util.Iteratorとかjava.util.Enumerationにeachを後付けして悦に入るも
調子に乗ってjava.sql.ResultSetにもeachを後付けしようとしてできない漏れは負け組
つーかヒネクレモノ
0982デフォルトの名無しさん05/02/08 03:03:59
Ruby初心者質問スレPart2
http://pc5.2ch.net/test/read.cgi/tech/1107799347/
レス数が950を超えています。1000を超えると書き込みができなくなります。