Ruby初心者スレッドPart4

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
オブジェクト指向スクリプト言語Rubyについての質問スレッドです。

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



#過去スレ
Ruby初心者質問スレPart1
http://pc5.2ch.net/test/read.cgi/tech/1100534824/

Ruby初心者質問スレPart2
http://pc8.2ch.net/test/read.cgi/tech/1107799347/

Ruby初心者質問スレPart3
http://pc8.2ch.net/test/read.cgi/tech/1125587131/



#本スレ
Rubyについて Part 18
http://pc8.2ch.net/test/read.cgi/tech/1133988248/



#関連スレ
RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/

【最高言語】 Rubyist Magazine創刊 【ルビま!】
http://pc8.2ch.net/test/read.cgi/tech/1094825807/
2デフォルトの名無しさん:2006/01/22(日) 20:21:24
#関連リンク
リファレンス
http://www.ruby-lang.org/ja/man/

RAA - Ruby Application Archive
http://raa.ruby-lang.org/

日本Rubyの会 公式Wiki - 日本Rubyの会Wiki
http://jp.rubyist.net/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

Matzにっき
http://www.rubyist.net/~matz/

<rubyXML/>
http://www.rubyxml.com/

Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/

#リンク切れ?
ruby-cvs
http://rrr.jin.gr.jp/rwiki?cmd=view;name=ruby-cvs
Ruby hotlinks 五月雨版
http://rrr.jin.gr.jp/~znz/samidare/
3デフォルトの名無しさん:2006/01/22(日) 20:24:13
スレタイ間違えた…吊って来る Пδorz
4デフォルトの名無しさん:2006/01/22(日) 20:30:48
まぁ、乙
5デフォルトの名無しさん:2006/01/22(日) 20:55:52
>3
生`

そして乙
6デフォルトの名無しさん:2006/01/22(日) 23:42:54
より汎用的ですばらしいタイトルだと思ったよ
7デフォルトの名無しさん:2006/01/23(月) 14:57:52
`mycmd`.each_line
でmycmdが存命中でもリアルタイムにeach_lineのループをまわすことってできないですか?
普通にやるとプロセス終わるまで溜め込んでますよね?
8デフォルトの名無しさん:2006/01/23(月) 14:58:40
>>7
無理。
そんなあなたにパイプ処理。
9デフォルトの名無しさん:2006/01/23(月) 14:59:46
>>7
popen とか open3 とか。
10デフォルトの名無しさん:2006/01/23(月) 15:30:33
コンソール上で、対話的にパスワードなんかのセンシティブな情報を入力させるとき、
STDIN.gets だとコンソール上に入力内容が表示されてしまいます。

コンソール上に表示させずにキーボードから1行入力してもらうのに
良い方法はないでしょうか?
11デフォルトの名無しさん:2006/01/23(月) 15:37:19
  print "password: "
  system("stty -echo")
  begin
    passwd = STDIN.gets.chomp
  ensure
    print "\n"
    system("stty echo")
  end
12デフォルトの名無しさん:2006/01/23(月) 15:59:16
ところでWindowsなんですけど、とか言いたくなる回答だな。
13デフォルトの名無しさん:2006/01/23(月) 16:04:41
スクリプトを実行させたときにコンソールを表示させないことって出来ますか?
rubyのバージョンは ruby 1.8.4 (2005-12-24) [i386-mswin32] です。
14デフォルトの名無しさん:2006/01/23(月) 16:11:23
>>2
RRRWiki自体がなくなってるから、そのruby-cvsへの
リンクは削った方が良さそう。
15デフォルトの名無しさん:2006/01/23(月) 16:25:13
>>13
rubyw.exe
16デフォルトの名無しさん:2006/01/23(月) 16:36:36
>>15
ありがとう。rubywってこのためのものだったんだ。
17デフォルトの名無しさん:2006/01/23(月) 18:12:44
>>12
標準で getpass が欲しいところだな。需要は結構あると思うんだけど。
18デフォルトの名無しさん:2006/01/23(月) 19:03:34
>>17
実装よろ。
19デフォルトの名無しさん:2006/01/23(月) 19:16:12
>>18
>>11 ので。
20デフォルトの名無しさん:2006/01/23(月) 19:32:39
>>12>>17 は、
>>11はWindowsじゃ動かないから標準で欲しい
という流れじゃなかったのか?
21デフォルトの名無しさん:2006/01/23(月) 19:35:36
>>20
そーゆー事は試してから書こうな?
22デフォルトの名無しさん:2006/01/23(月) 19:46:34
20 ではないけど…。
>>11 のは Windows じゃ動かないですよ。
23デフォルトの名無しさん:2006/01/23(月) 19:47:13
C:\>ruby passwd.rb
passwd.rb:2:in `system': No such file or directory - stty -echo (Errno::ENOENT)
from passwd.rb:2
password:
C:\>
24デフォルトの名無しさん:2006/01/23(月) 19:47:37
> password: aaa

と、入力した文字列が表示されてしまうます。
25デフォルトの名無しさん:2006/01/23(月) 20:07:05
>>10
Win9x系だと以下で出来る。

def getpass_win9x
 print "\x1b[8m" # 文字を透明にする
 k = gets
 print "\x1b[0m" # 元に戻す
 return k
end

元に戻さないと黒いままになるから
実際は例外処理して元に戻す方が良いかな。

で、Win2000やXPはやり方がさっぱり分からん…
26デフォルトの名無しさん:2006/01/23(月) 20:10:26
Python の getpass.py を見ると、 Windows の場合は msvcrt module を、
Macintosh の場合は EasyDialogs.AskPassword とかいうのを使っているみたいだけど、
俺にはさっぱり意味がわからない。
27デフォルトの名無しさん:2006/01/23(月) 20:44:09
UNIX や Cygwin のように getpass(3) がある環境ならこんな感じでいけるかな?

#include <ruby.h>
#include <pwd.h>
#include <unistd.h>
static VALUE rb_getpass(VALUE self, volatile VALUE prompt) {
Check_Type(prompt, T_STRING);
return rb_str_new2(getpass(RSTRING(prompt)->ptr));
}
Init_getpass() {
rb_define_method(rb_mKernel, "getpass", rb_getpass, 1);
}
28デフォルトの名無しさん:2006/01/24(火) 00:55:47
出来ません…

require 'tk'
def anime
@cw.delete("tag")
for i in 0..39
for j in 0..79
if @c[i][j,1] == "*"
TkcRectangle.new(@cw,j*5+100, i*5+100, j*5+104, i*5+104, "fill" => "darkgreen", "tags" => "tag")
end
end
end
for i in 0..39
@d[i] = " "*80
for j in 0..79
end
end
for i in 0.. 39
@c[i] = @d[i]
end
Tk.after(1,proc{anime})
end
@rw = TkRoot.new{title("Lifegame")}
@cw = TkCanvas.new(@rw, "width" => 600, "height" => 400, "background" => "lightpink") {pack}
TkcRectangle.new(@cw, 100, 100, 500, 300, "fill" => "white", "width" => "2")
@c = Array.new; @d = Array.new
for i in 0..39
@c[i] = " "*80
end
29デフォルトの名無しさん:2006/01/24(火) 00:56:52
@c[ 3][0,40] = " ** "
@c[ 4][0,40] = " * * "
@c[ 5][0,40] = " ** * "
@c[ 6][0,40] = " ** * "
@c[ 7][0,40] = " * *** * "
@c[ 8][0,40] = " ** ** * "
@c[ 9][0,40] = " ** * "
@c[10][0,40] = " * ** "
@c[11][0,40] = " * "

anime

Tk.mainloop
30デフォルトの名無しさん:2006/01/24(火) 05:27:50
RubyGardenにパスワード入力あった
http://www.rubygarden.org/ruby?PasswordWithoutEcho
31デフォルトの名無しさん:2006/01/24(火) 10:02:00
実はやり方はわかってるんだが、人に頼る一方で適当なこと言うな、という程度のつもりだった。
真面目に調べさせてしまってなんかスマン。
32デフォルトの名無しさん:2006/01/24(火) 11:02:00
>>22
WinXPでmswin32版のrubyでは>>11が動くみたい。

C:\Temp>ruby -v
ruby 1.8.1 (2003-12-25) [i386-mswin32]

C:\Temp>ruby
  print "password: "
  system("stty -echo")
  begin
    passwd = STDIN.gets.chomp
  ensure
    print "\n"
    system("stty echo")
  end
  puts passwd
^D
password:              ←ここで"12345678"と入力したが表示されず
12345678
33デフォルトの名無しさん:2006/01/24(火) 12:14:28
別口でcigwinでも入れてんじゃネ?
34デフォルトの名無しさん:2006/01/24(火) 13:22:50
cygwin、ね。ほぼそれで間違いあるまい。
35デフォルトの名無しさん:2006/01/24(火) 13:50:01
テキストファイルのそれぞれの行の先頭に行番号を挿入するには、どうすれば良いでしょうか?
36デフォルトの名無しさん:2006/01/24(火) 14:01:24
ruby -ne 'puts "#$. #$_"' /path/to/file
37デフォルトの名無しさん:2006/01/24(火) 14:27:24
>>36
それだとファイルに挿入したことにならないぞ。
シェル上から/path/to/fileにリダイレクトしたらファイル壊れるし。
それにputs使ってしまったらオリジナルファイルにあった改行コードを引き継げない。
38デフォルトの名無しさん:2006/01/24(火) 14:34:11
ん? 元のファイルを上書きたいのか?初めからそう書け。
ruby -ni.bak e 'puts "#$. #$_"' /path/to/file
改行コードをどうこうしたいなら$/をいじりなさい。
39デフォルトの名無しさん:2006/01/24(火) 15:01:27
>>36 >>37 >>38
35です。どうもありがとうございます。

>改行コードをどうこうしたいなら$/をいじりなさい。

勉強してみます。

5桁で0でパディングしたいのですが、これだけ教えて下さい。今のところ、こんな感じでしか書けないので。

while gets
printf("%05d: ", $.)
puts $_
end
40デフォルトの名無しさん:2006/01/24(火) 15:11:35
ほいよ。
ruby -ni.bak -e 'puts "%05d #$_" % $.' 10.gp
41デフォルトの名無しさん:2006/01/24(火) 15:12:08
>>38
puts じゃなくて print とかにすれば改行コード保存されるよね。
42デフォルトの名無しさん:2006/01/24(火) 15:12:08
10.gpじゃなくて/path/to/fileね (汗)
43デフォルトの名無しさん:2006/01/24(火) 15:21:35
35です。入門者なので、マニュアルと睨めっこしているところですが、頑張って ruby 書けるようになりたいです。どうもありがとうございました。
44デフォルトの名無しさん:2006/01/24(火) 15:58:38
a=[1,2,3] として、a.size と a.length の違いって?
45デフォルトの名無しさん:2006/01/24(火) 16:00:54
同じ
46デフォルトの名無しさん:2006/01/24(火) 16:08:23
初心者スレではワンライナで答えるのやめようぜ
#$とか禁止
47デフォルトの名無しさん:2006/01/24(火) 16:12:30
>>46
そう思う人が、非ワンライナで#$とか使わない回答もしてあげればいいだけかと。
48デフォルトの名無しさん:2006/01/24(火) 16:33:11
初心者相手の言動としては不適切でないかい。

回答は個々が独立して初心者向けに適当であるべきだと思う。
49デフォルトの名無しさん:2006/01/24(火) 17:37:27
質問の仕方にもよるわな
50デフォルトの名無しさん:2006/01/24(火) 17:43:56
質問があまりに初歩的すぎたのかも知れませんが、ワンライナでの書き方、参考になったです。
51デフォルトの名無しさん:2006/01/24(火) 17:47:47
>>46 >>48
なんで不適切なのか、私を含めた初心者のために説明してもらえませんか?
52デフォルトの名無しさん:2006/01/24(火) 17:49:15
まあまあ、臨機応変にいこうよ。
53デフォルトの名無しさん:2006/01/24(火) 18:07:38
当人がいいならいいんじゃね?
こういうこともあるので、>>47に同意。
54デフォルトの名無しさん:2006/01/24(火) 21:42:26
>>46>>35 に対して自分の思う初心者向け適当な回答を挙げるように。
55デフォルトの名無しさん:2006/01/24(火) 21:53:18
ええっと、>>35 & >>50 ですが、>>51は他の人です。お間違えなきよう <(_ _)>
56デフォルトの名無しさん:2006/01/24(火) 23:57:57
>>28-29
お願いします。lifegameを表示させたいのですが、
まわりの部分しか表示されません。。
どこが悪いのでしょうか??orz
57デフォルトの名無しさん:2006/01/25(水) 00:31:12
"0x80000000" を 32bit 符号付整数と解釈して -2147483648 に変換したいんですけど
どうすればいいですか?
"0x80000000".hex だと 2147483648 になってしまいます。
58前スレ951:2006/01/25(水) 03:29:03
前スレが流れてしまったので再度質問させて頂きます

Cookieの受け渡しをCGIクラスを使って行いたいのですが
enctypeをmultipartにすると動作しません
どこが間違っているのでしょうか?

環境:
Windows 2000
ruby 1.8.2 (2004-12-25) [i386-cygwin]
AN HTTP Daemon Version 1.42n
--
require "cgi"
cgi = CGI.new
cookie1 = CGI::Cookie::new({ 'name' => "name", 'value' => ["value"], 'expires' => Time.now + 1000 })
cgi.out({"cookie" => [cookie1]}){""}

print "Content-type: text/html\n\n"
p cgi.cookies['name']
print <<EOF
<html>
<body>
<form action=#{File.basename(__FILE__)} method=post enctype=multipart/form-data>
<input type=submit value=multipart>
</form>
<form action=#{File.basename(__FILE__)} method=post enctype=text/plain>
<input type=submit value=text>
</form>
</body>
</html>
EOF
--
※少し修正
59デフォルトの名無しさん:2006/01/25(水) 10:02:50
>>58
cgi.pmがそういうものです。multipartの処理を自分で書き足すか、他使いましょう。
60デフォルトの名無しさん:2006/01/25(水) 10:22:50
>>57
str = "0x80000000" とすると、例えば、
[str.hex].pack('l').unpack('l')[0]
とかでどないだ。
61デフォルトの名無しさん:2006/01/25(水) 13:34:21
>>59
Rubyでも cgi.pm 使ってるのか? おぬしは。
62デフォルトの名無しさん:2006/01/25(水) 13:59:14
そういう動作になる理由が「cgi.pmと同じ結果になるようにcgi.rbを作ったから」ってことだろ。
63デフォルトの名無しさん:2006/01/25(水) 15:59:20
CGI.pm じゃない?
64デフォルトの名無しさん:2006/01/25(水) 17:23:05
そういえば、モジュールの大文字小文字ってバラバラだよな。
全部小文字とか先頭1文字だけ大文字とか統一してくれれば書くの楽なのに。
あるいは大文字小文字関係なくファイル読み込むとか。
65デフォルトの名無しさん:2006/01/25(水) 19:00:54
モジュールやクラスの命名規則については [ruby-list:12517] あたりかな。
ファイル名は全て小文字で単語間は '_' 、だと思うけど、どっかで議論されてたっけ?

RoR のファイル名の命名規則がまた変態的だったような。
66デフォルトの名無しさん:2006/01/25(水) 20:25:11
議論っていうか、逆らう必要なんか全然ない規則だしなあ、それ
67デフォルトの名無しさん:2006/01/25(水) 20:25:50
>>60
おぉありがとうございます。uint32としてpackしてsint32として取り出すって
ことですね。
68デフォルトの名無しさん:2006/01/25(水) 20:58:49
>>67
sint32としてpackしてsint32として取り出してるんだけどな。
まあ、packする方は32bit幅ならなんでもよくて、unpackするときに決まる。
69デフォルトの名無しさん:2006/01/25(水) 21:01:50
>>64
FileUtilsはなんでFileutilsじゃないんだろうと思ったことはある
70デフォルトの名無しさん:2006/01/25(水) 23:13:28
>>69
Uは大文字の方がしっくりくるけどなあ。
71デフォルトの名無しさん:2006/01/26(木) 00:32:56
>>69 file utils だからだろ,きっと.新語を作る気は無い,と.
72デフォルトの名無しさん:2006/01/26(木) 00:40:10
>>64
win32apiとwin32oleはホントなんとかしてほしい。
73デフォルトの名無しさん:2006/01/26(木) 01:21:32
>>71
じゃあTempFileとかKConvとかにしろよ!!!!11!!

Cgi.newじゃなくCGI.newじゃないと動かないのもムカつくお年頃な俺をなんとかしてくれ
ERBが全部大文字なのもやだ。お前はERbだろう。

いや最後1文字だけ小文字ってのもそれはそれで統一性がないとか俺は文句言いそうだが(w
74デフォルトの名無しさん:2006/01/26(木) 03:50:58
>>73
そう、お前は全く正しい。

さあ、 ruby-list へ Go だ!
7558:2006/01/26(木) 11:26:26
>>59
ありがとうございます

cgi.rbの代わりでNarf、Rweb、(Nora)があるのがわかりました
バージョンが低いのが気になるけども頑張って勉強してみます

"これが定番だからこれ使っとけ"みたいなのがあったら教えてください


自分で処理を書くのは俺には厳しいです。 ごめんなさい
76デフォルトの名無しさん:2006/01/26(木) 12:07:52
>>75
enctype="multipart/form-data; boundary=hoge"
にしたら動いたけど。
77デフォルトの名無しさん:2006/01/26(木) 21:44:14
Webフレームワークとかの一覧(当然他にもあるが主要なもの)。
http://takahr.dhis.portside.net/cgi-bin/rwiki.cgi?cmd=view;name=Ruby%3A%3AWeb%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA
78デフォルトの名無しさん:2006/01/27(金) 01:44:04
http://rubyforge.org/projects/rubyinstaller/

 installerダウンロード不可能じゃない?

だれかアプロダにミラー頼んます。
7958:2006/01/27(金) 06:50:09
>>76
おおっ、ホントだ。
デフォルトのboundaryの値に問題がある???
>>77
そんなにあるんですか…。
80デフォルトの名無しさん:2006/01/28(土) 01:08:21
複数行にわたる文字列を、1行ずつに分割するにはどうすればいいですか。
str.split(/$/) だと、改行文字の前で分割されてしまいました。
str.split(/\n/)だと、改行文字が消えてしまいました。
81デフォルトの名無しさん:2006/01/28(土) 01:28:38
>>80 str.to_a.何でそれでいいかは,str.each {|s| p s} っていうことで.
Enumerable#to_a ね.
82デフォルトの名無しさん:2006/01/28(土) 01:57:38
>>80
splitを使うなら str.split(/^/) かな。
83デフォルトの名無しさん:2006/01/28(土) 08:52:34
>>81,82
String#to_a、String#split(/^/) のどちらもうまく動作しました。
どうもありがとうございました。
84デフォルトの名無しさん:2006/01/28(土) 18:38:15
httpでgifやjpegをダウンロードするスクリプトが組みたいのですが、
下記の方法ではうまくいきませんでした。テキストファイルであれば
問題ない様ですが、画像などのファイルではファイルが壊れて
しまいます。どこが問題か教えていただけないでしょうか。
環境はWinXP、Riby1.8.4 i386-mswin32です。

require 'net/http'
require 'uri'

uri = URI.parse("http://www.google.co.jp/intl/ja_jp/images/logo.gif")
f = File.open('logo.gif', 'w+')
Net::HTTP.start(uri.host, 80) { |http|
http.request_get(uri.path) { |response|
response.read_body { |body|
f.puts body
}}}
f.close
85デフォルトの名無しさん:2006/01/28(土) 18:44:41
>>84
Windows環境でバイナリファイルを出力するなら、
File.openの引き数を「'w+b'」にしてバイナリモードにするのでは?
86デフォルトの名無しさん:2006/01/28(土) 18:54:02
>>85 ありがとうございます。
'w+'を'w+b'にして実行してみましたが同じでした。
'w+'でも'w+b'でも、IrfanViewなどの壊れた画像ファイルを
表示可能なViewerで見ると、サイズは正しいのですが、絵と
しては壊れたものが表示されます。テキストエディタなどで
無理やり開いてみると、最初のヘッダ(の一部分?)は正しい
様です。
87デフォルトの名無しさん:2006/01/28(土) 19:10:57
f.putsよりf.writeのほうがよさげな希ガス
8884:2006/01/28(土) 19:28:31
>>85 >>87 ありがとうございました。
'w+'->'w+b'とf.puts->f.writeを両方変更することにより、
うまくいきました(片方だけではだめでした)。
しばらく、この手のプログラミングから離れていたので、
改行文字やテキスト・バイナリの処理の事がすっぽり
抜け落ちていました・・・。
89デフォルトの名無しさん:2006/01/28(土) 20:11:25
つか、過去に出てた記憶があるネタだな。
しかも、それも誘導されてた記憶がある。
90デフォルトの名無しさん:2006/01/28(土) 21:56:42
「print使うよりputsがよい」ってのもどっかで聞いた

「print "〜\n" 使うより puts "〜" のほうがよいっていうか若干マシ」の略なんだと思うが略され方が危険だ
91デフォルトの名無しさん:2006/01/28(土) 22:32:48
むしろ「どういう状況のために」が略されているのがよくないんだろう。
92デフォルトの名無しさん:2006/01/28(土) 23:01:53
python で  if __name__ == "__main__" に相当するものは
Rubyにありますか?
93デフォルトの名無しさん:2006/01/28(土) 23:20:38
用途によるが
if __FILE__ == $0
じゃね?
94デフォルトの名無しさん:2006/01/28(土) 23:56:01
>>88
あぁ、ごめんなさい。
putsを使ってることに気付いてませんでした。
95デフォルトの名無しさん:2006/01/29(日) 08:56:30
正規表現で複数行のマッチを行いたいのですがうまくいきません。
以下の例の#2の行で{}まで対応させたいのですがどこが間違ってるでしょうか。


text = "
main()
{
}
"
p text.grep(/main\(\).*?/m) # 1
p text.grep(/main\(\).*?\{.*\}/m) # 2

結果
["main()\n"]
[]
96デフォルトの名無しさん:2006/01/29(日) 11:37:15
grepはEnumerableだから、文字列に適用すると1行ずつ取り出してマッチをチェッ
クする。したがって複数行マッチしようにも出来ない。

ふつうに文字列で正規表現マッチさせるなら match とか scan とかを使うべし。
text.scan(/main\(\).*?\{.*\}/m) # => ["main()\n{\n}"]
97デフォルトの名無しさん:2006/01/29(日) 13:42:37
文字列からクラスオブジェクトを取得するにはどうしたらいいですか。
例えば "String" から Stringクラスオブジェクトを取得するということです。
JavaでいうとClass.forName()にあたるものです。
98デフォルトの名無しさん:2006/01/29(日) 13:45:46
>>97
"string".class
99デフォルトの名無しさん:2006/01/29(日) 13:58:33
>>98
そうじゃなくて "Array" から Array を、"File" から File を取得するということです。
>>98 だと "Array" からも "File" からも String が取れてしまいます。
100デフォルトの名無しさん:2006/01/29(日) 14:02:08
よくわかんないけど
eval("Array") #=> Array
でよくない?
101デフォルトの名無しさん:2006/01/29(日) 14:16:36
Kernel.const_get("String")
102デフォルトの名無しさん:2006/01/29(日) 14:32:04
103デフォルトの名無しさん:2006/01/29(日) 15:34:45
>>100
evalはなんでも実行してしまってちょっと危険なので、今回は避けたいです。

>>101
それでいけそうですが、モジュール名も含めた場合はエラーとなりました。
Kernel.const_get("File::Stat") #=> NameError
104デフォルトの名無しさん:2006/01/29(日) 15:44:19
>103
102のリンクから辿ってruby-list:40030を見れ。
"File::Stat".split(/::/).inject(Object){|c,name| c.const_get(name)} # => File::Stat
ちょっと面倒だな。
10595:2006/01/29(日) 15:51:33
ありがとうございます。 > 96

引き続き質問ですが
gsubも同じことなんですね。
置き換えを行いたいときはどうすればよいでしょうか。
106デフォルトの名無しさん:2006/01/29(日) 16:09:40
いや gsub は Sring のメソッドだからふつうに行けるよ。
107デフォルトの名無しさん:2006/01/29(日) 16:27:56
File.open( "test.dat", "r" ) do |file|
file.each do |line|
a,b,c,d = line.chomp.split( /<>/ )
end
end

ファイルから読み込む際、a,b,c,dそれぞれ配列の形で読み込みたいのですが、
どうしたらいいでしょうか?Arrayをいろいろ試してみたのですがうまく行きません・・・
108デフォルトの名無しさん:2006/01/29(日) 16:31:22
> a,b,c,dそれぞれ配列の形で読み込みたい
の意味がわからん。
どういう入力ファイルだったらどうなって欲しいという例をキボン
109デフォルトの名無しさん:2006/01/29(日) 16:40:41
分かりにくくてごめんなさい。
a<>..<>..<>..
b<>..<>..<>..
c<>...
とあって、a[0]にa,a[1]にb...となって欲しいのですが・・・
110sage:2006/01/29(日) 17:12:05
x = 0

Thread.start{
while true
x = x + 1
end
}

gets

print x

期待の動作:
 xが無限ループ中で加算され続ける。
コンソールから入力を受けると、その次点でのxの値が表示される。

問題:
 xが198以上の値にならない。なぜでしょう?

環境:ruby 1.8.4 (2005-12-24) [i386-mswin32]
ruby -le 'print defined?(Thread)' → constant
111デフォルトの名無しさん:2006/01/29(日) 17:15:01
上げてしまいました。すみません。
112デフォルトの名無しさん:2006/01/29(日) 17:53:13
rubyのスレッドは、Cレベルで停止してしまう処理について無力です。
つまり、メインスレッドがgetsで待っている間、サブスレッドも停止しているのです。
113デフォルトの名無しさん:2006/01/29(日) 18:00:30
ちなみに、これはWindows版のみの症状。
UNIX版を使えば期待した動作をする。
114デフォルトの名無しさん:2006/01/29(日) 18:21:06
>>104
そういうことですか。どうもありがとうございます。
inject()はわかりにくいので、愚直にeach()のほうをつかいます。

>>102
「これを思い出した」じゃなくて「これを読め」と書いてあるとうれしいです。
ただのオフトピかと思った。
115デフォルトの名無しさん:2006/01/29(日) 18:26:41
>>109
その説明でもわからん。

A1<>A2<>A3<>A4
B1<>B2<>B3<>B4
C1<>C2<>C3<>C4

とあったとき、

arr1 = ['A1', 'B1', 'C1']
arr2 = ['A2', 'B2', 'C2']
arr3 = ['A3', 'B3', 'C3']
arr4 = ['A4', 'B4', 'B4']

にしたいということ?
116デフォルトの名無しさん:2006/01/29(日) 18:33:03
arr Array.new()
arr[1]=[A1,B1,C1,...]
arr[2]=[A2,B2,C2,...]
arr[3]=[A3,B3,C3,...]
arr[4]=[A4,B4,C4,...]
としたいです。何度もすみません。
117デフォルトの名無しさん:2006/01/29(日) 18:53:46
…2chのスレのdatを1レスごとに配列にしたいとかつまりはそういうことか?

arr[レス番] = [ 名前, メール欄, 投稿日, レス内容 ]
118デフォルトの名無しさん:2006/01/29(日) 19:09:22
はい、そんな感じです。
119デフォルトの名無しさん:2006/01/29(日) 19:15:19
arr = []
File.open( "test.dat", "r" ) do |file|
file.each do |line|
arr.push(line.chomp.split(/<>/))
end
end
120デフォルトの名無しさん:2006/01/29(日) 19:32:17
なるほど!出来ました。ありがとうございます!m(_ _)m
121デフォルトの名無しさん:2006/01/29(日) 21:32:44
>>103
Rails環境なら、
"File::Stat".constantize
だけでOK
122110:2006/01/29(日) 22:31:02
>>112
>>113
 ありがとうございます。
 windows版はthread関係の動作がunix系と異なるという情報は
持っていましたが、内容を理解していませんでした。
 今後は気をつけたいと思います。
123デフォルトの名無しさん:2006/01/30(月) 14:13:01
RubyGemsについてです。

システムにインストールされているrubyとgemを使って、ホームディレクトリ以下にGemsのパッケージをインストールしようとしています。

http://docs.rubygems.org/read/chapter/11#page56
ここを見て ~/.gemrc を設定し、

% gem install rake
Attempting local installation of 'rake'
Local gem file not found: rake*.gem
Attempting remote installation of 'rake'
Updating Gem source index for: http://gems.rubyforge.org
Successfully installed rake-0.7.0
Installing RDoc documentation for rake-0.7.0...

となり、インストールは正常に終了したようです。

しかしいざrakeを実行するとエラーが出ます。

% ./rake
/usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:204:in `report_activate_error': Could not find RubyGem rake (> 0) (Gem::LoadError)
from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:141:in `activate'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:37:in `require_gem_with_options'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:31:in `require_gem'
from ./rake:17

どうすれば正しく動作しますか ?

% ruby -v
ruby 1.8.2 (2004-12-25) [i386-freebsd6]
% gem -v
0.8.11
124デフォルトの名無しさん:2006/01/30(月) 16:10:43
>>121
それ、気持ち悪いなあ。Stringクラスにもたせる機能じゃないだろ。
ふつーにユーティリティ関数じゃだめなんだろうか。
125デフォルトの名無しさん:2006/01/30(月) 18:01:29
まーそれは好みだな。別に気持ち悪くない。
126デフォルトの名無しさん:2006/01/31(火) 05:28:38
これ、邪道でしょうか。

class String
 def &(s)
  self + s.to_s
 end
end
127デフォルトの名無しさん:2006/01/31(火) 06:24:44
邪道とは言えないけどオススメは出来ない
組み込みクラスの再定義は、読む側からすると戸惑いのもとになるから

使うなら、きちんと明記しておいた方がよさそう
128デフォルトの名無しさん:2006/01/31(火) 07:57:29
>>127
これ、よく言われるけど、グローバルスコープの(Kernelクラスの?)
関数を定義するのと同じことじゃないのかと思うんだけど、
そういう解釈は間違ってる?
129デフォルトの名無しさん:2006/01/31(火) 12:19:19
>>128
いいんじゃない?

人に迷惑かからなければ、好きなようにソース書いて。
130デフォルトの名無しさん:2006/01/31(火) 12:26:20
いや、そういうコメントがほしいんじゃなくて

組み込みクラスの再定義が推奨されないのは知っているのだが、
そこだけ取り上げられるのはなんでだ?と。コードの見た目で
言うならObjectクラス(だよね?)のメソッドを定義するのと
似たようなもんじゃないのかと思うんだけど。

こっちも推奨しないって言ってくれた方がすっきりするってこと。
131デフォルトの名無しさん:2006/01/31(火) 12:31:48
その辺は誰もが分かってるので、誰も何も言わない。
132デフォルトの名無しさん:2006/01/31(火) 12:32:57
>>126
「&」という名前にしなければならない理由は?
もし違う名前でいいなら、そのほうがいいと思う。
133デフォルトの名無しさん:2006/01/31(火) 13:43:41
ASK = "ask"
NUM = "0"
while NUM != "3"
while ASK != ASK.upcase
puts "もっと大きな声で話してくださいな。"
ASK = gets.chomp
end
if ASK == "BYE"
puts "はぁ…?"
NUM = (NUM.to_i + 1).to_s
ASK = gets.chomp
else
puts "いやぁ、"+(1950+rand(22)).to_s+"以来ありませんよ。"
NUM = "0"
ASK = gets.chomp
end
end
puts "ハイさようならー。"
----------------------------
ttp://www1.tf.chiba-u.jp/~shin/tutorial/index.rb?Chapter=06

「BYE」と3回連続で入力しなければ終了できないようにしたいのですが、
「BYE」→「BYE」→「fweajijifuji」→「BYE」→「fweajijifuji」
で終了してしまいます(他のパターンで終了してしまうことも…)。
もしよろしければ助言をいただけないでしょうか。

それと「warning: already initialized constant 〜」
という文面がよく出るのですが、これは仕様なんでしょうか。
134デフォルトの名無しさん:2006/01/31(火) 13:56:05
・「変数」は小文字で始まります
・「定数」は大文字で始まります。
・「定数」に二度以上代入するとワーニングが出ます
135デフォルトの名無しさん:2006/01/31(火) 14:34:32
先生!できました!

STDIN.inject(0) {|num, line|
case line.chomp
when "ASK"
puts "いやー、" + (1950 + rand(22)).to_s + "年以来ないねー!"
0
when "BYE"
if num < 2
puts "はぁ〜?"
num + 1
else
puts "ハイさようならー"
break
end
else
puts "は?! もっと大きな声で話しておくれ、坊や!"
0
end
}
136デフォルトの名無しさん:2006/01/31(火) 14:44:51
いきなり inject 使いこなすような子は生徒と認めません!
137デフォルトの名無しさん:2006/01/31(火) 14:57:57
caseの使い方もやらしいな
138デフォルトの名無しさん:2006/01/31(火) 15:56:46
inject自体は別にいいんだけど、その使い方ははっきりいって下手糞だな。
条件分岐の末端末端でinjectの返り値を書くことが「暗」に求められてるため、
バグを生みだすリスクばかりが大きくなる。
139デフォルトの名無しさん:2006/01/31(火) 16:25:57
ループ構造だってのも見て全然わからんしな

というかそのへん含めたただの嫌がらせだろう(w
140デフォルトの名無しさん:2006/01/31(火) 16:39:43
変数を大文字で書いちゃうような人にはRubyコミュニティは冷たい
141デフォルトの名無しさん:2006/01/31(火) 18:33:42
Rubyでエロゲ作るっていったらどの程度の質のまで作れる?
ファミコン並みか?
ガッコでRuby習ってんだが、全然使えんと思う
142デフォルトの名無しさん:2006/01/31(火) 18:37:12
143133:2006/01/31(火) 20:35:41
ask = "ask"
n = [0]
while n[0] != 3
while ask != ask.upcase
puts "もっと大きな声で話してくださいな。"
n[0] = 0
ask = gets.chomp
end
if ask == "BYE"
n[0] = n[0] + 1
if n[0] != 3
puts "はぁ…?"
ask = gets.chomp
end
else
puts "いやぁ、"+(1950+rand(22)).to_s+"以来ありませんよ。"
n[0] = 0
ask = gets.chomp
end
end
puts "やったできたー!"*50
puts "助言ありがとー!"*40
puts "ありがとー"*30
puts "がとー"*20
puts "とー…"*10
puts "変数は小文字じゃなきゃだめとかホント助かりました。"
144デフォルトの名無しさん:2006/01/31(火) 21:02:53
…模範解答とか「あとは組み立てるだけでOKなヒント」とかないんだな、>>133のページ。
>>143を見たら多分泣くぞ。
145デフォルトの名無しさん:2006/01/31(火) 21:19:05
count=0
ask=''

while ask=gets.chomp
  if ask == 'BYE'
  then
    year=(1950+rand(21)).to_s
    puts "いやー、"+year+ "年以来ないねー!"
    count = count + 1
  else
    puts "は?! もっと大きな声で話しておくれ、坊や!"
    count = 0
  end

  if count == 3
  then
    exit
  end
end
146デフォルトの名無しさん:2006/01/31(火) 21:23:03
あ、exitってまだ使ったら駄目?
147デフォルトの名無しさん:2006/01/31(火) 21:27:04
>>145
そこまで書いて
 while count < 3
という発想がなぜ出ない
148デフォルトの名無しさん:2006/01/31(火) 21:33:46
「永遠にループ+脱出条件」のほうがいいと思う俺は古い人間なんだろうなあ。
この場合、countでループ作るのってなーんか意味違う気しねえ?
149133:2006/01/31(火) 21:40:18
>>144
え…もしかして、こういう「答え」は書かないほうがよかったってパターン?(汗
150133:2006/01/31(火) 22:06:37
…ではないか。文脈からして。スマソ
151デフォルトの名無しさん:2006/02/01(水) 00:13:55
require "tk"

a = TkText.new{pack}

Thread.start do
 while line = gets
  a.insert 'end', line
 end
end

Tk.mainloop

上のプログラム実行中、Tk のテキストウィジェット内の文字列を
マウスでドラッグして選択すると、それ以降 gets が
入力を取りこぼしてしまうようです。
(普段 state 'disable' しておいて書き込み時のみ 'normal' にしても同じ)
どのように書けばいいでしょうか?
152127:2006/02/01(水) 00:30:06
>>128 >>130
俺的には両方とも推奨しないけど、それはさておき

トップレベルで関数を定義した場合には、レシーバを省略したメソッドのように
書けるからじゃないかな。この書き方はRubyでは自然な書き方。

>>131
「誰もが分かってる」というほど簡単な話でもないと思うが
なによりここは初心者スレだ

>>141
つRuby/SDL
エロゲ程度なら好きなだけ作れる
153デフォルトの名無しさん:2006/02/01(水) 03:40:13
>>132
'hoge' + a.to_s + 'hage' + b.to_s + ...

といった時に

'hoge'&v&'hage'&b&...

と短く書けるかな、と。
記号一文字なら何でも良かったんですが
分かり易い事と、String#&というメソッドが無いようでしたので。

(ruby 1.8.4 (2005-12-24) [i386-mswin32])



…format()やprintf()がしっくりこないだけかも。
154デフォルトの名無しさん:2006/02/01(水) 03:51:01
>>153
"hoge#{a}hage#{b}" じゃダメなのか
155デフォルトの名無しさん:2006/02/01(水) 04:20:24
>>154
出来ました。式展開て文字列化ちゃんとしてくれるんですねorz
式展開の中にto_s書いてた自分が恥ずかし…
156デフォルトの名無しさん:2006/02/01(水) 11:43:04
>>151
ちなみに環境は?
157151:2006/02/01(水) 12:02:04
>>156
書き忘れてました。cygwin の ruby1.8.4 と tk8.4 です。
最初は socket から gets していて動作が変だと気付き、
最小の構成があのプログラムになり、再現性100%です。
unix だとそのままで動くのでしょうか…?
GUI のループの中で socket からデータを得る一般的な書き方ってどんなでしょう。
158デフォルトの名無しさん:2006/02/01(水) 12:58:01
>>157
select
159151:2006/02/01(水) 14:07:03
>>158
よくわからないのでもう少しお願いできますか?
別の Thread としてではなく、Tk のタイマーを使うということでしょうか?
TkAfter のプロセスとして select を指定し、一定時間ごとにタイムアウトありで呼ぶという理解であってるでしょうか。
160デフォルトの名無しさん:2006/02/01(水) 14:21:51
>>159
つか、157で
>GUI のループの中で socket からデータを得る一般的な書き方ってどんなでしょう。
と書いてるから、ループの中でsocketに対してselectしときゃいいんじゃ、と思っただけなんだが。
一定時間ごとにタイムアウトありで、というのはその通り。
161151:2006/02/01(水) 14:42:58
あ、GUI ループそのものに指定するのか…。
なるほどと思ったのですがそのやり方がわからないので、また調べてみます。
現状、Thread を廃止し、タイマーを使って select を試してみたところ 151 の症状は出なくなりました。
どうもありがとうです。
162デフォルトの名無しさん:2006/02/02(木) 19:21:37
a,bが互いな素であるときaxをbで割ったあまりが1になるようなxを1つ出力するプログラムを書きなさい。
という課題が出ました。
互いに素というのは作れるのですが、後半部分ができません。
だれか教えてください。お願いします。
163デフォルトの名無しさん:2006/02/02(木) 19:24:12
>>162
#関連スレ
RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/
164デフォルトの名無しさん:2006/02/03(金) 09:59:56
配列 arr の要素 obj を、arr の最後尾に入れ直す場合、普通は

arr.push(arr.delete(obj))

とすると思うんだけど、arr のサイズがかなり大きい場合、
もっと高速に出来る方法が無いかな、と思っているんだけど、どうかな?

細かい条件は、

* arr のサイズはかなり大きくなることを仮定すべき
* arr 中の各オブジェクトには、絶対に重複は無い
* arr 中に obj は必ず存在する
* 結果的に「該当のオブジェクトの順序を最後尾にする」という事が
効率的に、かつ高速に実現できるのなら、単独の Arrayだけでなく、
他の補助用のオブジェクトを併用しても良い
(つまり、そのために補助用に Hashなどを使っても良い)
また、事前に arr にデータを入れる時点(Array#push)で、何かの工夫があってもよい。

という事なんだけれども。
165デフォルトの名無しさん:2006/02/03(金) 15:30:15
しかしArrayである必要があり、独自クラスでは駄目、と?
166デフォルトの名無しさん:2006/02/03(金) 15:42:00
英語がダメだとRubyを扱うのは難しいのでしょうか
日本語化パッチを探しているのですが、なかなか見つからないので…
167デフォルトの名無しさん:2006/02/03(金) 15:44:36
>>166
どこを日本語化したいの?
168デフォルトの名無しさん:2006/02/03(金) 16:00:49
>>167
プログラムもほぼ無知な初心者ですみません
とりあえずver1.8.4を落としたのですが、エディタも含めた中身が全て英語だったので何がなにやら…
(初心者インストールガイドの情報が1年前のものなのか、書かれている内容とリンク先のファイルが違ったりしていたので…
今はスレタイにある公式サイトを見ながら進めてます
169デフォルトの名無しさん:2006/02/03(金) 16:01:14
>>164
これを見て思い出したんだけど、Array#rotate はどうなったんだよ!
170デフォルトの名無しさん:2006/02/03(金) 16:01:40
>>168
「エディタ」って何?
つーか、何を落としたの?
171デフォルトの名無しさん:2006/02/03(金) 16:07:30
>>170
ttp://rubyforge.org/frs/?group_id=167&release_id=4153
ここの"1.8.4-16 preview2"というファイルです
エディタは、このファイルに同封されていたSciTEというテキストエディタ?です
172171:2006/02/03(金) 16:41:43
済みません、自己解決できました
どうもお騒がせしました
173デフォルトの名無しさん:2006/02/03(金) 16:50:15
Rubyのプログラムが、Rubyじゃなくて英語で書かれてると思ってたのかな??
174171:2006/02/03(金) 16:54:44
>>173
それに近い感じです
日本語を一切受け付けないものだと思ってました
175デフォルトの名無しさん:2006/02/03(金) 23:37:33
open-uriってsslにpostできる?
176デフォルトの名無しさん:2006/02/04(土) 00:43:50
まず試せ。
177デフォルトの名無しさん:2006/02/04(土) 01:04:44
SSL関連で変な失敗したら鯖管に目つけられて通報されるかもしれないだろ!!!11!1
178デフォルトの名無しさん:2006/02/04(土) 01:05:26
>>177
ローカルで試せ。

179デフォルトの名無しさん:2006/02/04(土) 01:14:24
ドキュメントが無いって最悪だな。ruby最悪
180デフォルトの名無しさん:2006/02/04(土) 02:09:05
require 'net/http'
Net::HTTP.version_1_2 # おまじない
word = "test"
Net::HTTP.start('www.google.com', 80) {|http|
response = http.get("/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&num=1&q=#{word}")
response.body =~ /swrnum\=(\d+)/
p $1
}

GoogleのHIT数を取得したいのですが
このスクリプトで取得できる値と実際にブラウザ
181デフォルトの名無しさん:2006/02/04(土) 02:10:49
# 途中で送っちゃった。

実際にブラウザ(IE: 6.0.2800.1106)で検索した場合の値が違うのですが
どうすれば同じ値を取得できますか
182デフォルトの名無しさん:2006/02/04(土) 02:38:57
>>181
Cookieも一緒に送信したら一緒になったよ。
理由は分からんけど…。
183175:2006/02/04(土) 02:49:00
どうにもopen-uriは糞という結論になったので、http-aceess2を使ってみたが
途中で切れるぞ?
getもマトモにできんとはどういうことだ?何の嫌がらせ?

$ ruby -r nkf -r http-access2 -e '
> url="http://pc8.2ch.net/test/read.cgi/tech/1133988248/"
> html=HTTPAccess2::Client.new.get(url).content
> puts NKF.nkf("-Sex",html).split("\n")[-3..-1]'
<dt>257 :<font color=green><b>デフォルトの名無しさん </b>(略)
<dt>258 :<a href="mailto:sage"><b>デフォルトの名無しさん </b>(略)
<dt>259 :<a href="mailto:sage"><b>デフォルトの名無しさん </b>(略)
184151:2006/02/04(土) 09:19:13
うーん。

require "tk"

a = TkLabel.new{pack}
TkText.new{pack}

Thread.start do
 num = 0
 while true
  num += 1
  a.text = num
 end
end

Tk.mainloop

上のプログラム実行中、テキストウィジェット内でマウスをドラッグすると
それ以降、ラベルウィジェットの更新がされなくなります。
(alive? で確かめるとスレッド自体は生きてる模様)

環境は cygwin です。unix な人、上のプログラムが大丈夫か確かめてもらえませんか?

#Tk 使うときはスレッド使うなってこと?もうやだ。
185デフォルトの名無しさん:2006/02/04(土) 09:55:59
>>164
arrの要素をキーにして、そのindexを値としたハッシュを使えばいいんじゃね。
・・・と思ったけど、arr.delete(obj)したときに、objより後ろにあるやつのindexをすべて更新しなきゃいけないから、だめだめだな。

思うに、配列を使っている限りはだめなんじゃないか。
arr.delete(obj) をするときに、どうしてもO(N)の時間がかかる(探索にO(N)、削除にO(N))。
Priority Queueとか使えるんだったら、そっちのほうがいいと思う。
これなら探索にO(logN)、削除にO(logN)だからかなり早くなるとは思うよ。
ただし要素間で大小比較ができないといけないから、164の要件にあうかどうかわからんが。

つか、Rubyの話題じゃないな。本スレかMLできけば、学者さんがヒントくれると思う。
186デフォルトの名無しさん:2006/02/04(土) 11:23:45
>>178
きちんとしたSSLページをローカルに用意できる人間がこの世にどれだけいるっていうんだ
187デフォルトの名無しさん:2006/02/04(土) 11:39:51
別にローカルなら自作自演なルート証明書も作れるし、
インストールできるだろ?
188デフォルトの名無しさん:2006/02/04(土) 11:50:52
つーか一式ダウンロードできるよ。
ttp://hunter.campbus.com/
これもっつーか、これ恐ろしいパッケージ。
「Apache, MySQL, PHP + PEAR, Perl, mod_php, mod_perl, mod_ssl, OpenSSL, phpMyAdmin,
Webalizer, Mercury Mail Transport System for Win32 and NetWare Systems v3.32,
JpGraph, FileZilla FTP Server, mcrypt, eAccelerator, SQLite sowie WEB-DAV + mod_auth_mysql.」
ttp://www.apachefriends.org/de/xampp-windows.html
189デフォルトの名無しさん:2006/02/04(土) 11:58:14
まあ、SSLサイトの何が必要なのかってので自作証明書で充分かどうかってのは変わるかも。

https://〜〜〜 なサイトのファイルを取ってきたいってだけなら
標準添付のnet/https.rbでできないかい。
postもできんじゃねーの。やったことないけど。
190123:2006/02/04(土) 12:32:07
誰か 123 がわかる人いませんか。
みなさんのところではこういう現象はおこらないのでしょうか・・・
191デフォルトの名無しさん:2006/02/04(土) 19:35:32
>>183
mechanize でも使え。
http://rubyforge.org/projects/wee/
192180:2006/02/04(土) 20:57:39
>>182
そうかCookieか!
助かりましたありがとう

デフォルトの国によってフィルタがかかるのかいな?
193デフォルトの名無しさん:2006/02/04(土) 21:09:28
>>190
http://www.geoffreyarnold.com/
ここにGEM_PATHがどうのとか書いてるけど,
これじゃない?
194123:2006/02/04(土) 22:31:34
>>193

環境変数GEM_HOMEを設定することで動作するようになりました。
設定ファイルはインストール時のみ有効でアプリケーションの実行時には参照されないみたいです。
なんともまぎらわしい仕様ですが、これで先に進めます。
ありがとうございました。
195デフォルトの名無しさん:2006/02/05(日) 21:23:33
Rubyの$KCODEと-Kオプションについて質問です。
-Kオプションはスクリプトの解析段階からの文字コードを変更することになるので
スクリプト自体を、その文字コードで書いておかないといけない。

一方、$KCODEは、スクリプト解析後に影響がでてくるため、
スクリプト自体は、単なる1byteの羅列として認識されている。
正規表現を用いる場合のマッチの仕方、Stringの一部のメソッドのみに影響を与える。

このように理解したのですが、これでいいでしょうか??

で、困っているのは、Railsで$KCODEを"u"に指定しようとして、混乱しています。
$KCODEを"u"にすると、スクリプト中のStringやRegexpをUTF8で書きたいので、
スクリプト全体をUTF8に書き換えようとしましたが
そうすると、StringやRegexp以外のスクリプトの部分のASCII文字が、2bytes単位になってしまうけど
$KCODEで指定しているから、スクリプト解析時はNONEで解釈し、1byte単位で解釈してしまい、
解釈できませんよね。

結局、Rubyにおいて、-Kuでなく、$KCODE="u"とした場合、
1.スクリプトは、どの文字コードで書くのか??
2.スクリプトをShift-JISなどで書いた場合、StringやRegexp部分のみUTF8にしないといけない気がします。
どうなんでしょうか??

よろしくお願いします。
196デフォルトの名無しさん:2006/02/05(日) 21:58:11
何か誤解がある気がするが、 -K で何を指定しようが String はバイト列のま
ま変わらないよ(KCODEじたいは設定されるので文字列や正規表現に影響を与えるが)。

それと、 UTF-8 の場合、 ASCII 文字に関しては1byteずつなので、別に何ら
問題はない。UTF-16 あたりとごっちゃにしてない?

ただし、 Rails はデフォルトでは UTF-8 を吐こうとするので、きちんと設定
しないと Shift-JIS などの文字列を表示させることはできない。 Rails をや
るという前提であれば、可能ならぜんぶ UTF-8 で書くのが無難。
197デフォルトの名無しさん:2006/02/06(月) 02:04:29
>>184
Linux はOK。
One-click ruby installer 1.8.4preview2 + ActiveTcl8.4.12 もOK。
cygwin は手元に環境がないので確認できず。
動かしているバイナリの native-thread サポートはどうなってます?
198デフォルトの名無しさん:2006/02/06(月) 02:28:54
文字列を’’で囲むというのが気に入らない。
””のほうが美しいのに。
199デフォルトの名無しさん:2006/02/06(月) 02:38:21
>>56
今さらという気もするが、Tk.after(1,proc{anime}) を
Tk.after(2000, proc{anime}) として約2秒間隔の繰り返しにすると
原因がわかるのではないかという気が…
(貼ってあるものに間違いがなければだが)
200デフォルトの名無しさん:2006/02/06(月) 02:40:03
木村カエラ的な?
201デフォルトの名無しさん:2006/02/06(月) 05:07:11
>>198
ん?自分では普通に"〜"で囲んでますよ。
'〜'で文字列を囲めることがご不満?
202デフォルトの名無しさん:2006/02/06(月) 05:17:39
変数を展開したい時だけ " を使ってるな。
意図的にそうして、俺ルールなプラシーボでミス防止とソース見易くしてる。
203デフォルトの名無しさん:2006/02/06(月) 06:00:03
>>198
この辺個人の好みが出るよな
どっちをメインに使っても実用では大差ないだけに、特に

ちなみに俺は、ハッシュのキーやファイルパスなんかはたいていダブルクォート
画面に表示する文字列は全部ダブルクォート、で使い分けてる
204デフォルトの名無しさん:2006/02/06(月) 07:11:47
>203
で、どっちがシングルクォートなんだ?
205デフォルトの名無しさん:2006/02/06(月) 09:11:59
だれか、collectメソッドをRubyで書いてみて。
206デフォルトの名無しさん:2006/02/06(月) 10:21:43
collect(コレクト)
207デフォルトの名無しさん:2006/02/06(月) 10:34:25
krkt
208デフォルトの名無しさん:2006/02/06(月) 12:58:12
>>202
なるほど。自分では逆にしてます。原則的にはダブルクォートで、
変数展開やエスケープシーケンスを無効にしたい時だけシングルクォート。
何となく、ダブルクォートの方が文字列っぽい気がして。
209デフォルトの名無しさん:2006/02/06(月) 13:11:28
Delphi出身の私はシングルのが文字列っぽく感じるな
…お陰で等号を=と書く癖が治りませんorz
210デフォルトの名無しさん:2006/02/06(月) 13:12:27
"#{val}"を多用する流儀かどうかでも違う気がするぞ。
コメントであるはずの#を流用するのが気に食わんとか。

#{〜}には何でも入るのが結構好みだがやりすぎてワケワカメになること多数
211デフォルトの名無しさん:2006/02/06(月) 13:22:45
#{ }の変数展開は最初凄く嫌だった。
なんかプログラミングの方向性として邪道っぽくね?
埋め込まずに + で足していったほうがよくね?
212デフォルトの名無しさん:2006/02/06(月) 13:30:25
>>211
自分では多用する方です。好みや慣れによりけりでしょうね。
Perlの変数展開に慣れてる人には違和感が少ないでしょうし。

>>210
確かに程度問題ですよね。
複雑になるようなら>211のように書き方を変えることもあります。
213デフォルトの名無しさん:2006/02/06(月) 13:38:16
>>211
+ はto_sの山を築かないか?
214デフォルトの名無しさん:2006/02/06(月) 13:43:49
>>205
多分、こんな感じか?
環境が手元にないからテスト出来んが。
def collect
 a=[]
 self.each{|i|a.push(yield(i))}
 a
end
215デフォルトの名無しさん:2006/02/06(月) 14:05:00
>>213
文字列と足す時は暗黙の型変換すればよくね?
216デフォルトの名無しさん:2006/02/06(月) 22:03:15
>>215
良くない。
217デフォルトの名無しさん:2006/02/07(火) 01:27:07
to_str知らんのか?
218デフォルトの名無しさん:2006/02/07(火) 03:24:29
emacsで、Ruby専用のoutline-modeって使ってるひとおるん?
219203:2006/02/07(火) 03:37:50
>>204
Σ( ̄□ ̄; 間違えた
220デフォルトの名無しさん:2006/02/07(火) 08:16:41
String#% 使う人〜

221デフォルトの名無しさん:2006/02/07(火) 08:32:13
私はformat派かな
レシーバが「書式に与えるデータ」ではなく
「書式そのもの」を表すのが微妙。
ワンライナでたま〜に使う程度か
222デフォルトの名無しさん:2006/02/07(火) 13:55:12
String#% は、たまに使うけど、常用はしないなあ。
たいていは sprintf だね。
223221:2006/02/07(火) 14:25:01
[13, 10].format('%b %b')
みたいな書き方って無いの?
個人的には「データを書式にそって並べる」って書きたい。
224デフォルトの名無しさん:2006/02/07(火) 14:59:22
>>223
下記のような書き方はありますね。

'%b %b' % [ 13, 10 ]

自分でメソッドを追加すれば下記のようにも。

class Array
 def format( string )
  string % self
 end
end

[13, 10].format('%b %b')
225デフォルトの名無しさん:2006/02/07(火) 15:13:05
それはちょっと欲しい気がするな。
Array#pack と同じような方向性か。
226デフォルトの名無しさん:2006/02/07(火) 16:45:14
Array#join も同じ系統だね。
あってもいいかも。
227デフォルトの名無しさん:2006/02/07(火) 17:04:19
何かこの話題も初心者スレっぽくねー気がするな…
最近何でもこっちに書き過ぎっぽくね?
本スレがネタ不足に陥り気味な感じだと思うかも
228デフォルトの名無しさん:2006/02/07(火) 17:12:38
最初にeachを見たとき、「配列を順番に適用する」というメソッドが絶対にあるだろうと思ったんだけど。
なんで無いのかよくわかんない。もしかしてすでにある?

["A", "B", "C"].hoge(puts %3%3%2)
CCB

>>227
「初心者が疑問に思うこと」ではあると思う
229デフォルトの名無しさん:2006/02/07(火) 17:25:31
>>228
Enumeratorみたいなやつ?
RubyにはEnumerableモジュールがあるけど
これは「導入先のクラスにeachが定義されていること」を前提に作られてる。

ブロック付きメソッド呼び出しが簡単に出来るRubyは
要素を取り出す部分を各クラス(のeach)に完全に任せられるようになったという事では。
230デフォルトの名無しさん:2006/02/07(火) 17:28:55
each で回しちゃうからなぁ。
ブロックパラメータで処理する意識が強い Ruby だと、
行数に拘らなきゃ、無意識にそっちを使ってしまうな。
いや、んなものイラネとかいう話じゃなくてね。ただのチラシの裏。
231230:2006/02/07(火) 17:29:44
リロードすれば良かった orz
232デフォルトの名無しさん:2006/02/07(火) 18:00:49
ヤターデキタヨー

[["A","B","C"]].each{|arr| print arr[2],arr[2],arr[1]}
CCB

専門用語はよくわからんが、
配列に直接ブロックがくっつくことができるといろいろ便利そうだとは思った。
233デフォルトの名無しさん:2006/02/07(火) 18:33:10
何がしたいのかよく分からんが、values_atとeach使って
['A', 'B', 'C'].values_at(2, 2, 1).each {|x| print x }
とかじゃね?
234デフォルトの名無しさん:2006/02/07(火) 19:02:55
>>232 にワラタ
235デフォルトの名無しさん:2006/02/07(火) 19:07:59
以前言ったことあった気もするけど、 #{ } でフォーマット指定したいことがよくある。

"#{|04d|num} #{|-10s|name} : #{|s|data}"

あと、こんなのとかも欲しかったり。

"%{num} %{name} : %{data}" % { :name => "foo", :num => 123, :data => "bar", }

"%{|04d|num} %{|-10s|name} : %{|s|data}" % {
:name => "foo", :num => 123, :data => "bar",
}
236デフォルトの名無しさん:2006/02/07(火) 19:32:28
"#{"04d"%num} #{"-10s"%name} : #{"s"#data}" で良くないか?
237デフォルトの名無しさん:2006/02/07(火) 19:40:55
良くないな。"#{"04d"%num} #{"-10s"%name} : #{"s"%data}"だ。
238235:2006/02/07(火) 20:06:56
ん? "#{"%04d"%num} #{"%-10s"%name} : #{"%s"%data}" だよね?
リテラルの中にまたリテラルを書くのがちょっと嫌かなあ。
239デフォルトの名無しさん:2006/02/08(水) 00:37:58
そのリテラルってどういう意味?
240デフォルトの名無しさん:2006/02/08(水) 04:24:07
ダブルクォーテーションの中にダブルクォーテーションがあるのが嫌なんでしょ
その場合はやっぱし
"%04d %-10s : %s"%[num, name, data] しかないだろ
おれには "#{|04d|num} #{|-10s|name} : #{|s|data}" より見やすく感じる
241デフォルトの名無しさん:2006/02/08(水) 05:01:15
sprintf系のフォーマットは別にシングルクォートでも書ける筈だが…
"#{'%04d'%num} #{'%-10s'%name} : #{'%s'%data}"

この例に限っては>240の方が普通だけどね。
242デフォルトの名無しさん:2006/02/08(水) 05:33:04
string % array
じゃなくて
string%array
だと見辛いなあ
243235:2006/02/08(水) 05:35:00
>>240
引用符の中に引用符がある気持ち悪さと、
#{ } の展開の中でさらに String#% の展開が行われてるという煩わしさが嫌。

あと、 "%04d %-10s : %s"%[num, name, data] は、
見易さよりも変更時の対応付けのミスが気になっていて、
変数が多くなってくると変数の増減があった場合に
どの % がどの変数に対応しているかがワケワカになりそうで嫌。
244デフォルトの名無しさん:2006/02/08(水) 07:22:53
forkする時だ。
245デフォルトの名無しさん:2006/02/08(水) 08:14:57
+ で繋いじゃえ。
246デフォルトの名無しさん:2006/02/08(水) 08:53:28
外人さんからのご質問↓です。

Best way to learn Ruby programming language?
http://answers.yahoo.com/question/index;_ylt=AuPhCegaYj1uxuEdXYVnQr5_zqIX?qid=1006020704969
247デフォルトの名無しさん:2006/02/08(水) 12:27:23
none.
248デフォルトの名無しさん:2006/02/08(水) 14:23:56
Ruby の M17N ないし I18N の今後の展望についてまとまったドキュメントがあれば教えてください。
249デフォルトの名無しさん:2006/02/08(水) 14:25:59
あ、えーと、もしなければこの場でまとめていただけるとありがたいです。
250デフォルトの名無しさん:2006/02/08(水) 16:00:13
今後の展望自体がないんじゃないのか。
251デフォルトの名無しさん:2006/02/08(水) 16:15:54
Ruby2.0に乞う御期待ってとこだと思う

Ruby本体としては日本語と適当なUnicodeの何かが使えればそれでよくね? って感がなくもなく
252デフォルトの名無しさん:2006/02/08(水) 22:05:41
>>248
matz自身が未踏ソフトウエアの予算でI18Nを検討したはず。成果物を探したら?
253デフォルトの名無しさん:2006/02/09(木) 05:32:12
質問です。
File.open("filename").each {|line| 処理}
この直後ファイルは自動的に閉じてくれますか?開きっぱなしですか?
254デフォルトの名無しさん:2006/02/09(木) 06:13:49
openに直にブロック付けなきゃ駄目でね?
255デフォルトの名無しさん:2006/02/09(木) 06:21:44
IO.foreach("filename"){|each| ...}
256253:2006/02/09(木) 09:17:54
>>254
直にブロックをつけてprintしてみたら変なアドレスみたいなのが表示されちゃいました。

>>255
そういうやりかたもあったんですか。
繰り返しが終了した後には"filename"のファイルは閉じられているのですか?開かれたままですか?
257デフォルトの名無しさん:2006/02/09(木) 09:47:59
File.read("filename").each{|line| 処理 }
もしくは、
File.open("filename"{|fio| fio.each{|line| 処理 }}
とか。
254 が言ってるのは後者の方のような用法。

>256
閉じられるよ。
258デフォルトの名無しさん:2006/02/09(木) 10:35:50
>>257
回答どうもです!

参考までに聞きたいんですが、
file = File.open("filename")
file.each {|line| 処理1}
file.rewind
file.each {|line| 処理2}
みたいにやった場合どこで閉じられてどこで開かれるのでしょうか?(無意味なコードで恐縮ですが)
もしくはfileという変数に格納したかどうかで変わったりしますか?
259デフォルトの名無しさん:2006/02/09(木) 10:55:37
>>258
openをブロック付きで呼んだら
ブロックが終わるときに閉じられる。

openをブロック付けないで呼んでたら
file.closeかgcでfileが回収されたときにファイナライザで閉じられる。
260デフォルトの名無しさん:2006/02/09(木) 11:03:45
ブロック付きの動作が知りたいなら、ブロック無しの代替コードを書いてみればいいと思う
261253:2006/02/09(木) 11:05:35
>>259
なるほど!納得です。ありがとうございました。
262デフォルトの脳無しさん :2006/02/09(木) 15:53:34
I18Nが行なわれると、メソッド名やクラス名も日本語にできるのですね。
はげしく期待します。
263デフォルトの名無しさん:2006/02/09(木) 16:08:12
>>262
今でもできてるわけだが。
264デフォルトの名無しさん:2006/02/10(金) 07:19:51
I18Nが行われるとメソッド名やクラス名もアラビア語やロシア語にできるのですね。
はげしく期待します。

読みにくいソースを書けると思うと興奮で眠れません
265デフォルトの名無しさん:2006/02/10(金) 07:48:08
こらこら
266デフォルトの名無しさん:2006/02/10(金) 21:56:17
emacsにおける、rubyの為のoutline-minor-modeって用意あるの?
267デフォルトの名無しさん:2006/02/11(土) 00:20:15
Windowsでファイルをコピーしたいので FileUtils.cp を使ってみたのですが、
コピー元のファイルが Read only だと更新時刻を合わせるときにアクセス違反になってしまいます。
更新時刻を(出来れば属性も)維持したいのですが、簡単に解決できる方法はありますか?

エラーメッセージ
C:/Ruby/lib/ruby/1.8/fileutils.rb:503:in `initialize': Permission denied - def.txt (Errno::EACCES)

環境
Windows2000, ruby 1.8.2 (2004-12-25) [i386-mswin32]

コード
require 'fileutils'
s='abc.txt' # read only file
d='def.txt'
FileUtils.cp s,d,:preserve=>true
268184:2006/02/11(土) 02:41:39
>>197
どうやらcygwinのtk8.4がよくないようで、Activetcl1.8.4ならOKでした。
Ruby 自体は cygwinのでもnativeなバイナリのでも問題ないようです。
お返事おそくなりましたが、試してもらってありがとうです。
269ヽ(´ー`)ノ ◆.ogCuANUcE :2006/02/11(土) 13:47:26
>>266
outline じゃないが、folding-mode とかはどうよ。
folding-mode-marks-alist を適当な値に設定すれば、多分便利になると思う。
270デフォルトの名無しさん:2006/02/11(土) 14:29:36
>>267
xcopy をキックしてみる。

system("echo F | xcopy /Q /Y /X /K #{s} #{d}")

または、コピー前にread only を落として後で戻すとか。

st = File.stat(s)
FileUtils.chmod(0600, s)
begin
FileUtils.cp s,d,:preserve=>true
ensure
FileUtils.chmod(st.mode, s)
FileUtils.chmod(st.mode, d)
end

なんかいまいちだなぁ。
271267:2006/02/11(土) 19:38:28
>>270
回答ありがとうございます。
実は私もはじめ xcopy を呼んでいたのですが、2000個くらいコピーすることもあるので
なんとなく効率が悪いような気がして、他に良い方法がないか探しています。

後者の方法を参考にさせて頂きますが、送り元ファイルを弄りたくないのでこうしてみました。

st=File.stat s
FileUtils.cp s,d
FileUtils.chmod(0600, d)
File.utime st.atime,st.mtime,d
FileUtils.chmod(st.mode, d)

これでしばらく運用してみます。ありがとうございました。
272デフォルトの名無しさん:2006/02/11(土) 19:47:26
Cygwin 版だとうまくいくね。バグなのかな?
273デフォルトの名無しさん:2006/02/12(日) 12:59:48
i386-mswin32環境ではファイルがread-onlyでもatime等の変更は許容するように手当てするのが正しい気がする。
といってもまだ確かめてないが。
274デフォルトの名無しさん:2006/02/13(月) 16:25:59
バグというか、どうあるのが正しいというか。
まあ、疑問に思えばruby-devへ。
275デフォルトの名無しさん:2006/02/13(月) 17:09:29
どうあるのが正しいかは明らかで、疑問の入る余地も無いでしょ。
UNIX や Cygwin と同じに挙動になるべき。
276デフォルトの名無しさん:2006/02/13(月) 18:21:04
なんでそう言い切れる?
「Windowsはそういうものだからそれでいい」という解だってありえるでしょ。
277デフォルトの名無しさん:2006/02/13(月) 18:27:51
Cygwin と win32 とで挙動が違うのはまずいでしょ。
Windows はそういうものならばそうリファレンスマニュアルを変更すべき。
278デフォルトの名無しさん:2006/02/13(月) 18:38:57
システムコール通りの動作、ということでは
279デフォルトの名無しさん:2006/02/13(月) 18:55:19
FileUtils のメソッドセットを見て、
「システムコール通りの動作」を想定するのは不可能だと思う。
FileUtils のどのメソッドがどこでどのシステムコールを利用しているかなんて
ユーザからはわからないわけだし、
FileUtils は、システムコールレベルの挙動の差異をできる限り隠蔽しているべきだと思う。
280デフォルトの名無しさん:2006/02/13(月) 19:13:25
そうだな
スクリプト言語の目的の一部には可用性ってのも含まれるだろうしな
281デフォルトの名無しさん:2006/02/13(月) 19:14:39
そういう議論を、ここでやんないで ruby-dev でやれば?
282デフォルトの名無しさん:2006/02/13(月) 19:41:19
めんどくさい
283デフォルトの名無しさん:2006/02/13(月) 20:31:45
んじゃ、せめて本スレで
284デフォルトの名無しさん:2006/02/13(月) 20:38:46
こういうことに疑問を持つのは初心者だけだからこのスレが適当
285デフォルトの名無しさん:2006/02/13(月) 22:51:02
emacsではバグ扱いで直っているみたいね。
ttp://www.meadowy.org/meadow/ticket/97

ソース眺めると Windows のときは SetFileAttributes で read only を落としている。
ttps://www.codeblog.org/gonzui/markup/emacs-21.4/src/fileio.c?q=path%3Aemacs-21.4%2Fsrc%2Ffileio.c+Fcopy_file#l2369
286デフォルトの名無しさん:2006/02/14(火) 03:50:15
>>269
>folding-mode とかはどうよ。

thx
亀レス失礼。

結局、 hideshow.elを利用するところで落ち着いた。
http://www.bookshelf.jp/pukiwiki/pukiwiki.php?cmd=read&page=Elisp%2Fhideshow.el

なんでoutline-minorがruby-majorで利用できなかったのか謎。
ついでにhideshow.elでも

(setq hs-minor-mode-prefix "¥C-c¥C-d")

って設定したところで実際に反映されない。
287デフォルトの名無しさん:2006/02/14(火) 09:56:39
昨日からrubyを始めた初心者です
rubyでクリップボードを利用したくてwin32-clipboard-0[1].3.1.zipを
落としたんだけど展開したあとどこに置いたらいいの?
どこに置いても↓これ・・・
a.rb:1:in 'require': no such file to load -- win32/clipboard (LoadError)
環境はWinXP,ruby-1.8.4-i386-mswin32です
288デフォルトの名無しさん:2006/02/14(火) 10:27:12
>>287
とりあえず、require "c:\full\path\to\win32\clipboard" とでもすれば?
さらにヒントとしては ruby -e "p $:"
289デフォルトの名無しさん:2006/02/14(火) 10:29:01
>>287
Cコンパイラある?
あるなら、ruby extconf.rb して (n)make

それとも、バイナリもその名前なのかなあ
290287:2006/02/14(火) 11:03:05
レスありがとうございます

>>288
require "c:\full\path\to\win32\clipboard"にしてみましたが同じような
errorがでました。

ruby -e "p $:" の結果は
C:/Ruby/lib/ruby/site_ruby/1.8
C:/Ruby/lib/ruby/site_ruby/1.8/i386-msvcrt
C:/Ruby/lib/ruby/site_ruby
C:/Ruby/lib/ruby/1.8
C:\Ruby\lib\ruby\1.8/i386-mswin32
・・・↑ここかな?

>>289
nmakeするとエラーになるんでなさそうです・・・すみません
291デフォルトの名無しさん:2006/02/14(火) 11:27:29
>>290
個々のファイルのやつはコンパイラがないとインストールできないよ。

インストーラタイプ(win32utils-installer)を実行すれば
Cコンパイラを持ってなくても適当にコンパイルされてインストールされる。
ttp://rubyforge.org/frs/?group_id=85&release_id=1918

…って書いてあるけど試してないからできなくても怒っちゃイヤン
あとクリップボードの以外にも上記のセットが色々入るので留意のこと
292287:2006/02/14(火) 11:38:27
>>291

インストーラタイプというのがあるんですね。早速試してみます。
293デフォルトの名無しさん:2006/02/14(火) 11:44:27
試してから結果書けよ…
294デフォルトの名無しさん:2006/02/14(火) 11:48:44
まあクリップボード程度なら直接API呼んでもなんとかなるけどな
295287:2006/02/14(火) 11:59:26
>>291
できました!!

カスタムでclipboardだけインストール可能で、
C:\Ruby\lib\ruby\site_ruby\1.8\i386-msvcrt\win32\
にclipboard.soが作成されました。

自作プログラムも一応動きました。
require "win32/clipboard"
include Win32
text = Clipboard.data
text = text.gsub(" " , "")
Clipboard.empty
Clipboard.data = text

ありがとうございました。
296デフォルトの名無しさん:2006/02/16(木) 02:44:25
暗号化ライブラリを探しているのですが
RAAでLibrary/Cryptgraphを検索すると、プロジェクトが20もあり
どれを使うのが適切なのかよく分かりません。
これがオススメ!というものはありますか?

ちなみに暗号化するのはUTF8のテキスト、というかiniファイルで
できれば pure ruby のライブラリが望ましいです。
297デフォルトの名無しさん:2006/02/16(木) 02:57:36
無駄に 20 もあるわけじゃなくて用途に応じて適切なものを選んで使うべきで、
何を何から守るために暗号化するのか、どのくらいの強度が必要かとか、
298296:2006/02/16(木) 05:53:58
とりあえず rubycryptlib が使いやすそうだったので
試しに導入して Blowfish + CBC を使ってみたのですが
なぜかCBCが3回に2回ぐらいエラーを吐きます。

crypter = Crypt::Blowfish.new('testkey8')
crypter.encrypt_file("test.txt", "test.txt.crypt")
crypter.decrypt_file("test.txt.crypt", "test.txt.decrypt")

CBCを使わずにencrypt_blockを使えば正常に復号できるのですが……
何か勘違いをしているのでしょうか?(バージョンはmswin32の1.8.4です)

>>297
絶対に見られないように暗号化したいわけではなくて
簡単に見られないようにしたい程度なので
強度は特に必要ないです。
ROT13/47にキーが付いたようなものがベスト。
299デフォルトの名無しさん:2006/02/16(木) 13:12:41
ROT13/47にキーが付いたようなもの???
そんなわけわからんもんは自分でつくれ。
300デフォルトの名無しさん:2006/02/16(木) 14:32:58
CipherSaber / サイファセイバー
自分で作る暗号プログラム
― あなたのプライバシーを守るために ―
http://www.hyuki.com/cs/
301デフォルトの名無しさん:2006/02/16(木) 14:36:21
Unicodeから韓国語の文字コードのKSに変換できるライブラリとかないですか?
302デフォルトの名無しさん:2006/02/16(木) 15:22:42
iconvでできなきゃできないんじゃね
KSの正式な通称が何かしらんけどEUC-KRやKSC5601はできるみたいよ
303301:2006/02/16(木) 15:30:20
>>302
ありがとう。調べてみます。
304デフォルトの名無しさん:2006/02/16(木) 16:11:56
試してから結果書けよ…
305デフォルトの名無しさん:2006/02/16(木) 17:32:42
NetNewsの昔から延々嘆かれてたことだから仕方ないな(w
306デフォルトの名無しさん:2006/02/17(金) 04:00:49
> irb
irb(main):001:0> 1
=> 1
irb(main):002:0> 2
=> 2
irb(main):003:0> 3
=> 3
irb(main):004:0>

と実行した時、一つ前の結果(3)、二つ前の結果(2)・・・を参照することは出来るでしょうか?

また、mysrc.rbを実行して実行が終了したらメモリの内容をそのままにirbに制御を移すことは出来るでしょうか?
307デフォルトの名無しさん:2006/02/17(金) 08:45:55
>>298

OpenSSL::Cipher::Cipher
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=OpenSSL%3A%3ACipher%3A%3ACipher

>>306
irb が定義している変数を使うとできる。
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=irb#a.a5.b7.a5.b9.a5.c6.a5.e0.ca.d1.bf.f4

> そのままにirbに制御を移す

irb(main):001:0> eval(IO.read('mysrc.rb'))

などとやってみてはどうでしょうか。
308デフォルトの名無しさん:2006/02/17(金) 19:31:38
> cat foo.rb
puts "foo"
> irb -r foo
foo
irb(main):001:0>
309デフォルトの名無しさん:2006/02/18(土) 00:20:19
> cat socket.rb
puts "socket"
> irb -r socket
irb(main):001:0>
310デフォルトの名無しさん:2006/02/18(土) 01:11:41
ハッシュのキーの先頭を「ハッシュのキーなんだ」と思うために
文字列の先頭を常に大文字で書こうとするのってどのくらい変?
311デフォルトの名無しさん:2006/02/18(土) 01:15:25
>>310
Omotiくらい変。
312デフォルトの名無しさん:2006/02/18(土) 01:20:20
>>310
そばつゆだと思ったらコアップガラナだった
313デフォルトの名無しさん:2006/02/18(土) 01:20:59
>>310
Omotiが変って言う奴くらい変。
314デフォルトの名無しさん:2006/02/18(土) 01:28:15
記法を俺内で統一しておく、というのは悪いことじゃないと思う。
大文字小文字がちょっとでも違ったら読めないんだし。

ハッシュ使うたびにきちんとキーの語句確かめろってのはまあそうなんだけどさ。
クラス名やメソッド名の問題と一緒だろと言われればそれもまあそうなんだけど。

なんでもアンダースコア区分の小文字派な俺。
単語ごとにキャピタライズして書くのは前置詞の扱い悩むので苦手。

Ruby的にはどう書くのが好ましいってことになってるん?
315デフォルトの名無しさん:2006/02/18(土) 01:57:53
そのくらいは自分で勉強してくれ。ま、実際に書いてみりゃ、すぐにわかるよ。

316デフォルトの名無しさん:2006/02/18(土) 01:58:43
YAML の設定でキーを CamelCase にするのは結構普通な希ガス。
317デフォルトの名無しさん:2006/02/18(土) 02:44:42
>>315
特定の作法はRubyでは書きにくいから使わなくなっておのずと一本化、ってのはRubyではあんまないと思う
変に癖ついちゃうだけなんじゃないかな
318デフォルトの名無しさん:2006/02/18(土) 05:37:04
>>317
ネット上に散見するRubyのコードに引きずられるぐらいかな

公式な推奨記述法ってあるの?

推奨(強制)記述法を普通はなんて言うんだっけ、カタカナで何かあった気がするけど

>>312
北海道民か?
http://shibuya.cool.ne.jp/guarana/coup.htm
319デフォルトの名無しさん:2006/02/18(土) 08:42:54
コーディングルールか?
320デフォルトの名無しさん:2006/02/18(土) 16:21:34
釣りかもしれんが念のため書いておくと、大文字から始めるのは定数な。
321デフォルトの名無しさん:2006/02/18(土) 16:33:33
釣りかもしれんが念のため書いておくと、ハッシュのキー文字列の話な。
322デフォルトの名無しさん:2006/02/18(土) 18:47:04
作法?に関する質問なんですが
def shuffle(arr)とか
def decorate(s) "\""+s+"\"" endといった
基本的なArray, Stringといったクラスのユーティリティメソッドを自分で書いたとき
普通どこに定義するもんなんでしょうか。
MyNameモジュールなどにまとめて記述するものでしょうか。
323デフォルトの名無しさん:2006/02/18(土) 19:02:30
>>310
ハッシュのキーとして使うなら、文字列ではなくてシンボルを使ったらどうでしょう?
hash = { :one=>1, :two=>2, }
324デフォルトの名無しさん:2006/02/18(土) 19:21:27
>>323
断る!
325デフォルトの名無しさん:2006/02/18(土) 19:32:43
面白いがスクリプト公開したら変なポリシーだって怒られそうだな
326デフォルトの名無しさん:2006/02/18(土) 20:57:07
私は
ModuleName
CONSTANT_NAME
variable_or_method_name
って感じ
327デフォルトの名無しさん:2006/02/18(土) 21:04:31
釣りかもしれんが念のため書いておくと、ハッシュのキー文字列の話な。
328デフォルトの名無しさん:2006/02/18(土) 21:13:00
>>319
それだ!

なんでこんな言葉忘れてるんだ俺は orz
329デフォルトの名無しさん:2006/02/18(土) 23:38:10
コーディングスタンダートともいうな
330デフォルトの名無しさん:2006/02/19(日) 00:04:02
331デフォルトの名無しさん:2006/02/19(日) 00:15:45
332デフォルトの名無しさん:2006/02/19(日) 01:01:17
333デフォルトの名無しさん:2006/02/19(日) 09:27:51
ttp://shugo.net/ruby-codeconv/codeconv.html

論点ずれてるかもしれんが。
334デフォルトの名無しさん:2006/02/19(日) 11:50:54
>>331
>>329をよく読むと意図がわかるかもしれんがどちらにせよ実りはない
335デフォルトの名無しさん:2006/02/19(日) 17:26:06
require 'tk'
num = 0
while num < 3
 TkButton.new {
  text 'button'
  command { p num }
 }.pack
 num += 1
end
Tk.mainloop

上記のプログラムだとどのボタンを押しても「3」が出力されてしまいます。
それぞれ「0」「1」「2」を出力するようにするにはどう書けばいいでしょうか?
336デフォルトの名無しさん:2006/02/19(日) 17:57:38
require 'tk'
num = 0
while num < 3
TkButton.new {
text "button#{num}"
command { p text }
}.pack
num += 1
end
Tk.mainloop

とすると、ボタンに応じた内容が出力されたよ。
numのスコープの問題だと推測する。
337デフォルトの名無しさん:2006/02/19(日) 18:05:14
素直に
3.times do |num|
end
でも良い。
338デフォルトの名無しさん:2006/02/19(日) 18:39:49
while常用してる入門書は燃やしてよし
339335:2006/02/19(日) 18:41:12
スコープの問題か…。
実際にはtext項目に別の文字列を指定したいし、
commandももう少し複雑だし、動的にボタンを作りたいので
そこだけ関数形式にしようと思います。
ありがとね。
340335:2006/02/19(日) 18:43:12
require 'tk'
def b(x)
 TkButton.new {
  text 'button'
  command { p x }
 }.pack
end
num = 0
while num < 3
 b(num)
 num += 1
end
Tk.mainloop
一応解決策を張っておきます。
341デフォルトの名無しさん:2006/02/19(日) 20:06:50
これでいいんじゃ?

require 'tk'
num = 0
while num < 3
 TkButton.new {
  text 'button'
num2 = num
  command { p num2 }
 }.pack
 num += 1
end
Tk.mainloop


つうか
>numのスコープの問題
というRubyのスコープに問題があるかのような書き方すな。
他の言語でも大抵同じ動作だ。
342335:2006/02/19(日) 20:37:12
>>341
あ、new の引数ブロックに tcl に渡す以外の式が書けるとは知りませんでした。
参考になります。ありがと。
343デフォルトの名無しさん:2006/02/21(火) 19:05:06
erbを使って、%w[ a b c ] から、"a/b/c" と言う出力を出したいのですが、
うまい方法は、無いでしょうか?

% %w[ a b c ].each { |x|
<%= x %>/
% }

だと、最後に'/'がついてしまいますし、

% a = %w[ a b c ].collect { |x|
% x
% }.join( '/' )
<%= a %>

だと、美しくありません(たとえば、"a.html/b.html/c.html" に変えようと
すると文字列の足し算や"#{x}"が必要になる)。
344デフォルトの名無しさん:2006/02/21(火) 19:13:27
<%= %w[ a b c ].join("/") %>
345デフォルトの名無しさん:2006/02/21(火) 21:34:29
今Rubyお勉強中だけどひとつのファイルに

##!! forのサンプル
for i in 0..10
  puts i
##!! timesのサンプル
3.times{|i}
  puts i
}
##!! end
とかやって
カーソルがある##!!ではさまれた領域を切り出して実行するエディタマクロ作ったら
サンプルのファイル散らばらなくなってめちゃ快適。
頭良すぎね?
346デフォルトの名無しさん:2006/02/21(火) 21:46:08
>>345
天才!!!!!!!!!!!!!!!!!!!!!!!!!!
347デフォルトの名無しさん:2006/02/21(火) 22:06:28
>>345
神!!!!!!!!!!!!!!!!!!!!!!!!!!

名前つけようぜ。
 「いい感じに」
 「Rubyスクリプトを」
 「部分実行する」
の頭文字を取って
“irb”
というのはどうだろう
348デフォルトの名無しさん:2006/02/21(火) 22:13:59
>>347
それいいな。
349デフォルトの名無しさん:2006/02/21(火) 22:27:42
irbはコードがためらんないからうんこ
350デフォルトの名無しさん:2006/02/21(火) 22:39:57
>>349
KWSK
351デフォルトの名無しさん:2006/02/21(火) 22:43:42
bash:

$ for str in 1 2 3 4 5
> do
> echo $str
> done
1
2
3
4
5
$                 ← ここでCtrl-P
$ for str in 1 2 3 4 5; do echo $str; done

irb:

irb:0> [1,2,3,4,5].each do |str|
irb:1* puts str
irb:1> end
1
2
3
4
5
=> [1, 2, 3, 4, 5]
irb:0>                 ← ここでCtrl-P
irb:0> end

このへんがうんこ
352デフォルトの名無しさん:2006/02/21(火) 22:52:15
>>351
同意
353デフォルトの名無しさん:2006/02/22(水) 00:25:07
readline じゃ難しいのかな? Zsh なんかはどうやってるんだろう?
354デフォルトの名無しさん:2006/02/22(水) 00:41:55
>>353
zshはreadline使ってないよ。独自に実装してる
355デフォルトの名無しさん:2006/02/22(水) 00:46:34
>>354
いや、だからどうやってるのかな?と。
356デフォルトの名無しさん:2006/02/22(水) 01:11:16
http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=RubyTkTut%3A%3A%A5%EA%A5%B9%A5%C8%A5%DC%A5%C3%A5%AF%A5%B9%A4%C8%A5%B9%A5%AF%A5%ED%A1%BC%A5%EB%A5%D0%A1%BC
scroll = TkScrollbar.new {
command proc { |arg| listbox.yview *arg }
pack('side' => 'right', 'fill' => 'y')
}

#listbox.configure('yscrollcommand' => proc { |arg| scroll.set *arg })
listbox.yscrollcommand(proc { |arg| scroll.set *arg })

warning: multiple values for a block parameter (2 for 1)
from c:/usr/bin/ruby/lib/ruby/1.8/tk.rb:1089

という警告がでまくるんですがどう書くのが正しいんでしょうか?

357デフォルトの名無しさん:2006/02/22(水) 01:55:19
>>356
|*arg|
358デフォルトの名無しさん:2006/02/22(水) 03:34:50
awk '{print $1+$2}' input.txt
を ruby でワンライナで書くとどうなんの?
input.txt は一行に空白で区切られた 2つの数が入ってるとして。
359デフォルトの名無しさん:2006/02/22(水) 03:48:08
inf-rubyって使ってないけどどうなの?
360デフォルトの名無しさん:2006/02/22(水) 04:13:52
>>358
-a autosplit mode with -n or -p (splits $_ into $F)
-e 'command' one line of script. Several -e's allowed. Omit [programfile]
-Fpattern split() pattern for autosplit (-a)
-l enable line ending processing
-n assume 'while gets(); ... end' loop around your script
-p assume loop like -n but print line also like sed

[tips] $ cat a.tmp
1 2
3 4
5 6
7 8
9 10
11 12
[tips] $ ruby -lane 'print $F[0].to_i + $F[1].to_i' a.tmp
3
7
11
15
19
23
[tips] $
361デフォルトの名無しさん:2006/02/22(水) 17:52:49
RDEでスクリプトを実行すると、そのファイルのあるディレクトリで実行されちゃうんだけど、
カレントディレクトリを別の所に指定して編集中スクリプトを実行するにはどうすればいいの。
362デフォルトの名無しさん:2006/02/22(水) 20:25:51
>>356
listbox.yscrollbar(TkScrollbar.new.pack(:side=>:right, :fill=>:y))
363デフォルトの名無しさん:2006/02/22(水) 21:06:03
Rubyってやる意味あるの?
364デフォルトの名無しさん:2006/02/22(水) 21:07:26
むしろやらない意味がない
365デフォルトの名無しさん:2006/02/22(水) 21:15:02
わかりました、Pythonにします。
366デフォルトの名無しさん:2006/02/23(木) 00:51:57
オナニーってやる意味あるの?
367デフォルトの名無しさん:2006/02/23(木) 04:13:11
むしろやらない意味がない
368デフォルトの名無しさん:2006/02/23(木) 09:43:30
わかりました、フェラにします。
369デフォルトの名無しさん:2006/02/23(木) 10:21:01
女とやる意味ってあるの?
370デフォルトの名無しさん:2006/02/23(木) 10:22:33
お、初心者スレのイメージダウン捏造に必死だな
371デフォルトの名無しさん:2006/02/23(木) 12:01:57
UTF-8で保存したファイルを-Ku付きで実行させたのだけど
文字化けが原因でundefined local variableうんぬんで起こられちゃう。

調べてみるとBOM付きUTFって形式で保存してあったみたいで、
これをUTF-8Nにしたら通ったわけですが、Rubyって
こういうもんなんですか?
372デフォルトの名無しさん:2006/02/23(木) 12:08:00
Rubyに限らず結構そういうもん。
373デフォルトの名無しさん:2006/02/23(木) 12:14:08
バイトオーダーマークはつけてはいけない。
UTF-8(って何)だとエディタが認識しやすいという理由だけでついてるようなもん。
そのエディタ以外でもその文書を使いまわそうと思ったなら、BOMはつけてはいけない。


んだがWindowsのメモ帳でつくんだよなああああああ
374デフォルトの名無しさん:2006/02/23(木) 12:18:31
>372 >373
どうもありがとう。すっきりしました。
375デフォルトの名無しさん:2006/02/23(木) 12:36:20
>んだがWindowsのメモ帳でつくんだよなああああああ
そのくせBOMるとvbsがエラーを吐くんだよな
376デフォルトの名無しさん:2006/02/23(木) 12:45:52
気を利かせてちょこっと避けて通ってくれてもいいじゃんね
377デフォルトの名無しさん:2006/02/23(木) 13:21:51
ちょ、さすが Windows だなw
久々に笑った
378デフォルトの名無しさん:2006/02/23(木) 14:36:47
MicrosoftはUnicodeを理解してるのか?
379デフォルトの名無しさん:2006/02/23(木) 14:43:11
他のどのベンダよりも理解してるだろ。最初の提案グループの一員なんだし。
UTF-8とかを理解してるかどうかは知らん。
380デフォルトの名無しさん:2006/02/23(木) 18:19:28
今からrubyかpythonを勉強したいのですが
どっちか選ぶとしたら
やはりrubyの方がおすすめでしょうか?
381デフォルトの名無しさん:2006/02/23(木) 18:21:57
両方
382デフォルトの名無しさん:2006/02/23(木) 18:21:59
そらこのスレで聞いたらお勧めになる罠。
出来ることに大差はないんで
どっちか選んでしっかり覚えとけ。
383デフォルトの名無しさん:2006/02/23(木) 18:29:32
ここは、流れからしてあえてPythonだな。
384デフォルトの名無しさん:2006/02/23(木) 19:01:34
最近また、明ら様な釣りをしてる奴が出没してるから、適当に流しとけよ。
385デフォルトの名無しさん:2006/02/23(木) 19:02:49
Railsを触ってみたくて、Rubyはじめたんですが
みなさんはRubyで何を作ってるんですか?
Rails以外の使い道が知りたいです。
386デフォルトの名無しさん:2006/02/23(木) 19:10:40
RAA (http://raa.ruby-lang.org/) の Application Category を眺めてみてはいかが?
387デフォルトの名無しさん:2006/02/23(木) 19:34:51
>>380
日本人開発の内輪ローカル言語Rubyと
全世界のコミュニティと企業に支持され発展し続けるPythonでは
将来性の点で勝負にならん。何も迷うことはない。
388デフォルトの名無しさん:2006/02/23(木) 19:37:37
>>386
ありがとうございます。
389デフォルトの名無しさん:2006/02/23(木) 19:48:17
>>385
マジレスすると他の言語じゃなくてこの言語だからできるってのは
今どきのスクリプト言語なら基本的にはない。それは Perl だろうが
Ruby だろうが Python だろうが同じこと。ただ使いたいライブラリが
揃ってるとかアプリにすごく魅力的なものがあるとか、割と日本語の
資料が揃ってるとか、あと書きやすいとか読みやすいとかそういう
理由で選ばれる。個人で使う分には。

仕事の場合は前任者が Perl だったから Perl とか、そんな程度で決まる。

まれに言語のために仕事を変える人が出てくる。そんな感じ。

あと、Ruby 使ってるからって何かを作ってるとは限らないよ。
390デフォルトの名無しさん:2006/02/23(木) 20:02:12
Pythonよりは日本語資料があるのでRubyにした。
Lispよりは書籍があるのでRubyにした。
Perlよりは…Perlの勉強するとモジュールのへんで眠くなるのでPerl以外を選んだ。

Linuxサーバとか常用してないとスタートダッシュする気起きないだろうなとも思う。
391デフォルトの名無しさん:2006/02/23(木) 20:02:34
portupgrade にしか Ruby を使っていない (そもそもそれは使っているとは言えない) 俺様が来ましたよ。
392デフォルトの名無しさん:2006/02/23(木) 20:23:13
portupgrade で Ruby がインスコできればいいのに。
393デフォルトの名無しさん:2006/02/23(木) 21:30:46
クラスの継承を行ったとき、スーパークラスで使ったインスタンス変数って
継承クラスでは使えない??

スーパークラスでは"@ooo"とかでインスタンス変数を使いたいとするじゃん。
んで、initialize関数で初期化したとするよね。

で、継承クラスで、新たにさらに別のクラス変数を初期化するために
initialize内で"@ppp"を初期化したとする。(ここのなかでは@oooは初期化しない)

このとき、継承クラス内だとinitialize関数の再定義を行うことになっちゃって、
スーパークラスで初期化した"@ooo"が使えなくなっちゃう訳で。

スーパークラスで初期化するだけで継承クラスの中でも
同様に初期化された同じクラス変数が使いたい場合、
スマートなRubyプログラマならどう解決するんだろう?

初心者かつ、OOP自体不慣れで悪いが、エスパー回答キボンヌ。
394デフォルトの名無しさん:2006/02/23(木) 21:35:22
>>393
super

ちなみに、「クラス変数」と「インスタンス変数」は別物。
395デフォルトの名無しさん:2006/02/23(木) 21:39:22
ほんとだー。ミス…orz
ここでは
{"クラス変数"=>"インスタンス変数"}
で読み替えてくださいです。まじゴメン。。
396デフォルトの名無しさん:2006/02/23(木) 21:54:41
速攻レスありがとう。
なるほど、スーパークラスの同名のメソッド呼び出しするsuper使えばいいのか。
…ふむふむ。ということはー。

class A_super
def initialize
@value = "test\n"
end
attr_accessor :value
end

class B_inheritance < A_super
def initialize
@arr = []
end
attr_accessor :arr
end

……どこでsuper使うんだろ…orz
やっぱり分からん、再び教えてたもれ。
実はここちょっとリファレンスとか読んでみてもわかんなかったんです。
397デフォルトの名無しさん:2006/02/23(木) 21:56:16
class B_inheritance < A_super
def initialize
super
@arr = []
end
attr_accessor :arr
end

とか。
398デフォルトの名無しさん:2006/02/23(木) 22:08:50
initializeをintializeとtypoしてたというのは秘密の方向で。。。
でもお陰で解決したよ。ありがとう。
399デフォルトの名無しさん:2006/02/23(木) 23:54:36
protected
400デフォルトの名無しさん:2006/02/24(金) 00:26:21
なんかまるで初心者質問スレッドみたいな流れだな
401デフォルトの名無しさん:2006/02/24(金) 01:08:31
>>400
というか、そんなスレなんじゃないの?
402デフォルトの名無しさん:2006/02/24(金) 10:07:03
おお>>400よ まじれすされてしまうとはなさけない
403デフォルトの名無しさん:2006/02/24(金) 15:22:38
Dir.globのflagsって何指定すればいいんですか?
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Dir

ディレクトリ以外を列挙したいんですが。
404デフォルトの名無しさん:2006/02/24(金) 15:25:43
> 省略可能な第二引数には File.fnmatch に指定できるフラグと同様のフラグを指定できます。
> このフラグを指定することでマッチの挙動を変更することができます。
405デフォルトの名無しさん:2006/02/24(金) 15:44:34
glob 一発じゃ無理でしょ。そういうパターンはない。 zsh じゃあるまいし。

entries に FileTest.directory? で reject すればいいんじゃない?

406デフォルトの名無しさん:2006/02/24(金) 15:55:49
>>404
すいません見落としてました・・・
ただそれ以前に

Dir.glob("c:\\*.*").each{|f|
puts f
}

が動きません・・・
407デフォルトの名無しさん:2006/02/24(金) 15:58:46
>>406
そういう時は "c:/*.*" にしてみるんだ!

ところで、拡張子つきのファイルしかいらないんじゃなければ、
"c:/*" の方がいいよ。
408デフォルトの名無しさん:2006/02/24(金) 16:16:27
rescue で Timeout::Error が捕捉できなくてどうしたことだろうと思ったら
rescueは Interupt が捕捉出来ない仕様になってて、
TimeoutError は Interupt のサブクラスなのね。

補足するにはどうしたらいいの?教えてエライ人。
409408:2006/02/24(金) 16:42:59
自己解決しました。
error_typeを省略せずに書けば委員ですね。
410デフォルトの名無しさん:2006/02/24(金) 19:20:02
pack 文字列の説明で e, E, g, G が機種依存となっているけど、
例を見ると依存してなくないですか?
411デフォルトの名無しさん:2006/02/24(金) 19:44:33
例の場合には依存してないように見えるだけ。例が悪いのは別の話。
412デフォルトの名無しさん:2006/02/25(土) 00:02:14
なるほど。
一応調べてみましたが、 [ruby-dev:4327] から [ruby-dev:4599] で eEgG が導入され、
メジャーな環境ではそこそこ互換性があるけど、いまひとつ、って感じでしょうかね。
413デフォルトの名無しさん:2006/02/25(土) 12:23:32
RSS Parser って Atom には対応してないの?
414デフォルトの名無しさん:2006/02/25(土) 18:36:45
RSSだしな
415デフォルトの名無しさん:2006/02/25(土) 18:41:29
ぬう
416デフォルトの名無しさん:2006/02/25(土) 20:21:25
Rubyでjpegとか、gifとか操作できんもんなのかね。
417デフォルトの名無しさん:2006/02/25(土) 20:31:52
>>416
つ RAA - Library / Graphics
418デフォルトの名無しさん:2006/02/26(日) 00:25:48
ふーむ。
できたらPureRubyで画像のリサイズしたいんですが…
419デフォルトの名無しさん:2006/02/26(日) 00:29:21
なににつかうの?
420デフォルトの名無しさん:2006/02/26(日) 00:41:03
PureRuby のはないね。
PNG なら PureImage があるけど。
http://cappuccino.jp/keisuken/ruby/pureimage/
421デフォルトの名無しさん:2006/02/26(日) 00:52:22
いやー、もしあればさ、Ruby Readyなcgiサーバーで、
PureRubyの画像掲示板が設置できるじゃん。

それって、なんかいいよなって思ったの。
422デフォルトの名無しさん:2006/02/26(日) 01:07:01
漏れも16x16のたくさんのビットマップを横方向に連結したい・・・
423デフォルトの名無しさん:2006/02/26(日) 01:08:23
フォトコラージュでもやるんかな。
424デフォルトの名無しさん:2006/02/26(日) 01:50:29
>422
WindowsのBMP(DIB)なら何となくコードのイメージは湧く。
作れ言われたら2日くらい掛かりそうだがby毛の生えた素人orz
425デフォルトの名無しさん:2006/02/26(日) 02:17:26
RMagicかな。
426デフォルトの名無しさん:2006/02/26(日) 02:18:40
>>425
PureRuby なの?
427デフォルトの名無しさん:2006/02/26(日) 02:41:29
名前からするとImageMagicに依存してそうなもんだけどなー
どうなんだろ
428デフォルトの名無しさん:2006/02/26(日) 03:03:07
どうなんだろってそんなに調べるの大変か?
http://rmagick.rubyforge.org/
429デフォルトの名無しさん:2006/02/26(日) 03:03:49
って綴り間違ってるからぐぐりにくかったのかな?
430デフォルトの名無しさん:2006/02/26(日) 03:09:15
Ruby.NETだか.NETへのブリッジライブラリ使うと
Bitmapとかいじり放題なのかね。
431デフォルトの名無しさん:2006/02/26(日) 06:01:33
RMagickはPureRubyではなさげ
432デフォルトの名無しさん:2006/02/26(日) 06:39:55
なさげってそんなに調べるの大変か?
http://rmagick.rubyforge.org/
433デフォルトの名無しさん:2006/02/26(日) 09:09:13
PureRubyで画像リサイズとかすごく重そう。
434デフォルトの名無しさん:2006/02/26(日) 10:00:25
なんでも自力でやりたがるPerlで一般的でないってことは
そもそもの処理が重いってことだろうからな
435デフォルトの名無しさん:2006/02/26(日) 13:40:43
勝手にWindowsユーザだと判断するが。
ttp://rmagick.rubyforge.org/install-faq.html#win

とりあえず3回は嫁。
436デフォルトの名無しさん:2006/02/26(日) 19:40:21
RMatickはImageMagickを含んでいるげ
437デフォルトの名無しさん:2006/02/26(日) 21:12:13
げってそんなに調べるの大変か?
http://rmatick.rubyforge.org/
438デフォルトの名無しさん:2006/02/27(月) 00:21:52
あーなんか、解決したぽい。オレんとこのホスティングサービスしてくれてるサーバーは、ImageMagickはいってるっぽ。
なるほどね、RubyからImageMagickマニュピレートするのか。

英語ドキュメンテーション読むのめんどいな。明日にしよっと。dクシ。
439デフォルトの名無しさん:2006/02/27(月) 00:39:07
いや、それ普通だろ。
入ってなかったら入れれば良いんだし。
日記は自分のブログでやるなり、それ系のスレに移ってくれ。
440デフォルトの名無しさん:2006/02/27(月) 00:49:08
んだな、ありがとん。正直すまんかった。
441デフォルトの名無しさん:2006/02/27(月) 19:50:26
ImageMagickは、つい「いめーじまじっくく」と読んでしまう・・・
442デフォルトの名無しさん:2006/02/28(火) 00:24:10
ApolloのListViewで行ごとのフォントの色を変えるには、
どうすればいいんですか?
443デフォルトの名無しさん:2006/02/28(火) 00:56:30
OwnerDraw
444デフォルトの名無しさん:2006/02/28(火) 13:49:35
いやちがうべ
445デフォルトの名無しさん:2006/03/01(水) 00:28:37
5GBの0で埋まったファイルを高速に作るのってどう書けばいいですか?
446デフォルトの名無しさん:2006/03/01(水) 00:41:06
>>445
UNIX like な環境なら dd を system か何かで呼べば良いだろうけど、他でも
動くように Ruby で書こうとしたら、素直にファイルを開いて書き込むしか
無いんじゃないか。
447デフォルトの名無しさん:2006/03/01(水) 01:35:21
コレでいけない? Windows とかだとデカすぎてダメかもしれないけど。
File::open("hoge", "w") { |f| f.truncate(5_000_000_000) }
448デフォルトの名無しさん:2006/03/01(水) 01:52:53
>>445
sparse fileじゃだめ?
449デフォルトの名無しさん:2006/03/01(水) 05:54:13
Amritaについて質問
-----------------
include Amrita
tmpl = TemplateText.new <<END
<table>
<tr id=tr1>
<td id=td1></td>
<td id=td2></td>
</tr>
</table>
END
data = {
:tr1 => [ {:td1=>"1_1", :td2=>"1_2"}, {:td1=>"2_1", :td2=>"2_2"} ]
}
tmpl.expand(STDOUT, data)
-----------------
こんな時に<tr>の属性を条件付で変えていきたい場合は
どうすりゃいいの?
:trに配列を連想してしまってるのでAmrita::aメソッドが使えないよね?
450デフォルトの名無しさん:2006/03/01(水) 12:12:10
dirとfileを統一的に削除できないの?
451デフォルトの名無しさん:2006/03/01(水) 12:14:57
>>450
FileUtils::rm_r, FileUtils::rm_rf あたりはどう?
452デフォルトの名無しさん:2006/03/01(水) 17:19:20
>>450
Pathname#unlink はどう?
453デフォルトの名無しさん:2006/03/01(水) 17:33:26
puts "x = "
x = gets.to_i
puts "y = "
y = gets.to_i
puts "x + y = ", x + y

このようなコードを実行すると、

5 (←入力数値)
5 (←入力数値)
x =
y =
x + y =
10

といった具合に、文字列の出力するタイミングが意図したものにならないんですが・・・。
どうすればいいのでしょうか。
454デフォルトの名無しさん:2006/03/01(水) 17:37:37
put を print に汁
455デフォルトの名無しさん:2006/03/01(水) 17:46:00
・puts は出力あとに改行が自動的に差し込まれる。複数の引数を与えると、
引数ごとに末尾に改行を追加する。したがってこういうケースでは print の方が適切

・getsの前に puts の結果を確実に出力させたければ、 $stdout.flush を差し込むとよい
456デフォルトの名無しさん:2006/03/01(水) 18:25:31
>>454-455
回答ありがとうございます。うまく動いてくれましたー。
457デフォルトの名無しさん:2006/03/02(木) 00:13:32
Process::daemon バックポートされないかなー
458デフォルトの名無しさん:2006/03/02(木) 16:45:15
多重ループからのbreakしたくなったらdefに切り出してreturnしろって事なのかもしかして
459デフォルトの名無しさん:2006/03/02(木) 17:04:37
460デフォルトの名無しさん:2006/03/02(木) 17:07:11
>>458
組み込み関数→catch、throw、raise
461デフォルトの名無しさん:2006/03/02(木) 17:35:37
それ例外処理なんじゃ…
インタプリタのオーバーヘッド全体から見るとそう重くないのかな
462デフォルトの名無しさん:2006/03/02(木) 18:09:04
例外処理はエラー制御の為だけにあるものじゃないし
そもそもcatch、throwに至っては
リファレンスに多重ループ脱出の例として載ってる程。
多重ループ脱出だけが目的なら基本的にはcatchかな。
463デフォルトの名無しさん:2006/03/02(木) 19:22:20
>>461
Ruby の catch, throw は例外処理じゃないぞ
464デフォルトの名無しさん:2006/03/02(木) 22:35:40
整数を1だけインクリメントするとき、みなさんどうしてるんですか?
++i ができないことに、今日きづきました。
i += 1 と書くの?? 
++iができないのはどういう宗教的理由からなのん?
465デフォルトの名無しさん:2006/03/02(木) 22:37:03
fuck you
散々がいしゅつ
++はやらん
466デフォルトの名無しさん:2006/03/03(金) 00:27:04
Pythonもできないので、Pythonianにも聞いてみてください
467デフォルトの名無しさん:2006/03/03(金) 00:30:48
つうか整数をインクリメントすることなんてあんまないだろ
468デフォルトの名無しさん:2006/03/03(金) 00:31:42
いちいち蒸し返すなと
469デフォルトの名無しさん:2006/03/03(金) 00:32:04
>>464
ループするならRangeクラスとか。 (0..10) のやつ。あれこんな書き方だっけ?
470デフォルトの名無しさん:2006/03/03(金) 12:11:24
Rubyを簡単に利用できるDLLとかってないですか?
RubyEval(const char *scripts, RubyResult *result)
一個ですむようなの。
471デフォルトの名無しさん:2006/03/03(金) 14:09:09
dllなら無いがC/C++から呼び出すくらいなら可能
http://takahr.dhis.portside.net/cgi-bin/rwiki.cgi?cmd=edit;name=%C1%C8%A4%DF%B9%FE%A4%DFRuby
472デフォルトの名無しさん:2006/03/03(金) 15:28:02
そこまで簡単(そう)にできるならDLLにまとめておいて欲しかった・・・

とかいっちゃ駄目ですか?
473デフォルトの名無しさん:2006/03/03(金) 15:37:59
>>472
駄目ではないのですが、言い出しっぺの法則という言葉を御存知でしょうか?
474デフォルトの名無しさん:2006/03/03(金) 17:52:44
この言葉、凶器だよな
475デフォルトの名無しさん:2006/03/03(金) 18:14:38
「伽藍とバザール」読んでたら、
「問題を発見する人 と 問題を解決する人 は 別の場合がほとんど」
って書いてあったぞ。

個人的にも、言いだしっぺの法則はあんまりうまく機能しないと思う。
476デフォルトの名無しさん:2006/03/03(金) 18:23:09
有名アプリに組み込まれたらユーザーベースも拡大しそうだな。
477デフォルトの名無しさん:2006/03/03(金) 18:27:55
組み込み Ruby ってスレッドセーフなんだっけ?
478デフォルトの名無しさん:2006/03/03(金) 18:33:35
スレッドがそもそもマルチプロセッサ非対応だったりしてあんまり好きじゃないんだが。
479デフォルトの名無しさん:2006/03/03(金) 18:43:43
>>475
「言い出しっぺの法則」って、言われた人間が言った
人間に及ばないと思っている場合は「できねーやつは
黙ってろ」にしか聞こえないんだよな

まぁ実際黙ってろの意味で使う人もいるんだろうけど

2ch語みたいなもんかねぇ
身内で使ってる分には微笑ましいって感じ
480デフォルトの名無しさん:2006/03/03(金) 18:57:40
fj語かと思ってた。
481デフォルトの名無しさん:2006/03/03(金) 19:25:53
> 言われた人間が言った人間に及ばないと思っている場合は
これが、まず無い。
482デフォルトの名無しさん:2006/03/04(土) 08:36:24
>>476
風博士に組込まれたとかなんとか噂を聞いたけど。
483デフォルトの名無しさん:2006/03/04(土) 11:13:16
つまり風博士が有名なアプリだと主張したいのか?

RGSS の方がまだしもメジャーという気がするなあ。
484デフォルトの名無しさん:2006/03/04(土) 13:12:28
>>476
Firefox で使えるようになるらしい。
http://itpro.nikkeibp.co.jp/article/NEWS/20060302/231610/
485デフォルトの名無しさん:2006/03/04(土) 13:14:09
で、DLLはマダー?
486デフォルトの名無しさん:2006/03/04(土) 23:10:42
るびまのコード添削をよんでみたんだけど、みんなあんなの書けるようになるの?
Cの凄いマクロを見ているような印象を受けたんだけど
487デフォルトの名無しさん:2006/03/05(日) 00:39:20
>485
つ [msvcrt-ruby18.dll]

え? 仰せの通りDLLですが何か? w
488デフォルトの名無しさん:2006/03/05(日) 00:46:55
rubyでE4Xを扱うにはどうしたらいいんでしょうか?
489デフォルトの名無しさん:2006/03/05(日) 01:05:18
E4X って ECMAScript for XML のこと?
490デフォルトの名無しさん:2006/03/05(日) 01:07:23
>>489
そう、それです。
どっかのサイトで使えるっぽい記述見たのですが、
ライブラリらしきものも見当たらないので…。
491デフォルトの名無しさん:2006/03/05(日) 02:04:39
>>486
>みんなあんなの書けるようになるの?
Ruby使い続けて早数年経つけど
向上心がないので最低一人は書けまへんw

もともと簡潔に書けるからそんなに気合入れて
文法やライブラリ駆使して詰め込まなくても便利に使えてるよ。
492デフォルトの名無しさん:2006/03/05(日) 03:06:12
るびこのコードを見てがっかりした件
493デフォルトの名無しさん:2006/03/05(日) 09:45:03
>>492
kwsk
494デフォルトの名無しさん:2006/03/05(日) 10:50:41
>>487
+rb_eval_string_protect()かな。
495デフォルトの名無しさん:2006/03/06(月) 00:27:46
>>486
まずはこれを嫁。
Smalltalkベストプラクティス・パターン
http://www.amazon.co.jp/exec/obidos/ASIN/4894717549/
496デフォルトの名無しさん:2006/03/06(月) 00:36:23
>>495
なぜスモールトーク?
497デフォルトの名無しさん:2006/03/06(月) 06:41:25
msvcrt-ruby18.dll のライセンスってどうなるの?
GPL?
(((( ;゚Д゚)))ガクガクブルブル
498デフォルトの名無しさん:2006/03/06(月) 07:04:07
ruby windows版には、GPLって書いてあるけど、
LEGALみると、regex.[ch]:だけが、LGPLみたいだなあ・・・
499デフォルトの名無しさん:2006/03/06(月) 07:38:12
んーー。わけがわからん。
http://www.ruby-lang.org/ja/LICENSE.txt
を見ると、GPL or 独自ライセンスなのだが、

ruby-mswin32は、GPLになっとる。
配布されているDLL使う場合は、GPLに従わなくてはならないのですかね。
500デフォルトの名無しさん:2006/03/06(月) 09:48:57
鬼車にすりゃ全て解決?
501デフォルトの名無しさん:2006/03/06(月) 10:51:50
鬼車は正規表現エンジンだけだろ。RubyそのもののバックエンドがGPLって話。
502500:2006/03/06(月) 10:56:41
>>501
>>498 を見て、 regex にひきずられたせいで GPL なのかなと思ったんだけど、違う?
503500:2006/03/06(月) 10:57:29
>>501
というか、「Rubyそのもののバックエンド」ってどういう意味?
504デフォルトの名無しさん:2006/03/06(月) 11:56:32
Rubyライセンス(?)に従って、msvcrt-ruby18.dllのソースだけ
確保しておけばいいんじゃない?
505デフォルトの名無しさん:2006/03/06(月) 14:06:08
メソッドのoverloadってないんですか?

単一のdef foo(*arg)
で個数、タイプによって分岐?
506デフォルトの名無しさん:2006/03/06(月) 14:16:23
>>505
うん。
507デフォルトの名無しさん:2006/03/06(月) 14:27:44
了解です。

def foo
end

def foo(arg)
end

とoverloadを期待して並べてもエラーが出ませんが
これはただの再定義なんですね。
508デフォルトの名無しさん:2006/03/06(月) 14:31:37
>>507
うん。
509デフォルトの名無しさん:2006/03/06(月) 16:09:26
>>484
超期待
510497:2006/03/06(月) 18:25:09
作者たんに問い合わせたら、msvcrt-ruby18.dll は、GPLだって。
独自ライセンスはグレーという判断でGPLにしたらしい。

DLLだけ使うなら、鬼車使わなくても、自分でコンパイルすれば、
独自ライセンスが適用できるからおkっぽいです。
ちょっと作ってみようかと思います。
511486:2006/03/06(月) 20:20:09
>>491
便利に使えてるか ちょっと安心した
>>495
Smalltalk読めないんだけど勉強してでも読む価値ある?
内容がわからないんだけどイディオム集かな? 言語指定されてるから
512デフォルトの名無しさん:2006/03/06(月) 22:06:48
>>511
495 じゃないけど、こんな人も居るよ。

http://www2a.biglobe.ne.jp/~seki/ruby/best_practice.html
513デフォルトの名無しさん:2006/03/06(月) 23:16:42
Smalltalk 知らなくても読む価値あると思う。
514497:2006/03/06(月) 23:23:19
訂正
>独自ライセンスはグレーという判断でGPLにしたらしい。
独自ライセンスは、一部コードでライセンス違反という判断でGPLにしたらしい。
515デフォルトの名無しさん:2006/03/07(火) 00:37:32
>>512-513
面白そうだな、読んでみる。 サンクス。
今読んでるdRuby本読み終わってからだけど
しかしコード添削がCの難解なマクロっぽいと感じることの解決になるのかな
516デフォルトの名無しさん:2006/03/07(火) 02:31:33
>>507
個人的には初期値でやる方が好き。

def foo(arg=nil)
 if arg then
517デフォルトの名無しさん:2006/03/07(火) 07:56:46
たびたび世話になってます。
Rubyというより、Unix初心者なのかもしれんが、
Rubyから外部アプリケーションを利用するとき、

io = IO.popen("/usr/bin/hogehoge cmd_option_A cmd_optionB","r")

みたいな感じでIOオブジェクト生成して、
外部コマンドからの戻り値はioに書き込まれるものとして扱うという理解でOKなん?

もしそれでよかったとしてね、
外部コマンドをコマンドリテラルでRubyスクリプトの文脈中に書いてるものを見つけたんだけどさ、
たとえば上の例でこんな感じ。

io = `/usr/bin/hogehoge cmd_option_A cmd_optionB`

問題なく起動するんだけど、

1.上で扱った場合との違い
2.1.とかぶるけどメリットデメリットは?
ってのが疑問なんだけど。
激しく初心者ですまん…
518デフォルトの名無しさん:2006/03/07(火) 08:53:08
>>517

前者はパイプだから、コマンドが終了していなくても、パイプに書き込まれればそれを読むことができます。
後者はコマンドの出力結果を受け取っているから、コマンドが終了しないとその出力を受け取ることができません。

コマンドの実行が一瞬でおわる場合は後者でまったく問題ありません。
しかしコマンドがずっと起動しっぱなしのようなものの場合、前者でないとその出力を読むことはできないでしょう。
例えばWebサーバのログを見たい場合、前者のほうがおすすめです。後者ならWebサーバが終了しないと出力を受け取れません。

以上です。お役に立ちましたでしょうか。
519デフォルトの名無しさん:2006/03/07(火) 10:33:22
ノリが違ったかな。
なるほど。ありがとうございます。

つまりこういうことかな
前者はパイプを開くから、パイプを閉じるか、開いたパイプの先のサブプロセスが終了したらサブプロセスが終了するが、
それまでは出力結果がずっとIOオブジェクトに書き込まれる。
後者は、サブプロセスが閉じるのをずっと待つ。それまでは出力結果が受け取れない。

だからメリット・デメリットは、
サブプロセスを監視したいときは、ちゃんとIOオブジェクトを生成するのが吉
サッと書きたいときは、コマンドリテラルでまとめちゃったほうが楽
でいいのかな。
520デフォルトの名無しさん:2006/03/07(火) 10:46:33
わかってるとは思うけど、
> io = `/usr/bin/hogehoge cmd_option_A cmd_optionB`
ここで返ってくるのは IO オブジェクトじゃなくて文字列データね。
なので、 read したり close したりする手間もかからないのもメリットのひとつかな。
521デフォルトの名無しさん:2006/03/07(火) 10:47:17
うんうん、そうだな、なるほど、ありがとう。
522デフォルトの名無しさん:2006/03/07(火) 15:41:34
io = `/usr/bin/hogehoge cmd_option_A cmd_optionB`

つか、これって IO 関係なくないか?
523デフォルトの名無しさん:2006/03/07(火) 16:04:54
流れを読もうや
524デフォルトの名無しさん:2006/03/08(水) 11:58:24
ライブラリの末尾に書いた

if $0 == __FILE__
 ...
end

というコードはifが不成立の時、削除されますか?
525デフォルトの名無しさん:2006/03/08(水) 12:03:08
削除はされないと思うが、評価されない。
526デフォルトの名無しさん:2006/03/08(水) 12:37:10
>>525
もう少し自信を持っていいと思う。
527デフォルトの名無しさん:2006/03/08(水) 16:12:28
メガネははずしたほうがいい。
528デフォルトの名無しさん:2006/03/08(水) 16:47:05
このメガネの時代に何を言うんだね、きみは
529デフォルトの名無しさん:2006/03/08(水) 18:14:51
怒るでしかし
530デフォルトの名無しさん:2006/03/08(水) 18:37:57
やっさんキターー
531デフォルトの名無しさん:2006/03/08(水) 18:49:27
髪は下ろしたほうがいい。
532デフォルトの名無しさん:2006/03/08(水) 18:50:09
つまんないからもういいよ
533デフォルトの名無しさん:2006/03/08(水) 20:37:50
息子が逮捕されていたね
534デフォルトの名無しさん:2006/03/08(水) 20:39:16
>>533
何の話?
535デフォルトの名無しさん:2006/03/08(水) 20:42:00
>>534
毎度!横山や!
536デフォルトの名無しさん:2006/03/08(水) 23:38:30
*,?のワイルドカード処理するクラスありますか?
537デフォルトの名無しさん:2006/03/08(水) 23:42:59
>>536
Dir.glob('*.html') かな。
538デフォルトの名無しさん:2006/03/08(水) 23:50:53
ファイルのリストではなくStringに対して判定をしたいです。
if Wildcard.match("foo*", "foobar") then ...
といった感じで
539デフォルトの名無しさん:2006/03/09(木) 00:09:43
正規表現使え。
540デフォルトの名無しさん:2006/03/09(木) 00:11:44
File.fnmatch
541デフォルトの名無しさん:2006/03/09(木) 23:28:24
定数の違うクラスを生成するクラスはつくれますか?
またはクラス変数でもよかったのですが、サブクラスで定義しても、他のサブクラスから参照されちゃうので…
542デフォルトの名無しさん:2006/03/10(金) 02:01:00
541
1行目の意味が良く解らん
例えばどんな感じ?コード例を出してみて
543541:2006/03/10(金) 06:22:42
コード例ですか…難しいですね。

Class Base

end
544541:2006/03/10(金) 06:23:40
すいません、間違って途中投稿しちゃいました。

Class Base

end
def
545デフォルトの名無しさん:2006/03/10(金) 06:37:29
orz なんかJaneの調子わるい。。

class Base

def xx ;end
def yy ;end
end
def Base.zz(zz)

end

over=Base.zz(abc)

上のようにすると、変数overに下のクラス(Over)が生成されて、
over.newでしたのOverクラスのインスタンスが生成みたいな
感じです。

class Over < Base
Const="abc"

end

別に定数にこだわってるわけじゃないんですが、Baseから複数サブクラス
をつくりそれぞれで同名かつ別の変数を使いたいのでクラス変数ではだめなので…
546デフォルトの名無しさん:2006/03/10(金) 08:17:08
rubyが「型がない」と言われる意味がわかりません

% awk 'BEGIN{a=3;b="3";print a/2,b/2}'
1.5 1.5
% ruby -e "a=3;b='3';puts a/2,b/2"
-e:1: undefined method `/' for "3":String (NoMethodError)
yadamon% ruby -e "a=3;b='3';puts a/2,b.to_i/2" ~/ruby
1
1

つまり「型がない」ってどういうことなの?
ポリモーフしまくればすなわち型がなくなるってことなの?(+メソッドとか)
web上で見られる説明があったら教えて
547デフォルトの名無しさん:2006/03/10(金) 08:18:40
ゴミがついたな。7行目は以下ね
% ruby -e "a=3;b='3';puts a/2,b.to_i/2"
548デフォルトの名無しさん:2006/03/10(金) 08:28:06
単に変数に何でも入れられるってだけで、型がないってのはちょっと違いますよ
ruby -e"a = 1; p a; a = 'hoge'; p a"
549デフォルトの名無しさん:2006/03/10(金) 10:01:12
>>546
「型がない」というか「変数には型がない」けど、
オブジェクト自体には型 (というかクラス) がある。
550デフォルトの名無しさん:2006/03/10(金) 10:21:48
変数は、オブジェクトのあるアドレスを格納する場所と覚えればいい?
551デフォルトの名無しさん:2006/03/10(金) 10:27:30
>>545
やりたいことがよくわからないんだが……
要するに定数のオーバーライドがしたい、ということ?
それだけならこう書けばいいと思う

class Base
 CONST = 10

 def getCONST
  return CONST
 end
end

class Over < Base
 CONST = 500
end

ただし Over.new.getCONST で500ではなく10が返ることに注意
どうしても自然にオーバーライドしたいなら定数ではなくメソッドを使うべき
552デフォルトの名無しさん:2006/03/10(金) 10:33:22
>>550
そう表現してもいいけど、一般的には「オブジェクトを参照する」っていうんじゃないかな。
553デフォルトの名無しさん:2006/03/10(金) 10:42:49
C から来たひとは README.EXT.ja あたりを読んでみるのもいいかも。
554デフォルトの名無しさん:2006/03/10(金) 10:49:17
サブクラスでオーバーライドができて
スコープがクラス (とサブクラス) とインスタンス、
なクラス変数が欲しいとしょっちゅう思うのは俺だけじゃないはず。
@@@class_instance_variable な感じで Ruby 3.0 あたりでよろしく。> Matz
555デフォルトの名無しさん:2006/03/10(金) 11:37:23
>>545
インスタンス複数つくりゃいいだけのような気もするが。あとファクトリ作るとか。
とりあえずなんかデザパタ本でも読んでみれば。
なんかそのまんまttp://d.hatena.ne.jp/sshi/20051111/p1だな
evalでもできるが。
class Base 
  def Base.zz1(arg) 
    eval(<<-DEFCLASS)
        class Over1 < self
          Const="#{arg.to_s}"
        end
    DEFCLASS
    Over1
  end 

  def Base.zz2(arg)
    module_eval(<<-DEFCLASS)
      class Over2 < self
        Const="#{arg.to_s}"
      end
    DEFCLASS
    Over2
  end
end 
556デフォルトの名無しさん:2006/03/10(金) 12:02:30
>>545
ぜんぜん意味わからん。やりたいことはこれなんだろうけど、

>別に定数にこだわってるわけじゃないんですが、Baseから複数サブクラス
>をつくりそれぞれで同名かつ別の変数を使いたいのでクラス変数ではだめなので…

クラスインスタンス変数じゃだめなのか?これならサブクラス間で違う値になるし、値はクラスごとに1つなので同じクラスに属するインスタンスなら同じ値を共有できる。

class Parent
 @value = nil
 def self.value
  @value
 end
 def self.value=(v)
  @value = v
 end
end

class Child1 < Parent
 @value = 'foo'
end

class Child2 < Parent
 @value = 'bar'
obj

p Child1.value  #=> "foo"
p Child2.value  #=> "bar"

またインスタンスメソッドから参照するときは self.class.value とself.class.value= で参照できる。
557デフォルトの名無しさん:2006/03/10(金) 12:28:03
>>556 みたいにクラスインスタンス変数を使うとして、
これを継承&オーバーライド可能なようにできないかな?
558デフォルトの名無しさん:2006/03/10(金) 13:13:52
o = find
puts o?o:"not found"
を↓みたいには書けませんか?
puts o??"not found"
559デフォルトの名無しさん:2006/03/10(金) 13:17:02
違った
○ puts find??"not found"
560デフォルトの名無しさん:2006/03/10(金) 13:31:15
お望みのものは || 演算子ですか?

puts find || "not found"
561デフォルトの名無しさん:2006/03/10(金) 13:38:56
>>560
まさにそれです。ありがとうございます。

if a or b then
はそういう理屈で動いてたのか・・・
562デフォルトの名無しさん:2006/03/10(金) 14:04:27
テキストフィルタでなやんでます。

#元テキスト
adbasdfasdfa
asdfasdfa
adfafafdadfaf
<AAA>
asdfasdfasdf
asdfasdfas
asdfasdfa
</AAA>
asdfasdfasd
asdfasdfadsfaf
asdfadsafa

#フィルタ後テキスト
adbasdfasdfa
asdfasdfa
adfafafdadfaf
<ol>
<li>asdfasdfasdf
<li>asdfasdfas
<li>asdfasdfa
</ol>
asdfasdfasd
asdfasdfadsfaf
asdfadsafa

上のようなフィルタ処理をスマートに書く方法なんですかね。
if文とフラグをつかった汚いのしか思いつきませんorz
563デフォルトの名無しさん:2006/03/10(金) 14:17:24
if文とフラグで十分のような…。でも書いてみる。

s.gsub(%r|<AAA>\n(.*)</AAA>|m){|e| "<ol>\n" + $~[1].gsub(/^/, "<li>") + "</ol>"}
564デフォルトの名無しさん:2006/03/10(金) 14:37:42
>>563
そんなの、「if文とフラグ」で悩んでるような初心者がわかるわけないやん。
解説つけるか、初心者でもわかるようなコードにしようや。

input = <<END
adbasdfasdfa
asdfasdfa
adfafafdadfaf
<AAA>
asdfasdfasdf
asdfasdfas
asdfasdfa
</AAA>
asdfasdfasd
asdfasdfadsfaf
asdfadsafa
END

li = ''
input.each_line do |line|
 case line
 when /^<AAA>$/
  puts "<ol>"
  li = '<li>'
 when /^<¥/AAA>$/
  puts "</ol>"
  li = ''
 else
  print li, line
 end
end
565デフォルトの名無しさん:2006/03/10(金) 14:52:39
>563
%r|<AAA>\n(.*?)</AAA>|m じゃないかな。
まあ AAA が入れ子になってたらどっちの方法もだめですが。
566デフォルトの名無しさん:2006/03/10(金) 18:47:39
irb> puts Dir.glob('/**/*')

しまっ

カリカリカリカリカリカリ
567デフォルトの名無しさん:2006/03/10(金) 18:49:28
glob
glob /glCb | glQb/
━ 【名】【C】
(クリーム・泥(どろ)などの)かたまり.
568デフォルトの名無しさん:2006/03/10(金) 23:41:12
>>566
irbで遊んでると一度はハマる罠
569デフォルトの名無しさん:2006/03/11(土) 13:07:55
モジュールををあるクラスにMix-inさせたとき、
モジュールメソッドをそのクラス内部から呼び出すにはどうすればいいのん?
570デフォルトの名無しさん:2006/03/11(土) 16:04:57
>>569
逆になぜ呼びだせないのかよくわからないのだが、オマエがどんな状況を
想定しているのかもう少し詳しく教えていただければ光栄に存じます。
571デフォルトの名無しさん:2006/03/11(土) 16:20:29
Hoge::Fuga というクラスのメソッドをCで書こうと思って、
rb_define_class("Hoge::Fuga", rb_cObject)
と書いてみたんだが、どうも間違っているらしい。
正しくはどうかくの?
572デフォルトの名無しさん:2006/03/11(土) 17:48:56
>>571
Hoge クラスかモジュールは定義済?
573デフォルトの名無しさん:2006/03/11(土) 17:51:23
Segmentation faultが起こるのですが、何故ですか(つД`)
ruby 1.8.4 (2005-12-24) [i386-mswin32]
* xxxx.c
void Init_xxxx(){
  VALUE cImg = rb_define_class("Img", rb_cObject);
  rb_define_method(cImg, "test", test, 1);
}
static VALUE test(VALUE self, VALUE s) {
  FILE *fp;
  if (fp = fopen(RSTRING(s)->ptr, "wb")) {
    fclose(fp); // <- ここでSEGV
  }
  return Qtrue;
}
* test.rb
Img.new().test("hogehgoe.txt")
574デフォルトの名無しさん:2006/03/11(土) 17:56:16
知らんがな(´・ω・`)
575デフォルトの名無しさん:2006/03/11(土) 18:03:10
>>571
Hogeはクラスで、定義済みです。
わかんないこといっぱいで挫折しそう。
576デフォルトの名無しさん:2006/03/11(土) 18:19:42
>>575
fugaClass = rb_define_class_under(hogeModule,"Fuga",rb_cObject);

じゃない?あんま詳しくはしらんけど
577デフォルトの名無しさん:2006/03/11(土) 18:44:19
やべえ自己解決してしまった、くだらない文法上のミスだった。スマソ。
578569:2006/03/11(土) 18:46:14
>569デス
>577の通りデス…
(´・ω・) HN書き込む前に途中で送ってしまった…
579デフォルトの名無しさん:2006/03/11(土) 18:51:10
Net::HTTPResponseって複数行にまたがるHTTPヘッダに対応してないですかね?
580573:2006/03/11(土) 23:19:25
win32.h の
#define fclose(f)rb_w32_fclose(f)
#undef fopen
#define fopen(p, m)rb_w32_fopen(p, m)
をコメントアウトしたら普通に動作するようになったんだけどまずいですかね。
581デフォルトの名無しさん:2006/03/11(土) 23:33:13
ruby-listをおすすめする。devかも。
582デフォルトの名無しさん:2006/03/11(土) 23:48:28
win32ヘッダらへんにあったと思うけど、openとかのマクロウザイよなー。

fstreamのopenとかと置き換わって、意味不明なエラーでて悩んだよ。

あんなのあんなところに書くなよと。
583デフォルトの名無しさん:2006/03/12(日) 08:29:20
せんせいしつもん。

array1.each{|f|
  puts f
}

とかでよく見る f って何かの頭文字?
584デフォルトの名無しさん:2006/03/12(日) 09:04:33
違うと思う
単に短すぎる変数名ってだけかと

普通はそれ

File.open( hoge ) { |f|
  f.puts
}

って使う例じゃないかな。
Array#each でほんとに f を使ってる
とすると、それは相当ダメだと思う
585デフォルトの名無しさん:2006/03/12(日) 09:25:12
中身がfilepathとかfで始まるもの(を期待してる)かもしんないじゃん。
floatのつもりとか。

まあ普通は何かのオブジェクトならx,y,zとか。
インデックスならi,j,k、IO#each_lineだとlとかlineがわかりやすいと思うよ俺は。
586デフォルトの名無しさん:2006/03/12(日) 09:38:02
ブロックを表すのに do end と { } の2種類あるのはなぜ?
結合度の違いがあるのは知ってるけど、なぜわざわざ2種類用意する必要があったのでしょうか。

個人的には、最初に do end が用意されていたけど、1行で書くときは見づらいから
あとから { } も使えるようになったのかなと推測してます。正しい?
587デフォルトの名無しさん:2006/03/12(日) 10:41:06
>>585
オレはあんまりいい習慣じゃないと思うんだよな。
巷に出回ってる Ruby コードのこの辺の書き方。

まぁ十分にブロックが小さければ見りゃ分かるじゃん
てことなんだろうけどさ。

初心者にはすすめないな。
588デフォルトの名無しさん:2006/03/12(日) 11:03:25
>>586
>結合度の違いがあるのは知ってるけど、なぜわざわざ2種類用意する必要があったのでしょうか。

結合度が違うから。&&もandがある。
589デフォルトの名無しさん:2006/03/12(日) 11:33:54
>>583
factor(要素)の頭文字。とにかく配列の要素を枚挙して使用するってことね。
プログラムの説明やテストの時に使われることが時々ある。

それ自体は別にいいんだけど、この手の「マジックキャラクタ」は
入門の文書なんかにも平気で使われることがあるのが問題。
本当は手を抜かずにstrとかlineとかもうちょっと内容に即した
具体的な文字列にするように教育したほうがいいと思う。
「中身には文書の行が入るので line にしておきます」とか啓蒙した解説を見たことがない。

f.puts の f は file handle の f かと思われ。
これもせめて io のほうがいいと思うんだけどなあ。
590デフォルトの名無しさん:2006/03/12(日) 11:37:21
ウワーシュウキョウロンソウボッパツダーミンナニゲロー
591デフォルトの名無しさん:2006/03/12(日) 11:47:51
>>586
いつもくっついてくれるのは便利だが
いつもくっつかれるのも不便だから
592デフォルトの名無しさん:2006/03/12(日) 11:52:47
普通、配列の要素は element だけどね
593デフォルトの名無しさん:2006/03/12(日) 11:55:38
デフォルトイテレータキボンヌ
[1,2,3].each{puts i}
594デフォルトの名無しさん:2006/03/12(日) 12:07:52
Groovyのitだね。
595デフォルトの名無しさん:2006/03/12(日) 12:33:51
@_ みたいな「ブロックに渡された内容」を表す組み込み変数1個増やせばいいじゃん
596デフォルトの名無しさん:2006/03/12(日) 12:35:09
それ、とiterationをかけてあるような何気にうまいネーミングだな
597デフォルトの名無しさん:2006/03/12(日) 13:12:30
rubygemsのインストールについて質問です。
rubygems-0.8.11.tgz をとってきて
tar xzf rubygems-0.8.11.tgz
cd rubygems-0.8.11
sudo ruby setup.rb
でインストールしました。そのあと
sudo gem install -r rake
とやって、Rakeがインストールされたんですが、
ruby -e 'require "rake"'
とすると
-e:1:in `require': no such file to load -- rake (LoadError)
というエラーがでてきます。rake --help は問題なく実行できるので、Rakeのインストールは成功していると思います。

で、質問なんですが、
・rubygemsのインストールは sudo ruby setup.rb だけでいいの?
・rubygemsでインストールしたライブラリをスクリプトから使うには、requireじゃだめなの?
の2点です。

環境:fedoracore3, ruby1.8.4

どなたかお助けを。
598597:2006/03/12(日) 13:52:02
>>597
自己レス。
ruby -r rubygems -e 'require "rake"'
とすればいいみたいです。
・・・が、これだとRakeをsetup.rbでインストールしたときとgem installでインストールしたときとでスクリプトを書き換えなければいけないってことですか?
つまり、rubygemsでインストールされたときはスクリプトに require 'rubygems' を付け加えなければいけないってことになるんでしょうか。

require 'rubygems' # rubygemsでインストールされた場合
require 'rake'
:
:

なんかいやだなあ。みなさんどうされてますか。begin rescue end で囲っちゃうのがいいんでしょうか。
599デフォルトの名無しさん:2006/03/12(日) 13:53:33
kconvが半角カタカナも全角カタカナに変換してしまうのはどういうポリシーなん?
600デフォルトの名無しさん:2006/03/12(日) 14:20:56
>>599
ポリシーとかじゃなくて、
NKF モジュールが何も気にせず nkf のデフォルトを採用しちゃったのが敗因だろうね。
nkf -m0 -x -e とかにすべきだったんだろうけど、
後方互換性でいまさら変えれないのではないかと。

nkf は、ネットワーク上で安全に交換できるような文字列に変換する、
というようなポリシーで作られているのに対し、
Kconv には純粋にエンコーディング変換だけが求められていて、
そのへんの齟齬が問題だよね。
601デフォルトの名無しさん:2006/03/12(日) 14:21:53
ああ、そうだ、 1.9 からはそのへん直して欲しいなあ。
602デフォルトの名無しさん:2006/03/12(日) 14:36:27
>>599
それに気づいてからはKconvは一切使ってない。非推奨と言われようが代わりにNKFを使う。
変換先の文字セットに半角カタカナが無いならともかく、あるのに変換してくれないのはとても困る。

っていうかしばらく気にせずに使ってたところある日データベースに一切半角カタカナが無いのに気づき、
そのときは一次情報も保存してなかったので再変換したくてもできなくてひとりで大笑い。

まあ掲示板のレスだったからよかったけどにゃ。変な仕様だ。
603デフォルトの名無しさん:2006/03/12(日) 14:52:11
半角ネタ初めて知った

……書き直そ orz
604デフォルトの名無しさん:2006/03/12(日) 15:43:34
>598
rubygems は標準で読みにいくサーチパスとは違う独自の場所にインストール
するから(管理を容易にするため)、 rubygems 自身を require するなどの手
段を取らないと無理。

実際問題としては、 gem を使ってる環境では gem が入っている前提で書いちゃ
うし、 gem を使っていない環境で rake とかは使ったことがないので、とく
に気にしたことはないですね。
混在させたいんなら、 LoadError を rescue するしかないと思うけど。
605デフォルトの名無しさん:2006/03/12(日) 16:50:10
RubyGemsが入ってる環境では環境変数にRUBYOPT='-rubygem'とするのが礼儀だと思うが。
gemsで入れたかどうかなんてアプリ側で気にすることじゃない。
606デフォルトの名無しさん:2006/03/12(日) 16:50:56
文字列の前後のスペースを削除するメソッドないの?
" foo bar "[\S(.*\S)?]
みたいなの
607デフォルトの名無しさん:2006/03/12(日) 16:53:26
>>603
結構有名な問題点だと思ったんだけどなあ。
tDiaryが半角カナ対応してないとか、それにまつわるフレーム?とか。
608デフォルトの名無しさん:2006/03/12(日) 16:54:01
>>606
strip
609デフォルトの名無しさん:2006/03/12(日) 16:59:49
マニュアルのStringとArrayとHashとEnumerableの4つのとこは
絶対に一通り読んでおいたほうがいいな
スクリプト考えるときの効率がぜんぜん違う
610デフォルトの名無しさん:2006/03/12(日) 17:16:03
Ruby始めたころって標準のメソッドの存在を知るだけで
データ構造とか自作メソッドの役割とかが思いっきり変わっちゃうことがあるよね。

3メソッド計20行くらいあったものが1メソッド5行で書けたりする。
611デフォルトの名無しさん:2006/03/12(日) 17:44:12
文字列中の ' を \' に置き換えたいのですが、
gsubを以下のように使うと、

irb(main):021:0> "'aaabbb'".gsub("'","\\'")
=> "aaabbb'aaabbb"

となってしまいます。
何が起こっているのでしょう?
で、どうしたら上手く置き換えられるのでしょうか?
612デフォルトの名無しさん:2006/03/12(日) 17:58:59
ダブルクォーテーションの中で\を表すために\->\\
gsub第二引数で\を表すために\->\\
つまり、gsub(/'/, "\\\\'")。
または、gsub(/'/){ "\\'"}

http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=trap%3A%3A%5C%A4%CE%B1%C6%B6%C1
613デフォルトの名無しさん:2006/03/12(日) 19:28:35
ふと思ったんですが、ブロックってオブジェクトじゃないんでしょうか?
614デフォルトの名無しさん:2006/03/12(日) 19:30:58
「trap::\の影響」へのリンクが目立たないのが原因なのかな?
個人的には sub(pat, rep), sub!(pat, rep), gsub(pat, rep), sub!(pat, rep) は
リファレンスマニュアル上で初心者から見つけにくい場所 (隠しリンクとか) にして欲しい。
615デフォルトの名無しさん:2006/03/12(日) 19:42:34
>>614
なんでそんな意地悪するん?
616デフォルトの名無しさん:2006/03/12(日) 19:49:01
>613
Procクラスのインスタンスだけど、それがどうした?
617デフォルトの名無しさん:2006/03/12(日) 19:56:55
>>614
ぽかーん
618デフォルトの名無しさん:2006/03/12(日) 20:08:41
edn
619デフォルトの名無しさん:2006/03/12(日) 20:17:19
>>615
>>611 みたいな罠にはまる人が後を絶たないから。
620597:2006/03/12(日) 20:23:05
>>604,605
どうもありがとうございます。
RUBYOPT='-rubygems' は知りませんでした。
RubyGemsのREADMEにはそんなこと一言も書いてないよー。
621デフォルトの名無しさん:2006/03/12(日) 20:25:12
隠しリンクって、正気で言ってるのか?
ちゃんと書かれているものを、読まない奴が悪いだけだろ。
つか、まともな人まで大混乱するし、ぜってーアリエネw
622デフォルトの名無しさん:2006/03/12(日) 20:26:12
いっそのこと、sub と gsub の第2引数を取るパターンは obsolete にしてはどうか
623デフォルトの名無しさん:2006/03/12(日) 20:41:59
RubyGemsって現状あまり初心者向けじゃないよな…
日本語のドキュメントもそんなに数が無いし
Windows9x系だとインストールに苦労するし
624デフォルトの名無しさん:2006/03/12(日) 21:06:22
>>621
> ちゃんと書かれているものを、読まない奴が悪いだけだろ。
そんなことはありません。
これだけ同じ質問が何度も繰り返されているのは読まない奴のせいではないはずです。

隠しリンクはもちろん本気では言ってないですが、
そうしてもらいたいと思うくらい同じ質問が繰り返されていてうんざりしているわけです。

ブロック付きしかなくても誰も困りませんし、
まともな人なら混乱しませんよ。
625デフォルトの名無しさん:2006/03/12(日) 21:06:27
>>622
「AWKとかで使われてるsub/gsubって便利だよね」って理由だろうからなあ
変換文字列無くしてしまうのはなんかsub/gsubっぽくないっていうか
sub/gsubって名前でなくていいじゃんみたいな

\の問題はよく考えればわかるというか一度ハマれば懲りて避ける(w
626デフォルトの名無しさん:2006/03/12(日) 21:19:47
まぁ確かに、単純に gsub('aaa', 'bbb') とかするのにブロックをいちいち付けるのはめんどくさいから
obsolete にするのは行きすぎかもしれないけど、「第2引数に \ が含まれていたら警告を出す」というのは
悪くない線ではないかと思ったけどどうだろう。
627デフォルトの名無しさん:2006/03/12(日) 21:21:55
>616
ブロックはつねに Proc クラスのインスタンスなわけじゃないぞ。
yield を使うようなブロック引数は Proc じゃなくて構文要素。
628デフォルトの名無しさん:2006/03/12(日) 21:26:52
>>626
わかってやってんだよ、って人にはうざいでしょうね。

あと、第2引数がリテラル文字列じゃない場合とか考えるとどうなるんでしょうね?
629ヽ(´ー`)ノ ◆.ogCuANUcE :2006/03/12(日) 22:28:14
>>624
まともな人なら注意書きぐらい読むんじゃないの?

http://www.ruby-lang.org/ja/man/?cmd=view;name=String#gsub

注意: 引数 replace の中で $<digits> を使うことはできません。この文字列が評価される時点ではまだマッチが行われていないからです。また replace は \ を 2 重にエスケープしなければなりません(trap::\の影響参照)。
630デフォルトの名無しさん:2006/03/12(日) 22:29:44
>>629
もう一度言います。
これだけ同じ質問が何度も繰り返されているのは読まない奴のせいではないはずです。

たとえば、 >>611 に「あなたはまともな人ではない」と言えますか?
631デフォルトの名無しさん:2006/03/12(日) 22:31:58
>>630
>>606のような「マニュアル読めば一発」な質問が頻出していることは何かを示唆していないだろうか
632613:2006/03/12(日) 22:39:04
>>627
> ブロックはつねに Proc クラスのインスタンスなわけじゃないぞ。

ですよね〜。なんとかブロックをProcにしないで扱えないか、いろいろと
試していたんですが、どうにもエラーの壁に阻まれてできなかったもんですから。
もしや、オブジェクトじゃないんじゃないかなぁ〜と。どうもです。
633デフォルトの名無しさん:2006/03/12(日) 22:54:28
>>631
いや、それはそれ、これはこれで違うと思いますよ。
sub, gsub については「以前」から同じ質問を数十回は見てきていますし。
634デフォルトの名無しさん:2006/03/12(日) 23:00:13
>>630
その理論だと何でもそうなるよな。
荒らしも犯罪者も戦争も親の金盗むのもダブルドリブルもな。

その為にgsubに注釈付いてるんだろ?
良い案があるなら編集に参加してみなよ。
635デフォルトの名無しさん:2006/03/12(日) 23:02:11
>>634
> 良い案があるなら編集に参加してみなよ。

ええと、本当に私が編集に参加して良いと思っていますか?
636611:2006/03/12(日) 23:03:17
この流れだとまともな人じゃないことになっちゃうのかな。
初心者スレッドって書いてあったので、FAQを聞いても
許してもらえるかと思ったのですが。

612さんどうもありがとう。
637デフォルトの名無しさん:2006/03/12(日) 23:05:06
>>635
世間を知らなすぎるようだから揉まれてみるのも経験だろう
はっきり言って君の考えは机の上以外では意味をなさない
638デフォルトの名無しさん:2006/03/12(日) 23:06:28
なんか思ったんだけど、
Rubyのマニュアルかっこわるくね?気のせいかな?
639デフォルトの名無しさん:2006/03/12(日) 23:12:41
落とし穴があるんだったら、「落とし穴注意」って看板を作るより
落とし穴を埋めた方が健全だと思うけどなぁ
640デフォルトの名無しさん:2006/03/12(日) 23:14:10
>>636
> この流れだとまともな人じゃないことになっちゃうのかな。

そんなことはないですよ。気にする必要はありません。
同じ罠にはまった大勢のうちの一人でしかありません。
641デフォルトの名無しさん:2006/03/12(日) 23:15:17
>>639
落とし穴の広さと深さと埋めるために必要なコストを算出して
なおかつコストを負担してくれたならすぐにでも取り掛かると思う

埋められないからこその注意書き
642デフォルトの名無しさん:2006/03/12(日) 23:16:24
とりあえず注意の部分を赤字にするに一俵
643デフォルトの名無しさん:2006/03/12(日) 23:17:30
とりあえず注意の部分を先頭にするに一票
644デフォルトの名無しさん:2006/03/12(日) 23:24:28
subやgsubをRubyが読み込んだ時点で
おどろおどろしい音楽つきでどくろマークつきの警告文が表示されるようにすればよい
645デフォルトの名無しさん:2006/03/12(日) 23:33:43

  おきのどくですが じーさぶ1に ばっくすらっしゅがありました
  おきのどくですが じーさぶ2に ばっくすらっしゅがありました
  おきのどくですが じーさぶ3に ばっくすらっしゅがありました
646デフォルトの名無しさん:2006/03/12(日) 23:38:30
patternが文字列の場合はreplace中の置き換えをやめるとか
647デフォルトの名無しさん:2006/03/12(日) 23:48:36
>632
いや、あなたがどういう状況を想定しているのかわからんけど、メソッド呼出
しにつけられたブロックなら、ふつうにブロック引数で受けることはできると
思うぞ。
def m1
yield()
end
def m2(&b)
b.call()
end

m1 { puts "in m1" }
m2 { puts "in m2" }

どっちもやること自体はいっしょ。ただし前者のケースでは、ブロックはオブ
ジェクトとしては扱われていないってだけ。
何か誤解してそうなので念のため。それとも、もっと何かややこしい状況?
648デフォルトの名無しさん:2006/03/13(月) 00:52:21
>>646
新たな落とし穴を作る必要はないだろう。

>>644
どくろマークを表示させるのが難しそうだなぁ。

649デフォルトの名無しさん:2006/03/13(月) 01:07:21
>>648
いや、そこは逆転の発想だよ。

ありとあらゆるところに穴を掘れば、最終的に穴は穴じゃなくなるだろ?
650デフォルトの名無しさん:2006/03/13(月) 01:08:55
そろそろスレ移動しようか。
651デフォルトの名無しさん:2006/03/13(月) 01:31:09
ruby.exe自体のパスをrubyスクリプト内で取得する方法がありましたら教えてください。
要するに,'c;\ruby\bin\ruby.exe' のような文字列を取得したいのです。
652デフォルトの名無しさん:2006/03/13(月) 01:38:52
ruby -r rbconfig -e "p Config::CONFIG['bindir']"

不満なら、Win32API使ってGetModuleFileNameでも呼んだら。
653651:2006/03/13(月) 01:58:59
>>652
うまくいきました!ありがとうございます!
654デフォルトの名無しさん:2006/03/13(月) 07:53:32
初心者です
Rubyは赤いのに3倍速くないのは何故ですか?
655デフォルトの名無しさん:2006/03/13(月) 09:17:35
赤いのに3倍速いというのは事実ではないからです

3倍速いというのはシャアの戦いぶりを見て恐れた者たちの感想であり
いくらなんでも実際に3倍の速度で動いたらモビルスーツがもちません
656デフォルトの名無しさん:2006/03/13(月) 11:16:22
そうなのか。
3倍速く動かしても大丈夫なように作ってあるから赤くしてるのかな〜と思った。
初心者が動かしたら3倍遅くなる、と。
657デフォルトの名無しさん:2006/03/13(月) 11:27:51
機体を赤く塗っても中の人がニュータイプでない限り意味がない罠
ニュータイプの存在を信じれば、の話ですが。
658デフォルトの名無しさん:2006/03/13(月) 11:44:24
はいはい、アムロアムロ。

ところで、Mix-Inで質問。
ClassのInheritはまさに継承するから、superで親クラスの同名メソッド呼び出せるけど、
ModuleのMix-Inは単純にそのメソッドをIncludeされたクラスに追加するだけだから、
同名のメソッドがIncludeされたクラスにあったら、IncludeされたModule内部のメソッドは
オーバーライドされるしかないってことでおk?
659デフォルトの名無しさん:2006/03/13(月) 11:45:50
Includeされた、Moduleにあったら、だったな。
660デフォルトの名無しさん:2006/03/13(月) 14:03:58
>>658
やっぱり super で呼び出せるだろ?
661デフォルトの名無しさん:2006/03/13(月) 16:55:24
>>658
ancestorsの順に従って、superで親メソッドを呼び出せる。
662デフォルトの名無しさん:2006/03/13(月) 17:25:48
ApolloがLazarusに対応するのはいつごろになるでしょうか?
663デフォルトの名無しさん:2006/03/13(月) 19:50:10
>>654
開発速度が3倍になるんだよきっと
664デフォルトの名無しさん:2006/03/13(月) 21:06:35
既に起動しているインタプリの変数(オブジェクト)を、
新たに別に起動したインタプリタから弄ることはできますか?
665デフォルトの名無しさん:2006/03/13(月) 21:17:47
……dRuby?
666デフォルトの名無しさん:2006/03/13(月) 21:55:40
binary2.0の技術をつかえば(ry
667デフォルトの名無しさん:2006/03/13(月) 23:19:29
RDEから,Cygwin版Ruby[/bin/ruby.exe]を呼び出して使用しています。
CygwinはEUCでセットアップしてあります。RDEの文字コードもEUC/LFに設定してあります。
この環境で,以下のスクリプトを実行しました。※ gyokuroは文字列を形態素に分解します。

require 'gyokuro/gyokuro'
gyokuro = Gyokuro.new('本日は晴天なり。')
puts gyokuro.collect { |morpheme| morpheme.origin_yomi } #=> ['ホンジツ', 'ハ', 'セイテン', 'ナリ', '。']

結果は,正しく形態素解析されましたが,コンソールウィンドウの出力がはげしく文字化けしてしまいます。
形態素解析はEUCの辞書に基づいて行われているので,正しく分割されているということは
コードはEUCでrubyに引き渡され,EUCでgyokuroで処理され,EUCで出力されたのだと思われますが,
コンソールウィンドウはそれをSJISとして表示しようとするので,文字化けするのではないかと思われます。
試しにputsする文字列を.tosjisしたら,正しく表示されました。

しかしputsのたびにいちいち.tosjisを置くのはわずらわしく思われます。
コンソールウィンドウの表示だけeucをsjisに変換するようなことはできないでしょうか。
668デフォルトの名無しさん:2006/03/13(月) 23:20:50
すいません質問なのでageます。
669デフォルトの名無しさん:2006/03/13(月) 23:35:29
コンソールの方を euc-jp で表示するように変更すりゃいいんじゃないか
または nkf なり何なりにパイプして出力を変換するとか
670デフォルトの名無しさん:2006/03/13(月) 23:36:58
poderosaでcygwinにシェル接続
671デフォルトの名無しさん:2006/03/13(月) 23:43:44
ck
672デフォルトの名無しさん:2006/03/13(月) 23:50:49
>>669
回答ありがとうございます。
RDEの文字コードの設定ですが,エディタ部分は設定メニューでEUCに変更できるようですが
コンソールウィンドウの部分は,ひととおりメニューを見た限り,設定することはできないようです。
(見落としていましたらすみません)

nkfを介してコンソールウィンドウに出力できるなら,願ったりですが
なにかいい方法がありますでしょうか

>>670
poderosa, ckというのは,確かいずれもcygwinに接続できるターミナルエミュレータというやつですね
後日ためしてみようと思って,ブックマークだけつけておいたのですが,
実のところ私はUNIXの経験がほとんどなく,telnetもろくに使ったことがなかったり
(というかどういうものなのかもあまりよくわかってなかったり)します。
cygwin版のRubyを使う場合は,RDEなどよりもそうしたツールを使う(覚える)べきなのでしょうか。
673デフォルトの名無しさん:2006/03/13(月) 23:53:46
putsとかの一番根っこのルーチンにコンバータかますとかできそうな気がしないでもないけどやり方は知らん
674デフォルトの名無しさん:2006/03/13(月) 23:55:51
require 'kconv'
module SJIS_OUT
def putss(str)
puts str.tosjis
end
end
$>.extend(SJIS_OUT)
putss "日本語"

みたいなのを考えてみようとしたが、うまくいかないねぇ。
$>.putss "日本語" とすればうまくいくんだけどなんでだろう?

リファレンスの組み込み関数のputsを見るとこれでよさそうだけど。
(Programing Rubyだと、$>じゃなくてSTDOUTとなってるが、これでも同様)。
675デフォルトの名無しさん:2006/03/14(火) 00:29:00
逆に、なんでそれでうまくいくと思ったのか知りたい。
676デフォルトの名無しさん:2006/03/14(火) 00:29:02
677デフォルトの名無しさん:2006/03/14(火) 00:30:35
>>674
そのやり方だと、putssメソッドがSTDOUTにしか定義されてない
678デフォルトの名無しさん:2006/03/14(火) 00:42:23
>>667
試してないけど、これはどうかな?
http://disense.org/fhw/?rxvt
679デフォルトの名無しさん:2006/03/14(火) 01:02:48
最近の TeraTerm は Cygwin に使えるよ。
680667:2006/03/14(火) 01:53:20
とりあえず

exec "ruby " + ARGV.join(" ").tr("\\", "/") + "| nkf -s"

というスクリプトをnkfs.rbとか適当な名前で保存して,これをスクリプト登録で
マクロとして使うことによって,出力をsjisに変換してコンソールウィンドウに表示することができました。
でも起動時オプションとかちゃんと引き渡してないから,いろいろ問題が生じるかも。。
あとデバッグするときとかの問題もあるか。

回答してくださったみなさん,ありがとうございました。
今回はRDEからの操作が目的でしたが,どのみち標準のbashの代わりのコンソールは
必要だと思っていたので,教えていただいたものをいろいろためしてみます。
681デフォルトの名無しさん:2006/03/14(火) 05:00:41
irb が無いと怒られます。。
別途用意する必要があるのですか?

$ rpm -qa | grep ruby
ruby-libs-1.8.4-1.fc4
ruby-mode-1.8.4-1.fc4
ruby-1.8.4-1.fc4
ruby-devel-1.8.4-1.fc4
682681:2006/03/14(火) 05:06:55
す、すいません
探したらちゃんとirbのパッケージありました。。
irb-1.8.4-1.fc4.i386.rpm
683658:2006/03/14(火) 06:56:36
>660-661
なるほど、dクス。
684デフォルトの名無しさん:2006/03/14(火) 12:54:03
原さんともあろう方があんな質問をするとは。
ruby-lang.org のインストールのページにも書いてるのに。
685デフォルトの名無しさん:2006/03/14(火) 13:44:59
正規表現について質問です
"abcd axcd"という文字列があったとして
/a.+c/で"abc""axc"とマッチされますが
"axc"だけマッチさせたい場合どのように書けばよいでしょうか?


686デフォルトの名無しさん:2006/03/14(火) 13:51:54
>>685
/axc/って書けばよいでしょ。
687デフォルトの名無しさん:2006/03/14(火) 13:52:22
>>685
もうちょっと条件を詳しく。
688デフォルトの名無しさん:2006/03/14(火) 13:52:47
そこで axcを抜き出す条件は何さ
689デフォルトの名無しさん:2006/03/14(火) 13:53:42
>>685
/a.+c/でマッチするのは "abcd axc" だよ
690674:2006/03/14(火) 13:54:58
>>675
Programming Rubyの Kernel#puts の説明に
Equivalent to STDOUT.puts(art...) となっているからです。

あれ?ttp:/www.ruby-doc.org/core/classes/Kernel.html#M001993 には
Equivalent to $stdout.puts(art...) となってるなぁ。どっちだろ?

>>677
では、「無印」puts の本体に定義するにはどうしたらいいんでしょうか?
691デフォルトの名無しさん:2006/03/14(火) 13:59:33
返答ありがとうございます
わかりづらかったですね。すいません
"あああ〜〜〜いいい〜〜〜ううう" #〜〜〜はなんの文字でも良い
という文字列を抜き出したいんですが
"〜〜〜あああ〜〜〜〜〜〜〜〜〜うううあああ〜〜〜いいい〜〜〜ううう〜〜〜"
という場合最初の"あああ"から最後の"ううう"でマッチしてしまうので
"あああ"と"ううう"の間に"いいい"がある場合だけ!としたいのです
こんな感じなんですが頭悪い説明ですいません・・・
692デフォルトの名無しさん:2006/03/14(火) 14:00:49
よけいわかりづらい
693デフォルトの名無しさん:2006/03/14(火) 14:01:46
>>690
> では、「無印」puts の本体に定義するにはどうしたらいいんでしょうか?
自分で「Kernel#puts の説明に」って答え書いてるじゃん。
Kernel に定義するんだよ。
694デフォルトの名無しさん:2006/03/14(火) 14:03:34
/ああああ[^う]*いいい[^う]*ううう/

こうしたいのか?
あと後ろが選ばれるためにもひとつ条件いるが
695デフォルトの名無しさん:2006/03/14(火) 14:03:51
>>691
一発でマッチしなきゃならんのかい?
2段階に分けて処理することもできるんだけど
696674:2006/03/14(火) 14:04:59
orz。昨日も試したはずなのに、寝惚けてたみたいです。
require 'kconv'
module Kernel
def putss(str)
puts str.tosjis
end
end
697デフォルトの名無しさん:2006/03/14(火) 14:07:53
def puts(str)
super str.tosjis
end

とかはあえてしないか
698デフォルトの名無しさん:2006/03/14(火) 14:09:33
>>694>>695
マッチできれば何段階でも構わないのですが何分初心者なもので
いまいち使い方がピンとこないのです
こういうことができるんだろうなとは思うのですけど・・・
というわけでここまでヒントをいただければ後は自分でできると思います!
ありがとうございました!
699デフォルトの名無しさん:2006/03/14(火) 14:09:37
さすがに副作用がでかそう
700デフォルトの名無しさん:2006/03/14(火) 14:19:46
どーいう時に明示的にKernelモヂュールを指定する必要があるのか
いまいちわからん
701674:2006/03/14(火) 14:22:55
>>691
str="〜〜〜あああ〜〜〜〜〜〜〜〜〜うううあああ〜〜〜いいい〜〜〜ううう〜〜〜"
str.match(/.*(あああ.*いいい.*ううう)/)
puts $1 # "あああ〜〜〜いいい〜〜〜ううう"
702デフォルトの名無しさん:2006/03/14(火) 14:34:53
>>701
それだと
あああ〜ううう〜いいい〜ううう
も拾う。まあ元質問者の意図がわからないからなんとも言えないが
703デフォルトの名無しさん:2006/03/14(火) 15:41:51
>>698
初心者だから分けることをオススメするんだがな
複雑な正規表現にいきなり挑戦せずに簡単なこと
だけを組み合わせて処理する方が分かりやすいだろ?
704デフォルトの名無しさん:2006/03/14(火) 16:26:22
リファレンスマニュアルの case の説明の else の部分が恐ろしく貧弱だな。
あと、リファレンスマニュアルのトップページで、「目次」を上の方にしてくれないかなぁ。
一旦、スクロールするのが面倒だよ。
705デフォルトの名無しさん:2006/03/14(火) 16:37:58
むしろどうマッチしてほしいか、なんていうピンポイントな話じゃなくて
何をするための処理なのか具体的に書いてくれるとそもそももっとマシな方法があったかもしれず。
706デフォルトの名無しさん:2006/03/14(火) 18:30:28
俺なら「〜〜〜〜ううう」で区切って配列にしてから中身を考えると思う

確かに目的を教えてもらったほうがいいな
707デフォルトの名無しさん:2006/03/14(火) 18:45:19
まあ質問者の意図は、最長一致の原則を回避するにはどう書けばいいか、だろうけどな
708デフォルトの名無しさん:2006/03/14(火) 19:16:55
>>704
自分でTOPページつくればどう? Ruby使って静的にでも動的にでも。
709デフォルトの名無しさん:2006/03/14(火) 19:21:45
>>707
たぶんね。
  .+? と (?=) を使えばたいていなんとかなる。
710デフォルトの名無しさん:2006/03/14(火) 20:53:37
/a.+?c/でいいんでないの?
711デフォルトの名無しさん:2006/03/14(火) 21:03:01
【積年の】旦那にしてる密かな仕返し【恨みじゃー】
http://human5.2ch.net/test/read.cgi/ms/1141694640/

8 名前:可愛い奥様[] 投稿日:2006/03/07(火) 11:05:23 ID:8dtluKkp
夫の歯ブラシで洗面所の排水溝掃除。
洗面所をビショビショに汚した罰だ。

20 名前:可愛い奥様[age] 投稿日:2006/03/08(水) 00:40:17 ID:pRrk6A21
前に頭きた時あって
1度だけ歯ブラシで肛門カキカキしちゃった

22 名前:可愛い奥様[] 投稿日:2006/03/08(水) 01:27:12 ID:gU5mHc7J
よかった。どこのお宅も同じようなことしてて。

24 名前:可愛い奥様[] 投稿日:2006/03/08(水) 01:36:35 ID:SSSFsTqE
そうそう、ヘンなモノはダンナのお皿へ直行だよね。

41 名前:可愛い奥様[] 投稿日:2006/03/08(水) 11:55:18 ID:sjj+/60Q
見てるだけで気が晴れるな!
皆さん、頑張ってね!

42 名前:可愛い奥様[sage] 投稿日:2006/03/08(水) 20:33:51 ID:Ju2N1s7+
年金分割が楽しみじゃのう

63 名前:可愛い奥様[] 投稿日:2006/03/10(金) 08:55:20 ID:qLfJYpJR
家族で密かにはぶっている。

男性は肉体が汚く、精神が美しい傾向がある。(気に入らない相手に肉体的攻撃を加える⇒精神的攻撃も加える男は猛者)
女は肉体が美しく、精神が汚い傾向がある。(気に入らない相手に精神的攻撃を加える⇒肉体的攻撃も加える女は猛者)
女は隠れて悪事をする。気に入らない女子を便所でボコったり、便器舐めさせたり、男の友人を使ってレイプ、仲間外れにしたり。陰口、嫉妬。
女は対人関係において、この汚い性格を隠そうとするため、外面が非常によくなる。(猫かぶり)
男性諸君は外面に騙されないように気を付けて下さい。
712デフォルトの名無しさん:2006/03/14(火) 21:08:32
>>710
それだと先の "abc" にマッチしちゃうからダメっていう話ではないかと。
713デフォルトの名無しさん:2006/03/14(火) 21:12:03
scan(/a.+?c/)[1]
714デフォルトの名無しさん:2006/03/14(火) 21:14:53
/#{str}/といった具合に文字列を正規表現に変換する時、
strの中に大文字が含まれない時だけ//iを付けたいんだけど、
\[WSDAZBG]とかみたいなメタキャラを誤認しないように
どうしたらいい判定ができるでしょうか。
715デフォルトの名無しさん:2006/03/14(火) 21:23:50
>>714
日本語で説明して。
716デフォルトの名無しさん:2006/03/14(火) 21:31:33
>>714
こんな感じでどう?
re = Regexp::compile(Regexp::escape(str), !/[[:upper:]]/.match(str))
717デフォルトの名無しさん:2006/03/14(火) 22:30:02
str = "\\Abc"の場合には/\Abc/i
str = "Abc"の場合には/Abc/
としたいのです。

>>716
すいません、違うようです。
718デフォルトの名無しさん:2006/03/14(火) 22:52:40
>>717
間違ってんのは、あんたの日本語だと思うが。

Regexp::compile(str, str.include?("\\"))
719デフォルトの名無しさん:2006/03/14(火) 23:24:32
多分 "\\ABC" は /\\ABC/ になって欲しいんだろう
720デフォルトの名無しさん:2006/03/14(火) 23:31:25
外人か?日本語おかしいんだけど。
721デフォルトの名無しさん:2006/03/14(火) 23:40:02
もう誰の日本語を疑ってるのかすらワケワカ
722デフォルトの名無しさん:2006/03/14(火) 23:48:50
確実に、それは私でないということです。
723デフォルトの名無しさん:2006/03/15(水) 00:10:26
>>717
無理せずそのまま書けば?
if str=="\\Abc"
 /\Abc/i
elsif str=="Abc"
 /Abc/
end
724723:2006/03/15(水) 00:11:50
ゴメンナサイワタシバカデシタ
725デフォルトの名無しさん:2006/03/15(水) 01:18:01
何言ってるんだか理解できてないけど、
Regexp.escape(string[,kcode])
Regexp.quote(string[,kcode])
あたりが質問者が欲しい回答なんでないの?
726デフォルトの名無しさん:2006/03/15(水) 01:48:54
エスパーがいっぱい
727デフォルトの名無しさん:2006/03/15(水) 09:15:58
エスパーじゃないよ。
ツンデレだよ。
728デフォルトの名無しさん:2006/03/15(水) 09:22:03
ツンデレエスパー幼女
なんだ魔美くんか
729デフォルトの名無しさん:2006/03/15(水) 09:35:20
どうしてもendもう一個入れないと駄目?
for i in 1..10
 if i == 5
 begin
  puts "i==5"
 rescue
  puts $!
 end
end
730デフォルトの名無しさん:2006/03/15(水) 09:41:52
for i in 1..10
 if i == 5
  begin
   puts "i==5"
  rescue
   puts $!
  end
 end
731デフォルトの名無しさん:2006/03/15(水) 09:43:12
if のブロックはbeginで始まらない。(省略可能な)thenからendまで。
begin〜endは、例外処理をするためのブロックを新規に作ってるってこと。
732デフォルトの名無しさん:2006/03/15(水) 12:28:18
>>729
その例なら単に
puts "i==5"
でいいじゃないか。
733デフォルトの名無しさん:2006/03/15(水) 12:33:06
ポカーン
734デフォルトの名無しさん:2006/03/15(水) 12:38:53
>>732
ここまで的外れなレスは久しぶりに見たな。
735デフォルトの名無しさん:2006/03/15(水) 13:50:35
>>729
Delphi な人か?
736デフォルトの名無しさん:2006/03/15(水) 15:21:51
Rubyを勉強しようかと思ってるんだが
インストーラはどれが良いのか分からん(´A`)
とりあえず何でも良いのかな?
OSはWinXPSP2
737デフォルトの名無しさん:2006/03/15(水) 15:38:50
おれの経験からすると、windowsはwin32版が一般的。
unixぽい環境で使いたい人はcygwin版を使ってる。
738デフォルトの名無しさん:2006/03/15(水) 15:39:29
ActiveRubyを入れるんだ。(あれってパスまで通してくれたっけな?)

インストールムービー見れ。
http://masuidrive.jp/rails/rails_install.html

現在の公式マニュアルはPerlとか知ってないと面倒なのでここ見れ。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%BB%B2%B9%CD%CA%B8%B8%A5%A1%A6%A5%B5%A5%A4%A5%C8
739デフォルトの名無しさん:2006/03/15(水) 15:39:46
740739:2006/03/15(水) 15:47:23
うーむ。無駄に混乱させるか。
>>738のActiveScriptRubyで全く問題ないよ。
741デフォルトの名無しさん:2006/03/15(水) 15:54:39
736の知識次第だと思うんだが、雰囲気的にASRがいい気がする。
742デフォルトの名無しさん:2006/03/15(水) 16:35:07
混乱が象徴的だな
743デフォルトの名無しさん:2006/03/15(水) 16:58:35
だな。いかにも UNIX 発 OSS って感じでイイ!
744デフォルトの名無しさん:2006/03/15(水) 17:21:34
2chのWindowsユーザー向けの導入周りの情報まとめたいんだけど
どっかいいWikiはないものか。出来ればPukiwikiで。
745デフォルトの名無しさん:2006/03/15(水) 17:27:45
>>737-741
ありがとう
ASRをインストールする事に決めた(ムービーあるし)
まさかインストーラ選びで躓くとは思ってなかったよ・・・orz


>>741
まったくの素人さんでつ
これからガンガリマスヨ(`・ω・´)
746デフォルトの名無しさん:2006/03/15(水) 19:05:44
>>744
「できればPukiwikiで」って言いいつつ他のWikiを探すのはなぜ?

それはともかく、FreeStyleWiki等の方がいいのではないだろうか
Pukiwikiの文法はrdと同じくらいかそれ以上に取っつきにくい……と思う

個人的にはWifkyとかHikiとかRevisionistWikiとかオススメ
特にHikiにはRubyソースコードを色つきで表示してくれる機能がある
747デフォルトの名無しさん:2006/03/15(水) 19:17:35
できれば本家のインストールのページに反映させて欲しいような。
748デフォルトの名無しさん:2006/03/15(水) 19:45:24
そこでMoinMoinうわなにをするやめ(ry
749デフォルトの名無しさん:2006/03/15(水) 19:58:53
>>746
pukiwiki の文法がとっつきにくく感じるのはたぶん
ヘルプや整形ルールのページがあまりにうざいからではないか?
750デフォルトの名無しさん:2006/03/15(水) 20:22:26
>>744
2chのレスをコピペしただけの「マトメ」は読みづらいし検査されないしすぐ時代おくれだから。もうやめて。
ニャー速のVIPまとめみたいにブログに書いてろよ。それよりWikiBooksに書いたほうが役に立つ。
751デフォルトの名無しさん:2006/03/15(水) 21:02:53
>>744がコピペするんだけだと分かる>>750はエスパーだと思った
752デフォルトの名無しさん:2006/03/15(水) 21:08:10
ないよりあった方が良いでないかい?
747の言う通りになるのがベストだとは思うが。
753デフォルトの名無しさん:2006/03/15(水) 21:14:41
反映すればいいんじゃねえの?
754デフォルトの名無しさん:2006/03/15(水) 22:40:34
過去ログが保存されるだけでもありがたい。
755デフォルトの名無しさん:2006/03/15(水) 22:57:08
バージョンを "$Version ほげほげ$"みたいに書くのはなんでですか?
756デフォルトの名無しさん:2006/03/15(水) 23:07:24
CVSのマニュアル嫁
757デフォルトの名無しさん:2006/03/15(水) 23:11:12
むしろRCSかと。
>>46はさっさとワンライナ、$を使わない>>35の回答を早く提出するように。
758755:2006/03/15(水) 23:58:33
わかりました。さんきゅーです
759デフォルトの名無しさん:2006/03/16(木) 01:56:47
ActiveScriptRubyは外部ツール(Chasenとか)使うのがめんどいと聞いてCygwinにした
しかしCygwinでDartsやChasenやRuby/ChasenやGyokuroを入れる方がはるかにめんどかったという罠
ASRでもWin32API経由でChasen使えるしな
760デフォルトの名無しさん:2006/03/16(木) 02:20:14
その前のレンタル日記サイトでも探せよ
761デフォルトの名無しさん:2006/03/16(木) 02:41:30
Darts ってこれのことか? http://chasen.org/~taku/software/darts/

普通に configure && make && make install するだけだったが
# 不要なので DESTDIR で別の場所にインストールして、速攻で捨てたけど

もし足りないものがあっても、cygwin なら簡単にネットインスコで入るだろ。
ChaSen とやらは、Wiki に、ソースからのインストールが丁寧に説明されてるじゃん。
INSTALL や README もあれば、configure --help もちゃんと書かれてるし。
他は面倒なので調べてないが、どう見ても、単に Linux の流儀を知らないだけ。
あれで文句を言ったら、作った人が可哀想過ぎだ。
762デフォルトの名無しさん:2006/03/16(木) 03:02:54
オプソをいじって勉強したいならUnix使えよ。Debianとかパッケージング豊富だし。
WinでやるならせめてCoLinuxじゃないと。
763デフォルトの名無しさん:2006/03/16(木) 09:17:39
cygwin はものによってうまくいったりいかなかったり
するんで、単に使いたいだけならバイナリのないものには
手を出さない方がいいよ。あれは Linux 知らない人が雰囲気を
味わうためか、仕方なく Windows を使っている人のためにある
764デフォルトの名無しさん:2006/03/16(木) 12:21:49
>>761
Dartsは普通にはいる。めんどくさいのはChasenの2.3.0以降だ。
あれをCygwinに入れるのはみんな結構苦労しているようだ。

ttp://wiki.fdiary.net/yarp/?ruby-chasen
ttp://pcweb.mycom.co.jp/column/yetanother/045/
ttp://d.hatena.ne.jp/svnseeds/searchdiary?word=*%5Bcygwin%5D

とりあえずこの辺見て入れたが、そのあとRuby/ChasenやCabochaがちゃんと
動かなくて結局2.2.9にダウングレードした。
あと上のサイトには書いてないけどDarts0.3でメソッド名の変更があったんで
ChaSenのソースのどこだったか書き直したりしなくちゃならない
765デフォルトの名無しさん:2006/03/16(木) 17:42:26
二つのPath文字列を与えて相対パスを求める
スマートな解法がありませんでしょうか

カレント aaa/bbb/ccc/ddd.txt
ターゲット aaa/www/zzz/yyy.txt

相対パス ../../www/zzz/yyy.txt

なんにもアイデアがうかびませんorz
766デフォルトの名無しさん:2006/03/16(木) 18:01:22
ぐぐってみたら、
ttp://www.dm4lab.to/~usa/ruby/d/200301c.html#id20030124_P2_4
というのを見つけた。
File.relative_path("aaa/www/zzz/yyy.txt", File.dirname("aaa/bbb/ccc/ddd.txt"))
で求める結果が得られる気がする。
767ヽ(´ー`)ノ ◆.ogCuANUcE :2006/03/16(木) 18:03:34
標準のライブラリでやるとこうか。

require 'pathname'

a = Pathname.new('aaa/bbb/ccc/ddd.txt')
b = Pathname.new('aaa/www/zzz/yyy.txt')

puts b.relative_path_from(a.parent)

本スレでも Pathname の話題が出てたが、確かに記述性が悪いなw
768デフォルトの名無しさん:2006/03/16(木) 18:03:58
Pathname も使えるね。

require "pathname"
Pathname::new("aaa/www/zzz/yyy.txt").relative_path_from Pathname::new("aaa/bbb/ccc/ddd.txt")
769デフォルトの名無しさん:2006/03/16(木) 18:05:13
すまん、かぶった。
770ヽ(´ー`)ノ ◆.ogCuANUcE :2006/03/16(木) 18:06:18
>>769
relative_path_from の引数はディレクトリなので、それだと
../../../www/zzz/yyy.txt になるようだ。
771デフォルトの名無しさん:2006/03/16(木) 18:09:07
ありゃ、ホンマや。重ね重ねスマソ。
772デフォルトの名無しさん:2006/03/16(木) 18:28:59
>>765
current = "aaa/bbb/ccc/ddd.txt"
target = "aaa/www/zzz/yyy.txt"
relative = [current.reverse.split(/\//), "\003", target.split(/\//)].flatten.join("/").sub(/(.*)\003\1/, "/\003/").gsub(/[^\/]*\/(?=.*\003)/, '../\1').sub(/\/..\/\003/, '')









773765:2006/03/16(木) 18:34:39
まずった。試しもせんで書いたらあかんな。
relative = [current.split(/\//).reverse, "\003", target.split(/\//)].flatten.join("/").sub(/(.*)\003\1/, "/\003/").gsub(/[^\/]*\/(?=.*\003)/, '../\1').sub(/\/..\/\003/, '')
774772 = 773 != 765:2006/03/16(木) 18:35:24
orz
775デフォルトの名無しさん:2006/03/16(木) 18:39:20
Path.relative(base,target)
にすればいいがなもう
776デフォルトの名無しさん:2006/03/16(木) 23:15:32
Pathname オブジェクトって文字列みたいに扱えるのな。
良く分からないから、なんか不思議だ。
777デフォルトの名無しさん:2006/03/17(金) 08:21:43
Pathnameってとても便利でいいんだけれど
PStore等の引数に与えると正しく扱われないことや
Ruby1.8以上でないと使えないのが割と困る

あとString#to_pathがないのは不自然だと思った

>>776
772-773のことを言ってるのなら、それはPathnameじゃないよ
Pathnameオブジェクトを文字列のように扱うことはできない

Pathname.new('./test.txt').split #=> エラー
Pathname.new('./test.txt').to_s.split #=> ['./test.txt']
778ヽ(´ー`)ノ ◆.ogCuANUcE :2006/03/17(金) 09:07:17
PStore の引数に使えないのは、+ 演算子が String と挙動が違うからか。
+ の挙動は String に合わせて、/ とかをこの動作にした方がいいと思うけど。

今は、必要なところでは適宜 String にする方がいいかな。

puts Pathname.new('foo/bar') + '.txt'
# => "foo/bar/.txt"

puts 'foo/bar' + '.txt'
# => "foo/bar.txt"

class Pathname
alias append_child +

def + (other)
return self.to_s + other
end

def / (other)
return self.append_child(other)
end
end

puts Pathname.new('foo/bar') + '.txt'
# => "foo/bar.txt"

puts Pathname.new('foo/bar') / '.txt'
# => "foo/bar/.txt"
779ヽ(´ー`)ノ ◆.ogCuANUcE :2006/03/17(金) 09:12:40
あ、Pathname の中で + 使ってるから、迂闊に挙動変えちゃ駄目だな(´・ω・`)
スマソ
780デフォルトの名無しさん:2006/03/17(金) 10:49:29
queueってないんですか?
Queueって普通のデータ構造として使っていい物?
781デフォルトの名無しさん:2006/03/17(金) 10:55:43
Array がまんま queue として使えない?
782デフォルトの名無しさん:2006/03/17(金) 11:02:33
ArrayってFIFOが速くなるような工夫があるの?
783781:2006/03/17(金) 11:07:27
あ、そんな速いのが要るのか。すまん。
784デフォルトの名無しさん:2006/03/17(金) 11:29:44
日本語が文字化けして出ねぇ(´A`)
ぐぐったら先頭行に#! ruby -KsとつければOKと書いてある。
#! ruby -Ks
puts 'だめぽ'
puts 'orz'
って事だよね?日本語だけ化ける(´ω`)
WinXP、ASR1.8.4.0で作業してます
低レベルな質問すまん
785デフォルトの名無しさん:2006/03/17(金) 11:30:34
>>782
ないけど十分な早さは出るはず
それでも速度が欲しいなら、自分で拡張ライブラリを書くしかない
786デフォルトの名無しさん:2006/03/17(金) 11:46:29
>>784
それは shebang で起動する場合にしか有効じゃないと思う

sjis で書いているなら起動を ruby -Ks script.rb にしる
787デフォルトの名無しさん:2006/03/17(金) 11:53:17
> それは shebang で起動する場合にしか有効じゃないと思う
んなこたあない。
788デフォルトの名無しさん:2006/03/17(金) 11:58:07
>>784
それであってる。786は無視してよろしい。
789デフォルトの名無しさん:2006/03/17(金) 11:59:45
ただ文字化けと言われても。

どう設定してどう入力したらどう表示されたの
790デフォルトの名無しさん:2006/03/17(金) 12:03:40
>>784
スクリプトの文字コードが Unicode ってことはないよね?
791784:2006/03/17(金) 13:29:09
>>786-790
ありがとん
>>790の言う通り文字コードをUTF8からSJISにしたら直りました・・・
ごめんなさい(ノд`)

どっかの記事を勘違いして
日本語=UTF8で保存するもんだと思ってました・・・orz
おさわがせしました
792デフォルトの名無しさん:2006/03/17(金) 13:30:31
base = "c:/windows/"
path = "./data/text.txt"
pt = Pathname.new(base) + path
puts pt, pt.cleanpath

base = "c:\\windows\\"
path = ".\\data\\text.txt"
pt = Pathname.new(base) + path
puts pt, pt.cleanpath

なんじゃこりゃー
c:/windows/./data/text.txt
c:/windows/data/text.txt
c:\windows\/.\data\text.txt
c:\windows\/.\data\text.txt
793デフォルトの名無しさん:2006/03/17(金) 13:46:37
そんなん File.join 使えよ。そのためのものだろ。

base = "c:/windows/"
path = "./data/text.txt"
p File.join(base,path)

"c:/windows/./data/text.txt"

…あれ?
794デフォルトの名無しさん:2006/03/17(金) 13:51:57
>>793
リファレンスマニュアルくらい見れ。ちゃんと仕様通りに動いとるやろ。
795デフォルトの名無しさん:2006/03/17(金) 13:58:08
>>792
DOSISH 対応ってもそこまであまねく対応してるわけじゃないんでしょ。
"/" で我慢すりゃええやん。
796デフォルトの名無しさん:2006/03/17(金) 14:03:01
>>793-794
「相対パスやドット混じりの文字列でも綺麗なパスに組み立ててくれる」という類の
面倒を引き受けてくれる便利メソッドであろうという期待はあるな、確かに。
まさかほぼ機械的にjoinしてるだけだとはお天道様も気づくめえ。


マニュアル通りだけどな
797デフォルトの名無しさん:2006/03/17(金) 14:59:41
Dir.globって内部でリスト作ってからイテレータが動き出すみたいで
profile取るとこんな感じでとても遅い。
time seconds seconds calls ms/call ms/call name
42.24 13.91 13.91 20503 0.68 2.54 Array#each
17.38 19.64 5.73 1 5726.00 32937.00 Dir#glob
もっと高速なファイルリスト列挙クラスないですか?
798デフォルトの名無しさん:2006/03/17(金) 15:11:38
動き出してからは速いんじゃない?
Find とか Pathname#find あたりとか。
799デフォルトの名無しさん:2006/03/17(金) 15:20:21
それ、ボトルネックはリストを作るところじゃなくてマッチするファイルを探
索するところじゃないの。内部にリストを作らずにインクリメンタルに実行す
ることはできるけど、それで高速化するわけではないよ。

たとえば Dir#each や Find.find なんかを使えば、内部のリストを構成せず
にイテレータを使える。だがおれの手元の環境では Dir#each の方が遅かった。
800デフォルトの名無しさん:2006/03/17(金) 15:31:31
/ をトラバースしたいとかだと、リスト作る時点でメモリがスワップして遅くなる、
なんてのはありそうだけどなー。
801デフォルトの名無しさん:2006/03/17(金) 15:50:01
Find.find使ったらそこそこ速くなりました。
今度はKernel.catch(throw/catchの事か)が浮上してきましたが。
これフラグ等をやりくりして取っ払うと速くなりますかね。
% cumulative self self total
time seconds seconds calls ms/call ms/call name
23.09 12.65 12.65 26691 0.47 2.69 Array#each
19.64 23.41 10.76 13345 0.81 3.96 Kernel.catch
13.31 30.71 7.29 2045 3.57 5.05 Dir#each
802デフォルトの名無しさん:2006/03/17(金) 15:51:05
えーっと、ちょっと検索したけどよーわからん…orz
今ruby 1.8.4で、cgiで受け取ったフォームフィールドのデータとかに、
半角カタカナが含まれた場合、どう扱われるのん?
803デフォルトの名無しさん:2006/03/17(金) 16:05:48
どんなCGIかによる
804デフォルトの名無しさん:2006/03/17(金) 16:11:35
送信元のフォームの HTML がどういうのか (文字コードとか) とかも詳しく。
そして、 WebProg 板へ。
805デフォルトの名無しさん:2006/03/17(金) 16:29:41
dクス。誘導されます。そんな板あったんだね。気づかなかったわ。
806デフォルトの名無しさん:2006/03/17(金) 16:30:50
ポカーン。WebProg板にRubyプログラミング関連スレが見当たらないんだが…
807デフォルトの名無しさん:2006/03/17(金) 16:31:37
前はなんかあったけど堕ちたのか
808デフォルトの名無しさん:2006/03/17(金) 16:31:46
げ、ホントだ。すまんかった。
809デフォルトの名無しさん:2006/03/17(金) 16:38:38
携帯電話は例外なくshift_jisでフォームを送ってくるとかいうのは見つけたんだが…。

cgiが動的に生成したhtmlは、charset:euc-jp
formから送信されたデータをcgiオブジェクトから取得したとき、
たとえばtextareaに半角カタカナが入力された場合、それを取得するとどうなるんだろう?
が質問。
これで、ちゃんとした質問になってるのかな。
810デフォルトの名無しさん:2006/03/17(金) 16:41:17
そのまま入ってるよ。
それをどうするかは自由
811デフォルトの名無しさん:2006/03/17(金) 16:45:56
>>808
いやいやむしろこちらこそ神速レスありがd

>>810
するってーと、eucjpで半角カタカナってこと?
812デフォルトの名無しさん:2006/03/17(金) 17:16:39
フォームデータを何でエンコードするかはWebブラウザ依存なんじゃないかな
813デフォルトの名無しさん:2006/03/17(金) 17:34:57
>>812
送られるときのは<FORM enctype="なんとか">の仕事で基本はURLエンコード。

URLエンコードされる前の文字コードは決まってないと思われ。たぶんブラウザ依存。
デコード後の文字列から推測するしかないんじゃないかな。
814デフォルトの名無しさん:2006/03/17(金) 17:37:59
で、SJISの半角カナとEUCの漢字の区別がつかないんだよね
815デフォルトの名無しさん:2006/03/17(金) 18:02:04
816デフォルトの名無しさん:2006/03/18(土) 00:31:45
>>763
Windowsってあれか、cygwin動かすのに必要なやつ?
817デフォルトの名無しさん:2006/03/18(土) 09:22:55
Rubyとwin32oleを利用して、シェルエクステンションを作りたいのですが
やり方がよく分かりません。

クラスIDだのCOMインターフェースだのの話は少しずつ理解してきたんですが
機能を呼び出すことはできても、機能を追加することができない状態です。
どなたかご教授をお願いします……。

あるいは、もしかするとRubyのみを使ったシェルエクステンション作成は不可能?
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
819デフォルトの名無しさん:2006/03/18(土) 20:46:30
>>818
マルチ + スレ違い乙
820デフォルトの名無しさん:2006/03/18(土) 21:51:24
>>818
何ヵ所マルチしてんだよ市ね
821デフォルトの名無しさん:2006/03/18(土) 22:12:27
>>817
ググって一個目のを見たけどRubyだけじゃ無理だな。
要はあるインタフェースを持ったDLLを作らなきゃいかんので、Rubyだけでは当面無理。
C++とMFCでやるのが普通な気がする。
822デフォルトの名無しさん:2006/03/18(土) 22:21:13
なんでMFC?ふつーはATLっしょ。
823デフォルトの名無しさん:2006/03/18(土) 22:34:32
>>822
そうみたいだね。
正直スマンカッタ
824デフォルトの名無しさん:2006/03/19(日) 00:19:12
テキストファイルをパースするライブラリってありますか?
825デフォルトの名無しさん:2006/03/19(日) 00:24:12
racc
826デフォルトの名無しさん:2006/03/19(日) 16:58:59
例えばこのようなクラスがあったとする。

Class Hoge
def initialize
@hoge = 0
end

def one
@hoge = 1
end
end

これのテストを書くのはどうやればいいの?
hoge = Hoge.new
hoge,oneを実行すると、インスタンス変数の@hogeが1になるけど、
それを確認する為のテストを記述するのは
別のクラス(class HogeTest < Test::Unit::TestCase)だよね?
827デフォルトの名無しさん:2006/03/19(日) 17:54:12
値が取得できないってことは、それはテストするに値しない項目なんじゃないの?


828デフォルトの名無しさん:2006/03/19(日) 18:30:08
http://tomikura.cocolog-nifty.com/main/2006/02/rubyexerb_20f2.html
ここにも書かれていますが,require 'socket' したRubyスクリプトを
Exerb で exe 化すると,実行時にエラーが発生します。

うちの環境では,require 'net/http' とすると,.exeの実行時に
「プロシージャエントリポイント fcntl がダイナミックリンクライブラリ 〜.exe から見つかりませんでした。」
というエラーが発生します。

この問題の解決法はないのでしょうか?
829デフォルトの名無しさん:2006/03/19(日) 18:32:31
>値が取得できないってことは、それはテストするに値しない項目なんじゃないの?
んなこたない。



けど、Rubyでprotected/privateなテスト項目は書けない書かないというのはFAQ
830826:2006/03/19(日) 18:49:43
>>829
テストしたい事柄はpublicにしろって事?

FAQという位だから、どこか詳しい説明でもある?
831デフォルトの名無しさん:2006/03/19(日) 18:55:42
値返せばいいと思うんだけど
832デフォルトの名無しさん:2006/03/19(日) 19:00:32
>>826

instance_evalつかえばok
p hoge.instance_eval('@hoge') #=> 1

あるいは、テストのときだけアクセッサを追加してやるとか。

require 'test/unit'

class Hoge
attr_accessor :hoge
end

class HogeTest < Test::Unit::TestCase
def test
hoge = Hoge.new; hoge.one
assert_equal(1, hoge.hoge)
end
end
833デフォルトの名無しさん:2006/03/19(日) 19:00:49
unit test は外から見てどう振舞うかをチェックするための物だから、
外から見えないものをチェックする必要はない、という立場も納得できる。
そうでないと、>>826の例だとデータ構造を変えるようなリファクタリングする時に
テストまで書き換えなきゃいけないし本末転倒じゃ? みたいにね。

それはさておき、>>826 の one() をテストしたいなら、
instance_eval でインスタンス変数を覗けばいいんじゃまいか。
834デフォルトの名無しさん:2006/03/19(日) 19:09:16
>>829
> Rubyでprotected/privateなテスト項目は書けない書かないというのはFAQ

Ruby に限った話じゃないよね。

C で check 使ってテスト書くけど、泣く泣く static 外しとります・・・
835デフォルトの名無しさん:2006/03/19(日) 20:15:56
>>829
>Rubyでprotected/privateなテスト項目は書けない書かないというのはFAQ

そんなうそを書かないでください。おねがいします。

Rubyはなんでも動的なので、protected/privateなメソッドも実行時にpublicに返ることができます。
これをつかえば、テストスクリプト中でだけメソッドをpublicにしてやることができ、テストも問題なく実行できます。

class Hoge
public :foo # fooメソッドをpublicにする
end

>>826 はインスタンス変数にアクセスする場合だからpublic/protected/privateとはあんまし関係ないけど。
836デフォルトの名無しさん:2006/03/19(日) 20:41:27
せんせー! 可視性によって動作が変わるようなメソッドだったらどうするんですか!?
837デフォルトの名無しさん:2006/03/19(日) 20:42:59
テスト中に違うクラスになったら、本来テストしたいクラスはやっぱりテストできないんじゃ……?
838デフォルトの名無しさん:2006/03/19(日) 21:01:04
ヒント
__send__
839デフォルトの名無しさん:2006/03/19(日) 21:03:30
>>836
可視性が影響するテストが終わった後に public にすれば良いのではなかろうか。
840デフォルトの名無しさん:2006/03/20(月) 01:57:28
>>828
exerbのコアはコンパイルしましたか?
841828:2006/03/20(月) 02:52:25
>>840
いえ,普通に exerb-3.3.1.tar.gz から setup.rb でインストールしただけです。
exerbのコアが 1.8.2 で,実行環境が 1.8.4 だから問題が生じているのでしょうか。
ということは,exerbの 1.8.4 コアを作れば解決する可能性があるわけですね。
そのコンパイル手法がまとめてあるサイトなどがありましたらご紹介ください m(__)m
842828:2006/03/20(月) 02:55:44
追記:MinGW や Visual Studio 2005 は持っています。
843デフォルトの名無しさん:2006/03/20(月) 12:26:55
>>836
>せんせー! 可視性によって動作が変わるようなメソッドだったらどうするんですか!?

どんなメソッドだよ。まったく思い浮かばないから例をあげてみてくれ。

つか、なんでこんなありそうもないものを持ち出すのかね。そこまでして自分が正しいと主張したいのか。
844デフォルトの名無しさん:2006/03/20(月) 12:37:52
毎日が春休み
845デフォルトの名無しさん:2006/03/20(月) 13:17:21
>>843
なにムキになってんの?
846デフォルトの名無しさん:2006/03/20(月) 13:38:06
冷静な私も気になるから、どんな例が挙げてみてくれ給へ。無論、有用そうなものをね。
847デフォルトの名無しさん:2006/03/20(月) 14:06:22
Ruby初心者スレッドPart4:846: parser error, unexpected 挙げて
848デフォルトの名無しさん:2006/03/20(月) 14:07:56
せめて隔離スレに移動する気はないのかね
849デフォルトの名無しさん:2006/03/20(月) 14:26:42
>>848
そう思ったら適切に誘導しろよ。
850デフォルトの名無しさん:2006/03/20(月) 15:14:36
そもそもここが隔離スレ。
851デフォルトの名無しさん:2006/03/21(火) 22:01:17
YARVというものでRubyの処理速度が上がるという記事を見たのですが
これはどういう仕組みでRubyを高速化するのでしょうか。

一応ググってみたのですが、私にはYARVのHPに書かれている内容が理解できませんでした。
コンパイラーという単語が出てきたのでRubyのプログラムを機械語に置き換えて高速化するのかなと思ったのですが…

将来的にRubyの処理速度がC言語に近づくということなのか非常に気になります。
852デフォルトの名無しさん:2006/03/21(火) 22:08:16
>>851
もう少し、何が理解できなかったのか、どういう仕組みか知るためにどんな努力ができるのか具体的に。
どういう説明をすればあなたが満足するのか、あいまいで見えないです。
853デフォルトの名無しさん:2006/03/21(火) 22:18:03
今日もまた
Hash#mergeとHash#updateを
まちがえた
854デフォルトの名無しさん:2006/03/21(火) 22:20:16
>>851
インタプリタによる実行と仮想マシンによる実行の違いから入って、
仮想マシンの高速化技術について学んでから読み直してみれば?
855デフォルトの名無しさん:2006/03/21(火) 22:27:38
>>851
高速化の理屈は俺もよくわかっていないが
とりあえず「Rubyのプログラムを機械語に置き換えて高速化する」わけではない。

なぜかというと、そもそもruby自体が
スクリプトを読み込むときに内部表現へとコンパイルしているから。
YARVではそのrubyの内部表現を、さらに別のYARV特有の内部表現へと
コンパイルしている、というだけ。

あんま詳しくないので、突っ込みなどあればお願いします>他の方
856デフォルトの名無しさん:2006/03/21(火) 22:47:15
よーするに1.xとは別設計別実装のRuby処理系でしょ。
既存の処理系のどこをどう高速化したとかいう話じゃないと。
857デフォルトの名無しさん:2006/03/21(火) 22:54:25
今のrubyは、スクリプトを内部表現にするといっても、構造的にはほとんど元の
ソースコードのまま、言い方をかえれば抽象度が高い状態で保持するが、
YARVはもっと細かいレベルまで分解し、仮想機械の機械語に変換する。
そのままだと大して速くならないが、ある程度は最適化を施すので、一度変換された
命令は元のrubyよりは高速に実行できる(ことが多い)。
858デフォルトの名無しさん:2006/03/21(火) 22:57:08
いやいや、仮想機械の機械語に変換するだけ、で速くなるよ。

逆にそのある程度は最適化施す、ということをやっても大して速くはならないよ。

最適化施すいうても、動的なRubyではやれることは少ないから。
859851:2006/03/21(火) 23:43:25
>>852
プログラム初心者なので、Rubyの基本的な用語や使い方を少し知っている程度です。
YARVに書かれていることが理解できないというより
理解する気になれなかったので、基礎学習をある程度終わらせてからリトライしようと考えています。

ただ、素人の私がプログラムを学んで感じたRubyの弱点は処理速度なので
それが改善される可能性があるなら魅力的な話だと思い、概略だけでも知りたいと思ったので質問しました。

YARVによってRubyが
○どういう原理で
○どれほど高速になるのか

それが知りたかったのです。
860852:2006/03/21(火) 23:54:47
>>859
>ただ、素人の私がプログラムを学んで感じたRubyの弱点は処理速度なので
素人のあなたが他のどの言語と較べて、どういう処理に関して感じたのですか?

○どういう原理で
残念ながら、自称「初心者」「素人」には理解不能でしょう。

○どれほど高速になるのか
処理によりますが、数倍〜数十倍のオーダーと思われます。
さらにそんな乱暴な概論だけで言うなら、処理によっては遅くなることもありえます。
(っていうのは実装に依存するという意味なので、YARVに関したことじゃないけど。)
861デフォルトの名無しさん:2006/03/22(水) 00:13:48
初心者スレでこんなこというのもなんだけどw,「初心者です」でぐぐれ >>851
862デフォルトの名無しさん:2006/03/22(水) 02:38:39
> いやいや、仮想機械の機械語に変換するだけ、で速くなるよ。
なんでなの?
今の Ruby だって、当然、機械語に翻訳してるよね。
VM 用の機械語だと、何で速くなるのか分からないなぁ。
863デフォルトの名無しさん:2006/03/22(水) 02:46:18
864デフォルトの名無しさん:2006/03/22(水) 03:06:54
>>858>>857 に対して「いやいや」と言ってるのかと思ったんだけど……
wikipedia を読むに、Ruby は単純な実装なので遅いということ?
865デフォルトの名無しさん:2006/03/22(水) 07:44:24
どーも処理が遅いとおもったらRubyだけで仮想メモリ600MB使ってたぜコノヤロー
866デフォルトの名無しさん:2006/03/22(水) 09:18:46
>>862
今のRubyは機械語に翻訳しているわけではないよ。
スクリプトを解釈して逐次実行している。

で、最適化もなしに、仮想機械の機械語に変換するだけで、
そんなに速くなるとは思えないんだけど、どうなんだろう?
867デフォルトの名無しさん:2006/03/22(水) 10:08:12
>>851
YARVで高速になる理由は主に3つあります。
・木構造をやめて命令(バイトコード)の配列にすること・・・
 現在のRubyは、プログラムを内部で木構造に変換し、木構造をたどりながら実行します。
 YARVは、その木構造を(簡単にいえば)命令の配列に変換して実行します。
 基本的には、木構造をたどるよりは配列にアクセスするほうが速いので、YARVのほうが高速になります。
・バイトコードにすると高速化のテクニックを流用できること・・・
 C言語などのコンパイラで研究された高速化のための細かなテクニックが、バイトコードインタプリタにも流用できます。
 詳しくはコンパイラの本を買って「最適化」に関する章を読んでください。
・CPUのネイティブコードに変換する機能をもっていること・・・
 JITやAOTコンパイラを使うことで、Rubyのプログラムの一部をネイティブコードに変換しているようです。
 YARVでどこまで実現しているかはよくしらないけど、JVMはJITでかなーり高速化されました。

YARV(というかバイトコードインタプリタ)にして速くなる理由は主にこの3つです。特に前2つは重要。詳しくは、中の人のプレゼン資料を読むとよいでしょう。
http://www.atdot.net/yarv/youth_2004_sasada_final.ppt
ただ、Rubyは最適化しにくい(高速化することをほとんど考慮されていない)言語なので、YARVにしたところでPHPやPythonより速くなるかどうかは微妙です。
ベンチマークではかなり高速化されたという結果がでてますが、それがWebアプリなどでもそのまま反映されるとは限りません。
Rubyを使うなら、ほかの言語との速度比較でもんもんするより、「自分にとって必要な速度(受け入れられる速さ)でうごけばそれでよい」と割り切ることをおすすめします。

個人的には、YARVがネイティブスレッド対応らしいので、高速化よりもそっちのほうに期待です。
あと、1プロセスで複数インスタンスが作成できるようになるようなので、Webアプリではこっちのほうがうれしいと思います。でもCGI環境じゃ使えません。残念。

以上です。お役に立てれば。
868デフォルトの名無しさん:2006/03/22(水) 11:09:15
> ・CPUのネイティブコードに変換する機能をもっていること・・・

ほんと?
869デフォルトの名無しさん:2006/03/22(水) 11:49:50
>>868
プレゼン資料32ページ目から引用

>AOTコンパイラ
>・RubyプログラムをCプログラムに変換
>・命令記述を変換して貼つけ(テキスト処理)
>・ほぼすべての命令に対応

現在のYARVがどこまでやっているかはしらん
870デフォルトの名無しさん:2006/03/22(水) 13:35:38
流れをぶった切ってすみませんが,質問です。

input = '\x95\xB6\x8E\x9A\x97\xF1' # Shift-JISでの"文字列"に相当
print unescape(input) # => 文字列

という,unescape という関数を作りたいのですが,今は

def unescape(input)
  eval("\"#{input}\"")
end

として使っています。

しかし,これでは,evalを使っているため,
  unescape('"; print "hoge"; "')
などとすれば,任意のコードが実行できてしまいます。

もっと安全な代替法があれば教えて下さい。
871デフォルトの名無しさん:2006/03/22(水) 13:51:38
iconvかnkfかjcodeかkconvあたり
872デフォルトの名無しさん:2006/03/22(水) 13:53:17
>>870
こんなのはさすがに直球過ぎるか・・・

def unescape(input)
input.gsub(/\\(?:x([0-9A-Fa-f]{2})|(.))/) { ($1) ? [$1].pack("H2") : $2 }
end
873デフォルトの名無しさん:2006/03/22(水) 17:43:53
質問です。
引数の数が違う同名のメソッドは定義できますか?
できないのであれば、どのように実装したらスマートですかね。
引数のかずでcase文とかしかおもいつかないのですが…
874デフォルトの名無しさん:2006/03/22(水) 17:50:35
875デフォルトの名無しさん:2006/03/22(水) 17:51:47
876870:2006/03/22(水) 19:47:32
>>872
なるほど,メタ文字の解釈を自前で実装してしまうわけですね。
ありがとうございました。
877デフォルトの名無しさん:2006/03/22(水) 20:30:47
>>873
こういうのはどうよ、とRuby初心者が提案してみるテスト。
def overload(args, pattern)
 if pattern.kind_of? Integer
  return if args.length != pattern
 elsif pattern.kind_of? Array
  return if args.length != pattern.length
  pattern.each_index do |i|
   return if !args[i].kind_of? pattern[i]
  end
 else
  raise ArgumentError, "pattern = Integer | Array"
 end
 yield *args
end

def hoge(*args)
 overload args, [Integer, Integer] do |x,y|
  return x + y
 end
 overload args, [String, String] do |x,y|
  return x.to_i + y.to_i
 end
 overload args, 3 do |x,y,z|
  return x + y + z
 end
end
878デフォルトの名無しさん:2006/03/22(水) 20:58:07
>>877
実装の良し悪しはよくわからんが、メソッドのオーバーロードを支援するモジュールとかがあってもいいな。
と思ったらttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/32846とか
ttp://mono.kmc.gr.jp/~oxy/hiki.cgi?Library+Syntax
は利用者側のコードは877とほとんど同じだな。
879デフォルトの名無しさん:2006/03/22(水) 21:05:04
pathnameとかもそうだけどその手の便利ラッパーは
高速化が必要になると真っ先に削らなきゃならなくなることが多いので
なんとなく敬遠してしまう。
使い分けるのは脳がもったいないし。
880デフォルトの名無しさん:2006/03/22(水) 22:10:00
便利ラッパーを削ってできる高速化なんぞ焼け石に水。
ラッパーの実装が相当まずいなら別だけど。

……というのが LL way だと思う。
881デフォルトの名無しさん:2006/03/22(水) 23:27:31
>>879
pathnameが気になるほど速度を要求するのなら
拡張ライブラリpathname.soを実装するのが正解だと思う
882デフォルトの名無しさん:2006/03/22(水) 23:43:52
1000回くらいpathnameを呼ぶプログラムなのかもしれないじゃないかー
883851:2006/03/22(水) 23:49:00
>>860,861
自分の位置付けを明確にしたほうが良いと思ったので
あえて「初心者」と使ったのですが、余計な言葉だったようですね。
それはともかく、返信ありがとうございました。

2D画像の高速描画を試した時に、Rubyの処理速度に対して不満を感じたのですが
実際に他の言語と比較したわけではありません。
あるいは、インタプリタ言語がスクリプトをその都度解釈して実行している、という解説が
私に「Rubyは遅い」という印象を持たせているのかもしれません。

>>867
返信ありがとうございます。リンク先のプレゼン資料も全て見ました。
ほとんど全ての単語を調べながら見ることになったのですが、YARVを理解する良いキッカケができました。
Ruby関連の書籍には意識が向いていたのですが、これからはコンパイラの書籍にも意識を向けようと思います。

「自分にとって必要な速度(受け入れられる速さ)でうごけばそれでよい」
という言葉にモヤモヤが晴れた気がします。本当にありがとうございました。
884デフォルトの名無しさん:2006/03/22(水) 23:50:28
Singletonってextendじゃなくてinlcudeして利用するんだな

extendのが正しいんじゃないかと思うんだけどどうなってんの
885デフォルトの名無しさん:2006/03/23(木) 00:18:59
exerbを使って、スクリプトをexeファイルに変換して実行するとき
このexeファイルの存在するディレクトリパスを
確実に得る方法ってありますか?
(例:c:\ruby\test.exeを実行した場合、カレントディレクトリに関わらずc:\ruby\を得る)
exeファイルと同じ場所にあるファイルをオープンするようにしたいのですが……
886デフォルトの名無しさん:2006/03/23(木) 00:43:40
Exerb 使ったことが無いから知らないが、Dir.pwd では取れないの?
887デフォルトの名無しさん:2006/03/23(木) 00:55:37
>883
わかってるかもしれないけど、 Ruby も含めて最近のスクリプト言語はプログ
ラムをその都度解釈実行してるわけじゃないよ。
888デフォルトの名無しさん:2006/03/23(木) 01:46:13
>>883
一般に動画処理やゲームの様なリアルタイムの処理が要求される分野では
Ruby含むスクリプト言語は向かない事が多い。
適材適所。高速処理なら素直にコンパイラ使った方が良いよん。
889デフォルトの名無しさん:2006/03/23(木) 01:52:35
>>885
Exerb.filepath
890デフォルトの名無しさん:2006/03/23(木) 04:37:03
Array#delete_if って破壊的なんだな。
Array#reject は無いし。ちょっと、混乱した。
ひょっとして、結構グダグダだったりする?
コピーとってから処理するのが定石なのだろうか。
891デフォルトの名無しさん:2006/03/23(木) 05:28:42
enum.map{|x| x.some_method}.max を、map で新しい配列を作らずにやる方法はありますか?
1.9 だと enum.max_by{|x| x.some_method}.some_method と出来るみたいですが、
DRY に反するので出来れば避けたいです。
892デフォルトの名無しさん:2006/03/23(木) 05:57:09
>>891
inject を使ってゴニョゴニョやれば出来るけど、おとなしく map を使うのがいいと思う。
893デフォルトの名無しさん:2006/03/23(木) 07:30:12
>>891

max = 0
enum.each{|e| v = e.some_method; max = v if max < v}

enum.each_with_index {|e,i| v = e.some_method; max = v if i == 0 || max < v; max }

enum.inject(0) {|max,e| max < (v = e.some_method) ? max = v : max }

あんまり簡単にはできないみたいだな。
Enumerableに自分でメソッドを追加したほうがいいかもね。
894デフォルトの名無しさん:2006/03/23(木) 10:14:10
>>890
> Array#reject は無いし。

あるよ。
895デフォルトの名無しさん:2006/03/23(木) 12:00:45
正確には Enumerable#reject だけどな。
896デフォルトの名無しさん:2006/03/23(木) 12:11:58
みんな ri とか ReFe とか irb の help とか使わんのかね?
897デフォルトの名無しさん:2006/03/23(木) 13:09:52
なんかキモイ
アピールが足りない

どっちか、あるいは両方が理由じゃないか?
使われないのは
898デフォルトの名無しさん:2006/03/23(木) 13:14:59
いや、名前がまずそう(食べものに見えない)からだと思う。
899デフォルトの名無しさん:2006/03/23(木) 13:20:37
おいしそうな名前をよろしく!
900デフォルトの名無しさん:2006/03/23(木) 13:33:37
>>896
いろいろあってどれを使えばよいのかわからん。
どれが良いの?
あとインストール方法教えて。
901デフォルトの名無しさん:2006/03/23(木) 14:38:34
902885:2006/03/23(木) 15:26:46
>>886
Dir.pwdで取得できるのはカレントディレクトリなので
別の場所から実行した場合にうまくいかないのです

>>889
ありがとうございました!
というか、doc/class.ja.rdに書いてあったんですねorz

>>896
「コマンドラインが苦手」
「WindowsにはHTML版リファレンスがあるから」も追加で
903デフォルトの名無しさん:2006/03/23(木) 15:27:51
>>884
>Singletonってextendじゃなくてinlcudeして利用するんだな
>extendのが正しいんじゃないかと思うんだけどどうなってんの

たしかに。singleton.rbはクラスメソッドを追加するようになっているから、includeよりextendのほうが自然だ。
まあ module_eval とか駆使すれば include でもクラスメソッドを追加できるとは思うけど、なんか直感的じゃないな。
904デフォルトの名無しさん:2006/03/23(木) 15:51:32
すみませんが、https接続関係での書き方を教えてください

ログインするページ → ログイン情報入力 → 会員メニューが表示
        (フォーム)
この会員メニューを取得したいのですが、どんなコードを書いたら良いのでしょうか。


たとえば
require 'net/http'
include Net

hobj = HTTP::new(ログインするアドレス)
hobj.start
hobj.post('form.asp', 'userid=xxxx')
hobj.post('form.asp', 'pass=yyyy')

とやればよいのか、その後のページ変移はどうフォローすればよいのかサッパリで。
参考となるコードとか何かありました教えてください。
905デフォルトの名無しさん:2006/03/23(木) 15:55:15
>>902
HTML Help って使いにくいと思う
タブブラウザみたいに使えないし
906デフォルトの名無しさん:2006/03/23(木) 16:07:54
>>904
君の質問内容はhttpsと全然関係ない。
君の書いてるコードはそもそもhttpsになってない。
POSTの仕方もおそらく間違ってるが、そんな調子ではそもそもPOSTでいいのかどうかも信用できない。
サーバ側でどうセッションを管理するのかわからないから与えられた情報だけでは回答できない。

こんなところか。

とりあえず、ログインページの仕様を明確に説明するとか、セッションがどう管理されるのかを説明するとか、何がどうhttpsなのか説明するとか、そのあたりからだね。
907デフォルトの名無しさん:2006/03/23(木) 16:14:01
>>906
勉強不足という事ですね、まぁその通りなんですが。
やりたい事は
フォームにuserid,passwordを入力して、変移した画面を取得したい、
とそれだけなんです。

ですが、ネットワーク関係はさっぱりなのでどんな所から勉強したらよいのか
という基本そのものからわかってないのが現状ですorz
908デフォルトの名無しさん:2006/03/23(木) 16:30:29
>>907
まずは「HTTP」から自力で勉強しよう。基本がわかってないなら基本から。
まだRuby系スレに質問するレベルでないことは確かだ。
909デフォルトの名無しさん:2006/03/23(木) 16:31:16
とりあえず、require するファイルが参考になる
910デフォルトの名無しさん:2006/03/23(木) 17:25:00
>>907
Rubyの本でなおかつCGIを取り扱ってるものを読むべき
911デフォルトの名無しさん:2006/03/23(木) 18:43:38
参考にするなら Ruby で書かれた RSS リーダなんてのが
よいんじゃまいか
あるのかどうか知らんが
912デフォルトの名無しさん:2006/03/23(木) 19:03:16
>>826
late replyだけど、privateなインスタンス変数を参照するには、Object#instance_variable_get というのが使えるよ。
以下、マニュアルから引用:
------------------------------------
instance_variable_get(var)
ruby 1.8 feature

オブジェクトのインスタンス変数の値を取得して返します。
var にはインスタンス変数名を文字列か Symbol で指定しま す。
インスタンス変数が定義されていなければ nil を返します。

class Foo
def initialize
@foo = 1
end
end

obj = Foo.new
p obj.instance_variable_get("@foo") # => 1
p obj.instance_variable_get(:@foo) # => 1
p obj.instance_variable_get(:@bar) # => nil
913デフォルトの名無しさん:2006/03/23(木) 19:08:47
http-access2使えば少しは楽じゃないかな cookieの実装に難ありだけど
pem作るの面倒だから結局OpenSSL::SSL::VERIFY_NONEでほげほげlきdjf;あぇいj
require 'http-access2'
client = HTTPAccess2::Client.new(nil, 'UserAgent')
client.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE
res = client.get('http://foobar.com/')
p res.header
puts res.content
res = client.post('https://foobar.hoge/login.hoge', {'id'=> 'foo', 'pass' => 'bar'})
914デフォルトの名無しさん:2006/03/23(木) 19:10:25
>>913
904>>の質問内容はhttpsと全然関係ない。
915デフォルトの名無しさん:2006/03/23(木) 19:15:47
>>910
和書ならほぼ2冊しかないような。そんな限定しなければもっといい本もあるだろう。

>>911
意味わかんね。なぜにRSSリーダ?
916デフォルトの名無しさん:2006/03/23(木) 19:19:43
しかし、標準のインストール状態でhttps使おうと思うと、1.8.2以降になるのかな?
917デフォルトの名無しさん:2006/03/24(金) 01:10:34
サーバ側が親切な実装ならセッションとの関連づけはURLにセッションキーを付けて送ってくるとかして可能な限り保ってくれると思うが。
というか、認証してすぐの1画面が欲しいだけなら、単純にURLにパラメタひっつけて送信すれば次の画面の内容までは返してくれるだろう。
その先を取りに行くのにはCookieとかは欲しいだろうけど、とりあえずそうではないんだろ?
918デフォルトの名無しさん:2006/03/24(金) 01:58:37
foo.rbの先頭の設定部分を切り出して
foo.cfgってファイルにして
require "foo.cfg"
ってやるとそんなファイルねーって怒られるんだけど
.rb, .so以外は指定できないんですか?
require "foocfg.rb"
なら問題ないみたいですが。
919デフォルトの名無しさん:2006/03/24(金) 02:25:32
920デフォルトの名無しさん:2006/03/24(金) 02:30:11
>918
できない。 rb や so でない独自のファイルを読み込むときは load を使うのが普通。
921デフォルトの名無しさん:2006/03/24(金) 02:31:59
require は .rb .so 以外は認めない仕様。

設定ファイルの読み込みだけなら load 使ったら良いかも。
requireと違って、拡張子の自動補完もしないし
同じファイルでも無条件に読み込む。

扱いにはちょっとだけ注意が必要かもね。

…ただ、設定ファイルを開発者以外が触る場合は
ちゃんと設定ファイル読み込みの処理を書くべき。
Ruby プログラムとして解釈出来るなら文字通り何でも実行出来てしまうからね。
922デフォルトの名無しさん:2006/03/24(金) 09:01:58
>>918
どちらかといえばfoocfg.rbにリネームすることをオススメしたい
Rubyスクリプトであるということがはっきりするし
923デフォルトの名無しさん:2006/03/24(金) 09:44:28
>>922
それだと、ライブラリとしてのrubyスクリプトと、設定ファイルとしてのrubyスクリプトがごっちゃになってしまう。
だからfoo.cfgにしたんだと思う。PHPだと.php以外の拡張子にするのはよくやってるしね。
とはいってもrubyとPHPでは仕様が違うので、ここはあきらめて foo.cfg.rb に一票。
924デフォルトの名無しさん:2006/03/24(金) 10:00:40
foo_config.rb がいいな
925デフォルトの名無しさん:2006/03/24(金) 11:10:30
open して eval
が、いやなら YAML にしちゃうかな、今なら

速度が気になるなら YAML を読んで Marshal#dump
タイムスタンプを比較して YAML が更新されてたら
そっちを読む

こんな感じか
926デフォルトの名無しさん:2006/03/24(金) 11:50:14
.foo.rb
927デフォルトの名無しさん:2006/03/24(金) 12:20:02
RDEみたいに大掛かりなのじゃなくて
Winでデバッガに特化したGUIデバッガない?
928デフォルトの名無しさん:2006/03/24(金) 12:45:33
>>927
ない。コマンドラインでdebug.rb使うか、RDEのデバッガ機能だけを使う。
RDEは大掛かりっていうほど大掛かりじゃないと思うけどなー。Eclipseなんかと比べると。
929デフォルトの名無しさん:2006/03/24(金) 13:24:25
>>927
同意
RDEなんてまさに大掛かりじゃないGUIデバッガが欲しい人のためのツールのように思われる
930デフォルトの名無しさん:2006/03/24(金) 13:24:56
>>927>>928
931デフォルトの名無しさん:2006/03/24(金) 14:01:44
>>932
932デフォルトの名無しさん:2006/03/24(金) 14:04:41
debugger.rbに、GDBと互換の外向きのインターフェースがあればいいのに。
933デフォルトの名無しさん:2006/03/24(金) 21:52:44
if cond
...
end

Ruby って cond が false や nil 以外は true として処理するんですね。
気になる人って結構居そうな気がする。
934デフォルトの名無しさん:2006/03/24(金) 22:00:26
何をいまさら。
935デフォルトの名無しさん:2006/03/24(金) 22:25:13
boolでtrue, false, nilの三値もてるとか気持ち悪かったりするけど
それはそれである意味合理的だし郷に入ってはで慣れるしかない。
936デフォルトの名無しさん:2006/03/24(金) 22:25:53
>>935
nil は bool じゃないと思うが。
937デフォルトの名無しさん:2006/03/24(金) 22:26:51
boolってなんだ?
938デフォルトの名無しさん:2006/03/24(金) 22:27:50
即レス会場はここですか?
939デフォルトの名無しさん:2006/03/24(金) 22:43:50
>>937
今後のために一時的に蓄えておくこと、
もしくは遊戯や競技のために大量の水をためておく構造物のことです
940デフォルトの名無しさん:2006/03/24(金) 23:07:33
>>933
どういう仕様だったらいいと思う?

>>939
おもしろない
941デフォルトの名無しさん:2006/03/24(金) 23:10:41
>どういう仕様だったらいいと思う?
初心者スレでいちいちこんなレスつけるなよ。
942デフォルトの名無しさん:2006/03/25(土) 00:30:36
>>940
たぶん933は、0とか""とかも偽として扱って欲しいんだろう
俺は今の実装のほうが良いと思うが
943デフォルトの名無しさん:2006/03/25(土) 00:34:21
>>942
俺は0が偽の方がしっくりくるな
今の実装はどの辺が利点なの?
944デフォルトの名無しさん:2006/03/25(土) 01:22:18
利点っていうか、0 は Numeric なんだから false と等価になるわけない的な何か
945933:2006/03/25(土) 01:32:28
>>940
うろ覚えですが、C# や Python だと bool しか受け付けなかったような?
個人的な意見ですが、そちらの方式の方が明瞭でで、
Ruby の方式は便利だけど Perl に近くて少し見通しが悪いかなと感じました。

余談ですが、「プログラミング C#」の P256に以下の様な記述があります。
> C# 言語設計者たちは、あいまいなコードが仕様されることを防止すると共に、
> if ステートメントの基本原則を尊守しようとしていることがわかります。
946933:2006/03/25(土) 01:39:11
そういえば、matz って lisper でしたっけ?
non-nil 的な嗜好かな。まぁ、どっちでも良いか。
947デフォルトの名無しさん:2006/03/25(土) 01:45:57
1は1がある -1は-1がある 0は0がある
もちろん0も偽にはならない
ってことだよね? いいのかな
948デフォルトの名無しさん:2006/03/25(土) 01:49:18
Cは0に意味を持たせすぎた。
CがそうだからRubyも倣えという主張があるなら
それには首肯しかねるな。
949デフォルトの名無しさん:2006/03/25(土) 03:04:24
>948
>945-946を見る限り、933はむしろboolean原理主義者に見えるが。
(論理値が期待されるところにはtrueかfalseか、そのいずれか帰着される式以外あってはならない)
950デフォルトの名無しさん:2006/03/25(土) 03:06:43
951>>1は妹に恋をする:2006/03/25(土) 04:17:36
Rubyの源流はPerlなんだけど、
元のPerlが0や"0"を偽として扱うことによっていろんな弊害を産んでいたから、
Rubyではfalse,nil以外偽と扱わないようになったんだと覚えてる。

例えばwhile($dest = $src){ .... みたいな制御構文で、
$srcが何かのタイミングで"0"になったらいきなりループ抜けてしまったり、とか。
952デフォルトの名無しさん:2006/03/25(土) 09:36:36
よくあるいちゃもんとその答えとして早くまとめるんだ
953デフォルトの名無しさん:2006/03/25(土) 09:48:13
>>951
Perlでも "0" は偽じゃないよ。と、突っ込んでみる。
954デフォルトの名無しさん:2006/03/25(土) 10:20:24
C:\> perl -e "print '0'?'true':'false'"
false
955940:2006/03/25(土) 11:57:28
>>945
Rubyは、厳密さよりも簡潔さを優先しているから、boolean以外のものも受け付けるようになっている。そっちのほうが簡潔に書けるからね。
あとは慣れの問題じゃないかな。Rubyの仕様に慣れると、if文の条件式にいちいち obj != null とかつけるのがすげー面倒くさく感じるようになる。

Perlだと0や""も偽として扱うようになってるけど、これはちょっと困るよね。C言語はアセンブラみたいなもんだから0を偽とする仕様はわかるけど(ほかに偽となるような適当な値がないので)。

あと「条件式は必ずboolean」という仕様だと、
obj = obj1 || obj2 || obj3
tmpdir = ENV['TEMP'] || ENV['TMP'] || '/tmp'
という記述ができなくなるので、おれ的には反対。

>>941
おもしろくないっていわれたからって、つっかかってくんなよ
956デフォルトの名無しさん:2006/03/25(土) 12:12:33
>>955
初心者スレだと予想される答もありきたりでおもしろくなさそうだろうからじゃないか?
957デフォルトの名無しさん:2006/03/25(土) 12:44:52
Perl の真偽値の仕様は、あれはあれで便利なんだけどな。
defined() を使わないといけないところで忘れるというミスを誘発しやすいが。
958デフォルトの名無しさん:2006/03/25(土) 13:56:35
んでRubyはちょうどよいと
959デフォルトの名無しさん:2006/03/25(土) 19:06:28
んだな。

obj ||= "defaultvalue"

みたいな記述が便利だ
960デフォルトの名無しさん:2006/03/25(土) 19:44:06
>>959
PHPでそれやって真偽値になってショボーンってなった。
961デフォルトの名無しさん:2006/03/25(土) 19:47:11
||= はPerlから
962デフォルトの名無しさん:2006/03/25(土) 23:24:07
Perl でそれやると 0 が上書きされて(´・ω・`)ショボーン
963デフォルトの名無しさん:2006/03/26(日) 01:56:02
perl の defined-or (//=) ってまだつかえんのか。
964デフォルトの名無しさん:2006/03/26(日) 02:22:35
>>963
どんな機能なのだろう。
便利であってもへんてこな文法なら導入にはちょっと〜。
965デフォルトの名無しさん:2006/03/26(日) 03:54:58
>>963
nil と false を区別したいときなんてほとんど無いからなあ。
966ヽ(´ー`)ノ ◆.ogCuANUcE :2006/03/26(日) 03:59:16
>>963
5.8.x でも patch 当てたら使えるけど、基本的には Perl6 の機能だからね。
Ruby は Object#nil? あるから要らんよね。

>>964
|| や or は真偽値のチェックをするけど、dor(defined-or) 演算子は
undef (Ruby だと nil) かどうかをチェックする。// と err だな。

$n = some_op() or 5;    # some_op() が偽を返したら 5 を代入
$n = some_op() err 5;    # some_op() が undef を返したら 5 を代入
967デフォルトの名無しさん:2006/03/26(日) 10:53:09
上の最後のは Ruby だとどう書くんだろう。こうかな?

foo = defined?(bar()) ? bar() : 5

?で終る述語を三項演算子に使うとなんかカッコワルイ...
968ヽ(´ー`)ノ ◆.ogCuANUcE :2006/03/26(日) 11:36:07
n = (v = some_op()).nil? ? 5 : v

うーん、素直に二行に書いた方が良さそうだな。
まぁ何でも一行に詰め込むような言語でもないし、いいんじゃね?

n = some_op()
n = 5 if n.nil?
969デフォルトの名無しさん:2006/03/26(日) 11:56:23
その場合なら
n = (v = some_op()) ||= 5
970デフォルトの名無しさん:2006/03/26(日) 12:04:37
右辺で初出のローカル変数は NameError だから、
一般的には defined? でテストしないといけない気がしたのだな。
971デフォルトの名無しさん:2006/03/26(日) 15:33:41
そろそろ次スレの準備だけど、なんか書いておくことある?
個人的には、リンク先とかは2以降に書いて、1には質問するときの諸注意とか、スレのローカルルールみたいなのを書いた方がいいと思う。
あと初心者スレなんで、既出の質問とか似たような質問もOKとしてあげたい。たとえ回答が「XXを読め」だけだとしても。だめかな?
972デフォルトの名無しさん:2006/03/26(日) 16:01:57
>>971
良いのでテンプレよろ
973デフォルトの名無しさん:2006/03/26(日) 17:30:23
>>971
> あと初心者スレなんで、既出の質問とか似たような質問もOKとしてあげたい。

せめてスレ内検索くらいはして欲しいと思うのだが、そこまで甘やかす必要、ある?
974デフォルトの名無しさん:2006/03/26(日) 17:32:28
と思ったが、まあどうでもいいや。
とりあえず、テンプレよろ。
975デフォルトの名無しさん:2006/03/26(日) 17:43:47
テンプレ
初心者そっちのけで毎度毎度のループ議論に突入禁止
976デフォルトの名無しさん:2006/03/26(日) 17:59:41
話は変わるが今日の夕食はうどのテンプラのようだ
977デフォルトの名無しさん:2006/03/26(日) 18:01:03
>>973
いいんじゃない?気が向いたやつが「>>999をよめ」とか回答するだけで。

テンプレ、PHP質問スレを参考にしてみた。
---
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは2以降。Ruby on Railsの質問はWebProg板のRailsスレで。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・ぐぐる
 ・マニュアルで探す http://www.ruby-lang.org/ja/man/
 ・FAQを読む http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(なるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
978デフォルトの名無しさん:2006/03/26(日) 18:02:00
続き:
---
#本スレ
Rubyについて Part 19
http://pc8.2ch.net/test/read.cgi/tech/1140762419/

#関連スレ
【Agile】Ruby on rails相談所【DRY】
http://pc8.2ch.net/test/read.cgi/php/1118663500/

RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/

【最高言語】 Rubyist Magazine創刊 【ルビま!】
http://pc8.2ch.net/test/read.cgi/tech/1094825807/


#過去スレ
Ruby初心者質問スレPart1
http://pc5.2ch.net/test/read.cgi/tech/1100534824/

Ruby初心者質問スレPart2
http://pc8.2ch.net/test/read.cgi/tech/1107799347/

Ruby初心者質問スレPart3
http://pc8.2ch.net/test/read.cgi/tech/1125587131/

Ruby初心者スレッドPart4
http://pc8.2ch.net/test/read.cgi/tech/1137927749/
979デフォルトの名無しさん:2006/03/26(日) 18:03:27
#関連リンク

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

リファレンス
http://www.ruby-lang.org/ja/man/

FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ

RAA - Ruby Application Archive
http://raa.ruby-lang.org/

日本Rubyの会 公式Wiki - 日本Rubyの会Wiki
http://jp.rubyist.net/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

Matzにっき
http://www.rubyist.net/~matz/

<rubyXML/>
http://www.rubyxml.com/

Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/

Ruby hotlinks 五月雨版
http://rrr.jin.gr.jp/~znz/samidare/
980デフォルトの名無しさん:2006/03/26(日) 18:38:39
>977
> 「>>999をよめ」

p res[999] # => "埋め\n"
981デフォルトの名無しさん:2006/03/26(日) 18:39:38
ループネタなんでこっちのマニュアルも載せておいた方が良いと思うんだ。
http://www.ruby-doc.org/

直接こっち側を載せた方が良いかもしれない。
http://www.ruby-doc.org/core/
http://www.ruby-doc.org/docs/ProgrammingRuby/
982デフォルトの名無しさん:2006/03/26(日) 18:43:05
「Ruby hotlinks 五月雨版」
リンク切れてるな。
983デフォルトの名無しさん:2006/03/26(日) 19:20:42
そういやどっかDATとかとってるとこは無いの?
検索してるとときどきアンカーのマウスオーバーで2ちゃんブラウザみたいに
ポップアップが出てくる javascript が仕込んである過去ログサイトもあったりする
ああいうのがないと過去ログ探しにくいかもね
984デフォルトの名無しさん:2006/03/26(日) 21:14:08
にくちゃんねるにある程度残ってない?
985977:2006/03/27(月) 04:41:13
げ、もう残りすくないじゃん。
>>977
でいいのか?かなり初心者寄りのテンプレにしちゃったんだけど。

>>981
初心者が英語を読むとは思わないが、載せるのは悪くないので追加してみる。

>>982
こっちだな。すまんかった。
http://www.rubyist.net/~kazu/samidare/

986977:2006/03/27(月) 05:21:55
残り少ないので、勝手に次スレたてた。文句はあとできく。

Ruby初心者スレッドPart5
ttp://pc8.2ch.net/test/read.cgi/tech/1143403165/

変更点
・hotlinksのリンク修正
・ProgrammingRubyのリンク追加
・rubydoc.orgのリンク追加
・rubyforge.orgのリンク追加
・Rubyの本一覧のリンク追加
・リンクに簡単な説明を追加
987デフォルトの名無しさん:2006/03/27(月) 07:48:41
>>983
http://www.2chdat.net/ ここで頼めば作ってくれるんじゃないかな
988デフォルトの名無しさん:2006/03/27(月) 10:55:35
Q. どうしてRubyは〜がないの?

A. Python使いましょう。
989デフォルトの名無しさん:2006/03/27(月) 10:58:02
Q. RubyはRailsなしでも動きますか?
990デフォルトの名無しさん:2006/03/27(月) 11:24:14
A. Railsなしでは(稟議が通らずプロジェクトが)動きません。
991デフォルトの名無しさん:2006/03/27(月) 12:24:53
えっ?
Rails and/or Ruby業務で使ってるところあるの?
992デフォルトの名無しさん:2006/03/27(月) 12:33:18
毎日仕事でRubyばっか。今日もRubyUnitで単体テスト書かなくっちゃ。
993デフォルトの名無しさん:2006/03/27(月) 13:13:51
>>991
その程度だと最近は釣れないらしいよ
994デフォルトの名無しさん:2006/03/27(月) 13:56:20
RubyUnit …
くっ。釣られんぞー。
995デフォルトの名無しさん:2006/03/27(月) 14:11:40
>>990
ワロタ
996デフォルトの名無しさん:2006/03/27(月) 15:36:43
むしろ「RailsはRubyなしで動きますか?」だろう
997デフォルトの名無しさん:2006/03/27(月) 16:10:10
phpであきれたけどな。
strpos()だったか文字列検索で、見つかったら文字の位置を返すんだが、
先頭で見つかって0番目の位置返してくると、if文で偽となるんで難儀した。
見つからなかったときのFALSEと区別つかん・・・

結局、php4で追加された === が使えるようになるまで、いちいち回避してた。
998デフォルトの名無しさん:2006/03/27(月) 16:27:31
>>986
乙。GJでした。
999デフォルトの名無しさん:2006/03/27(月) 16:39:26
>>996 元ネタは ruby-talk:186016
1000デフォルトの名無しさん:2006/03/27(月) 16:40:22
→ Ruby初心者スレッドPart5
ttp://pc8.2ch.net/test/read.cgi/tech/1143403165/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。