Ruby初心者質問スレPart2

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
オブジェクト指向スクリプト言語Rubyについての質問スレッドです。
Ruby Home Page
http://www.ruby-lang.org/ja/

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

本スレ
Rubyについて Part 14
http://pc5.2ch.net/test/read.cgi/tech/1103997158/

2デフォルトの名無しさん:05/02/08 03:03:17
= 関連スレ
: 【Ruby】RubyでCGI
 http://pc5.2ch.net/test/read.cgi/php/988948655/
: 【最高言語】 Rubyist Magazine創刊 【ルビま!】
 http://pc5.2ch.net/test/read.cgi/tech/1094825807/
= 関連スレ?
: RUBYの宿題教えてください。
 http://pc5.2ch.net/test/read.cgi/tech/1106572657/


= 関連リンク
: リファレンス
 http://www.ruby-lang.org/ja/man/
: 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/
: 日本Rubyの会
 http://jp.rubyist.net/
: Rubyist Magazine
 http://jp.rubyist.net/magazine/
: <rubyXML/>
 http://www.rubyxml.com/
: Matzにっき
 http://www.rubyist.net/~matz/
3デフォルトの名無しさん:05/02/08 03:22:39
Thread.new乙
4デフォルトの名無しさん:05/02/08 03:26:23
Rubyの会のサイトはIEで表示がおかしくなる貴重なサイトだな
5デフォルトの名無しさん:05/02/08 03:55:35
スレ統合するんじゃなかったっけ
6デフォルトの名無しさん:05/02/08 10:18:01
無職なんですがRuby覚えたらご飯食べれるようになりますか?
7 ◆m7YeytgDFE :05/02/08 10:29:46
>>6
可能性がわずかにはあるかも。開発にRubyを使う案件って稀みたいです。
C++など他の言語で開発する際に、支援ツールをさくっと作るには便利ですよ。
私もそれでかなり重宝してます。
8デフォルトの名無しさん:05/02/08 12:03:30
>>5
実質的に統合されるなら削除依頼出します。
9デフォルトの名無しさん:05/02/09 07:08:10
こっちはこっちで需要あるから
別に統合しなくても良いと思うよ
10デフォルトの名無しさん:05/02/09 14:03:12
同感。
前スレも3ヶ月で1スレ消費程度に需要があったし。
……MW 祭りやらスクリプト爆撃の影響が、かなりある気がするけど。
11デフォルトの名無しさん:05/02/09 15:07:28
>>10
MW版Rubyの進捗状況が気になって同氏のWikiを拝見しようと思ったら、
サーバが落ちてました...。一時的なダウンなのかな?
12デフォルトの名無しさん:05/02/09 16:48:49
割と頻繁に落ちてますね。
なお、進捗なんてないのでいちいち見る必要はなさそうです。
13デフォルトの名無しさん:05/02/09 20:44:56
本人が落ちてます。
14デフォルトの名無しさん:05/02/10 09:24:15
だから 2ch のカキコが止まったのか。
15デフォルトの名無しさん:05/02/11 14:07:47
ここで暴れてるようでつhttp://pc5.2ch.net/test/read.cgi/tech/1103997158/
16デフォルトの名無しさん:05/02/13 08:38:33
長文ですみませんが、教えてください。

文字列を外からあたえて、それに応じてインスタンスを
作成する方法に関してです。以下では、簡単のために、
ClassAと ClassB の二つにして説明します。
class ClassA
 def initialize
  end
 def out
  puts 'AAAA'
 end
end
class ClassB
 def initialize
 end
 def out
  puts 'BBBB'
 end
end
(1)引数で ClassA もしくは ClassB という文字列を与えて、
 二つを使いわけることを考えます。
 もちろん、場合分けして明示的に書けば可能です。
(次の記事に続きます)
17デフォルトの名無しさん:05/02/13 08:39:15
(2)しかし、場合分けせずに、そのままやろうとすれば、
以下のようにeval を使うことになります。
(ここももっと良い方法があれば教えてください。)

str = ARGV.shift  # 引数として ClassA を与える
eval('x = ' + str +'.new')
eval('x.out' )   # << ==== (*)

(3) 質問は(*)の行に関してですが、
(Q1) evalを使わないとエラーになるのは何故でしょうか。
(Q2) x を使った作業が以下に延々と続くとした場合、
  逐一evalを使用するのがうっとおしい。
  何か回避策があるでしょうか。

以上です。よろしくお願いします。
18デフォルトの名無しさん:05/02/13 09:49:45
x = (Module::const_get("ClassA")).new
x.out

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/40021
からのスレッドが参考になると思う。
19デフォルトの名無しさん:05/02/13 10:55:08
おお、ありがとうございました。助かりました。
結城さんのデザインパターン本(Javaによる)を読みながら
rubyに引きなおして考えています。そのなかでの疑問でした。
教えていただいたスレッドによると、FAQのようですが、
かずひこさんもすぐには思い付かなかった様子ですので、
サンデープログラマとしてはちょっと安心もしてます。<grin>
勉強になりました、感謝します。
(Q1)の関係でbindingというのも知りました。
20デフォルトの名無しさん:05/02/13 16:06:51
>>17
クラス名があらかじめ列挙できるなら
hash = { "ClassA" => ClassA, "ClassB" => ClassB, }
klass = hash[ARGV.shift]
obj = klass.new if klass
クラス名があらかじめわからない場合は、この方法は使えないけど。
21デフォルトの名無しさん:05/02/13 17:28:56
Ruby製2chブラウザのエンジン部分ってない?
22デフォルトの名無しさん:05/02/13 20:47:33
使ったことないからハズしてるかもしれないけど
goRua <ttp://www.unixuser.org/~haruyama/software/goRua/> とか
23デフォルトの名無しさん:05/02/18 19:25:18
Windows だと MySQL/Ruby も Ruby/MySQL も
/tmp/mysql.sock がなくて経由できなくて使えないのだが、そういうものなの?
24デフォルトの名無しさん:05/02/18 20:33:42
2523:05/02/18 21:00:23
>>24
ありがとん。
つか、普通に 127.0.0.1 で逝けたのね orz
ちゃんと設定すれば hostname でも可能なのかもしれない。
Ruby/MySQL の方は MySQL の方のバージョンが高くて駄目ぽ。
あとは地道におぼえていこう......
26デフォルトの名無しさん:05/02/25 01:56:52
'Ruby' -> ['Ru', 'ub', 'by']
みたいに String を bigram に分割したいのですが、
どう書くのが普通なんでしょうか。

下のメソッドみたいな1文字ずつに分割しといて後で2つくっつける方法よりも、
2文字マッチさせて1文字ずらす方法の方が効率よさそうに思うのですが
うまくコードが書けません。

def bigram(str)
prev = nil
str.scan(/./).inject([]) do |result,ch|
result << prev+ch if prev
prev = ch
result
end
end
27デフォルトの名無しさん:05/02/25 02:21:18
s="ruby"
(0..(s.size-2)).collect{|i| s[i..i+1]}
#=> ["ru", "ub", "by"]
28デフォルトの名無しさん:05/02/25 04:14:35
s="るびぃ"
29デフォルトの名無しさん:05/02/27 00:36:12
下のコードだと、"."や".."がディレクトリということで、
「File.openできません」と言われます。ensureではだめなの
でしょうか?

dir = Dir.open(".")
begin
dir.collect{|f| [f]}.each do |fname|
begin
file = File.open(@dir + fname, "w")
while line = file.gets
print line
end
file.close
rescue
file.close
raise
end

end
ensure
dir.close
end
30デフォルトの名無しさん:05/02/27 02:07:02
通常ファイルだけ open すれば。

Dir.foreach('.') do |fname|
next unless FileTest::file?(|fname|)
fp = File.open(@dir + |fname|, "w")
...
end
31デフォルトの名無しさん:05/02/27 02:08:34
ミスった。
Dir.foreach('.') do |fname|
  next unless FileTest::file?(fname)
  fp = File.open(@dir + fname, "w")
  ...
end
32デフォルトの名無しさん:05/02/27 05:53:06
Dir.entries(".").select{ |fname| /^\.{1,2}$/ !~ fname }
33デフォルトの名無しさん:05/02/27 09:35:41
初心者です。
a[1,2,3,4]
a[1,0] = 6
a == [1,6,2,3,4]
最後の評価がtrueにならないのはなぜですか?
34デフォルトの名無しさん:05/02/27 09:36:25
a = [1,2,3,4]
の誤りですた
35デフォルトの名無しさん:05/02/27 10:18:43
>>30-32
ありがとうございます。nextとFileTestを組み合わせるのが、
私には理解しやすかったです。(まつもとさんのruby本では、
FileTestの記述が少ないですね。)
36デフォルトの名無しさん:05/02/27 11:19:06
obj.eql?をオーバーライドして呼び出すと以下の警告が出てしまいます。

parenthrsize argument(s) for future version.

理由がよくわかりません・・・
37デフォルトの名無しさん:05/02/27 12:46:35
>>33
何がしたいのか分からんが
a = [1,2,3,4]
a[1,0] = 6
p a
38デフォルトの名無しさん:05/02/27 15:07:17
>>36
将来問題が出る可能性のある書き方をしているから。
というか、実際のコードを出さない理由がよくわかりません・・・
39デフォルトの名無しさん:05/02/27 15:15:50
関数の引数を括弧で括るとか
40デフォルトの名無しさん:05/02/27 16:11:31
>>38
失礼しますた。

class Point
attr_reader :x,:y

def initialize(x,y)
@x = x
@y = y
end

def eql? other
self.class == other.class and
@x == other.x and
@y == other.y
end
end

p1 = Point.new(1,1)
p2 = Point.new(2,3)


p1.eql? p2 # 警告
p1.eql?(p2)
4140:05/02/27 16:14:09
>>39
なぜ括弧で括ると警告が出ないのですか?
42デフォルトの名無しさん:05/02/27 16:39:48
>>41
構文解釈の問題だ
43デフォルトの名無しさん:05/02/27 17:08:56
>>40 をコピペしても警告出ないんだけど、それはともかく
括弧の省略が重なった時に出るんじゃないの?

$ ruby -e 'p p 0, 1'
-e:1: warning: parenthesize argument(s) for future version
0
1
nil

p(p(0,1)) なのか p(p(0),1) なのか曖昧なので、
(今のところ前者と解釈してるけど)今後はこの書き方はやめようね、と。
4440:05/02/27 17:27:56
>>43
puts p1.eql? p2
とやってました。
puts(p1.eql?,p2)とputs p1.eql?(p2)
が近い将来曖昧になりえるということですね。
どうもありがとうございました。

45デフォルトの名無しさん:05/02/27 17:30:34
SJISの文字コードのテキストファイルの中身を全てコンソールに表示する
プログラムを書く場合エンコードの指定とかってできますか?
46デフォルトの名無しさん:05/02/27 17:55:41
1行目を #!/usr/bin/ruby -Ks
もしくは $KCODE = 's' を指定する

で、駄目?
47デフォルトの名無しさん:05/02/27 19:01:22
>>44
> puts(p1.eql?,p2)とputs p1.eql?(p2)
> が近い将来曖昧になりえるということですね。
もともと曖昧なので「これからはそういう書き方はヤメロ」といわれてるのだよ。
48デフォルトの名無しさん:05/02/27 19:03:07
>>45
SJISの文字コードのテキストファイルの中身を全てSJISの文字コードのコンソー
ルに表示するだけなら、エンコードの指定って関係ないはずだが。
IO.foreach("inputfile"){|line| print line}
49デフォルトの名無しさん:05/02/28 02:36:27
write(File.read("inputfile")) でいいじゃん。
50デフォルトの名無しさん:05/02/28 05:43:58
良いのか?
print なら解るが。
51デフォルトの名無しさん:05/02/28 08:22:15
>>49
でかいファイルだとメモリが…
52デフォルトの名無しさん:05/02/28 13:43:35
>>50
printとwriteの違いは何?
53デフォルトの名無しさん:05/02/28 14:27:51
>>52
違いっていうか、 Kernel#write ってそもそもあったっけ?
54デフォルトの名無しさん:05/02/28 17:35:48
>>52
ソースを確認してないけど、
print, puts, putc, << ここら辺は内部で write が呼ばれてるんだっけ?
でも、>>45 で「コンソールに表示する」と書かれてるから、
>>49 のままでは使えないと思っただけ。
$stdout.write(File.read("inputfile")) なら解る。
ズレたこと言ったのならゴメンよ。
55デフォルトの名無しさん:05/03/02 05:11:46
print LF->CRLFに変換される
write 変換なし
56デフォルトの名無しさん:05/03/02 14:31:53
改行コードの変換はbinmode次第であって、メソッドによって変わるわけではない。
57デフォルトの名無しさん:05/03/02 14:59:33
で、正解は?
58デフォルトの名無しさん:05/03/02 21:09:27
IO.foreach("inputfile"){|line| print line}
IO.foreach("inputfile", &method(:print))
$stdout.write(File.read("inputfile"))
59デフォルトの名無しさん:05/03/02 23:21:06
STDOUT.print nil
STDOUT.write nil

とか。あとprintは$_、$,、$\を使う、戻り値がprint => nil、write => 出力できたバイト数、とか。
60デフォルトの名無しさん:05/03/03 02:32:32
宿便が出てすっきりした気分
61デフォルトの名無しさん:05/03/03 02:42:04
つまりwriteイラネってこと?
62デフォルトの名無しさん:05/03/03 12:56:48
63デフォルトの名無しさん:05/03/04 00:43:30
open("inputfile"){|f| $>.write(f.read(1048575)) until f.eof?}
64デフォルトの名無しさん:05/03/05 06:23:16
C言語のi++はRubyではどう書くの?
65デフォルトの名無しさん:05/03/05 06:39:58
i+=1
66デフォルトの名無しさん:05/03/05 09:37:10
i = i.succ

なんでInteger#succ!がないんだろ
67デフォルトの名無しさん:05/03/05 10:58:59
Fixnumがmutableだから
68デフォルトの名無しさん:05/03/05 14:24:19
>>66
1.succ!ってやったら1==2になっちゃうなんてのはイヤだろ?
69デフォルトの名無しさん:05/03/05 15:08:03
Fixnum が immutable な Ruby があったなら、こんな FAQ が発生することはなかった?
7067:05/03/05 15:14:36
X Fixnumがmutableだから
O Fixnumがimmutableだから
7169:05/03/05 15:38:52
X Fixnum が immutable な Ruby
O Fixnum が mutable な Ruby

つられて間違ってしまった・・・orz
72デフォルトの名無しさん:05/03/05 22:39:17
mutableかどうかじゃなくてsingletonの話だって言ってるだろ!!!
73デフォルトの名無しさん:05/03/05 22:57:05
バカか。mutableの話だ。

Cで1++ってやったら1==2なんのか?あ?
74デフォルトの名無しさん:05/03/06 00:55:27
バカか。mutableかどうかじゃなくて即値かどうかの話だって言ってるだろ!!!
75デフォルトの名無しさん:05/03/06 03:00:40
もうすっかり春らしくなってきたな
7664:05/03/06 04:31:34
>>65
アリガd
i.succ!って書いてしまった100万人目の初心者でした
77デフォルトの名無しさん:05/03/09 06:25:27

p "『".gsub!('a','A')

がうちの環境ではnilになるのですがどうしてですか。

コードはEUCです。
78デフォルトの名無しさん:05/03/09 06:37:06
gsub! は破壊的に変更し、変更がなかったら nil を返します。

str = "『"
p str.gsub!('a','A') #=> nil
p str #=> "『"

str = "abc"
p str.gsub!('a','A') #=> "Abc"
p str #=> "Abc"

対して gsub は、変更した文字列を返し(変更されなかったらコピー)、
元の文字列はそのままです。

str = "『"
p str.gsub('a','A') #=> "『"
p str #=> "『"

str = "abc"
p str.gsub('a','A') #=> "Abc"
p str #=> "abc"

79デフォルトの名無しさん:05/03/09 06:45:47
素早い回答、ありがとうございます。
やってみたら、本当ですね。
!のあるなしでかなり違うのですね。
初心者バレバレです。精進します。
80デフォルトの名無しさん:05/03/09 18:55:16
それが人に教えを請う態度かアアン?
仮に漏れがバカだとしてバカでも知っている常識すら知らないことを威張るなよ低能が。
81デフォルトの名無しさん:05/03/09 19:09:44
>>79
!が末尾についているメソッドは、ついていないメソッドと同等の効果があっ
て自身を変更する。戻り値については nil だったりいろいろ。

なので、戻り値は考えないで自分自身を書換える場合は gsub! などを使い、
自分自身を書換えずに戻り値を使いたい場合は gsub を使う、とかいう風に使
いわけるといいよ。

といっても、文法的に決まってたりとかいう事ではぜんぜんないので、そのメ
ソッドが自分自身を本当に破壊的に変更するかどうかはあらかじめ確認しとい
た方がいい(Array#rejectあたりが典型例)。
82デフォルトの名無しさん:05/03/09 20:55:05
質問です。
>>1 のページのチュートリアルは何故あんなにセンスが悪いんすか?
83デフォルトの名無しさん:05/03/09 21:15:43
>>82
m9(^Д^)プギャ-
84デフォルトの名無しさん:05/03/10 01:51:54
foo! は foo とくらべてより破壊的。
だからといって foo が破壊的でないとは限らない。
85デフォルトの名無しさん:05/03/10 18:58:09
もう単なる一山幾らの煽りになっちゃってるな。
喋れば喋るほど知能の低下を如実に現してる。

こーいうのが偉そうに喋ってたのかよw
相手してた奴が恥ずかしいなw
86デフォルトの名無しさん:05/03/10 19:54:41
ある説が「間違っている」というのは、その説の結論が正しくないということではありません。
その説が結論に至る過程が正しくないということです。
ですから、結論を肯定することも否定することもその説が正しいかどうかの検証にはなりません。
理論というものは例で補強されるものではなく理屈で補強されるものです。
例などはなくても考え方の筋道が通っていれば正しいのですし、
逆にいくら例があっても筋道の通っていない考え方は間違いなのです。
なお誤解のないように付け加えておきますが、「例を示す」というのは筋道の通った考え方の一つです。
例を示さなくていいとか例を示してはいけないというわけではありません。
例を示しさえすればいいというのが間違いなのです。
87デフォルトの名無しさん:05/03/10 21:43:56
>>86
完璧に同意。

そして理論というものはトップダウンにかくと分かりやすいものなのだが、
その理論の入り口にいる時にはトップダウンに抵抗を感じるもの。
そのことがマニュアルやチュートリアルをかくことを難しくしているのだと思う。
こういう時は「目的」や「例」などをふんだんに使いながら低い所から登って行くしかない。
88デフォルトの名無しさん:05/03/11 01:11:16
やっぱRuby使うやつって特に変なの多いな。
89デフォルトの名無しさん:05/03/11 01:31:23
目糞鼻糞を哂うとはこのことだな
90デフォルトの名無しさん:05/03/11 18:32:39
String.inspect の挙動が最近変更になったせいで、以下のようなスクリプト
が動かなくなったんですが、良い解決策ありませんか?
「erb使え」ちゅうのは無しで。

str = '"a" = #{a}'
s = "12"
puts eval( str.inspect )

以前の結果、"a" = 12
現在の結果、"a" = #{a}
91デフォルトの名無しさん:05/03/11 18:36:13
>>90
s="12" は、a="12" の間違いです。
92デフォルトの名無しさん:05/03/11 19:17:51
>>90-91
puts eval(str.inspect.gsub(/\\(?=#[$@{])/n, ''))

inspectとevalはできるかぎり逆変換になることが期待されるので、
今のほうが本来意図された動作。
9392:05/03/11 19:27:23
ごめん、nオプションはナシ。
94デフォルトの名無しさん:05/03/11 21:22:18
>>92
いや、inspectにはそんなことは期待されてない。
evalしたいならString#dumpを使うのが正しい。
それ以外は92の言ってる通り。
95デフォルトの名無しさん:05/03/11 21:53:07
dumpはStringくらいしかないじゃん。
96デフォルトの名無しさん:05/03/11 22:10:52
>>94
でも inspect にそんなことを期待している人は意外と多い罠。
97baka:05/03/11 22:43:31
TeX2pageで作られたHTMLファイルから元のTeXソースを作りたいのですが、
そんなことできるソフトなさそうなので自分でちゃっちゃっとスクリプト書こうと思っています。
といってもあまりノウハウがないので、なにか参考になるページあったら教えてください。
98デフォルトの名無しさん:05/03/11 23:08:02
TeX2pageのソース。
で、Rubyはどの程度書けるわけ?
99デフォルトの名無しさん:05/03/11 23:33:48
小泉首相が感動するぐらい書けるけどそれが何?

逆に聞くけど、お前はどの程度なわけ?
100baka:05/03/12 00:01:08
Rubyはあまり描けないっす。ってかTeX2pageってCで書かれてますよね?
汎用的なのだと難しいから、ひとまず今変換したいやつだけ変換できれば良いので。

ちょっとRAAを覗いてみます。Rubyコミュニティってなんとなく感じ悪い…
101デフォルトの名無しさん:05/03/12 00:28:48
>>100
ところでTeX2pageってこれ?
http://www.ccs.neu.edu/home/dorai/tex2page/tex2page-doc.html
Schemeとかで動くって書いてあるから多分別物だと思うけど……。
102デフォルトの名無しさん:05/03/12 18:15:10
ソース読まないんだったら、簡単な.のを吐かせてから個別の結果を
調べるのがよいとおもわれ。
103デフォルトの名無しさん:05/03/15 06:33:57
>>100 なんとなくじゃないと思うよ
104デフォルトの名無しさん:05/03/15 12:51:08
>>103
またそういう感じの悪いことを言うんだからもう。
105デフォルトの名無しさん:05/03/16 21:30:01
rubyの cgi.rb, cgi/session.rb 関連で、PEARのAuthのような仕組みを
探しているんですが、googleで "ruby cgi auth", "ruby pear auth"
などと検索してもいまひとつ見つかりません。

どなたかご存知の方は教えてください。
106デフォルトの名無しさん:05/03/17 00:17:54
まず「PEARのAuthのような仕組み」というのを説明してくれると話が早いかも。
107105:05/03/17 10:00:48
失礼しました。
PEARというのはPHPの(公式の?)ライブラリで、RUBYで言うと
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=%C5%BA%C9%D5%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA
に相当するものとして認識しています。

PEARのAuthの説明は
ttp://pear.php.net/manual/ja/package.authentication.php
にあります。

CGI用の認証関連のライブラリが、どこかに無いものか。
と探していた次第です。
108デフォルトの名無しさん:05/03/17 10:15:55
109デフォルトの名無しさん:05/03/17 11:41:15
PEAR は RAA だろ
110デフォルトの名無しさん:05/03/17 18:42:59
シリアルキー解析集「ALTEA」
大好評発売中!

http://openuser10.auctions.yahoo.co.jp/jp/user/dancexxx1960?


市販SOFTやオンラインSOFTのパスワード集です。
オークション関係から画像・OS・表計算・CAD・・・・etc
国内・国外のあらゆる分野のSoftを解析済です。


これを初めて手にされた時には、驚愕される事でしょう。
そして・・・手当たり次第にインストールを始める筈ですw
パソコンをご使用の方なら、必ず!満足されると思います。

解析結果のデータベースには15,000点を越えるパスワードが入ってます。
このパスワード集から検索するだけで、登録や制限解除が出来てしまいます。
シェアウェアを購入して、正規登録したのと同じ状態になります。
余りにもデータが多すぎる為、辞書引のようなパスワード検索SOFTで提供します。

シェアウェア以外にもパッケージ版をVectorなどでオンライン販売してるSOFTにも
多数対応しています。これらをダウンロードして無期限に試用する事も可能です(^^;

WindowsXPやOfficeなどのCDキー(プロダクトキー)ジェネレーターを使えば複数のパソコンに
インストールする事も可能です。デスクトップとノートPCなど2台以上持ってる場合は特に有効ですね。

オンラインSOFTを購入した経験は有りますか?
ありとあらゆる分野の優れたSOFTが、数多くありますよね。
しかし、ほとんどが試用期間や機能制限をして、「気に入ったら購入してください」です。

もう少し使いたいが使用期限切れで、削除・・・再インストールを繰り返していませんか?
111デフォルトの名無しさん:05/03/17 20:29:32
>>110
通報しますた
112デフォルトの名無しさん:05/03/19 12:57:23
ttp://mayah.jp/archive/programming/ruby.html

Hello を Hellow と書く人ってよくみるなあ
113デフォルトの名無しさん:05/03/19 19:12:25
hallo効果もよくみかけるな
114デフォルトの名無しさん:05/03/19 19:25:20
名前空間としてのモジュールにどんな名前をつけたらよいか悩んでます。

たとえば、クラスFooを定義したとします。
class Foo
 ...
end
そのあとで、やっぱ名前空間をわけようと思って、モジュールFooを作りました。
module Foo
 class Foo
  ...
 end
end
ここで、モジュール名とクラス名とを同じにしてしまいました。でもちょっと気持ち悪い。
こんなとき、どんなモジュール名(またはクラス名)にしたらいいでしょうか。
よい命名ルールがあれば教えてください。

Javaならパッケージ名には小文字を使うので、悩まなくてすむのですけど。
package foo;
class Foo
 ...
end
115デフォルトの名無しさん:05/03/19 21:24:02
名前空間わけれてねーじゃん
116デフォルトの名無しさん:05/03/20 00:44:13
>>114
機能を表す名前。
117デフォルトの名無しさん:2005/03/21(月) 12:07:05
>>116
機能を表す名前が1つしか思いつかないため、なやんでます。
module Visitor
 class Visitor
  ...
 end
 class FooVisitor < Visitor
  ...
 end
 class BarVisitor < Visitor
  ...
 end
end
118デフォルトの名無しさん:2005/03/21(月) 14:30:40
じゃあそれでいいじゃん
119デフォルトの名無しさん:2005/03/21(月) 21:49:59
混乱しないならそれでいいのでは?
別に気持ち悪くはない。
120デフォルトの名無しさん:2005/03/21(月) 22:40:15
>>117
こういうのはケースバイケースなので、一例として。
> module Visitor
>  class Visitor

外側のmoduleがメインになって内側のclass表にでない、
サブクラスも外部からしか使わないってんなら、
Visitor::BaseとかVisitor::Abstractにして、
class ForFoo < Base; end
class ForBar < Base; end
なんてするかも知れない。

なんとかVisitor,なんとかVisitorと繰り返すのは好みじゃないし。
121デフォルトの名無しさん:2005/03/23(水) 15:21:42
本当些細な事なんですが、Rubyって書き方の自由度が高いためか、
エディタでの色分けが不完全だったりするのが多いですよね。

皆さん何でRubyを書いてるでしょう・・・?
122デフォルトの名無しさん:2005/03/23(水) 16:04:26
普通にemacsとかじゃないのかな。
123デフォルトの名無しさん:2005/03/23(水) 17:25:02
普通にxyzzyとかじゃないのかな。
124デフォルトの名無しさん:2005/03/23(水) 18:37:00
普通にRDEとかじゃないのかな。
125デフォルトの名無しさん:2005/03/23(水) 19:53:05
普通にVimとかじゃないのかな。
126デフォルトの名無しさん:2005/03/23(水) 20:47:22
俺メモ帳
127デフォルトの名無しさん:2005/03/23(水) 20:50:20
hidemaru
128デフォルトの名無しさん:2005/03/23(水) 21:01:06
俺チラシの裏
129デフォルトの名無しさん:2005/03/23(水) 22:54:56
K2EditorとNoEditorを気分もしくは作業環境に応じて。
さらに作業環境が変わるとvimになったりするが。
130デフォルトの名無しさん:2005/03/23(水) 22:55:40
>128
Ruby for チラシの裏うpきぼんぬ
131デフォルトの名無しさん:2005/03/23(水) 23:02:47
>>121
アンケートはそろそろこのへんで終了してよろしいでしょうか?
132デフォルトの名無しさん:2005/03/23(水) 23:47:13
ed
133121:2005/03/24(木) 03:35:17
下らない事に付き合ってもらい、ありがとうございました(´-`;)
134デフォルトの名無しさん:2005/03/26(土) 02:09:23
下らないわりにsageとるやんけ。
135デフォルトの名無しさん:2005/03/26(土) 09:52:43
↑sage と書いても別に下がりはしないことも知らない2ch初心者
136デフォルトの名無しさん:2005/03/26(土) 12:27:35
137デフォルトの名無しさん:2005/03/26(土) 23:11:05
もういいですから。
138デフォルトの名無しさん:2005/03/27(日) 23:48:29
>>135
2chに浸り過ぎて読解力なしの厨房
139デフォルトの名無しさん:2005/03/28(月) 02:07:09
>>138
2ちゃんねらに高度な読解力を要求する勘違い
140デフォルトの名無しさん:int 2ch =05/04/02(土) 01:41:40
あるディレクトリにあるwavファイルとそれをlameでmp3にしたファイルとの
サイズ比を計算するスクリプトを作ってみた。> ruby a.rb directory
一応目的の結果が得られるのですが、ハッシュのキーソートの部分やら
もっと簡潔に出来ないでしょうか?

wfsize = {}
mfsize = {}
ARGV.each { |dir|
dir = dir.sub(/\\$/, "")
Dir.glob(dir + "/*.{[wW][aA][vV],mp3}") { |f|
bf = File.basename(f, ".*")
if /\.wav$/i =~ f then
wfsize[bf] = File.stat(f).size
else
mfsize[bf] = File.stat(f).size
end
}
}
wfsize.to_a.sort { |a, b|
String(a).upcase <=> String(b).upcase
}.each { |w|
printf "%-40s圧縮率:%3d%%\n", w[0], Integer(mfsize[w[0]]) * 100 / Integer(w[1])
}
141デフォルトの名無しさん:int 2ch =05/04/02(土) 02:40:19
>>140
> Dir.glob(dir + "/*.{[wW][aA][vV],mp3}") { |f|
へぇ。こんなんできるんだ。

> wfsize.to_a.sort { |a, b|
> String(a).upcase <=> String(b).upcase
> }.each { |w|
> printf "%-40s圧縮率:%3d%%\n", w[0], Integer(mfsize[w[0]]) * 100 / Integer(w[1])
> }

wfsize.keys.sort_by {|e| e.upcase }.each {|bf|
printf "%-40s圧縮率:%3d%%\n", bf, mfsize[bf] * 100 / wfsize[bf]
}
142デフォルトの名無しさん:int 2ch =05/04/02(土) 12:18:21
>wfsize.keys.sort_by {|e| e.upcase }.each {|bf|
>printf "%-40s圧縮率:%3d%%\n", bf, mfsize[bf] * 100 / wfsize[bf]
>}
そうそ、この部分をハッシュのキーそのままで使いたかったんだよね。
試行錯誤しても出来なかった・・・
すごく直感的に処理できている。勉強になりました。ありがと
それとsort_by は1.6では使えないんだね。
143デフォルトの名無しさん:2005/04/02(土) 20:15:23
だいぶ長いこと使っていたのに、こんな初歩的なことがわからなくて愕然。
お願いします、教えてください。

Cygwin上で、ruby 1.8.2 を走らせておりますが、次のような
スクリプトを書いたときの挙動が理解できません。

#!/usr/bin/ruby
p str = 'this'
p "#{str}"
p #{str}

2、3行目では "this" と表示してきますが、4行目は長さゼロの
文字列のようです。これはどうしてですか?素人考えでは、これも
"this" ときていいんじゃないかと思うんですが。どうなんでしょう?
144デフォルトの名無しさん:2005/04/02(土) 20:20:25
ちょっと待って、それコメントだから
145デフォルトの名無しさん:2005/04/02(土) 20:27:40
>143 の男デス。
問題を簡潔に書こうとしすぎて、スクリプトを削っていったらコメントになっちゃった。
すいません。

実はこれを、正規表現の中に埋め込んで、/#{str}/ と書いていたんだけど、
どういうわけか、マッチするはずの文字列にマッチしてくれない(すっごい簡単な
文字列だから、絶対マッチするはずなんですけど)。

というようなことでした。うーん、もう一回スクリプトを検討してみますが。
146デフォルトの名無しさん:2005/04/02(土) 22:15:56
>>145
メタ文字をエスケープしていないとか。
147デフォルトの名無しさん:2005/04/02(土) 22:46:23
>>145
ゴメン、女なら教えたんだが。
148デフォルトの名無しさん:2005/04/03(日) 15:06:26
長いURLをコンパクトにしてくれるサービス
http://www.rubyurl.com/
149デフォルトの名無しさん:2005/04/04(月) 13:55:45
初歩的な質問なんですが、以下のようなことがしたいです

ar = ["a", "b", "c"]
ar.each {|x| print x, "は配列arの添え字", XXXX, "の要素 " }

#=> aは配列arの添え字0の要素 bは配列arの添え字1の要素 ...

ブロック内で今処理されている配列の添え字を知りたいのですが、
良い方法はないでしょうか。for i in 0...ar.size を使えば目的は達成
できるのですが、あんまりきれいじゃないと思ったので。
150 ◆m7YeytgDFE :2005/04/04(月) 14:04:17
>>149
そういう時にはeach_with_indexをどうぞ。
151149:2005/04/04(月) 14:32:26
>>150
ar.each_with_index {|x, i| print x, "は配列arの添え字", i, "の要素 " }

で、できました。Mix-inとかあまり分かってないのでリファレンスきちんと読んでみます
ありがとうございました。
152デフォルトの名無しさん:2005/04/05(火) 23:13:48
visualu rubyを使っています。
コモンダイアログで、ファイルを複数開きたいのですが、

def open_clicked
fn=SWin::CommonDialog::openFilename(self,[ ["ログファイル","*.txt"]])
end

みたいな感じですが、これだと一個しか開けません。

OFN_ALLOWMULTISELECTを指定するらしい、ということまではわかったのですが、
どのように書けばよいのでしょうか?
153デフォルトの名無しさん:2005/04/06(水) 18:15:31
>>152
その辺はswin/vrubyでは定数宣言されてないようだ。

まともなサンプルではないが

require 'vr/vruby'
require "swin"
RFactory=SWin::LWFactory.new SWin::Application.hInstance
mw=RFactory.newwindow(nil)
fn=SWin::CommonDialog::openFilename(mw,[ ["ログファイル","*.txt"]], 0x80000 | 512)

とりあえずOFN_EXPLORER | OFN_ALLOWMULTISELECTと同意。
MinGWのcommdlg.hから値をとりました。

vrubyみたいにWStructというモジュールを定義してその中で定数宣言しとけば良い。
154デフォルトの名無しさん:2005/04/07(木) 17:04:31
ruby/Gtkをやり始めたが、サンプルがGtk用でGtk2用でない。
しかもAPIがごそごそ変わっています。
情報があまりないので、苦労しています。
たとえば、
Gdk::LINE_SOLID
がGtkでは、使えていたのにGtk2では、
Gdk::GC::LINE_SOLID
でないとだめになった。こんなことどこにも書いていない。
どこかに、Gtk2の(特にGdk)のAPIがまとめてないでしょうか。
155デフォルトの名無しさん:2005/04/07(木) 17:21:03
ここら辺とか、役に立つか?
http://ruby-gnome2.sourceforge.jp/
156デフォルトの名無しさん:2005/04/07(木) 18:42:03
>>155
ご教示ありがとうございます。
そこも、見ましたが、ドキュメントがまだ整備されていません。
初心者なので、整備に参加することも出来ず手をこまねいています。
APIもGtk2のみです。ソースを見てもわからずお手上げです。
157デフォルトの名無しさん:2005/04/07(木) 19:32:16
> APIもGtk2のみです
いや、英語の方ね (一応)
Gtk2 のみじゃなくて、Gdk を含む他のもあると思ったが、
見事に Gdk::GC の部分のドキュメントは未整備だな orz
http://ruby-gnome2.sourceforge.jp/hiki.cgi?Ruby%2FGDK
158デフォルトの名無しさん:2005/04/09(土) 16:57:46
まったくの初心者ですが変なとこで詰まりました。お教えください。
実は、2重ループをしたくて、

j=0;k=0
while k<5
while j<3
p j,k
j=j+1
end
k=k+1
 p k
end

というようなプログラムでwhileを2つ使ったのですが
内側のループが一回しか実行されません。
rubyでは、ゆるされない表現なのでしょうか。
159デフォルトの名無しさん:2005/04/09(土) 17:02:16
>>158
ゆるされる表現だと思いますがjの初期化位置が違うのではないでしょうか
160デフォルトの名無しさん:2005/04/09(土) 17:06:08
>>159
ありがとうございます。
恥ずかしい限りです。
161デフォルトの名無しさん:2005/04/20(水) 15:04:30
ちょっとスレッドを試していたのですが
挙動がわかんないのでご教授願いたく・・・

require 'net/http'
target = "localhost"
path = "/"
h = Net::HTTP::new(host=target)
p h
p h.get(path)
Thread.start{
h = Net::HTTP::new(host=target)
p h
p h.get(path)
}

このコードで一回目はちゃんと200で帰ってくるのですが
スレッドの中のは結果をとってきてくれません。
スレッド中で例外が発生した場合はそのスレッドは死んじゃうとの記述があったので
p h.get(path) rescue p $!
にしてもどうも補足してくれなくて・・・
ちなみに環境はruby 1.8.1 (2003-12-25) [i386-cygwin]です
162デフォルトの名無しさん:2005/04/20(水) 15:25:27
>>161
Thread.start{
h = Net::HTTP::new(host=target)
p h
p h.get(path)
}.join

ということでなくて?
これならスレッドが終わるまえにスクリプトが終わってる
163デフォルトの名無しさん:2005/04/20(水) 15:47:23
>>162
・・・なるほど
joinしないと作ったスレッドが終わる前にメインスレッドが
終わってしまうということですね。
ありがとうございました。
164デフォルトの名無しさん:2005/04/25(月) 00:03:03
/^/と/\A/ の違いがよくわからないです。
165デフォルトの名無しさん:2005/04/25(月) 00:39:26
>>164
リファレンスマニュアル見てもわからんの?
前者は行頭に、後者は文字列の先頭にマッチ。
たとえば "a\nb\nc\n" なら、
前者は "a" の前と "b" の前と "c" の前にマッチするが、
後者は "a" の前にしかマッチしない。
166デフォルトの名無しさん:2005/04/25(月) 23:35:33
>>165
どうもありがとうございました
167デフォルトの名無しさん:2005/04/27(水) 00:06:13
Rubyではどんなに大きな数字でも扱えるってホントですか?
168デフォルトの名無しさん:2005/04/27(水) 00:23:18
嘘です
169デフォルトの名無しさん:2005/04/27(水) 08:33:13
ほんとです

$ ruby -e 'p 1.0/0.0'
Infinity
170 ◆m7YeytgDFE :2005/04/27(水) 11:38:51
>>167
下記のリファレンスマニュアルでは、メモリサイズの制約だけとありますね。
ttp://www.expansys.jp/product.asp?code=120505
171デフォルトの名無しさん:2005/04/27(水) 19:42:50
∞は数字じゃないと思います。
172デフォルトの名無しさん:2005/04/28(木) 20:47:22
最大の数字であるところの 9 は普通に扱えます。
173デフォルトの名無しさん:2005/04/28(木) 21:24:15
恋するプログラム買った。
174デフォルトの名無しさん:2005/04/28(木) 22:32:42
コクったりしてくれますか。
175 ◆m7YeytgDFE :2005/04/28(木) 22:53:10
>>173
お。どんな感じです?近所の書店には未入荷でして。
ネットで予約した方が早かったかな?
176デフォルトの名無しさん:2005/04/28(木) 23:12:09
>>175
今37ページでオブジェクトの解説してます。
ruby初めてだけど、他の言語知ってるなら
充分理解できるようにわかりやすくかかれている感じ。
それより先は読んでないからまだ何とも言えないです。

所で、実行ファイルってrb形式のヤツですよね?
実行するとアクセスが拒否されましたってダイアログが出て実行できないんだけど
これは何故なのか…
177 ◆m7YeytgDFE :2005/04/28(木) 23:21:35
>>176
付属のCD-ROMの収録内容かな?実行環境はLinux?Windows?
Windowsなら、拡張子でRubyインタプリタを関連付いてますか?
あとは文字通りで、何かのアクセス権がないから?
手元にあれば試してみるんだけどなぁ。
178デフォルトの名無しさん:2005/04/29(金) 00:08:29
これってMargarine?それとも柳葉魚?
179デフォルトの名無しさん:2005/04/29(金) 00:12:04
>>177
winです。
付属のサンプルもですけど、多分ruby全体がダメだと思います。
なんなんだろうか…
アンインストールして入れ直してみるかな
180デフォルトの名無しさん:2005/04/29(金) 09:21:54
「恋するプログラム 〜Rubyでつくる人工無脳」
という本か。SSTP とか懐しいな。
面白そうだ、俺も買ってみよう。
181デフォルトの名無しさん:2005/04/29(金) 13:41:21
>>176
ファイルのプロパティを開いて 読み取り専用のチェックを外す

とよひとおもふ
182デフォルトの名無しさん:2005/04/29(金) 13:46:03
まさかCD-ROM上のファイルを実行しようとしてないよな
HDDにCPしてから>>181 で、初めて実行可能になるきがするが
183デフォルトの名無しさん:2005/04/29(金) 16:54:43
そういえば最近恋してないなぁ。
184デフォルトの名無しさん:2005/04/29(金) 20:25:07
二次元でならいつも恋してる

……あ、最近ギャルゲもエロゲもあんまりやらなくなったなぁ´`,、(´∀`)´`,、
185デフォルトの名無しさん:2005/04/29(金) 21:16:39
俺は三次元だぜ!
まきまきかわいいよまきまき。
186デフォルトの名無しさん:2005/04/29(金) 21:42:49
なにこのキモスレ…
187デフォルトの名無しさん:2005/04/29(金) 22:54:32
rubyistはみんな キモイのさへ(へ´∀`)へ
188デフォルトの名無しさん:2005/04/29(金) 23:10:45
rubyでレジストリの操作って出来ますか?
windowsの表示をクラシックモードにしたりをrubyでやりたいのですが
出来ますでしょうか?
189デフォルトの名無しさん:2005/04/29(金) 23:57:59
190デフォルトの名無しさん:2005/04/30(土) 11:08:53
ruby/tkに関して質問があります。
例えば、次のようなスクリプトを実行したとします。
rubyのバージョンは1.8.2, Tkのバージョンは8.3.5, OSはLinuxです。

--- ここから ---
#!/usr/local/bin/ruby -Ke

require 'tk'

font = TkFont.new({'size' => '12'})

scr = TkScrollbar.new.pack('fill' => 'y', 'side' => 'right')
txt = TkText.new('font' => font).pack('expand' => 'true', 'fill' => 'both', 'side' => 'right')
txt.yscrollbar(scr)

Tk.mainloop
--- ここまで ---

このとき、TkTextウィジェット内での日本語入力は可能で、同じTkText内でのコピペも問題ありません。
しかし、例えばこのプログラムをふたつ立ち上げて、一方のTkText内の日本語を他方にコピペすると
文字化けしてしまいます。

なにか解決方法はないでしょうか。よろしくお願いします。
191 ◆m7YeytgDFE :2005/04/30(土) 13:39:09
>>190
Linux上のruby 1.8.2、tk 8.4.9で試したところ、
プログラム間でのコピー&ペーストで文字化けしません。

他のプログラムとの間でも同様に文字化けするのでしょうか?
クリップボードを監視変更するようなプログラムが動作していませんか?
192190:2005/04/30(土) 15:06:52
>>191

>他のプログラムとの間でも同様に文字化けするのでしょうか?

問題となっているプログラムを仮にAと呼ぶと
mlterm -> mlterm: OK
mlterm -> A: NG
A -> mlterm: NG
A -> A : OK
ただし、別の新しいプロセスとして立ち上げたものをA'とすると
A -> A': NG
です。

>クリップボードを監視変更するようなプログラムが動作していませんか?

XfceのClipboard Managerが動いていましたが、
これを落としても文字化けしました。
193デフォルトの名無しさん:2005/04/30(土) 18:19:29

print '能'

このプログラムで"が閉じられていないというエラーが出ます。
ちなみにlinuxでは動作しますが、win32だと駄目です。
KCODEの設定をしても駄目みたいです。

こういうことって結構あるのですか?
194デフォルトの名無しさん:2005/04/30(土) 19:04:59
スレ違いかもしれませんが、質問させて下さい。

rdindex (1.2.2) を使いたいと思っているのですが、
インストールに失敗します。

$ ruby setup.rb config

とすると、~/.rdindex がないと言われるので、
{package_root}/dot.rdindex をコピーして続行しました。

$ ruby setup.rb setup

とすると、
{package_root}/rdindex-1.2.2/bin/rdindex/rdindex:2:in `require': No such file to load -- rdindex (LoadError)
と怒られます。

どうやらパッケージ内にこのファイルが無いようにも思えます。
({package_root}/setup/rdindex.rb はインストール用?)

正常に使用できるようにするには、どの様にすれば良いでしょうか?
195デフォルトの名無しさん:2005/04/30(土) 19:25:19
>>193
print "能\"
とでもしてください。

多分、
print "ソ"
print "表"
あたりでも同じ事が起こると思う。文字コードの問題かと。
196190:2005/04/30(土) 20:34:33
>>191
tcl/tk-8.4.9をインストールしてrubyもリビルドして試したところ
文字化けしませんでした。
8.3.5に拘る理由もないので、この機会にバージョンアップすることにします。
ありがとうございました。
197デフォルトの名無しさん:2005/04/30(土) 22:37:47
>>193

$KCODEは実行の際に関係する設定だから。
その問題はパースの際の問題なので
Rubyの引数に-Ksするかスクリプトの一番上に#! ruby -Ks
として解決。
198デフォルトの名無しさん:2005/05/01(日) 01:43:23
>>195
>>197
サンクスです
199デフォルトの名無しさん:2005/05/01(日) 02:58:06
ローカル変数を作るにはどうすればいいですか。
例えば下のブロックの中に tmp というローカル変数を作りたいのですが
どのように書けば良いでしょうか。

tmp = 1
… {
    # ここ
}
print tmp
200デフォルトの名無しさん:2005/05/01(日) 10:10:13
ブロック外で初めてローカル変数を使ったら、
当然、そのスコープでのローカル変数になるから、
素直に、ブロック外かブロック内のどちらかの変数名を変更するか、
別の種類の変数などを利用していく方が、自然じゃないかな。
# for はちょっと特殊なので気をつけよう
201デフォルトの名無しさん:2005/05/01(日) 18:57:35
もうrubyは全部グローバル変数と思って変数名を管理しとかないと
悲惨な結果になるような気がしてきた。
202デフォルトの名無しさん:2005/05/01(日) 19:38:14
>>199
Rubyの仕様上、ムリ。違う変数名にしろ。
というか、こんなことできる言語って他にあるか?
203 ◆m7YeytgDFE :2005/05/01(日) 19:48:04
>>202
C++だとネストしたブロック内で同名の別変数を使えますね。
そういう言語に慣れてると混乱するかも。
今回の事例だと、変数名を変えるのが無難かも。
あるいは、該当部分を別のメソッドに分割するとか。
204デフォルトの名無しさん:2005/05/01(日) 20:23:43
似たような言語のperlも、 { } と my宣言を使って
名前に関係なく自由に変数のスコープを記述できるな。
205デフォルトの名無しさん:2005/05/01(日) 20:59:10
class A
def initialize
@x = "xxx"
end
class B
def initialize
p @x
end
end
end

A::B.new

class A の @x を class B のメソッドから参照するには、どうすれば
206 ◆m7YeytgDFE :2005/05/01(日) 22:21:53
>>205
Rubyリファレンスマニュアルの下記ページには以下の記述があります。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%A5%AF%A5%E9%A5%B9%A1%BF%A5%E1%A5%BD%A5%C3%A5%C9%A4%CE%C4%EA%B5%C1
> クラス定義はネスト(入れ子)にして定義できます。
> 以下の例で入れ子の外側のクラス Foo と内側のクラス Bar の間には
> (定数 Bar が Foo の中の定数 Foo::Bar であること以外には)
> 継承関係などの機能的な関連はまったくありません。

205のスクリプトの「A::B.new」ではA#initializeを実行することが無く、
そもそもクラスAの@xが存在しません。
普通にAとBのクラスを定義する場合と同じなので、Aの@xを参照するなら、
まずAのインスタンスを作る必要があります。
そして、Aでは「attr_reader( :x )」のようにして参照用のメソッドを
用意しておきます。

もしかして、本来の意図は「class B < A」といった継承関係でしょうか?
207デフォルトの名無しさん:2005/05/02(月) 13:20:19
["a=1" "b=2" "c=3"]
こういうオブジェクトを e = {"a" => "1", "b" => "2", "c" => "3"}
みたいなハッシュに変換したいんですが
どう書けばいいんでしょ?

3時間ほど悩んでます
208 ◆m7YeytgDFE :2005/05/02(月) 13:32:44
>>207
とりあえず、こんな感じ?つっこみ歓迎。

def to_hash( array )
hash = Hash.new
array.each do | x |
if /(.+)=(.+)$/ =~ x
hash[ $1 ] = $2
end
end
return hash
end

x = ["a=1", "b=2", "c=3"]
p to_hash( x )
209デフォルトの名無しさん:2005/05/02(月) 13:37:06
>>207
p ["a=1", "b=2", "c=3"].inject({}) { |r,e| k,v = e.split(/=/, 2); r[k] = v; r }
210デフォルトの名無しさん:2005/05/02(月) 13:45:09
あ、もうちょっと短くできるかな。
p ["a=1", "b=2", "c=3"].inject({}) { |r,e| r.store(*e.split(/=/, 2)); r }
211207:2005/05/02(月) 13:46:51
ども
両案とも、あっさりうまくいってしまいました
>>208
正規表現使う案はさすがに思いつかなかったです(わら

>>209, 210
injectは知らなかったです、勉強になりました。


ありがとう
212 ◆m7YeytgDFE :2005/05/02(月) 14:17:14
>>209
うぁ、injectを忘れてました。まだ頭が1.6系...。
それにsplitで十分かつすっきりしますね。ううむ、まだまだだなぁ。
213デフォルトの名無しさん:2005/05/03(火) 00:21:03
私も恋するプログラム買いました。人口無脳を作ってどんどん機能を
追加していくという流れで、配列、条件分岐から、正規表現、GUI、
webサービス、マルコフ辞書までと幅広い内容です。
ひとつ気になる点としては、作者が死んじゃってることくらいです。

214 ◆m7YeytgDFE :2005/05/03(火) 07:05:24
>>213
遺稿になっちゃったんですね。
こういう書籍を書ける人が...もったいないなぁ。
215デフォルトの名無しさん:2005/05/03(火) 09:39:26
Rubyで、BASICのEND文と同じことができる命令ってありませんか?
プログラムの実行を強制的に終了させる命令。
それが無理なら、せめてプログラムの末尾にGOTOさせたいんだけど、そんな命令もない。

まったく不便な世の中になったもんだ。
216デフォルトの名無しさん:2005/05/03(火) 09:53:13
exit
217 ◆m7YeytgDFE :2005/05/03(火) 13:04:34
>>215
何のために強制終了させたいのか、GOTOが欲しいのかが分かりませんが、
まずは216の通りにexitでしょうねぇ。異常終了を表すならabortというのも。
プログラムの末尾にジャンプさせるということであれば、例外を使う方法もありかも。

begin
何かの処理
if 終了条件 == true
raise
end
rescue
例外処理(あるいは何もしない。)
end

exitなどの詳細はリファレンスマニュアルを参照してみてください。
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%B4%D8%BF%F4#exit
218デフォルトの名無しさん:2005/05/03(火) 15:48:19
今日から始めたのですが、大量ファイルからの入力 → 抽出データのリスト化出力
などのサンプル | リファレンス が載ってるところはないでしょうか
219215:2005/05/03(火) 18:24:10
>>216-217
ありがd(涙)
CGIの書き込みチェックに使いたかったんです。
raiseでムリヤリ例外を発生させてrescue節に飛ばす方がなんとなくRubyらしくてイイですね。
exitは初めて知りました・・・まだまだ知らないことばかりです;
220デフォルトの名無しさん:2005/05/04(水) 09:56:20
慣れると、以前は GOTO しか無かった不便な世の中だったもんだ、と思えるようになるよ。
221218:2005/05/04(水) 13:59:58
リファレンスの添付ライブラリに色々ありました。
スレ汚してすいませんでした。
222デフォルトの名無しさん:2005/05/04(水) 22:21:07
すいません、おまいらはソースの編集はどうしてるのですか?
秀丸とかterapadとかrdeとかいろいろあるけど、
どれでやってますか?
223デフォルトの名無しさん:2005/05/04(水) 22:24:15
WZ
224デフォルトの名無しさん:2005/05/04(水) 22:38:26
xyzzy
ごくまれにviとcat
225デフォルトの名無しさん:2005/05/04(水) 22:51:36
またアンケートかよ >>121
226デフォルトの名無しさん:2005/05/04(水) 22:58:12
xyzzyのrubymodeみつかんね
227 ◆m7YeytgDFE :2005/05/04(水) 23:45:37
>>222
xemacsのruby-mode。
228デフォルトの名無しさん:2005/05/05(木) 11:09:18
>>222
vim
229デフォルトの名無しさん:2005/05/05(木) 12:48:29
>>121-133 >>222 >>223 >>224 >>227 >>228
おまいら、「Ruby でエディタ何使ってますか?」スレ立ててそこでやれ。
230デフォルトの名無しさん:2005/05/05(木) 12:53:09
>>222
Visual Studio
231デフォルトの名無しさん:2005/05/06(金) 08:11:49
乱数の分布をとるようにしたいのですが、

a = Array.new(10, 0)
for i in 1..100
case rand(10)
when 0; a[0] += 1
when 1; a[1] += 1
when 2; a[2] += 1
when 3; a[3] += 1
when 4; a[4] += 1
when 5; a[5] += 1
when 6; a[6] += 1
when 7; a[7] += 1
when 8; a[8] += 1
when 9; a[9] += 1
end
end

このやり方だとrand(100)とかrand(1000)にすると、
when 0; a[0] += 1 をたくさん書かないといけません
何かスマートな方法がないでしょうか?
よろしくお願いします
232デフォルトの名無しさん:2005/05/06(金) 08:16:15
randから返ってきた値を添字にしないのは何故?
233デフォルトの名無しさん:2005/05/06(金) 08:21:10
>>232
そんなレス付ける暇があったらコードで示してやればいいのに。
性格悪い奴だな。
234デフォルトの名無しさん:2005/05/06(金) 08:35:42
a[rand(10)]+=1
235デフォルトの名無しさん:2005/05/06(金) 08:56:16
>>222
RDE
236デフォルトの名無しさん:2005/05/06(金) 13:33:39
Perl の tarball 眺めてたら、 t/japh/ なんてのを見つけた。
Ruby にも test/jarh.rb きぼんぬ。
237デフォルトの名無しさん:2005/05/06(金) 17:17:11
>>236
ttp://jarp.does.notwork.org/ruby/jarh.rb ←これを入れてもらう?
test/ よりも sample/ の方がいいかもしれない。

sample/ 以下って2年以上変更されてないファイルがほとんどだけど変更しない方針なのかな。
238デフォルトの名無しさん:2005/05/06(金) 17:33:07
>>232-234
こんなソッコーで回答してもらえるとは
ありがとうございました
239デフォルトの名無しさん:2005/05/06(金) 22:56:54
>>237
どの言語でもsampleの中って骨董品ばかりじゃない?
240デフォルトの名無しさん:2005/05/06(金) 23:31:45
>>233
そんなレス付ける暇があったらコードで示してやればいいのに。
性格悪い奴だな。
241デフォルトの名無しさん:2005/05/08(日) 12:48:04
ふと Test::Unit でもはじめてみようかと試したのですが、
Rubyって拡張子が cgi だと require できないのでしょうか。
もしそうなのであれば、拡張子が cgi のファイルをテストするいい方法はどのようなものでしょうか。
242デフォルトの名無しさん:2005/05/08(日) 13:11:40
ていうかphpみたいに拡張子.rbにしてもうちょっと自己主張すればいいのに。
243デフォルトの名無しさん:2005/05/08(日) 13:13:15
>>241
require "hoge.cgi"
でいけない?
244デフォルトの名無しさん:2005/05/08(日) 13:32:36
シングルクォーテーションもダブルコォーテーションもだめでした。
現在は、ファイルをコピーして拡張子を rb にのものに置き換える処理のあとに require しています。

もうひとつ質問なのですが、
コンソールでは動くテストケースなのですが、
eclipse の RDT で動かそうとすると、

"起動中" 中に内部エラーが発生しました。
java.lang.RuntimeException: Unable to execute interpreter: -I "C:\data\workspace\ws1\calendar" -I "testunit" -- "No file specified in configuration" testunit/test_calendar.rb 6789 false TCMyCalendar

というエラーが出て、実行されません。
6789 という数字に覚えがないのですが、このエラーを回避するにはどうしたらよいのでしょうか。
245デフォルトの名無しさん:2005/05/08(日) 13:44:10
6789行目?
246デフォルトの名無しさん:2005/05/08(日) 13:52:41
テストしたいだけなら、外部呼び出しの exec 等で良いんじゃない?
*.cgi って Ruby 以外なんでもアリなんだから、
ライブラリをロードする require が *.rb, *.so 限定な方が自然だろう。

> ていうかphpみたいに拡張子.rbにしてもうちょっと自己主張すればいいのに。
どゆいみ?
勘違いじゃなければ、httpd 側の設定の話な気がする。
247デフォルトの名無しさん:2005/05/08(日) 14:03:03
配列の処理で
「ある条件を満たす要素以降の要素」に対して
処理をしたい時はどうすればよいのでしょう?

Cで書くなら↓のような感じなのですが
eachを使うと条件を満たした行しか得られないようなので・・

for(i=0; i<MAX-1; i++){
  if(array[i] == 条件)
    for(j=i; j<MAX-1; j++){
      したい処理
    }
  }
}
248デフォルトの名無しさん:2005/05/08(日) 14:21:55
>247
泥臭くやると
array[ array.index(条件) ... array.length].each { |e|
# eに対して「したい処理」
}

かな。だれかエレガントな解キボンヌ
249デフォルトの名無しさん:2005/05/08(日) 14:37:13
start = array.index(条件)
end = array.length

for x in start..end do
したい処理
end

もしくは、

array[start, end].each do |item|
したい処理
edn

とか?
250デフォルトの名無しさん:2005/05/08(日) 14:41:02
あ、すまん edn > end

あと end = array.length にて end 使ったらマズい悪寒 orz
ブロックの終端以外の end は fin にでも書き換えてくれ
251247:2005/05/08(日) 14:45:18
>>248-250
ありがとうございます。試してみます。
252247:2005/05/08(日) 14:45:44
sage忘れスマソ
253デフォルトの名無しさん:2005/05/08(日) 17:00:20
あるクラスのインスタンスメソッドから、
同じクラスのクラスメソッドを呼ぶときってどうしていますか?

・AruClass.classmethod()
・self.class.classmethod()

これ以外の方法はあるのでしょうか?
254デフォルトの名無しさん:2005/05/08(日) 17:02:28
オブジェクトのリファレンスか別名を作る方法はないでしょうか?
例えば hash[:a][:b][:c] に x という別名を作って、
x にvalueを代入すると hash[:a][:b][:c] にも代入される、みたいな事を
したいのですが。
255254:2005/05/08(日) 18:16:18
= で出来ました。
256デフォルトの名無しさん:2005/05/08(日) 22:55:45
>>253
なぜそれ以外の方法が必要なのか述べよ(250字)
257デフォルトの名無しさん:2005/05/09(月) 01:31:37
>>256
クラス名を書くのはクラス名が変わったとき(あってはならないが)めんどい。
self.class だと長い。

せめて class って直接書いて構文エラーにならなければいいのになぁ。
258デフォルトの名無しさん:2005/05/09(月) 08:36:38
>>257
> せめて class って直接書いて構文エラーにならなければいいのになぁ。
予約語だしなぁ。
それにclassを認めるとdefもifもwhileも…とか出てきそうでイヤ。
259デフォルトの名無しさん:2005/05/10(火) 00:20:04
rubyは変数に型宣言が無く、ミッスクインをサポートしてるのに
なぜ継承があるのでしょうか?
260デフォルトの名無しさん:2005/05/10(火) 09:46:46
型宣言の有無と継承の有無はほとんど無関係じゃないかな?

mix-inがあれば継承がなくても実装の共有は可能になるが、通常の親子関係が
コーディングの助けになる場面もあるわけで(kind_of?)、無理に継承を排除する
必要もないということかと。
261デフォルトの名無しさん:2005/05/11(水) 11:07:20
継承がないと、mix-inも各インスタンスごとにいちいちextendしなきゃならな
いわけだが。
262デフォルトの名無しさん:2005/05/11(水) 14:14:26
>>244
requireだと拡張子.rbや.soを補おうとしているからと思われ。
load "hoge.cgi"してみるとか。
263デフォルトの名無しさん:2005/05/13(金) 06:47:55
class Person
def name
return @name
end
def name=(name)
@name = name
end
def hello
print "俺は" + @name + "だ"
end
end

alex = Person.new
alex.name = "アレックス"
alex.hello

ツクールXPに入ってるRubyのマニュアルの
インスタンス変数の項目の例文なんですが、
5行目の(name)が
変数としてのnameなのか関数としてのnameなのか教えてもらえないでしょうか?

264263:2005/05/13(金) 06:52:31
連レスですいません。

プログラム自体初心者なもので、自分の質問が的確な質問かどうかも
わからない状態です。
的外れな事を質問していたらすみません。
265デフォルトの名無しさん:2005/05/13(金) 07:35:07
RGSS ネタはアレそうだ (汗
変数でも関数でもなく引数かな。よーするに変数か。
(name) 内の name は "アレックス" を受けている。

ここら辺を参考に
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=FAQ%3A%3A%A5%E1%A5%BD%A5%C3%A5%C9#a5.2e2.20.2b.a4.e4-.a4.cf.b1.e9.bb.bb.bb.d2.a4.c7.a4.b9.a4.ab

たぶん、代入する感じでインスタンス変数にアクセスする手法だと思う (よく知らない)
普通に書くと以下の感じになるか? # というか attr_write を使う

class Person
def name
return @name
end
def instans_write(arg) # def name=(name)
@name = arg # @name = name
end # end
def hello
print "俺は" + @name + "だ"
end
end

alex = Person.new
alex.instans_write("アレックス") #a lex.name = "アレックス"
alex.hello
266デフォルトの名無しさん:2005/05/13(金) 07:51:13
instans って何だよ instance だろ。attr_writer だろ orz
寝惚けとる

1.8.3 の preview は何まで出るんだろうか……
267263:2005/05/13(金) 08:04:20
>>265
レスありがとうございます!

class Person
def name
return @name
end
def name=(name)
@name = name
end
def hello
print "俺は" + @name + "だ"
end
end

alex = Person.new
alex.name = "アレックス"
alex.hello

(name)内のnameが変数としてのnameなら、234段目のnameメソッドはなんの為にあるんでしょうか?
234段目を消しても、ちゃんと動くので、もう混乱してしまって・・・

以下マニュアルより転載。
>この例では @name というインスタンス変数を用意し、name、name= というメソッドを使って
>オブジェクトの外からアクセスできるようにしています。このようなメソッドをアクセサと呼びます。

無知な質問を何度もすみません;;
268デフォルトの名無しさん:2005/05/13(金) 08:17:00
>>265
参考URL先で理解できました。
ありがとうございました、後スレ汚し失礼しました。
269デフォルトの名無しさん:2005/05/22(日) 09:21:17
>>267のname=メソッドがどんな処理をしてるのか、どなたか詳しく解説して頂けないでしょうか?
270デフォルトの名無しさん:2005/05/22(日) 09:54:09
>>269
下の alex.name = "アレックス" が実はメソッド呼出しになっている。name
と = の間に空白があるが、実は ``name='' メソッドを呼出しており、その引
数が "アレックス" になってる。

このメソッドの仮引数は name で @name = name なんだから、仮引数 name の
値をインスタンス変数である @name に渡してるっつーこと。ようはセッター。
なので、 alex.name = "アレックス" なら、 alex のインスタンス変数@name
に "アレックス" が入るという寸法。

あとは、
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=FAQ%3A%3A%A5%E1%A5%BD%A5%C3%A5%C9
の 5.4 を読め。
271デフォルトの名無しさん:2005/05/22(日) 10:12:02
>>270
うはぁ・・・めちゃくちゃわかりやすい・・・
理解できたと思いますTДT)大感謝です。
name = の空白は関係なかったんですね。
迷惑ついでに答え合わせしていただけるとありがたいのですが
処理の流れとしては、

Personクラスを作成、@nameを定義。
Personのインスタンスalexを作成。
"アレックス"を引数に指定してname=を呼び出し。
仮引数nameに"アレックス"を受けてそのまま@nameに代入。
helloを呼び出して、表示。

・・・という感じであってるでしょうか?
272デフォルトの名無しさん:2005/05/22(日) 11:09:49
`@nameを定義' ってのが、ちょっと違和感があるな。
initialize 内で初期化してるなら、まだ解るけど。
p alex.name を追加してみれば解ると思うが、
name メソッドを使用した時に @name が返り値となるように設定している。
全然利用されてないけど、その本の別の場所で使ってるのかな?
正直、その例文だけみると、初心者だと少し混乱するものしょうがない駄目サンプルな気がする。
# >>265 で、かなりヒントを込めたつもりだったんだけどなぁ orz
273デフォルトの名無しさん:2005/05/22(日) 11:16:58
本スレが新スレに移行。

Rubyについて Part 16
http://pc8.2ch.net/test/read.cgi/tech/1116667484/
274デフォルトの名無しさん:2005/05/22(日) 17:24:14
>>272
む、
def name
return @name
end
はこの例文ではやっぱり使われてなかったのですね。
この部分だけ消しても動いたので、どういうモノなのか微妙で
恐らく return @name と書くだけでnameメソッドを呼び出さなくても@nameが定義されるんだろうと解釈してました。

丁寧でわかりやすく、本当にありがとうございました。
もっと勉強してなるべく人に頼らないで済むよう頑張ります!
275デフォルトの名無しさん:2005/05/25(水) 10:26:03
誰かrasp知っている方いませんか??
276デフォルトの名無しさん:2005/05/25(水) 20:14:50
raspって↓これ? 宿題ですか?
http://www.cyber.sccs.chukyo-u.ac.jp/sirai/classes/BasicsComp/
277デフォルトの名無しさん:2005/05/25(水) 20:48:22
宿題です
278デフォルトの名無しさん:2005/05/25(水) 20:57:19
おまけにマルチです
279デフォルトの名無しさん:2005/05/25(水) 22:23:11
おそらく同じ学科の別の人ですね
280デフォルトの名無しさん:2005/05/26(木) 16:33:05
いったい何%の人がそんな戯言を信じると思う?
281デフォルトの名無しさん:2005/05/26(木) 20:58:59
RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/l50
282デフォルトの名無しさん:2005/05/28(土) 06:12:13
質問:
あるディレクトリのなかの、
 すべてのファイルの名前、
 すべてのディレクトリの名前を出力するには
Rubyでならどう書く?
283デフォルトの名無しさん:2005/05/28(土) 07:06:56
`ls -a`
284デフォルトの名無しさん:2005/05/28(土) 07:09:10
標準のLoggerとLog4Rとどっちがいいですか?
xmlで出力先とかレベルとか設定できますか?
285デフォルトの名無しさん:2005/05/28(土) 08:33:30
282が言ってるのが「ディレクトリの下のファイルをすべて再帰的に」なのか
「1段だけ(ディレクトリがあってもその中を見ない)」なのかわからんが、
前者なら
require 'find'
Find.find('/path/to/directory') { |f| puts f }
後者なら単に
puts Dir.entries('path')
286デフォルトの名無しさん:2005/05/28(土) 08:35:13
>>282
Dir.foreach(path) do |each_file|
puts each_file
end

>>284
Logger の方が使い方は楽。
ログのローテーションや YAML/XML で設定ファイルを書きたいなら log4r。
詳しくはサイト読めばわかるけど、例としてはこんなん。

require 'log4r'
require 'log4r/configurator'
Log4r::Configurator.load_xml_string(DATA.read)
logger = Log4r::Logger['bar']
logger.debug('test')
__END__
<log4r_config>
<outputter name="file" type="FileOutputter">
<filename>foo.log</filename>
</outputter>
<logger name="bar" level="DEBUG" trace="true">
<additive>false</additive>
<outputter>file</outputter>
</logger>
</log4r_config>
287デフォルトの名無しさん:2005/05/28(土) 09:01:43
<code>
ゴミ箱.捨てる(path)
</code>

のように、
消去したいディレクトリのパスだけ入力すれば、そのディレクトリの中味を全部消し去ってくれるようなモジュールって、ある?
288デフォルトの名無しさん:2005/05/28(土) 09:25:08
>>287
FileUtils::rm_r とか?
289デフォルトの名無しさん :2005/05/28(土) 09:30:38
rubyって、Cから呼び出したりCを呼び出したりできますか?
例えばC側をコンパイルしなおさずに、
外部のrubyスクリプトを書き換えてC内の変数を弄る、とか
逆にCからrubyスクリプトで書いた関数を実行する、とか。
290デフォルトの名無しさん:2005/05/28(土) 09:39:08
>>289
前者: Ruby で扱えるようにした変数であればできる。
要は C で拡張ライブラリを書くということだが。
int i とか char s[20] とか任意の変数にアクセスするのは無理。

後者: ファイルやスクリプト文字列を与えて実行することはできる。
http://www.google.co.jp/search?q=ruby+%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF
291デフォルトの名無しさん:2005/05/28(土) 09:53:04
>>290
組み込っていうんですか。ありがとうございました。
292デフォルトの名無しさん:2005/05/28(土) 09:56:18
>>286
サンクス
ちょうどlog4rのサンプル探してたのよ
293デフォルトの名無しさん:2005/05/28(土) 10:30:03
>>288
>FileUtils::rm_r
さんきう! いやー似たようなものつくろうとしたけど夜中3時間粘ってやっぱりめんどくさくなった(^^;)

すごいうれしい機能盛りだくさん。おしえてもらえて助かりました!
294デフォルトの名無しさん:2005/05/28(土) 19:18:22
Rubyはprivateメソッドを書けるようにすべき

private def foo
end

これは気持ち悪いでしょ

private
def foo
end

--
def foo
end

private: foo
295デフォルトの名無しさん:2005/05/28(土) 21:15:29
気持ち悪い、という主観的な意見は、なんで気持ち悪いと思うのかを
説明してくれないと、賛同も反対もできないよ?
296デフォルトの名無しさん:2005/05/28(土) 23:28:31
二つ目のはC++と同じスタイルなわけだが。
297デフォルトの名無しさん:2005/05/29(日) 01:11:48
RDindexをLinux Zaurus SL-C300にインストールしようとして
RAAからダウンロードしたものを
$ tar xvzf rdindex-1.2.2.tar.gz
$ cd rdindex
$ cp dot.rdindex ~/.rdindex
$ ruby setup.rb config
とすると
setup.rb:643 warning: parenthesize argument(s) for future version
.....
setup.rb: config done.
となり、警告がちょっと気になりつつ。。
$ ruby setup.rb setup とすると
setup.rb:643 warning: parenthesize argument(s) for future version
...
/home/zaurus/rdindex-1.2.2/bin/rdindex/rdindex:2:in `require': No Such file to load -- rdindex(LoadError)
と言われたのでダメだろうなぁと思いつつ、パスのとおっているところにrdindex-1.2.2のsetupディレクトリにあるrdindex.rbを置いて再度configからやり直すと
setupのあとに
/opt/QtPalmtop/lib/ruby/site_ruby/1.8/rdindex.rb:4: undefined superclass `InstallerHook' (TypeError)
となります。
一応、手順通りに行ったつもりですが、他になにか行うべきことは何でしょうか?
rubyのバージョンは1.8.0(2003-08-04)[arm-linux]です。
298デフォルトの名無しさん:2005/05/29(日) 14:14:08
>>297
> setup.rb:643 warning: parenthesize argument(s) for future version

これはsetup.rbが古いだけなので、新しいsetup.rbで上書きすればOK。
気にする必要はないけど。

> パスのとおっているところにsetupディレクトリにあるrdindex.rbを置いて

それはインストール時に読まれるファイルだから、コピーする必要はない。

> 一応、手順通りに行ったつもりですが、他になにか行うべきことは何でしょうか?
> rubyのバージョンは1.8.0(2003-08-04)[arm-linux]です。

bin/rdindex/rdindexでrequire 'rdindex'してる割には、lib/PATHCONVだけで
lib/rdindex.rbがないな。

パッケージングミスだと思う。

299297:2005/05/29(日) 15:11:04
>>298
レスありがとうございます。

> パッケージングミスだと思う。

rdindex1.2.2のリリースから一年近くパッケージングミスのままということは
以下のいずれかなのでしょうか…

1.rdindexを使っている方はいない
2.1.2.2より以前のものを使用中
3.rdindexに代わるメソッド名の補完、メソッドの説明をしてくれるものを使用中

昨日、Rubyの256倍魔道編を読んで便利そうだと思い、是非ともEmacsにこんな機能を
と思ったのですが、現在主流と思われるメソッドの補完、説明を行ってくれるemacs-lispが
あれば教えてください。
300297:2005/05/30(月) 00:11:53
とりあえずrdindex-1.1.9をダウンロードしてきて使えるようにしてみました。
rdindex.elでエラー出力(警告)を破棄するようにして、
bin/rdindex内でRDの開始を判断するところをいじって、なんとかEmacsから使える
ようになりました。

ただ、結構適当にいじってしまったので余分なものまでインデックスにはいっちゃってる
ような気が…
wc -l ~/ruby/rdindex.dat が
1.6のマニュアルでは2016行、1.8のマニュアルでは4391行となりました。
通常に使える方、このぐらいの量であってるでしょうか?
301デフォルトの名無しさん:2005/05/30(月) 01:17:30
メソッドを定義したいのですが、返値はどこに書けばいいのでしょうか?
302デフォルトの名無しさん:2005/05/30(月) 01:28:25
return で返す。あるいは、最後に評価された式の値。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%A5%AF%A5%E9%A5%B9%A1%BF%A5%E1%A5%BD%A5%C3%A5%C9%A4%CE%C4%EA%B5%C1#a.a5.e1.a5.bd.a5.c3.a5.c9.a4.ce.c9.be.b2.c1

以下は同じ返値。
def foo
return "a"
end

def bar
"a"
end
303デフォルトの名無しさん:2005/05/30(月) 02:16:48
昔はreturnを書かない下の例のほうが高速と言われていたんだけど、最近は違うのかな。
304デフォルトの名無しさん:2005/05/30(月) 08:12:40
1.9だと単純なのは同じになる。

$ ruby -rNodeDump -e 'def foo;return "a";end'
NodeDump V0.9

NODE_DEFN: method 10577 (foo)
NODE_SCOPE:
NODE_BLOCK:
NODE_ARGS: count = 0
additional default values:
NODE_STR: "a"

$ ruby -rNodeDump -e 'def foo;"a";end'
NodeDump V0.9

NODE_DEFN: method 10577 (foo)
NODE_SCOPE:
NODE_BLOCK:
NODE_ARGS: count = 0
additional default values:
NODE_STR: "a"
305デフォルトの名無しさん:2005/05/30(月) 11:59:13
結論としては、JavaかPHPを覚えた方がマシ、と。
306デフォルトの名無しさん:2005/05/30(月) 13:32:13
そんな当たり前のことをいまさら理解されても困る
これだからRuby厨は
307デフォルトの名無しさん:2005/05/30(月) 14:13:52
Python ならまだしも Java か PHP はどうかと思う
308デフォルトの名無しさん:2005/05/30(月) 14:37:42
PHPは最もつぶしが利かないからな
309デフォルトの名無しさん:2005/05/30(月) 14:59:50
タイマーってありますか?

$thread = Thread.new{
Timer.new(5){ $thread.run }
なんか処理

$thread.stop
}

とすると5秒ごとに$threadが実行されるような
310デフォルトの名無しさん:2005/05/30(月) 15:12:58
そのコードでは何をしたいのかまったくわからんけど、

loop {
Thread.new{
なんか処理
}
sleep 5
}

ということ?

それとも、5秒ごとにスレッドをちょっと動かし、ちょっと動かし、としたいのかな?
311デフォルトの名無しさん:2005/05/30(月) 15:57:04
>>310
それだと処理に掛かった時間分5秒からズレます。
312デフォルトの名無しさん:2005/05/30(月) 16:13:01
>>311
ズレないと思うが?
313デフォルトの名無しさん:2005/05/30(月) 17:00:39
厳密に言えば、Threadの生成にかかる時間だけずれるけど、
そういう厳密な話をRubyでやりたいわけもなさそうなので省略。
314デフォルトの名無しさん:2005/05/30(月) 20:19:46
他の言語(例えばC+pthreadとかjavaとか)でやりたい事を軽く書いてもらえる?

310の言う通り、何が望みなのかよくわからない。
315デフォルトの名無しさん:2005/05/30(月) 20:44:27
ひょっとしてタイマ割り込みみたいな感じ?
316309:2005/05/30(月) 21:43:05
例えば
5〜10分(不定)掛かる処理を1時間ごと(毎時0分等)に繰り返すとかです。

loop {
$st = Time.now
なんか処理
sleep 60*60 - (Time.now - st)
}
これと同じことをもっとスマートに書けませんか?

>>309は間違えてました。すみません。

$thread = Thread.new{
Timer.new(5){ $thread.run }
loop{
なんか処理
$thread.stop
}
}
317デフォルトの名無しさん:2005/05/30(月) 22:20:18
>310で合っていると思うけど……
318デフォルトの名無しさん:2005/05/30(月) 22:33:53
だよなぁ
>310以外の何を求めているのか。。
319デフォルトの名無しさん:2005/05/30(月) 22:49:25
スマートに、ってのがポイントなのかな。
つまりcrondもどきをrubyで書くってことになるんだろうか。
誰か作ってなかったっけ?
320デフォルトの名無しさん:2005/05/31(火) 00:30:40
HKEY_CURRENT_USER\Control Panel\Desktop 
の中のWallpaperStyleの値を参照したり変更したりを
win32/registryにて試みているのですが、さっぱり出来ません。
どのように書けばいいのでしょうか?
参考までにご教授ください、よろしく願いいたします。
321デフォルトの名無しさん:2005/05/31(火) 08:10:34
今はどう書いてて、何がどうできないの?

参照もできない?
それとも変更しても表示が変わらない?
後者なら更新を通知する必要がありそうな気がするけど。
322デフォルトの名無しさん:2005/05/31(火) 11:02:48
>>309
>>313 の指摘をふまえたうえで、 >>310 のどこが不満か説明きぼんぬ。
323デフォルトの名無しさん:2005/05/31(火) 12:15:17
みんなわかっててとぼけてるんだよな。
まあ面白いからよしw
324デフォルトの名無しさん:2005/05/31(火) 23:22:17
rubyのみでパケット送信時のソースIPアドレスを
嘘つくことは可能?
ネットワークの実験してるんですが
いちいちIPアドレスとMACアドレス変更するのが
面倒なんですが。
出来るのなら何かヒント教えてください。
325デフォルトの名無しさん:2005/06/01(水) 00:45:00
可能
326デフォルトの名無しさん:2005/06/01(水) 01:39:28
ruby初心者です。簡単な数当てゲームを作ろうとしているのですが、
試行回数を記録しようとすると、「undefined method `+' for nil:NilClass」などと言って怒られます。
どうすればよいのでしょうか?

srand
val = rand(100)

callcc{|$input|}
print "値を入れてください> "
$charange += 1
n = gets.to_i

====長いので、下に続きます=========
327デフォルトの名無しさん:2005/06/01(水) 01:39:50
===上の続きです=====

if n > val
puts "もうちょっと小さい値です"
$input.call
elsif n < val
puts "もうちょっと 大きい値です"
$input.call
else
printf "正解です。試行回数: %d回", $charange
end
328デフォルトの名無しさん:2005/06/01(水) 01:41:17
> $charange += 1

$charange が初期化されてないんじゃね?
329デフォルトの名無しさん:2005/06/01(水) 01:45:54
綴りも変だけどな
330デフォルトの名無しさん:2005/06/01(水) 06:38:24
ちゃーらんじ
331デフォルトの名無しさん:2005/06/01(水) 15:02:27
細かいことは気にしないでやろうぜ…
気になるがw
332デフォルトの名無しさん:2005/06/01(水) 20:03:31
質問からレスまで2分かかってないのも気になる
333デフォルトの名無しさん:2005/06/01(水) 20:05:14
うむ
334デフォルトの名無しさん:2005/06/01(水) 23:00:23
バグの原因発見するだけなら2分もかからんだろう
335デフォルトの名無しさん:2005/06/02(木) 00:44:56
>>332から>>333まで2分かかってないのも気になる
336デフォルトの名無しさん:2005/06/04(土) 16:21:42
c/migemoのAPIリファレンスってないの?
337デフォルトの名無しさん:2005/06/04(土) 19:12:34
>>336
C/migemo はただのCのライブラリなんで、このスレはスレ違いかと。

「Ruby の 拡張ライブラリとして C/migemo を使いたい」という話なら
doc/README_j.txt の API リファレンスを参考にどうぞ。
素直にオリジナルの Migemo を使うのが楽だと思うけど。

338デフォルトの名無しさん:2005/06/05(日) 13:55:23
Rubyで書くとき、ひとつのメソッドの行数って平均どのくらい?
ついでにひとつのクラスにどのぐらいメソッド詰め込んでる?

こんな場合はこれぐらいと教えてもらえると、より興味深い。
339デフォルトの名無しさん:2005/06/05(日) 14:45:29
時と場合によります
340デフォルトの名無しさん:2005/06/05(日) 15:11:39
[1,2,3].each{|i|
 print "[", i, "," if i.first?
 print i, "]" if i.last?
 print i, "," if i.middle?
}
結果
[1,2,3]
こんな感じの書き方は出来ないですか?
341デフォルトの名無しさん:2005/06/05(日) 15:19:54
うーん、具体的な用途によっていろいろだと思うけど、その程度なら、
puts "["+[1, 2, 3].join(", ")+"]"
かな。
もう少し具体的に、最初と最後だけ識別したい時は
[1...-1]で真ん中だけ取り出すか、
each_with_indexを使って i==0で判定するか、
をやると思う。
342デフォルトの名無しさん:2005/06/05(日) 20:48:42
[1,2,3].p
343デフォルトの名無しさん:2005/06/06(月) 00:32:53
>>340

sep = "["
[1,2,3].each do |i|
 print sep, i; sep = ","
end
puts "]"

という書きかたも、あることはある。
344デフォルトの名無しさん:2005/06/06(月) 00:44:47
>>340
"[%s]" % [ [1,2,3].join(",") ]
345デフォルトの名無しさん:2005/06/06(月) 04:53:38
>>344
一個だけのときはこうしちゃうなあ。
"[%s]" % [1,2,3].join(",")
346デフォルトの名無しさん:2005/06/06(月) 08:29:59
"#{[1,2,3].join(",")}"
347デフォルトの名無しさん:2005/06/06(月) 08:56:52
>>346
結果の文字列を[と]で挟むのを忘れるぞ。
何のために文字列に入れたんだか。
348デフォルトの名無しさん:2005/06/06(月) 11:17:08
http://www.rubycgi.org/cgi_explanation/2-7.htm

上記URLのサンプルを動かして、適当に書き込んでから
ブラウザで「更新」すると
最後に書き込んだメッセージがもう一度投稿されてしまいます。


これを防ぐ手段として、「#ファイルの書き込み」の一つ下の行を

> if senddata && log[0]!="#{senddata}\n"

のように書き換える方法があると思いますが
幅が利かないので、出来れば log[0] との比較はしたくありません。
そこで input["senddata"] の方を nil にしてしまいたいんですが
その方法を教えてもらえませんか?
349デフォルトの名無しさん:2005/06/06(月) 11:47:48
>>339
ここはメトリクスのないインターネッツですね
350デフォルトの名無しさん:2005/06/06(月) 16:06:47
>>344-345
そんなメソッドあったんだねぇ
351デフォルトの名無しさん:2005/06/06(月) 20:43:23
[1,2,3].inspect
352デフォルトの名無しさん:2005/06/06(月) 22:18:35
>>341
繰り返しの最初なのか最後なのかを判定する方法を用意してくれる言語もあるけど(Velocityとか)、Rubyはそういう方法は用意されてないので、自分で頑張るしかないです。

a = [1, 2, 3]
last = a.length - 1
a.each_with_index do |n, i|
 if i == 0
  print "[", n, ","
 elsif i == last
 print n, "]"
 else
  print n, ","
 end
end

こじんてきには>>343がおすすめ。

>>351
[1,2,3] と表示させる方法を>>341は質問質問しているわけじゃない。それがわかっててそんな回答するのは、いけず。
353デフォルトの名無しさん:2005/06/06(月) 23:18:27
>>344-345
というか、何も表示されないだけど ( % についてのWarningはでる)
354353:2005/06/06(月) 23:19:40
ごめん
p とか print つけてなかった orz
355デフォルトの名無しさん:2005/06/07(火) 17:17:40
>>348
> 幅が利かない
ってどういうこと?

> そこで input["senddata"] の方を nil にしてしまいたいんですが
> その方法を教えてもらえませんか?
それってブラウザが勝手にやってることなんじゃないかと思うけど。
tDiaryじゃ一度redirectさせてreloadしても再送しないようにしてるみたい。
356デフォルトの名無しさん:2005/06/08(水) 00:35:03
サービスパックのバージョンを取得するために以下のようなスクリプトを書きました。
とりあえず動いているのですが dwOSVersionInfoSize = 148 の部分と、
最後の szCSDVersion を文字列にする部分をもっときれいに書く方法はないでしょうか。

require "dl/import"
require "dl/struct"

module Kernel32
extend DL::Importable
dlload "kernel32"
typealias("TCHAR", "unsigned short")
OSVERSIONINFO = struct [
"DWORD dwOSVersionInfoSize",
"DWORD dwMajorVersion",
"DWORD dwMinorVersion",
"DWORD dwBuildNumber",
"DWORD dwPlatformId",
"TCHAR szCSDVersion[128]",
]
extern "BOOL GetVersionEx(OSVERSIONINFO*)"
end

ver = Kernel32::OSVERSIONINFO.malloc
ver.dwOSVersionInfoSize = 148
Kernel32::getVersionEx(ver.to_ptr)
puts ver.szCSDVersion.pack("s128").unpack("a128")[0][/^[[:print:]]+/, 0]
357348:2005/06/08(水) 12:21:37
>>355
>幅が利かない
このソース、「掲示板」ってことになってますが
これを実用レベルの掲示板にするには、発言以外にも、
名前やら時刻やらを一緒にログファイルへ保存する必要が出てきますよね?

2005/06/08 12:00 山田 > よう!
   ↑
こんな形で。

こうなると単純に != しただけでは判定できなくなるし、
かと言って、名前(山田)と発言(よう!)で部分検索しても

2005/06/08 12:05 山本 > 『山田 > よう!』って随分軽いな!

というような、一部コピペの発言も拒否してしまうし・・・。


ってことで、あまり幅が利かなさそうだなあと思いました。

>input["senddata"]
仰るように、ブラウザの仕業みたいです。
クッキー使えばどうとでもなるんでしょうが、まったく分からないので、
二重投稿防止のためだけにもう一つ別のログファイルを用意して、
それで何とか対処することにしました。

正しいかどうかわかりませんが redirect って言うのは、
bbs.cgi→a.html→bbs.cgi みたいに一旦別のページに飛ばすって意味であってますか?
358デフォルトの名無しさん:2005/06/08(水) 12:53:07
【幅が利・く】勢力や発言力がある。はぶりがよい。「町内で―・く人」
359デフォルトの名無しさん:2005/06/08(水) 15:29:37
>>357
CGI特有の質問はWebProg板へGO!

http://pc8.2ch.net/test/read.cgi/php/988948655/
【Ruby】RubyでCGI
360デフォルトの名無しさん:2005/06/08(水) 18:57:02
RubyのDoxygenに対応するツール(フォーマット?)はRDでいいんですか?
ちょっと調べてみたんですが書式の説明はあっても実際のクラスやメソッドにどう説明をつけて
どうドキュメントを生成すればいいのかがよく分かりません。
そのあたりの説明が載っているサイトがあったら紹介してもらえないでしょうか。
361デフォルトの名無しさん:2005/06/08(水) 19:38:29
rdoc
362デフォルトの名無しさん:2005/06/08(水) 21:22:25
MF
363デフォルトの名無しさん:2005/06/08(水) 21:51:42
364デフォルトの名無しさん:2005/06/09(木) 02:58:20
ここで質問していいのかわからないのですが、ActiveRecordについて質問です。


次の1.と2.の手順は、重複しているような気がします。

1.MySQLでデータベースを作っているとき、
subarticle_id INTEGER REFERENCES SUBARTICLES (id),
こういう風にカラムを作成することで、subarticle_idという外部キーとsubarticlesデータベースのidを関連づけられますよね。

2.また、ActiveRecord::Baseを継承してクラスを作るとき、belongs_toや、has_manyなどを使って、改めて関連についてのメソッドを追加しますよね。

これって、重複していますよね。
これはつまり、MySQLレベルでのREFERENCES以降の文は、必要ないということになるのでしょうか??(あるいは、書いてはいけない??)
MySQLレベルでは、別に二つのtebleを関連づけなくても、ActiveRecordレベルで関連づけさえすればいいということでしょうか??

ちょっと、SQL初心者で言ってることがわかりにくいかもしれませんが、よろしくお願いします。
365357:2005/06/09(木) 06:02:09
>>359
ありがとうございます。
そっちも参考にしてみます。
366デフォルトの名無しさん:2005/06/09(木) 10:20:52
関連付けは制約だからなあ・・・
367デフォルトの名無しさん:2005/06/09(木) 20:41:29
Win32API全部宣言したWindowsモジュールクレクレ
368デフォルトの名無しさん:2005/06/09(木) 21:00:42
>>364
MySQLって制約はただ書ける(シンタックスエラーにならない)だけで
実際には機能しないんじゃなかったっけ?
369デフォルトの名無しさん:2005/06/11(土) 00:41:28
Rubyの機能に関して、意見を言うには、メーリングリストに入るしかないのでしょうか??
ちょっとしたことなので、メーリングリストでいうほどでもないようなことなのですが。。
370デフォルトの名無しさん:2005/06/11(土) 00:52:08
変更を取り込んで欲しいなら、MLでいうのが一番確実。
日記とかこことかで言ったことが採用されることもないじゃないが、
大体は一度MLで議論されることになる。
371デフォルトの名無しさん:2005/06/11(土) 02:19:55
外部コマンドで、tar -zxvf hoge.tgz として、
その展開したディレクトリを保存するっていうのを、Rubyから行うには
どうすればいいでしょうか??
372デフォルトの名無しさん:2005/06/11(土) 08:08:35
>>371
tarを実行するには `tar -xzvf #{filename}`
展開したディレクトリを保存するというのは、なんのことかよくわからん。
373デフォルトの名無しさん:2005/06/11(土) 12:19:51
実行するだけなら
system("tar -zxvf hoge.tgz") とか
system(%w"tar -zxvf hoge.tgz") とか
終了を待たないなら
spawn(%w"tar -zxvf hoge.tgz") とか
出力一行ごとになんかするなら
IO.foreach("|tar -zxvf hoge.tgz")とか
IO.popen(%w"tar -zxvf hoge.tgz") do |tar|
 tar.each do |line|
 end
end
とか、やりたいことに応じてやり方もいろいろあるわけだが。

展開した時点で保存されているものだと思う。普通は。
374372:2005/06/11(土) 15:19:58
なるほど。 system("tar -zxvf hoge.tgz") なら、
コマンドを実行されて、その終了も待ってくれるんですね。
ありがとうございます。
375デフォルトの名無しさん:2005/06/11(土) 21:37:08
Ruby/tk でさ、バインドしたメソッドの引数の与え方を
任意に変えたいんだけど、どうするのがいいのかな?

例えば、Canvasに点を打ちたい場合に、
Canvasにフォーカスされてたらマウス入力から
Entryにフォーカスされたらx,y入力からとか
詳細はしょりますが

$focus = TkVariable.new

canvas.bind('FocusIn', proc{$focus.value = 'canvas'})
entry.bind('FocusIn', proc{$focus.value = 'entry'})

button(:command=>proc{$focus.wait; create_point})
def create_point
if $focus == 'canvas'
...
else if $focus == 'entry'
...
end
end

みたいなやり方しかないのでしょうか?

Ruby/Tkというか、Ruby初心者なので、良い方法あったら教えてくださいませ
376デフォルトの名無しさん:2005/06/11(土) 22:57:11
Ruby/Tkは詳しくないんだけど、こういうのはどう?

create_point = proc{}
by_mouse = proc{...}
by_entry = proc{...}

canvas.bind('FocusIn', proc{create_point = by_mouse})
entry.bind('FocusIn', proc{create_point = by_entry})

button(:command=>proc{create_point.call})
377デフォルトの名無しさん:2005/06/11(土) 23:17:09
>>376

おお!
サブルーチンへのリファレンス(Ruby的にはなんて言うのかな)
を使うんですね

この方が美しいですね

Thx!

378デフォルトの名無しさん:2005/06/12(日) 00:12:28
>377
>サブルーチンへのリファレンス(Ruby的にはなんて言うのかな)
Ruby的にはProcオブジェクトでつ。多分
379デフォルトの名無しさん:2005/06/12(日) 00:55:03
イテレータ?
380375:2005/06/12(日) 01:57:00
>>378
Procオブジェクトへのcallメソッド呼び出しってことで
納得デス

この3日間Rubyでアプリのプロト作ってますが
よいツールですね、マジで
型が無いのとスコープがわかりづらいのに初めはちょっと
違和感がありましたが
感動しきり
Ruby本買って真面目に取り組みマス

381デフォルトの名無しさん:2005/06/12(日) 02:54:45
UDPの送信ポート固定したいんすけど
Ipv4ならバインドすれば出来るんですが
#!ruby -Ks
require 'socket'
include Socket::Constants
udp = UDPsocket.open()
udp.bind("192.168.1.23",2323)
udp.send( "test", 0, '192.168.0.3', 2323 )

Ipv6だと要求したアドレスのコンテキストが無効です。
っていわれます。指定の仕方が間違ってると思うんすけど
わかりません。教えてください。OSはXPです。

#!ruby -Ks
require 'socket'
include Socket::Constants
u = UDPsocket.open(AF_INET6)
u.bind("fe80::820:5dff:4e86:fb41",2323)
u.send("test", 0, "ff3e::1", 2323)
382デフォルトの名無しさん:2005/06/12(日) 04:03:32
>>380
感動するのは最初のうちだけ
限界が見えてくると色々と不満も(ry
383デフォルトの名無しさん:2005/06/12(日) 07:56:54
mswin版でファイルを実行してその終了を待たずに次の処理に進むにはどうすればいいでしょうか?

startでは一瞬プロンプトが出て気持ち悪いです。
384 ◆m7YeytgDFE :2005/06/12(日) 08:56:12
>>383
ruby.exeと同じディレクトリにrubyw.exeってのがありませんか?
rubyw.exeを使えば、コマンドプロンプトを表示することなく実行できますよ。
但し、標準入出力が必要なスクリプトには使えませんので、ご注意を。
385381:2005/06/12(日) 09:09:57
どのインターフェースからでていくか指定したら
いけた。
u.bind("<Ipv6アドレス>%6",2323)
386デフォルトの名無しさん:2005/06/12(日) 15:56:49
Rubyしか知らないmacユーザーからの質問です。
書いたプログラムと、その出力結果をみなさんどのように確認されながら作業されていますか?

私は、いつもmiというエディタをつかって作業をしています。
www.mimikaki.net
Rubyの実行結果をショートカット1つで出力・表示できるところが、とても気に入っています。カスタマイズによってはPerlもHTMLもおなじように出力できます。

しかし、そういったことができるエディタというのは他にもあるのでしょうか?
寡聞にして知らず、お伺いをたてる次第です。

是非ご意見を。
387デフォルトの名無しさん:2005/06/12(日) 18:05:40
Windowsしか知らないRubyユーザーの俺では全く力になれんな!
388デフォルトの名無しさん:2005/06/12(日) 18:47:38
気に入ってるんならそれ使ってればいいんじゃ?
389デフォルトの名無しさん:2005/06/12(日) 18:54:24
>>386
Mac板で聞いたら。つかマクロ組めるエディタならなんだって出来るだろ。
Winにはfreeride,sciteつうのがrubyのインストール時に勝手についてきたが。
390デフォルトの名無しさん:2005/06/12(日) 22:26:27
RubyつかってるRPGXPって仕様ではムービー(mpegとか)の再生ができないんですけどシステムいじくってなんとかしてムービーを再生するという方法はないでしょうか。
RPGをプレイするウインドウに表示できなくても別窓に表示して再生が終了するとムービーの窓が消えるとか。

とにかくRPGXPでムービーを再生する
391デフォルトの名無しさん:2005/06/12(日) 22:56:41
>>386
ruby-mode.el
392デフォルトの名無しさん:2005/06/12(日) 22:58:42
>>390
普通に出来ますが?
393デフォルトの名無しさん:2005/06/13(月) 16:43:09
>>392
イベント一覧にはないし、enterbrainのFAQにもそのイベント項目は2003まであったけどXPにはない
とあります
そこをRGSSで・・・・
394デフォルトの名無しさん:2005/06/13(月) 17:02:34
自己解決しました
395デフォルトの名無しさん:2005/06/13(月) 17:07:55
なんでうまくいかなくて、どうやったら解決したのか、を書いてほしいなあ。
396デフォルトの名無しさん:2005/06/13(月) 17:17:22
wmv形式のやつを拡張子を無理やりwmaにして、BGMとして読み込ませたらできました。
以下どう読むとどうなるか

BGM→繰り返し再生
ME→いったっきりで繰り返さない
SE→繰り返さない、mapのBGMはとまらない
397デフォルトの名無しさん:2005/06/13(月) 20:18:42
>393
もう解決したんだからアレだけど、2003っていつからXPより古くなったんだ。
398デフォルトの名無しさん:2005/06/13(月) 20:32:23
2000→2003→XPじゃないの?
399デフォルトの名無しさん:2005/06/13(月) 20:56:15
http://pc8.2ch.net/test/read.cgi/php/1118663500/l50
↑WebProg板に、Ruby on Railsのスレたてました。
こっちもよろしく。
400デフォルトの名無しさん:2005/06/13(月) 21:34:14
あれ? 確か
2000   →     XP
    2000 Server →  Server 2003
だったと思ってたが。
ttp://www.microsoft.com/japan/windowsserver2003/howtobuy/licensing/default.mspx にも
>Windows Server 2003 の発売日に Windows XP Professional のライセンスを保有するユーザーは、
とあるけど……漏れのカンチガイ(・∀・)?
401デフォルトの名無しさん:2005/06/13(月) 21:39:44
>>399
ツクール厨のためにRGSSスレも立ててくれよ
もうこんなやりとりうんざりだ
402デフォルトの名無しさん:2005/06/13(月) 22:30:58
>>400
あってるから安心しる
403デフォルトの名無しさん:2005/06/13(月) 23:48:25
>>401
RPGツクールXP買ったけどインスコしてない俺に言わせれば、分割するまでもない。
別にレス多くないし。
404デフォルトの名無しさん:2005/06/14(火) 00:35:14
>>401
初心者スレなんだからガマンせい。ガマンしたくないなら
405デフォルトの名無しさん:2005/06/14(火) 00:35:52
ひとりでもツクール厨の上陸を許したらひどいことになるよ。
こういうのは水際で防がないと駄目。
406デフォルトの名無しさん:2005/06/14(火) 01:01:55
ツクール房がなぜ、ツクール房と呼ばれるのかというと、
彼らは、Rubyスクリプトレベルの質問と、ツクールAPIレベルの質問の区別がつかず、
同じ場所で聞いているからだ。

ツクールスレをゲーム製作の板にたてるべきだな。
407デフォルトの名無しさん:2005/06/14(火) 01:05:32
お前らウザいけど見逃してやるから
今のうちにちゃんとローカルルールを決めて
それを徹底させて二度とこのネタで議論しないように。
というわけで言いっぱなしで逃げずにちゃんとまとめとけ。
408デフォルトの名無しさん:2005/06/14(火) 01:24:45
>>407
お前が一番言いっぱなしな件について。
409デフォルトの名無しさん:2005/06/14(火) 02:10:42
>>408
なにを訳の分からんことを言ってるんだ?
410デフォルトの名無しさん:2005/06/14(火) 10:00:34
なんかすぐ話が逸れるな。

どうせどうわけても駄目な奴は駄目なので、ツクール厨が来て馬鹿なこと
聞くたびに思う存分叩けばいいんじゃないの?
411デフォルトの名無しさん:2005/06/14(火) 23:53:49
>>406
たしかあったはずだが。
dat落ちしたか?
412デフォルトの名無しさん:2005/06/16(木) 15:53:29
「Rubyではじめるオブジェクト指向プログラミング入門」みたいなのってある?
413 ◆m7YeytgDFE :2005/06/16(木) 15:59:00
>>412
"恋するプログラム〜Rubyでつくる人工無脳"はいかが?
好みによりけりですが、序盤は入門編といった内容です。
414デフォルトの名無しさん:2005/06/16(木) 18:47:52
>>413

あの本の著者ってもう死んでるらしいね

内容もあんまし良くなかったな
415デフォルトの名無しさん:2005/06/16(木) 20:19:17
初犯の著者紹介で死去というのは
壮絶なデビューだな
416デフォルトの名無しさん:2005/06/16(木) 20:40:15
遺稿を出版するなんてそんなに特異なことでもないような。
417デフォルトの名無しさん:2005/06/17(金) 00:06:03
ruby1.6でtimeが1970年以前は使えないみたいだけど
これは1.8からtime.c持ってきて、とかいうような単純な方法では無理?
418デフォルトの名無しさん:2005/06/17(金) 01:44:05
なぜ1.8そのものを持ってこない?
419デフォルトの名無しさん:2005/06/17(金) 02:10:26
>>412
さすがに「恋する〜」は、入門書、オブジェクト指向の学習書としてはオススメしかねる。
人工無脳という目的に偏りすぎていて、カバーしている内容が偏っているし内容も薄い。
実用例、他人のソースを見てみたい人にっていうなら、まだわかるけど。

俺は「Rubyプログラミング入門」から入った。
http://www.linux.or.jp/bookreview/BR44.html
420デフォルトの名無しさん:2005/06/17(金) 03:22:46
俺は「Rubyソースコード完全解説」から入った。
ttp://i.loveruby.net/ja/rhg/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4844317210/
421デフォルトの名無しさん:2005/06/17(金) 14:30:49
>>417
それはOSとかの話になる。

TimeはOSなどとのやりとりに使うtime_tのラッパーであって、time_tは
1970/1/1 00:00:00 GMTを基準にすることになってるので、負の値を許す環境
でないと無理。

外部の日付とかをちゃんと扱いたいならDateとかDateTimeを使うべき。
422デフォルトの名無しさん:2005/06/17(金) 14:38:03
すいません。質問があります。

20AB年C月は何日あるか
って調べる関数とかないのでしょうか?
423デフォルトの名無しさん:2005/06/17(金) 14:45:09
ruby -rdate -e 'p Date.at(20AB, C, -1).day'
424デフォルトの名無しさん:2005/06/17(金) 14:52:59
>>423
atじゃなくてnewかcivil
425デフォルトの名無しさん:2005/06/17(金) 15:12:36
ああごめん、書き間違えた。
426デフォルトの名無しさん:2005/06/17(金) 17:15:04
2000年って閏年だったんだよね?
427デフォルトの名無しさん:2005/06/17(金) 17:21:42
>>426
ん? >>423-424 のでちゃんと 29 って出てくるよね?
428デフォルトの名無しさん:2005/06/18(土) 01:51:46
これからrubyを使っていこうと思っていますので、
宜しくお願いいたします。
429デフォルトの名無しさん:2005/06/18(土) 02:00:42
>>426
原則4で割り切れる年はうるう年
ただし100で割り切れて400で割り切れない年はうるう年ではない
430デフォルトの名無しさん:2005/06/18(土) 02:02:50
そんなの誰が決めたんだよ
適当なこと言うな
431デフォルトの名無しさん:2005/06/18(土) 02:07:42
てきとう(‥タウ)【適当】
(形動)
ある状態・目的・要求などにうまくあうこと。ほどよくあてはまるさま。ふさわしいさま。相当。「適当な大きさにきざむ」
432デフォルトの名無しさん:2005/06/18(土) 02:41:43
(2)その場を何とかつくろう程度であること。いい加減なこと。また、そのさま。
「―にはぐらかす」「―なことを言う」
433デフォルトの名無しさん:2005/06/18(土) 03:06:02
>>429-430
その場合、誤差はどれくらい?
434デフォルトの名無しさん:2005/06/18(土) 07:05:06
435デフォルトの名無しさん:2005/06/18(土) 12:08:47
>>430
ローマ法王グレゴリウス13世
436デフォルトの名無しさん:2005/06/18(土) 12:11:48
Ruby2.0ではleapyear?の標準サポートが望まれる
437デフォルトの名無しさん:2005/06/18(土) 12:20:10
$ ruby -rdate -e 'p Date.today.leap?'
false
$ ruby -rdate -e 'p Date.new(2000,1,1).leap?'
true
438デフォルトの名無しさん:2005/06/18(土) 13:12:05
>>430
( ゚,_ゝ゚)バカジャネーノ
439デフォルトの名無しさん:2005/06/18(土) 14:44:08
>>437
Ruby2.0 では Year クラスの標準サポートが望まれる。
440デフォルトの名無しさん:2005/06/18(土) 15:06:56
>>439
何すんだ?それ。
ちなみに、>>437の二つ目の月日は省略可能。
441デフォルトの名無しさん:2005/06/18(土) 15:10:35
newしないと判定できないってかっこわるくね?
442デフォルトの名無しさん:2005/06/18(土) 15:23:20
>>440
いや、 Year::leap?(2005) としたいだけです・・・
443デフォルトの名無しさん:2005/06/18(土) 15:42:04
厨房時代、担任がすっとぼけたことを言って、生徒が突っ込むと
「センセてきとー」→「ふむ、適していて当たっていると」
「センセいいかげーん」→「良い加減だと」
と切り返されっぱなしだったのを思い出したよ>431
444デフォルトの名無しさん:2005/06/18(土) 15:52:35
>>441-442
$ ruby -rdate -e '[2000,2004,2005,2100,2400].each{|y|
puts "#{y} is #{Date.leap?(y) ? "" : "not "}leap year"
}'
2000 is leap year
2004 is leap year
2005 is not leap year
2100 is not leap year
2400 is leap year
445デフォルトの名無しさん:2005/06/18(土) 21:40:15
なんでみんなnewしてんの?
446デフォルトの名無しさん:2005/06/18(土) 22:03:16
新し物好きだから。
447デフォルトの名無しさん:2005/06/18(土) 22:03:31
あたらしいことはいいことだから
448デフォルトの名無しさん:2005/06/18(土) 22:03:53
ケコーン orz
449デフォルトの名無しさん:2005/06/18(土) 22:30:44
訪れた人のIPをひたすらずらずら表示し続けるCGI運用してるサイトってない?
450デフォルトの名無しさん:2005/06/18(土) 22:42:47
ありますよ
451デフォルトの名無しさん:2005/06/18(土) 22:45:54
だったらさっさと教えろよ気がきかねーな
452デフォルトの名無しさん:2005/06/18(土) 22:56:19
名前欄に fushianasan と入れてみ
453fushianasan:2005/06/19(日) 13:49:57
fushianasan
454デフォルトの名無しさん:2005/06/19(日) 18:43:04
Arrayクラスにメソッド(map_with_index)を追加し、Apache + mod_ruby上でそ
れを呼ぶと、`undefined method'と怒られるんですが、これってmod_rubyの制
限ですか?

普通のCGIやコマンドラインではちゃんと実行できるんですが。
455454:2005/06/19(日) 19:01:31
すんません。ここに書いてありました。

http://www.modruby.net/doc/faq.ja.jis.html
456デフォルトの名無しさん:2005/06/20(月) 11:52:16
コマンドラインからRubyで以下のことをやりたいです。
あとPerlでもコマンドラインで実行できればお願いします。
Linuxのawkではできたのですが、友人のcygwinで実行できないらしくて


■入力ファイル=1.lst
NAME,TITLE,DT,DD
NAME2,TITLE2,DT2,DD2
NAME3,TITLE3,DT3,DD3

■awkコマンド
awk 'BEGIN{FS=","}{print "<dt title=\"" $2 "\"><a name=\"" $1 "\">" $3 "<\/a><\/dt><dd>" $4 "<
\/dd>"}' 1.lst > 2.lst

■出力ファイル=2.lst
<dt title="TITLE"><a name="NAME">DT</a></dt><dd>DD </dd>
<dt title="TITLE2"><a name="NAME2">DT2</a></dt><dd>DD2 </dd>
<dt title="TITLE3"><a name="NAME3">DT3</a></dt><dd>DD3 </dd>
457 ◆m7YeytgDFE :2005/06/20(月) 12:19:51
例えばこんな感じでしょうか?Linux版のRuby 1.8でしか確認してませんが。

ruby -F',' -a -p -l -e '$_ = %Q(<dt title="#{$F[1]}"><a name="#{$F[0]}">#{$F[2]}</a></dt><dd>#{$F[3]}</dd>)' 1.lst >2.lst
458デフォルトの名無しさん:2005/06/20(月) 12:49:29
>457
すばやい回答ありがとうございました。大変勉強になりました!
459デフォルトの名無しさん:2005/06/20(月) 17:16:06
460デフォルトの名無しさん:2005/06/21(火) 15:11:43
>>247
極めて遅レスだが、自称エレガントな例

f=true #フラグをループの外のスコープで定義
array.delete_if{ |x| f &&= !(条件) }.each do
したい処理
end


delete_unlessがあればいいのに。。。 こっちがわかりやすいよね。
f=false
array.delete_unless{ |x| f ||= (条件) }.each do
したい処理
end
461デフォルトの名無しさん:2005/06/21(火) 15:40:09
delete 系は破壊的なメソッドだから array を壊れちゃうのがまずい。
247のCのはヘンなんだが、最初に条件を満たした要素から
最後まで each で処理するんであれば、248-249 のようにやるべき。
自分なら
array[(array.index(条件)..-1].each { 処理 }
かな。
# filter、take、drop、take_if、drop_if とかいった関数的なメソッドがあればいいんだけど。
462460:2005/06/21(火) 15:48:06
なるほど。delete_ifも破壊系なんですね。
それじゃ修正してこれでどうでせう?

f=nil
a.map{ |x| x if (f ||= (条件)) }.compact.each do
したい処理
end


463デフォルトの名無しさん:2005/06/21(火) 23:36:47
a.each do |x|
 if 条件..true
  したい処理
end
end
464デフォルトの名無しさん:2005/06/21(火) 23:43:13
間違えた。
trueじゃなくてfalse。
465460:2005/06/22(水) 00:21:13
>>461 の方法も、おおなるほど、と一瞬思いましたが、
array.index(条件)
の (条件) ってどう指定したらいいんでしょう?

>>464
脱帽です。勉強になりました。

466デフォルトの名無しさん:2005/06/22(水) 01:09:03
これからrubyを始めたいのですが、ruby ver1,8,3のインストーラー付き
を配布しているサイトはどこでしょうか?
osはXP home です。お手数かけますがよろしくお願いいたします。
467デフォルトの名無しさん:2005/06/22(水) 01:31:31
公式サイトくらい見てほすぃ…
468デフォルトの名無しさん:2005/06/22(水) 01:34:08
つかそもそも1.8.3はプレビュー版しか出ていないんでは?
ないだろう、1.8.3のインストーラなんて。
469デフォルトの名無しさん:2005/06/22(水) 02:37:27
ごめんなさい。
1,8,2でした。。。
470 ◆m7YeytgDFE :2005/06/22(水) 06:15:54
>>466 >>469
バージョン番号の区切りはカンマじゃなくてピリオドにしないと。
というのはさておき、Rubyはいいですよぉ。がんばって。
471デフォルトの名無しさん:2005/06/22(水) 08:47:30
One-clickの1.8.3preview1版って出てなかったっけ、まだ。
472ブチ初心者:2005/06/22(水) 09:31:21
テ、テ、テテンポラリファイルって、なにずら?
473デフォルトの名無しさん:2005/06/22(水) 13:48:25
>>472
どういう文脈で出てきたの?
474デフォルトの名無しさん:2005/06/23(木) 00:32:50
Fixnum.new(8)
ってできないんですね。newメソッドがないとサブクラス
作れないんですけど、こうなっているのは
Fixnum(というかNumeric)のサブクラスを作る必要性
がないからってことなんでしょうか?
475デフォルトの名無しさん:2005/06/23(木) 01:03:10
即値として実装されているFixnum,TrueClass,FalseClass,NilClass,Symbolの
サブクラスは作れないが、Numericのサブクラスは作れる。
lib/{complex,matrix,rational}.rbあたりが実例。
476デフォルトの名無しさん:2005/06/23(木) 01:26:21
>457
awkみたいな処理ってこうやって出来るんだ・・・
知らんかった。awkのスクリプト書き直して勉強してみるか・・・
477 ◆m7YeytgDFE :2005/06/23(木) 07:12:19
>>476
オプションを使えばループや表示を省略できるので、
ワンライナーには便利ですね。
もっとも、凝り始めると目的を忘れて熱中しちゃいますが...。
478デフォルトの名無しさん:2005/06/23(木) 16:37:26
>>475
なんとなくわかったよ。さんくす。
それとこっちの記事が参考になった。
http://www.notwork.org/~gotoken/mag/cmagazine/gokudo/3rd/
479デフォルトの名無しさん:2005/06/23(木) 20:13:12
環境 ActiveScriptRuby
スクリプトが作動するカレントディレクトリより下位のフォルダ
の外部コマンドをディレクトリを移動せずにオプション付きで実行し、
パイプを生成したいのですが、どう書けばよいですか?

スクリプトが動作するフォルダはfoo、外部コマンドはfoo\bar\baz\bin.exe
読み込みファイルはfoo\bar\baz\abc.conf

path = "foo\\bar\\baz\\"
out_p = IO.popen("#{path}bin.exe -option #{path}abc.conf", 'r+')

こんな感じでやってみたんですが、実行できませんでした。
480デフォルトの名無しさん:2005/06/24(金) 00:11:40
コマンドプロンプトから実行したらなんかエラーが出てたりしない?
481デフォルトの名無しさん:2005/06/24(金) 16:04:21
オプションで入力レコードセパレータを指定する【-0数字】なんですが
どの文字がどの数字に対応しているか知りたいです。
コマンドラインで簡単にわかる方法ありませんか?
482デフォルトの名無しさん:2005/06/24(金) 16:36:42
>>481
man ascii とか?
483デフォルトの名無しさん:2005/06/24(金) 16:50:19
>482 知らなかった〜。ありがとうございました!
484デフォルトの名無しさん:2005/06/24(金) 16:52:48
低レベル演算(アセンブラレベルみたいな計算)ってRubyで出来る?
普通に計算すると
 1 - 5 = -4
ってなっちゃうけど
 1 - 5 = 251
みたいに計算したい
485デフォルトの名無しさん:2005/06/24(金) 17:23:04
>>484
1 - 5 = 252 じゃないの? (1 - 5) % 256 で。
486デフォルトの名無しさん:2005/06/24(金) 18:34:23
1の補数?
487デフォルトの名無しさん:2005/06/24(金) 18:36:00
一言でいうとできない
488484:2005/06/24(金) 18:36:16
>>485
スマソ。思いっきりボケていました…orz
>(1 - 5) % 256
で出来ました
489479:2005/06/24(金) 22:49:28
>>480

スクリプトは下記の方法でバッチファイルにしています
http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=Win32%B4%C4%B6%AD%A4%C7ruby%A4%F2%C6%B0%A4%AB%A4%B9

実行時のエラーはこんな感じです
sample.bat:23:in `popen': No such file or directory - \foo\bar\baz\bin.exe -option \foo\bar\baz\abc.conf (Errno::ENOENT) from sample.bat:23
490デフォルトの名無しさん:2005/06/24(金) 23:01:41
実行をn秒停止させるみたいなことを実現させるのに簡単な方法はありますか?
491デフォルトの名無しさん:2005/06/24(金) 23:04:01
sleep
492490:2005/06/24(金) 23:20:15
sleepだったのか…
waitで探していた…orz
493デフォルトの名無しさん:2005/06/24(金) 23:44:02
>>489
そのエラーメッセージには、479のコードにはない先頭の\があるように見えるのは気のせいか?
写し間違い?
でないなら、パスが通ってないとか、コマンド名を指定した文字列のミスとかじゃないの。
494479:2005/06/25(土) 00:09:35
>>493
>>479
path = "\\foo\\bar\\baz\\"
の間違いでした

495デフォルトの名無しさん:2005/06/25(土) 00:22:41
>>479
それ全然相対パスじゃないし・・・
ドライブレターがないという意味では相対なのかもしれないが
496デフォルトの名無しさん:2005/06/25(土) 01:08:13
うーん…

irbsh[00:56](main):029:0> p RUBY_PLATFORM
"i386-mingw32"
irbsh[00:56](main):030:0> p RUBY_VERSION
"1.8.3"
irbsh[00:56](main):027:0> IO.popen("\\windows\\system32\\route"){|io|puts io.read}

Manipulates network routing tables.

ROUTE [-f] [-p] [command [destination]
……以下略。……
irbsh[00:58](main):034:0> IO.popen("\\dummypath\\command -opt \\foo\\bar"){|io|puts io.read}
Errno::ENOENT: No such file or directory - \dummypath\command -opt \foo\bar
from (irbsh):34:in `popen'
from (irbsh):34
from :0
irbsh[01:02](main):038:0> IO.popen("c:/windows/system32/route print"){|io|puts io.read}
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface

ということで、コマンドが見つからないせいではないか。
ちゅかバッチファイルにするのはとりあえずやめて、問題を切り分けようよ。
popenしてdirだけするテストとかさ。
そもそも`\foo\bar\baz\bin.exe -option \foo\bar\baz\abc.conf'は動くの?
497479:2005/06/25(土) 12:21:17
間違えた>>479
path = "\\bar\\baz\\"
out_p = IO.popen("#{path}bin.exe -option #{path}abc.conf", 'r+')
こうでした
498デフォルトの名無しさん:2005/06/25(土) 16:50:52
path = "bar\\baz\\" にするだけで動くんじゃないの?
499デフォルトの名無しさん:2005/06/25(土) 18:22:53
初回の質問から内容を間違っていたのでもう一度最初から

環境 ActiveScriptRuby
スクリプトが作動するカレントディレクトリより下位のフォルダ
の外部コマンドを、ディレクトリを移動せずにオプション付きで実行し、
パイプを生成したいのですが、どう書けばよいですか?

スクリプトが動作するフォルダはfoo、外部コマンドはfoo\bar\baz\bin.exe
読み込みファイルはfoo\bar\baz\abc.conf

sample1.rb
---------------------------------------------------------------
path = "bar\\baz\\"
out_p = IO.popen("#{path}bin.exe -option #{path}abc.conf", 'r+')
----------------------------------------------------------------
ruby sample1.rb
sample1.rb:7:in `popen': No such file or directory - bar\baz\bin.exe -option
bar\baz\abc.conf (Errno::ENOENT) from sample1.rb:7

写し間違いがおおくてすいません(これで完璧なはずorz)
500デフォルトの名無しさん:2005/06/25(土) 18:33:03
これ実行するとどうなる?

path = "bar\\baz\\"
p Dir.pwd
p Dir.glob("#{path}bin.exe")
501デフォルトの名無しさん:2005/06/25(土) 18:39:02
あ、わかった。
さては、スクリプトをカレントディレクトリ以外に置いて実行してるな?
で、path はスクリプトからの相対ディレクトリなんだろう?

だとしたら、これでどうだ?

path = File.expand_path("bar/baz", File.dirname(__FILE__))
out_p = IO.popen("#{path}/bin.exe -option #{path}/abc.conf", 'r+')
502499:2005/06/25(土) 21:07:44
>>500
ruby sample1.rb
"C:/Documents and Settings/ユーザー名/foo"
[]
です

>>501
この方法で動作しているようです。読み込みファイルが読み込みできない
ようですが、パスにスペースが入っているからだと思います。
503デフォルトの名無しさん:2005/06/25(土) 21:49:18
>>502
スペースか。そりゃ君が悪いよ。

path = "bar\\baz\\"
out_p = IO.popen(%Q("#{path}bin.exe" -option "#{path}abc.conf"), 'r+')
504デフォルトの名無しさん:2005/06/26(日) 01:27:26
IO::popen([cmd, arg1, arg2, arg3], "r+") とかできたらいいのにね。
505デフォルトの名無しさん:2005/06/26(日) 02:09:03
1.9ならできるけど。
506デフォルトの名無しさん:2005/06/27(月) 16:52:12
掲示板をつくってるんですが、ruby には、PHPのstrip_tags みたいなのって
あるんでしょうか。
ないとしたら、正規表現で<....>みたいなのを除去するってことで、ひとまず
セキュリティ的にOKなんでしょうか。
初心者で申し訳ないのですが、アドバイスをお願いします。
507デフォルトの名無しさん:2005/06/27(月) 21:13:07
ここって教えてくん丸出しな質問とかにもまじめに答えて上げた方が良いの?
508デフォルトの名無しさん:2005/06/27(月) 22:42:26
答えたかったら答えりゃいいし、答えたくなかったら放っておけばいい。
好きにしてくれ。
509 ◆m7YeytgDFE :2005/06/27(月) 22:46:16
>>506
strip_tagsに相当する機能が標準添付のライブラリには無いような。
htmlsplitというライブラリがRAAにありますが、これは該当しないかな?
"<〜>"を単純に除去する程度で良ければ、
String#gsubなどで実装してしまっても良いのではないでしょうか。
あとはCGI::escapeHTMLで記号類を変換しちゃうとか。
510デフォルトの名無しさん:2005/06/27(月) 23:58:54
Rubyにおいて何でもかんでもObjectであることはわかった。
一部を除いて演算子もメソッドであることはわかった。

が、Arrayクラスのhoge[10]とかの
"["と "]"はメソッドなのかがわからない。
メソッドならオーバロードできると思うけど、、
もしかして、Arrayの[]記法は非メソッドですか?
Hushも同様にわからない。
511デフォルトの名無しさん:2005/06/28(火) 00:04:36
>510
リファレンスマニュアルに書いてあるけど
Array#[]もHash#[]もメソッドでつ。

以下、しょーもないサンプル

class Hoge
def [](val)
"#{val} from Hoge"
end
end

hoge = Hoge.new
puts hoge['aaa']
512デフォルトの名無しさん:2005/06/28(火) 00:30:58
ウサギ本見てみると "演算子メソッド" と説明されてた。(18.7.2)
513510:2005/06/28(火) 00:43:35
>511
thxxxx!
たしかにリファレンスにメソッドであると明記してありますね。

ただ、オーバロードの仕方が書いてないし、
メソッド定義の記法が独特ですね。覚えにくいし想像しにくい。。

記号で始まるメソッド( + とか - とか ) のメソッド呼び出しは
. を省略できるというルールがあるから、
def +(val)
っていうメソッド定義は納得かつ覚えやすかったけど。。

配列だから[]でアクセスできるのは当然だと思うし、
オーバロードもできちゃうし(あんまり使わないかもしれないけど)、
仕様的には申し分ないです。ってか、rubyおもしろいな。

>512 演算子メソッドって何だよん。。
514デフォルトの名無しさん:2005/06/28(火) 01:43:57
C++知ってるとoperatorうんたらのoperator書かなくてもいいってことか、と、とりあえず納得できる
(とゆーか漏れはそう納得した)んだが
Rubyの演算子メソッドってどこに起源があるんだろう? C++と共通のスーパー言語(って何だw)かな?
515デフォルトの名無しさん:2005/06/28(火) 12:31:30
Smalltalk だともうちょっとメソッドっぽいというか演算子っぽくなくて、
1 + 2 * 3 が 9 になっちゃう (優先順位とか無い) よね。
516デフォルトの名無しさん:2005/06/28(火) 23:14:53
ちょっと特殊なのは単項の+と-かな。
def +@
みたいに書く。
517デフォルトの名無しさん:2005/06/30(木) 02:01:55
$ irb
irb(main):001:0> a=b="a"
=> "a"
irb(main):002:0> b << "b"
=> "ab"
irb(main):003:0> p a
"ab"
=> nil

こういうのってリファレンスマニュアルのどこに説明があるの?
518デフォルトの名無しさん:2005/06/30(木) 03:06:24
何が解らないんだ? irb?

a=b="a" みたいに、連続した表記はちょっと見たかんじでは見当たらないが、
特別に説明するものでも無い気がするし……
<< は、String のところにベタに載ってるし、p は組み込み関数の所に載ってる。
ttp://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%B4%D8%BF%F4;em=p%28%29

というか、初心者なら適当な本を買った方が良いよ。
学習には、リファレンスマニュアルと学習本では、やっぱり学習に分がある。
519デフォルトの名無しさん:2005/06/30(木) 03:23:25
そもそも、リファレンスマニュアルを補完するツールが irb 。し
520デフォルトの名無しさん:2005/06/30(木) 05:12:23
>>517
$ irb
irb(main):001:0> a=b="a"
=> "a"
irb(main):002:0> b = "b"
=> "b"
irb(main):003:0> p a
"a"
=> nil

との違い。a=b="a"かa << "b"かどちらが作用してるのかがわからなかったから

521デフォルトの名無しさん:2005/06/30(木) 05:13:00
間違えた
>>518
522デフォルトの名無しさん:2005/06/30(木) 06:56:04
>>517 で伝わると思ってたのかw
523デフォルトの名無しさん:2005/06/30(木) 08:59:44
>>517=520
リファレンスマニュアルをよく読めと言いたいところだが、確かにズバリ明記
されているわけではないな。 Ruby の本を読むと大概説明してあるんだが……。

b << "b" は b が参照するオブジェクトを破壊的に変更する。 a = b だから
a と b は参照先のオブジェクトが同じ。ゆえに a も変更される。

b += "b" にしてみたり、 object_id メソッドを使って調べてみたりするといい。
524デフォルトの名無しさん:2005/06/30(木) 09:59:27
>>523
その話を進めると例の「変数とは○○だ」「変数とは○○のようなもの」の話で香ばしくなるのでそれ以上はやめとけ。
というか既に全く同じ話がruby-listにある。スレッドの大本はARGVのfrozenの話だけど。
ttp://www.ruby-talk.org/cgi-bin/scat.rb/ruby/ruby-list/38183
正確にはこっから下。
ttp://www.ruby-talk.org/cgi-bin/scat.rb/ruby/ruby-list/38187

525デフォルトの名無しさん:2005/06/30(木) 17:18:11
HTTPのGETをするときにRefererを送るにはどうしたら良い?
リファレンスのnet/httpの項見てもそれらしい記述無いし…
open-uriで出来るみたいだけどこれだと何故か途中で転送が切れる…orz

 require 'open-uri'
 arc = ''; open('http://hoge.net/foo.dat', 'rb', "Referer" => 'http://hoge.net/'){|f|arc = f.read}
 p arc.size
 # => 2363

foo.datのサイズは6MByteくらいあるんだが…
526デフォルトの名無しさん:2005/06/30(木) 17:45:10
>>525
手元ではそのopen-uriのでできたよ。
サイズも合ってたしApacheにログも残った。
527525:2005/06/30(木) 18:45:36
え〜っ!?

require 'open-uri'
require 'net/http'

Net::HTTP.start('pc.watch.impress.co.jp', 80) {|http|
 p http.get('/docs/2005/0630/pana.jpg').body.size
}

arc = ''; open('http://pc.watch.impress.co.jp/docs/2005/0630/pana.jpg', 'rb'){|f|arc = f.read}
p arc.size
# => 32782
   53

どうなっているんだ…il||li ○| ̄|_
528526:2005/06/30(木) 18:53:24
>>527
ruby 1.8.2 (2004-12-25) [i686-linux]
32782
32782
529525:2005/06/30(木) 19:08:18
あぁぁぁ… 。・゚・(ノД`)・゚・。
ruby 1.8.1 (2003-12-25) [i386-mswin32]
使っていたのが原因ですた
ruby 1.8.2 (2004-12-25) [i386-mingw32]
にしたら正常に動くようになりますた…orz
530526:2005/06/30(木) 19:14:29
ついでにnet/httpを使う場合
リファレンスにあるようにヘッダーはハッシュで渡せる。

http.get(path,{'REFERER'=>'http://localhost/'})
531デフォルトの名無しさん:2005/06/30(木) 21:23:00
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=net%2Fhttp.rb#a.a5.ea.a5.c0.a5.a4.a5.ec.a5.af.a5.c8.a4.cb.c2.d0.b1.fe.a4.b9.a4.eb
で使われているget_responseって何ですか?
Net::HTTPのメソッドのようだけど検索しても出てこなくて詳細不明…
532デフォルトの名無しさん:2005/07/01(金) 07:46:02
>>531
URLをGETしてレスポンスにして返してくれるクラスメソッド
533デフォルトの名無しさん:2005/07/01(金) 10:04:46
正規表現で\x00みたいな文字コードもサーチさせるにはどうしたら良い?
/hoge\x00/
とか書いても引っ掛からない
534 ◆m7YeytgDFE :2005/07/01(金) 10:22:39
>>533
後述の環境で試してみたら下記のような結果になりました。
こういうことではないのかな?

irb(main):002:0> /hoge\x00/ =~ "This is hoge\x00 for test"
=> 8

ruby 1.8.2 (2005-04-11) [i386-linux]
irb 0.9(02/07/03)
535533:2005/07/01(金) 13:24:48
あれ?
やってみたら確かに引っ掛かる…何か寝ぼけていたのか…orz
トンクス
536デフォルトの名無しさん:2005/07/01(金) 22:53:00
ファイルをテキストモードで開いてたからうまく読み込めてなかった
とかいうオチはあるっけ?
537デフォルトの名無しさん:2005/07/02(土) 10:58:53
unixenとmsvcrtではそういう違いはないはず。bccwinとdjgppは今わからん。
あとはVMSくらいだが、これはとんでもなく違うんで、その程度の違いじゃ驚かんな。
538デフォルトの名無しさん:2005/07/02(土) 13:33:00
ttp://www.ecs.shimane-u.ac.jp/~nawate/lecture/gairon04r/11-5/rtask11-5.html
ここの問題を練習がてらやっていたのですが、下コードしか思い浮かびません。
もっとスマートなやり方を教えて頂けませんか?

s = Array(10..99)
t = Array(100..999)
print("1st: ", rand(10), ", 2nd: ", s[rand(s.size)], ", 3rd: ", t[rand(t.size)])

低レベルな質問で申し訳ないです…
539デフォルトの名無しさん:2005/07/02(土) 14:01:39
>>538
ベタにはこうか。

print("1st: ", rand(10), ", 2nd: ", 10+rand(90), ", 3rd: ", 100+rand(900), "\n")

あと、個人的にだけど、配列の初期化は(10..99).to_aのほうが直感的な気がする。
540デフォルトの名無しさん:2005/07/02(土) 14:19:31
ruby-mode.elで、%q|hoge#fuga|みたいなのがあると、
method(%q|hoge#fuga|)とかで対応する括弧の移動とか、
M-;のcomment-dwimがうまく働かないっす。
%q||でなく//でも同じ。
541デフォルトの名無しさん:2005/07/02(土) 14:29:55
>>539
なんでこれが思い浮かばなかったんだろうか…
ありがとうございました!
542デフォルトの名無しさん:2005/07/02(土) 20:58:35
cygwin の Ruby を使っています(ruby 1.8.2 (2004-12-25) [i386-cygwin])。
それで、Digest::MD5 クラスを使おうとしているのですが、
require 'digest/md5' とすると、

/usr/lib/ruby/1.8/i386-cygwin/digest/md5.so: dlopen,
Win32 error 126 - /usr/lib/ruby/1.8/i386-cygwin/digest/md5.so (LoadError)
from zzz.rb:2

というエラーが出てしまいます。一方、require 'digest/sha2'だとエラーは出ません。
これは自分の環境だけなのでしょうか…。
543デフォルトの名無しさん:2005/07/03(日) 02:24:08
md5.soはちゃんとそこにあるの?
544デフォルトの名無しさん:2005/07/03(日) 02:31:27
思い出は、いつもそこにあります、けど?
545デフォルトの名無しさん:2005/07/03(日) 09:21:57
古いアルバムの中に隠れてた
546デフォルトの名無しさん:2005/07/03(日) 12:52:39
>>543
はい、あります。どうやら実体は
(cygwinインストールディレクトリ)\lib\ruby\1.8\i386-cygwin\digest
にあるようなのですが(なぜ usr がパスに入っていないのかは謎です。
ls では /usr/lib/ruby/1.8/i386-cygwin/digest でリストできるので
そこであることは間違いないと思います)、そこにある md5.so を消すと、

zzz.rb:1:in `require': No such file to load -- digest/md5 (LoadError)

というものにエラーメッセージが変化します。ですから、ファイルが
ないという問題ではないようです。

ls -l でリストしてみても、
-rwxr-x---+ 1 xxxxx Users 6656 Jan 19 06:21 md5.so*
-rwxr-x---+ 1 xxxxx Users 15360 Jan 19 06:21 sha2.so*
とアクセス権は同じなので、その問題でもないようなのですが…。

cygwin が何かおかしいんでしょうかね…。何回か再インストール
してみたんですけど…もう一回やり直してみようかな…
547546:2005/07/03(日) 12:57:28
>(cygwinインストールディレクトリ)\lib\ruby\1.8\i386-cygwin\digest
>にあるようなのですが(なぜ usr がパスに入っていないのかは謎です。

mount -f -s -b "(cygwinインストールディレクトリ)/lib" "/usr/lib"

でマウントされていました。
548デフォルトの名無しさん:2005/07/03(日) 22:16:37
>>542
> Win32 error 126 - /usr/lib/ruby/1.8/i386-cygwin/digest/md5.so (LoadError)

126はERROR_MOD_NOT_FOUNDだな。そのmd5.soが必要としてるdllが見付からないんでは?

objdump -p /usr/lib/ruby/1.8/i386-cygwin/digest/md5.so | grep 'DLL Name'

を試してみ。
549546:2005/07/04(月) 01:00:19
>>548
レスありがとうございます。
コマンドを実行してみたところ、

DLL Name: cygruby18.dll
DLL Name: cygcrypto-0.9.7.dll
DLL Name: cygwin1.dll
DLL Name: KERNEL32.dll
DLL Name: cygruby18.dll

と出ました。どうやら /bin ディレクトリが dll 検索パスに入っ
ていなかったのが原因のようです。…で、いったん Windows の環境変数 PATH に
値をセットしてエラーが出なくなるのを確認して、cygwin のサイトを見たら、
なんかデフォルトで PATH がそこに設定されるみたいなことが書いてあったので
Windows の設定から PATH の設定をなくして再度挑戦したら動きました…。

 なぜ何も設定しなくても動くようになったのかはわかりません。
もしかしてcygwin インストール後に Windows 再起動が必要だった
りするのかも…(再度挑戦するまでの間に別の件でWindowsの
再起動をしています。ちなみにOSはXPです)。

 直接的な原因はわからずじまいなのですが、動くようになって助かりました。
ありがとうございました。
550546:2005/07/04(月) 23:47:49
 気持ち悪いので、もう一回 Cygwin を再インストールしてみました。すると、

/usr/lib/ruby/1.8/i386-cygwin/digest/md5.so: No such file or directory - /usr/li
b/ruby/1.8/i386-cygwin/digest/md5.so (LoadError)
from zzz.rb:2

 というエラーになりました。調べてみると、
cygcrypto-0.9.7.dll(とKERNEL32.dll)がありませんでした。

 前回と今回でなぜエラーメッセージが変わったのか、前回にはな
ぜ cygcrypto-0.9.7.dll があったのか、それは謎ですが…、いろ
いろで調べていたところ、ruby とは別に openssl のインストール
が必要なことを知りました。そしてそれを入れてみたところ、見事
に動くようになりました。

 お騒がせしてすみませんでした。ありがとうございました。
551デフォルトの名無しさん:2005/07/05(火) 13:06:58
>>540
少なくとも今のEmacs添付のライブラリを使うかぎり、
そこまで対応するのは無理と思われ。
埋め込み式じゃない#は、quote以外ではエスケープすることを勧める。
552デフォルトの名無しさん:2005/07/06(水) 04:14:23
>>550
wINDOWSではなにかあったらとりあえず再起動がデフォです(W

553デフォルトの名無しさん:2005/07/06(水) 04:17:58
二つの文字列の先頭から連続する共通部分を抜き出すにはどうすればいいですか?

"This is a pen", "This is the pen"なら"This is "を返すようなの。
554デフォルトの名無しさん:2005/07/06(水) 07:12:17
一文字ずつ比較するしかないような気が。

str1 = "This is a pen"
str2 = "This is the pen"

i = 0
i += 1 while str1[i] && str1[i] == str2[i]

p str1[0,i] #=> "This is "
555デフォルトの名無しさん:2005/07/06(水) 11:43:51
556デフォルトの名無しさん:2005/07/06(水) 12:02:11
rubyのオーバーヘッドをどれだけ減らすかがポイントなのか
557デフォルトの名無しさん:2005/07/07(木) 01:15:26
>>556
rubyじゃ、頑張りすぎないことが大事なんだよ。
558デフォルトの名無しさん:2005/07/07(木) 01:20:04
Rubyでベタなループ書く奴は敗北者
559デフォルトの名無しさん:2005/07/07(木) 01:46:14
1. Rubyで不自然なコードを書く奴は敗北者
1.1 ベタなループを避けるために不自然なコードを書く奴は完全な敗北者
(例外) ネタとして楽しむのが目的な場合はこの限りでない
560デフォルトの名無しさん:2005/07/07(木) 01:51:59
Rubyでカリカリにチューンを楽しむ俺がいる
今時のマシンじゃC/C++の場合ちょっとやそっと非効率な
コード書いても体感できることも少なくなってきている品
561デフォルトの名無しさん:2005/07/07(木) 02:52:10
>>560
そのカリカリにチューンした例、見せてよ。是非!!
562デフォルトの名無しさん:2005/07/07(木) 16:05:08
でかい(数MByte以上)StringオブジェクトをIOオブジェクトに見立てる事って出来ますか?
IO.pipeだとでかい文字列突っ込むとハングる(?)様だし…
ファイルからの読み込みとメモリ上のデータの読み込みのI/Fを一本化したいです
FileオブジェクトをStringオブジェクトに見立てるでも問題ないです

新規にクラスを定義すれば出来るけどもっと簡単な方法がないかなと…
563デフォルトの名無しさん:2005/07/07(木) 16:27:38
564562:2005/07/07(木) 16:31:23
>>563
ぐは…書き忘れスマソ
機能的にはまさに求める物ですが外部拡張は出来れば避けたいです…
565デフォルトの名無しさん:2005/07/07(木) 17:10:01
staticにリンクすればいいじゃない
566デフォルトの名無しさん:2005/07/07(木) 17:33:25
「外部拡張」って何?
567デフォルトの名無しさん:2005/07/07(木) 18:35:10
>>564
避けたい理由を書かないと叩かれて終わりなわけだが。
あとStringIOは標準添付の拡張ライブラリなので普通は使えるはず。
568デフォルトの名無しさん:2005/07/07(木) 20:57:07
RGSSか?
569デフォルトの名無しさん:2005/07/07(木) 22:36:02
標準ライブラリ以外は全部糞
570デフォルトの名無しさん:2005/07/07(木) 22:53:23
「標準ライブラリ」って何?
571デフォルトの名無しさん:2005/07/08(金) 15:45:45
>>570
最初から付いてくるライブラリ。require して使えるもの全部。require しなくても使えるのは組み込み。
572デフォルトの名無しさん:2005/07/08(金) 16:27:25
また俺定義か
573デフォルトの名無しさん:2005/07/08(金) 17:44:46
「俺定義」って何?
574デフォルトの名無しさん:2005/07/08(金) 18:22:59
575デフォルトの名無しさん:2005/07/08(金) 23:41:06
前もこういう流れがあったなぁ。
576デフォルトの名無しさん:2005/07/09(土) 00:16:22
>>571
> >>570
> 最初から付いてくるライブラリ。
今は「標準添付ライブラリ」と呼ぶのが主流じゃないかな。
577デフォルトの名無しさん:2005/07/09(土) 00:33:49
「俺的標準添付ライブラリ」これで良いだろ
578デフォルトの名無しさん:2005/07/09(土) 01:26:15
んで話をもどすけど >564 にとって StringIO がダメな理由は拡張ライブラリだからなの?

物凄い富豪的な解決法なので実際の運用状況と応相談だが、Fileオブジェクトを read しちゃって String にするという荒技はあるかもしらん。
579デフォルトの名無しさん:2005/07/09(土) 01:56:00
標準ライブラリの基準はそれなりに使えてメンテナが信用できるかどうか。
580デフォルトの名無しさん:2005/07/09(土) 13:35:54
>>578
> 物凄い富豪的な解決法なので実際の運用状況と応相談だが、Fileオブジェクトを read しちゃって String にするという荒技はあるかもしらん。
逆だろ、したいことは。

> IO.pipeだとでかい文字列突っ込むとハングる(?)様だし…
>>562はdeadlockという言葉について小一時間調べてこい。
581デフォルトの名無しさん:2005/07/09(土) 17:44:57
難しい話の最中にすみません。教えてください。
a = 'ああああ12いいいいい345ううう12ええええ3おお'
という全角文字列から全角数字が2つ以上現れる箇所のスタート位置を示す
配列を得たいのです。
このケースでは、[4,11,17] です。文字コードはSJISです。
a.scan(/[0-9]{2,}/)までは判ったのですが、あとが続きません。
教えてください。
582 ◆m7YeytgDFE :2005/07/09(土) 18:27:19
>>581
こんなのはいかがですか?結果はバイト単位になりますけど。

a = 'ああああ12いいいいい345ううう12ええええ3おお'
positions = Array.new
a.scan( /[0-9]{2,}/ ) { positions << Regexp.last_match.begin( 0 ) }
p positions # => [8, 22, 34]
583581:2005/07/09(土) 19:21:36
(1)582さん、ありがとうございます。なるほど、こりゃあいいです。
last_matchですか。勉強になります。
begin(0)はカッコがなくても、マッチの先頭のオフセットを返すんですね。
スタート位置付きのindexを使ってaから直接取ってくるのもあるかと
思ったんですが、なるほどですね。

(2)もひとつ教えてほしいのですが、
a.scan(/./s) do |item|
string_array.push item
end
みたいにして全角文字を含む配列を使おうとしています。
これに対応して、stringクラスで、全角文字を1と数えるような
indexはあるんでしょうか。byte単位で判定するから、そもそも無理ですか。
なにせ日本生まれのrubyですから、ひょっとしてそういうサービスもあるかと
思いまして。
584デフォルトの名無しさん:2005/07/09(土) 21:51:23
RubyGemsってどういうものなのかが分からない……
どこか日本語で、RubyGemsについて解説してくれているサイトとかないだろうか?

>>583
具体的に何がやりたいのかがよく分からないので、何とも言えないが
とりあえずリファレンスでjcode.rb(添付ライブラリ)を調べてみると幸せになれるかも
585581:2005/07/09(土) 23:35:31
jcode.rb の紹介ありがとうございます。
(日本語のtrなんかは使ったことありました。)
a.jindex('あ') と言う感じなものはなかったようです。
586デフォルトの名無しさん:2005/07/09(土) 23:59:18
るびまになかったか?<RubyGemsの紹介
587584:2005/07/10(日) 00:55:22
>>586
連載記事はあったけれど、開発の経緯しか書かないらしく
初心者向けの解説記事が掲載される気配はありませんでしたorz
588 ◆m7YeytgDFE :2005/07/10(日) 10:07:08
>>
jcode.rbを使うならこんな感じ?
 a[ 0, a.index( 'あいう' ) ].jsize

jcode.rbを使わない方法も即席で考えてみました。
 a[ 0, a.index( 'あいう' ) ].scan( /./s ).size
589 ◆m7YeytgDFE :2005/07/10(日) 10:08:06
>>588
ありゃ?アンカーを忘れた。>>583です。
590デフォルトの名無しさん:2005/07/10(日) 18:16:48
>>587
ようやインストール方法を知りたいということ?
それともgemの中身の説明とかがほしい?
具体的に何を知りたいのか書いてもらえますか。
591587:2005/07/10(日) 20:29:58
>>590
自分でパッケージを作るにはどうすればいいのか、が知りたいです。
592581:2005/07/10(日) 20:45:49
588さん 色々とありがとうございます。勉強になりました。
不明な点がありましたら、また質問させてもらいます。
その節はよろしくお願いします。

gemって自動取り込み装置ですか?
わたしはwindows上でrubyを利用してますが、時々install.rbがうまくいかな
いことがあり、何でも自動でするのも良し悪しだなあと思うことがあります。
何をしているか要点だけ書いたメモが付いていて、代替的な方法があれば、
手でやっても良いなあ、と思うことがあります。
gem とかRailsとかが流行っているみたいですけど、自分の感覚を超えた自動
化って何か落ち着かない感じがあるんじゃないかと思います。出来上がりは
確かに時間はかからないようですけど、その仕掛けを納得するのが難しく、時
間がかかりそうに思います。
すみません、初心者の分際で。
593デフォルトの名無しさん:2005/07/11(月) 02:02:22
WINDOWS上で、RUBYを使用しシリアル通信を行いたいのですが、
どうすればよいでしょうか?
ググッてみたのですが、分かりませんでした。
594デフォルトの名無しさん:2005/07/11(月) 07:43:50
>>593
じゃ、ヤフってみたらどうでしょうか?
595デフォルトの名無しさん:2005/07/11(月) 09:04:02
>>593
http://raa.ruby-lang.org/

RAAも関連リンクに入れといてくれ。>次スレ立てるやつ
596デフォルトの名無しさん:2005/07/11(月) 16:21:53
拡張子が.soとか.dllじゃないライブラリをロードしたいんだけどrequireではダメっぽいので
loadで実験しているんだけどエラーになる

test.rb
 p $:
 load "nkf.so"
#普通のライブラリがロードできないと話にならないのでnkf.soで実験

#=>
[〜, "."]
test.rb:2:in `load': ./nkf.so:1: Invalid char `\220' in expression (SyntaxError)
    from test.rb:2

>dir

2005/07/03 19:18  729,088 msvcrt-ruby18.dll
2005/07/03 19:19  119,808 nkf.so
2005/07/03 19:20  395,154 ruby.exe


>ruby -v
ruby 1.8.2 (2004-12-25) [i386-mingw32]

何で…?
597デフォルトの名無しさん:2005/07/11(月) 17:41:58
>>592
至極もっともな意見だと思う
しかしそれでも、雑多なライブラリをインストールする場合、その手間を省きたい場合はあるわけで。

「代替的な方法」を提示した上で、rubygemsやinstall.rbみたいな自動化にも対応してくれるのがベストかな

>>596
ほんとだ、require "nkf.so"なら正常に出来るのに……
598デフォルトの名無しさん:2005/07/11(月) 17:44:27
load は ruby スクリプトを読み込むので、拡張ライブラリの読み込みは無理。
そのエラーは、拡張ライブラリを無理矢理 ruby スクリプトと解釈しようとしてエラーになっているんだろう。
普通に require 'nkf.so' ってやればできるはずだけど?
599597:2005/07/11(月) 18:02:22
なるほど、そういうことか!
596ではないが、疑問が氷解した。ありがとう

あと、今気づいたんだが>>596でrequireではダメっぽいって言ってるのは
もしかして拡張子を指定していないからでは?
requireで補完してくれる拡張子は、.rb/.dll/.soだけだったはず
600596:2005/07/11(月) 19:04:54
>>598
そうなのか…
ということは拡張子が.rb/.dll/.so以外の物を読み込むことは不可能か…?

>copy /y nkf.so nkf.foo
>ruby
require "nkf.foo"
^Z
-:1:in `require': No such file to load -- nkf.foo (LoadError)
    from -:1
601デフォルトの名無しさん:2005/07/11(月) 19:11:10
今はもう.dllは探さないし、読み込むのもそれだけ。
602デフォルトの名無しさん:2005/07/11(月) 21:13:32
いまは もう さがさない そのディーエルーエルー
603593:2005/07/11(月) 22:30:37
>>595
ありがとうございます。これから試してみます。
604デフォルトの名無しさん:2005/07/11(月) 23:41:08
>>600
何がしたいんだ?

> ということは拡張子が.rb/.dll/.so以外の物を読み込むことは不可能か…?
単にできるかどうか知りたいということだけなら、不可能でFA。

他にやりたいことがあって袋小路に入ってるんなら、本来の目的を書けばもう
ちょっと別の答えがあるかもしれない。
605596:2005/07/12(火) 05:06:50
>>604
mingw/mswinのRubyの拡張の実体はDLLということなのでRubyのライブラリ以外の機能も一緒に実装したい
が、ライブラリ以外の機能を利用するアプリが特定の拡張子(.rb/.dll/soどれもNG)じゃないと認識してくれない

それぞれを分ければいい話なのだがファイルの数を出来るだけ増やしたくなかったので一緒に出来ないかと考えた
う〜ん…無理ならあきらめるべきか…どうしても必修な機能ってわけでもないしなぁ…
606デフォルトの名無しさん:2005/07/12(火) 09:17:37
NTFS必須にしてハードリンク。
607デフォルトの名無しさん:2005/07/13(水) 01:07:24
>>605
> が、ライブラリ以外の機能を利用するアプリが特定の拡張子(.rb/.dll/soどれもNG)じゃないと認識してくれない
rubyとそのアプリとどっちがメインになるわけ?

ruby本体まるごとプラグインにするということはできないではない。
Beckrb: http://www.tietew.net/becky/beckrb/
608デフォルトの名無しさん:2005/07/13(水) 01:11:53
というか>>596の話は初心者質問スレ向けとは思えないんで、
本スレに移動したほうがよくはないか?
どうせ答えるやつは同じなんだし。
609596:2005/07/13(水) 02:03:58
>>607
まさにそのような感じのことをやっています
それで、Rubyスクリプトのデバッグ用の関数、クラスもプラグインに統合できないかなと
どうしても必要なわけではないので簡単に行かないようならあきらめます
610デフォルトの名無しさん:2005/07/13(水) 02:38:34
>>609
> まさにそのような感じのことをやっています
> それで、Rubyスクリプトのデバッグ用の関数、クラスもプラグインに統合できないかなと
だとしたら>>607のような構成にしない限り↓は不可能だと思うんだが。

> どうしても必要なわけではないので簡単に行かないようならあきらめます

なんか考えてることがずれてる?
611デフォルトの名無しさん:2005/07/13(水) 22:13:41
>>591
gemを作成する手順は以下のページに説明がある。

RubyGems User Guide | RubyGems Manuals
http://docs.rubygems.org/read/chapter/5

* gemspecファイル(foo.gemspec)を作る。
* gem build foo.gemspecを実行する。

gemspecファイルの内容については以下のページに説明がある。

RubyGems GemSpec Reference | RubyGems Manuals
http://docs.rubygems.org/read/chapter/20

RakeやRailsなど、rubygemsでインストールできるパッケージに含まれる
Rakefileなどを読んだりすれば、何とかなりそうな気がする。
と、自分で試してもいないのに書いてみるテスト。
612591:2005/07/14(木) 20:24:06
>>611
おかげでgems理解の糸口がつかめた、ありがとう!
いつかちゃんと理解できたら、解説記事でも書いてみたい
613デフォルトの名無しさん:2005/07/16(土) 01:46:11
symbolって、何に使うと有効なんでしょうか?
614デフォルトの名無しさん:2005/07/16(土) 04:04:25
有効かどうかは価値観による
615デフォルトの名無しさん:2005/07/16(土) 04:44:59
613じゃないけど、使用例見たいっす。
616デフォルトの名無しさん:2005/07/16(土) 05:14:21
symbolは文字列より軽いらしいので
文字列の代わりに使えるならどんどん使っていくべきだと思われる
(参考:ttp://i.loveruby.net/w/OptimizingRubyProgram.html

俺はいつもハッシュのキーとして使ってるよ↓

DIR_PATHS[:data]
DIR_PATHS[:log]
617デフォルトの名無しさん:2005/07/16(土) 10:33:24
Cでexitのようなプログラムを終了させる関数はあるのでしょうか?
618617:2005/07/16(土) 10:42:12
まんまexitでした
619デフォルトの名無しさん:2005/07/16(土) 20:19:01
REXML について質問です。

e = REXML::Element.new( "new_element" )
e.text = "<<"

とすると

e.to_s # => "<<"

となってしまうのはバグですか。それとも仕様ですか。
& は自動的にエスケープしてくれるもんだと思っていましたが。
620デフォルトの名無しさん:2005/07/16(土) 20:20:51
む。

e.text = "&lt;<"

とすると

e.to_s # => "<new_element>&lt;&lt;<new_element>"

の間違いです。すみません
621デフォルトの名無しさん:2005/07/16(土) 21:38:57
622デフォルトの名無しさん:2005/07/16(土) 21:46:49
>>621
new メソッドの引数 raw であいまいさを回避することはできました。
それでも 620 で書いた現象は腑に落ちませんが…。
どうもありがとうございました。
623デフォルトの名無しさん:2005/07/20(水) 14:32:44
rtagsってもうないの? irb-toolsもRAAからなくなってるし。
624でふぉるとぺーぺー:2005/07/20(水) 22:59:05
IPを文字位置から指定して、指定した文字数を表示させたいんですが、その手法が見つかりません。
だから配列を使って、以下のようにやってみました。"."で区切るってことをやりたいのですが、

Str = ("123.456.789")#IPと思って
array = Str(/"."/)
でarrayの[2]の中身を抽出したいんですけど(789の部分)、この書き方間違ってます?
789って文字を表示させたいんですよねー。
これで
print array[2]
ってやってもERRORでるし。
どうやったらいいのでしょう?
625デフォルトの名無しさん:2005/07/20(水) 23:02:57
>>624
array = str.split "."
でどう?
626& ◆1nX/btnIr6 :2005/07/20(水) 23:21:59
>>625
できましたー!!ありがとうございます!
d(゚Д゚)☆スペシャルサンクス☆( ゚Д゚)b

でもなんでダブルクォーテーションだけで良かったんですか?
仕様でしょうか?
627デフォルトの名無しさん:2005/07/20(水) 23:40:14
正規表現リテラルとか
628デフォルトの名無しさん:2005/07/20(水) 23:54:19
>>626
splitの第1引数(区切り)には文字列も指定できる。
詳しくは↓のsplitを参照
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=String
629デフォルトの名無しさん:2005/07/21(木) 00:15:56
>>628
(・∀・)ほう
わかりました。ありがとうございます。(TдT)
630デフォルトの名無しさん:2005/07/21(木) 01:54:30
ドウモ〜〜〜ッ!!お〜o(⌒0⌒)oは〜♪ハジメマシテ〜〜〜ッ☆☆(*⌒ヮ⌒*)
私は27歳のOLしてるのぉ〜〜〜っ♪(#⌒〇⌒#)キャハ
うーんとー、私メル友がすっごくすっごく欲しくってー、\(⌒∇⌒)/
探してたら(◎_◎)なんとっ!☆彡(ノ^^)ノ☆彡ヘ(^^ヘ)☆彡(ノ^^)ノ☆彡
素敵な掲示板♪を発見!!!!(^o^)//""" パチパチパチ
あやしい所とか…{{ (>_<;) }} ブルブルすごい数の掲示板がありますけど、
これ全部1人の方が管理しているんですか?(@@;)すごすぎ …
てなわけで、ついつい書いちゃったのらー(o^v^o) エヘヘφ(`∇´)φカキコカキコ♪
メル友に、なってくれるよねっ。(*^-^*) お・ね・が・い♪(* ̄・ ̄)ちゅ♪ッ
え?くれないのぉ〜?(;¬_¬)そんなのいやいや〜〜、ガ━━━*ワ)━━━ン
なってくれなかったら、( `_)乂(_´ ) 勝負! \(^o^)/
☆○(゜ο゜)o ぱ〜んち、☆(゜o(○=(゜ο゜)o バコ〜ン!!("※)=◯)`ο)・;'パーンチ
(>_<) いてっ!ダメ!! ゛o(≧◇≦*)oo(*≧◇≦)o″ダメ!!
(☆o☆)きゃ〜〜(@_@;)やられた〜〜(o_ _)o ドテッ ガ━━〔Ё;)━━ン!
(+_+) 気絶
631デフォルトの名無しさん:2005/07/21(木) 11:22:03
threadで
Thread.start {
fh = open("| ping ***.**.***.***")
count = 0
while !fh.eof
if count <= 3 then
print fh.gets
count = count + 1
else
exit
end
fh.close
}
を実行したいのですけど、最後の"}"がsyntax errorになります。
何が間違っているのでしょうか??
632デフォルトの名無しさん:2005/07/21(木) 11:31:39
インデントとかしなよ
633デフォルトの名無しさん:2005/07/21(木) 11:58:05
whileに対応するendがないよ。
いや、ifに対応するendがないのかもしれんけど。
634デフォルトの名無しさん:2005/07/21(木) 12:02:57
あ ほんとだw
寝不足が単純ミスにつながったー ( p_q)エ-ン
ありがとうございました。
635デフォルトの名無しさん:2005/07/21(木) 14:30:28
>>632
Navi2ch なんかで読んでると、 >>631 みたいなインデントの方がありがたい。
636デフォルトの名無しさん:2005/07/21(木) 14:43:55
>>635
(゚Д゚)ハァ?
637デフォルトの名無しさん:2005/07/21(木) 14:48:53
インデントはあって、単に通常のブラウザではそれが表示に反映されてないだけなんだよ
638デフォルトの名無しさん:2005/07/21(木) 14:54:37
&nbsp;使っとけ
639デフォルトの名無しさん:2005/07/21(木) 14:57:45
>>636
哀れな >>636 がいるスレはここですか?
640デフォルトの名無しさん:2005/07/21(木) 15:37:52
>>632は適切にインデントすりゃ、すぐに問題解決するよってことだろ。
ここでの見栄えなんか関係なく。
641デフォルトの名無しさん:2005/07/21(木) 15:58:39
適切にインデントしてても気づかない人は気づかない気もする。
642デフォルトの名無しさん:2005/07/21(木) 16:28:06
インデントに8スペースも使ってると一瞬なんの言語だ? と思ってしまう。
643デフォルトの名無しさん:2005/07/21(木) 16:33:16
>>640
いやだから、 Navi2ch なら >>631 が適切にインデントしてたことがわかる、
って言ってるのに。
644デフォルトの名無しさん:2005/07/21(木) 16:35:44
>>641
>>631みたいにまともに改行してる場合にも気付かないという奴は死んだって構わない。
645デフォルトの名無しさん:2005/07/21(木) 16:36:55
>>643
print fh.gets
count = count + 1
あたりはされてない
646デフォルトの名無しさん:2005/07/21(木) 16:50:11
exit
もな。

なんでこんなくだらないネタばっかりレスが付くんだよ。
647デフォルトの名無しさん:2005/07/21(木) 16:50:34
適切に…
Thread.start {
 fh = open("| ping ***.**.***.***")
 count = 0
 while !fh.eof
  if count <= 3 then
   print fh.gets
   count = count + 1
  else
   exit
  (end) <抜けている
 end
 fh.close
}
こんな感じ?
648デフォルトの名無しさん:2005/07/21(木) 17:08:46
>>646
・誰でも参加できる単純なネタだから
・くだらないことに熱くなっちゃう人が紛れ込んでるから
649デフォルトの名無しさん:2005/07/21(木) 17:26:13
インデントスタイル宗教論争がはじまる悪寒。
650デフォルトの名無しさん:2005/07/21(木) 18:44:05
scan(re) の存在に気づかずに自分で

class String
  def indices(arg, &block)
    pos = 0
    while not (pos = index(arg, pos)).nil? do
      yield pos
      pos += 1
    end
  end
end

"hogehogefugagufa".indices(/h./) {|a| p [a, $~] }

みたいなのを作ったんだけど、こう書くと$~が取得できないんだね。
スコープの関係上そうなるのは分かったんだけど、$~に値が入るように
書き換えることもできる?
651デフォルトの名無しさん:2005/07/21(木) 20:03:11
$~ という変数名にこだわる必要がなければ、
yield pos, $~
で良いと思うけど。
652650:2005/07/21(木) 21:41:50
>>651
ありがと。やるなら $~ にこだわりたいなぁ。無理なのかな。
自作クラスに正規表現を使ったメソッドつけるときに
ヤな感じになったりしそうなんだけど。
653デフォルトの名無しさん:2005/07/21(木) 21:58:41
このスレの住民がpython使いでなくて本当に良かった・・・
654デフォルトの名無しさん:2005/07/21(木) 23:06:18
俺、兼ねてますが……。
ともに初心者レベルだけど。
655デフォルトの名無しさん:2005/07/21(木) 23:21:30
>>650
class String
  def indices(arg, &block)
    pos = 0
    setter = eval("proc{|m|$~=m}", block)
    while (pos = index(arg, pos)) do
      setter.call($~)
      yield pos
      pos += 1
    end
  end
end
656デフォルトの名無しさん:2005/07/21(木) 23:22:36
文字列関係のユーティリティって
Stringに突っ込むのが一般的なの?
657650:2005/07/21(木) 23:48:52
>>655
なるほどねぇ。eval に第二引数とかあったんだ。
あと、nilがfalseで評価されるってのも言われるまで
忘れてた ノ(´д`*)

勉強になりました。
658デフォルトの名無しさん:2005/07/22(金) 09:46:02
あとは、while not とか書かないで until って書こうよ、とも思ったな
659デフォルトの名無しさん:2005/07/22(金) 19:13:19
rubyを初めて弄っていますが、
rubyからC++やJava, Perl, C#を扱うことはできますか?
可能ならサンプルもお願いします
660デフォルトの名無しさん:2005/07/22(金) 19:42:18
>>659
できますが Ruby 初心者がサンプル見たくらいで扱いこなせる代物ではありません。
661デフォルトの名無しさん:2005/07/22(金) 19:43:29
扱うって何だ?具体的に何がしたいんだ。
662デフォルトの名無しさん:2005/07/22(金) 19:49:24
>>659
gonzui の langscan あたりが参考になると思います。

とか言ってみるテスト
663デフォルトの名無しさん:2005/07/22(金) 21:09:53
初心者質問失礼します。
「恋するプログラム」を買ってきてrubyインスコしてrdeをダウンロードしてきて最初のサンプルを打ってみると、
ruby-1.8\bin\ruby.exe: No such file to load -- debug2 (LoadError)と出てしまうのですが、どうすればよいのでしょうか?
664デフォルトの名無しさん:2005/07/22(金) 22:08:12
>>663
どっかからdebug2.rbというファイルを見付けてきて、
ruby -e "puts $:" で出て来るディレクトリのどこかにおく。
665デフォルトの名無しさん:2005/07/22(金) 22:58:35
>>664

ありがとうございます。
666デフォルトの名無しさん:2005/07/23(土) 00:00:16
こないだ、初めてRubyGemsを使ったんだよね。
インストールしたのは RMagick-win32-1.7.0-mswin32 で
Rubyのバージョンは ruby 1.8.3 (2005-05-12) [i386-mswin32]。
インストールが終わって、サンプルスクリプトを実行したんだけど
`require': no such file to load -- RMagick (LoadError)
とエラーがでるんだよね。

ruby\lib\ruby\gems\1.8\gems\RMagick-win32-1.7.0-mswin32\lib を
$: に追加するとエラー出さずに動いてくれたから、RUBYLIB に上の
PATHを追加すればとりあえず正常に動くようになるとは思うんだけど
RubyGemsって、インストールする度にRUBYLIBにPATH追記しないと
いけない仕様なの?
それともインストールが完全に成功してなかったのかな。
667デフォルトの名無しさん:2005/07/23(土) 00:23:46
>>666
他のgemパッケージをインストールしてみて、それもパス追記が必要ならRubyGemsがおかしい。
パス追記が必要でなければ、RMagickのgemパッケージがおかしい(or Windowsでテストしてない。)
668名無しさん@Linuxザウルス:2005/07/23(土) 03:54:46
>>616
>俺はいつもハッシュのキーとして使ってるよ↓

そこで、(出力の時などに)キーでソートしたいときに困る訳ですよ。
結局to_sするはめに..
669デフォルトの名無しさん:2005/07/23(土) 03:58:16
一般的にいうとソートしたくなる時が少ないのでは?
頻繁にソートするとなると、そーときはArrayでも使うだろうし。
670デフォルトの名無しさん:2005/07/23(土) 06:49:52
to_iメソッドをオーバライドして文字列があれば
変換しないようにしたいんだけど、こんなエラーがでるのよ。
`to_i': super: no superclass method `to_i' (NoMethodError)
誰か助けて。

class String
 def to_i
  if /^-?\d+$/ =~ self 
   return super()
  end
  return self
 end
end

foo = "-10"
p foo.to_i
671デフォルトの名無しさん:2005/07/23(土) 08:26:50
エラーメッセージの通りだよ
Stringのスーパークラス(Object)にto_iメソッドは定義されていない

というか、オーバーライドするのなら return self だけで十分じゃないか?
672デフォルトの名無しさん:2005/07/23(土) 10:53:00
class String
 orig_to_i = instance_method(:to_i)
 define_method(:to_i) do
  if /^-?\d+$/ =~ self 
   return orig_to_i.bind(self).call
  end
  return self
 end
end
673670:2005/07/23(土) 12:03:59
>>671
ごめん。エラーの意味はわかったんだけど
なんでreturn selfだけで十分なのかわかんない。(´・ω・`)
>>672
ありがとう、あなたは私の恩人です。トム。

わからんメソッドだらけだからリファレンス読んでくる。
674671:2005/07/23(土) 12:21:55
ああごめん、俺勘違いしてた
"300".to_iで"300"を返すようにしたいのかと思ったんだ

で、トムこと>>672のコードでも上手くいくけど
こういう書き方もある↓

class String
 alias to_i_original to_i
 def to_i
  if /^-?\d+$/ =~ self 
   return self.to_i_original
  else
   return self
  end
 end
end
675トム?:2005/07/23(土) 20:17:43
そっちのが普通かも知れん。
ただ、aliasはローカルスコープじゃないから
二重三重に定義し直そうとするとはまる。
676670:2005/07/24(日) 00:49:10
>>674
なるほどこれだと俺にも詳らかによくわかる。
ありがとう。トム。
677デフォルトの名無しさん:2005/07/24(日) 14:45:11
>>666
オレもgemsはぜんぜん知らないんだけど、 require_gems てのがあるんじゃなかったっけか?
678デフォルトの名無しさん:2005/07/24(日) 22:30:49
set RUBYOPT=rubygems
679デフォルトの名無しさん:2005/07/25(月) 12:37:48
HTMLをツリー構造として扱えるライブラリってありますか?
html.each_childで子要素全てにアクセスできる、みたいな。
(htmlsplit.rbにツリー構成機能を足したような感じ)

REXMLでも同じ事はできるんだけれども、もっと軽くてシンプルなものを探してます。
680デフォルトの名無しさん:2005/07/25(月) 12:49:27
自分で書いてみれば? 別の教えたとしても不満言われそうだしな。

681デフォルトの名無しさん:2005/07/25(月) 13:20:00
htreeは?
682デフォルトの名無しさん:2005/07/25(月) 16:17:22
日本語マニュアルがないから没
683デフォルトの名無しさん:2005/07/25(月) 19:21:25
プログラム走らせているときに、どこの関数で何秒費やしたとか
詳細な情報を出力してくれるライブラリの名前なんだっけ。
前やったことあったきがするのであると思うんだけど。
raaで調べようかと思ったら、落ちてるし。
684デフォルトの名無しさん:2005/07/25(月) 19:45:44
profile
685デフォルトの名無しさん:2005/07/25(月) 19:46:51
おお。めっちゃサンクス。
686679:2005/07/27(水) 00:28:20
>>680
「自分で書くよりまず既存の物を探せ」という親からの遺言で

>>681
こんなライブラリがあったんですね
教えていただいてありがとうございます!



結局は自分で書いてしまいましたが
687デフォルトの名無しさん:2005/07/27(水) 01:27:22
>>686
ぜひどこかで公開してください!
688デフォルトの名無しさん:2005/07/27(水) 03:08:47
そんなに難しいものか?
689デフォルトの名無しさん:2005/07/27(水) 04:27:57
いい加減な HTML までフォローしようとすると、結構面倒な気はする。
入れ子がグダグダになってたり、閉じ用のタグが無くても良いものもあったりなどなど。

……というか、ライブラリあったのね。

昔、REXML ではダメポな HTML を処理しようとして、作りかけて投げた。
結局は、決め打ちで処理して良しとした。
690679:2005/07/27(水) 11:06:17
>>683-685
時にはRBProf のことも思い出してあげてください

>>687
htmlsplit.rb が必要で
その場しのぎで書いたために、ライブラリですが
それでもよろしければ、参考にどうぞ。

ttp://scl.littlestar.jp/revwiki/view.cgi?HTMLScanner

691679:2005/07/27(水) 11:08:54
すいません、途中で送信してしまったために文章がおかしくなってます。
正しくは
「htmlsplit.rb の機能に頼っているうえ
その場しのぎで書いたために、使い勝手に欠けるライブラリですが... 」
です。
692デフォルトの名無しさん:2005/07/27(水) 14:39:05
>>688
他の人のソースコードを読むと参考になることが多いので。

>>690
多謝です。拝見いたします。
693デフォルトの名無しさん:2005/07/27(水) 15:03:55
694デフォルトの名無しさん:2005/07/27(水) 15:45:01
画像を定期的にWEBからダウンロードして指定のファイル名で保存するという
ツールを探していたところ
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1374332
>ruby -r "net/http" -e "Net::HTTP.get_print 'hostname','/yyy.mda'" > yyy.mda.savefile
という記載を見つけrubyをインストールして上記スクリプトを実行するところまで
辿り付きました。っが、ダウンロードする画像がすべて壊れてしまいます。
まだrubyについてこれから勉強していく前段階なので
自分の環境がおかしいのかこのスクリプトに何か足りないのかも分かりません。
お手数ですが、誰かこのスクリプト確認していただけませんでしょうか
ruby -r "net/http" -e "Net::HTTP.get_print 'ca.c.yimg.jp','/weather/1122445680/weather.yahoo.co.jp/weather/jp/images/satellite/img/jp_1.jpg'" > jp_1.jpg
695デフォルトの名無しさん:2005/07/27(水) 16:02:34
>>694
ひょっとしてWindows?
だとしたら、Net::HTTP.get_print 〜 の前に、$stdout.binmode を入れてみて。
696デフォルトの名無しさん:2005/07/27(水) 18:34:36
tagiter ってみんな使わないの?
697デフォルトの名無しさん:2005/07/27(水) 23:45:07
>>696
試しにマニュアル読んでみたけど、使い方が今ひとつはっきりしなかった
RPG ツクールXP付属の
RGSSで、
外部プログラムである、IEをゲーム中から
起動するのはどうかけばいいですか?
あげ
700デフォルトの名無しさん:2005/07/28(木) 10:48:52
とりあえず、大した必要もないのにスレをageず
きちんとsageてください
話はそれからです

というか、RGSSからIEを起動して何に使うんだ
>>700
こちらの希望のページを開かせようとおもって
あげ
execなんとか、をつかえばいいのか
702デフォルトの名無しさん:2005/07/28(木) 12:01:38
夏真っ盛り
703デフォルトの名無しさん:2005/07/28(木) 12:17:18
質問の仕方から覚えた方が良いな。
俺は RGSS だからといって冷たく当たる気は無いけど。
別スレ立てろと言ってた人の気持が、ちょっと分かった。
【RGSS】
●RPGツクールXPの付属スクリプト
●Rubyを元にしている
●規約でリバースエンジニアリング不可なので
外部ライブラリ等を作成困難
●RGSSそのものもクローズドソースなのでユーザーが
発展させることは困難

体験版ダウンロード
http://www.enterbrain.co.jp/digifami/products/rpgxp/download.html
Google検索
「RGSS」
http://www.google.co.jp/search?hl=ja&q=RGSS&lr=
705デフォルトの名無しさん:2005/07/28(木) 13:32:09
↓さて、次の質問の方どうぞー
706デフォルトの名無しさん:2005/07/28(木) 13:45:29
{ '192.168.10.3', '192.168.2.1', '192.168.10.10', '192.168.9.100'}
というようなIPアドレスを格納した配列があるのですが、
これを昇順に並べて返すよい方法はないでしょうか? 上の例だと
{ '192.168.2.1', '192.168.10.3', '192.168.10.10', '192.168.9.100'}
となれば言いのですが。 一旦12ケタの数字に直すのが一番でしょうか?
707デフォルトの名無しさん:2005/07/28(木) 14:02:01
1番がどうかと言われてもなぁ、好きにやったら良いかと。それで良いんじゃない?
他には 8bit ずつ処理するとか、2進数に戻すなど。
708デフォルトの名無しさん:2005/07/28(木) 14:22:12
>>704
メールアドレス欄には「sage」とだけ書くこと。
余分な物を書くとageと同じ扱いになる。

>>706
splitなんかで12桁に戻すのがベストだと思う
他にいい方法もないだろうし
709デフォルトの名無しさん:2005/07/28(木) 14:56:11
何故に split ……
710デフォルトの名無しさん:2005/07/28(木) 15:32:18
>>708
うそつき。
711デフォルトの名無しさん:2005/07/28(木) 15:51:48
>>706
並べ替え後の順序が間違ってない?

require "ipaddr"
ipaddr_list = ['192.168.10.3', '192.168.2.1', '192.168.10.10', '192.168.9.100']
p ipaddr_list.sort { |a, b| IPAddr::new(a).to_i <=> IPAddr::new(b).to_i }
712デフォルトの名無しさん:2005/07/28(木) 16:26:00
>>709
>>710
ギャースマンカッタ
713デフォルトの名無しさん:2005/07/28(木) 22:02:53
>>711
sort_by使えよ。
714デフォルトの名無しさん:2005/07/28(木) 22:17:07
>>713
ギャースマンカッタ (真似)
715デフォルトの名無しさん:2005/07/28(木) 22:21:58
というわけで早速既存のコードを全部 sort_by 使って書き直してみようと思ったけど、
Enumerable#sort_by! って無いのね?
716デフォルトの名無しさん:2005/07/28(木) 22:42:05
Enumerable#sort! もないけどな。
717デフォルトの名無しさん:2005/07/28(木) 22:56:32
あ、そういえばそうだね。
まあそっちは Array#sort! があるからあまり気にならないけど。
718デフォルトの名無しさん:2005/07/28(木) 23:47:22
moduleに定義したメソッドは、includeするとインスタンスメソッドとして使用できますが、これをクラスメソッドにするにはどうしたらいいんだっけ?
なんかclass_evalとかinstance_evalとかを駆使した方法を見た覚えがあるのだが。。
719デフォルトの名無しさん:2005/07/29(金) 00:39:49
>>718
evalなしでも実現できる。includeでなくextendを使えばいい
720デフォルトの名無しさん:2005/07/29(金) 07:00:41
eclipse + rdt(eclipse rubyプラグイン) + cygwin rubyで開発してる人いる?
721デフォルトの名無しさん:2005/07/29(金) 13:33:39
>>718
module_function
http://www.tkool.net/faq_bbs/index.php?mode=normal&log_no=443

RGSSでIEをゲーム中に起動して
特定のURLを表示する方法、わかりました!
723デフォルトの名無しさん:2005/07/29(金) 22:33:03
そうか、よかったな
724デフォルトの名無しさん:2005/07/30(土) 15:28:54
pっていう変数に代入したくないな。
725デフォルトの名無しさん:2005/08/01(月) 01:14:15
ディレクトリを指定して、ファイルの生成を行うシンプルな方法ってないだしょうか。
いまだ
File.open(file_name,"w").write(contents_body)
FileUtils.mv(file_name,dir_path)
みたいに作ったファイルをわざわざ一度移動させるのが、
なんかもっさりしとってめんどくさい。
726 ◆m7YeytgDFE :2005/08/01(月) 01:18:26
>>725
下記のような方法じゃ駄目ですか?

File.open(dir_path + "/" + file_name,"w").write(contents_body)
727デフォルトの名無しさん:2005/08/01(月) 01:18:40
`touch #{dir_path}/#{file_name}`
728デフォルトの名無しさん:2005/08/01(月) 09:44:23
>>725
それ専用のメソッドを作るのが良いと思うよ

>>726
その方法だとディレクトリが存在しないときにエラーが出てしまう
729デフォルトの名無しさん:2005/08/01(月) 12:39:25
>>728
>その方法だとディレクトリが存在しないときにエラーが出てしまう
・・・存在しなければ自動的に作ってしまうメソッドを組むしかないか。

でも、そんなメソッドがあると、コードのなかで混乱しそうだ。
「突然」作成されるディレクトリ。

やはり一度作成されたことを、明示的にコードのなかで記述しておいたほうが良さそう。
730デフォルトの名無しさん:2005/08/01(月) 13:12:55
>>729
>やはり一度作成されたことを、明示的にコードのなかで記述しておいたほうが良さそう。

多少冗長でも、わかりやすいプログラム、
「プレゼンテーションとしてのコーディング」を意識する、ってとこでしょうか?
731デフォルトの名無しさん:2005/08/01(月) 13:34:16
>>726
closeしないとまずいだろ。

>>729
FileUtils
732デフォルトの名無しさん:2005/08/01(月) 14:06:55
>>726-727
みなさん File::join はお嫌いですか?
733 ◆m7YeytgDFE :2005/08/01(月) 14:24:42
>>731
ごもっとも。ファイルの所在のことだけを示してたんで、
書き込んだ後のことは考慮してませんでした。
自分ではopenにブロックを渡して自動的にcloseするようにしてます。

>>728
最終的にファイルを配置するディレクトリは存在するものと思ってました。
そのディレクトリが存在しない場合も考慮するのであれば、
そもそものFileUtils.mvでも駄目ですよね?
対象ディレクトリの有無を検査するとかmkdirを実行するとかは、
ファイルを生成する前の処理しておくもんだとばかり...。
734デフォルトの名無しさん:2005/08/01(月) 17:02:19
mvなら勝手にディレクトリ作ってくれるよ
735デフォルトの名無しさん:2005/08/01(月) 17:43:20
>>731
GCのときに勝手にcloseするんでなかったっけ。
明示的に閉じた方が良いってのは分かるけど。
736 ◆m7YeytgDFE :2005/08/01(月) 18:18:26
>>734
あれ?下記のいずれでもエラーになるんです。
ディレクトリを作らせる指定が必要?

ruby 1.8.2 (2005-04-11) [i386-linux]

FileUtils.mv( 'junk.dat', 'new-dir/junk.dat' )
FileUtils.mv( 'junk.dat', 'new-dir/' )

/usr/lib/ruby/1.8/fileutils.rb:590:in `rename': Not a directory - junk.dat or new-dir/ (Errno::ENOTDIR)
from /usr/lib/ruby/1.8/fileutils.rb:590:in `mv'
from /usr/lib/ruby/1.8/fileutils.rb:579:in `fu_each_src_dest'
from /usr/lib/ruby/1.8/fileutils.rb:861:in `fu_each_src_dest0'
from /usr/lib/ruby/1.8/fileutils.rb:861:in `fu_each_src_dest'
from /usr/lib/ruby/1.8/fileutils.rb:579:in `mv'
from -e:1
737デフォルトの名無しさん:2005/08/02(火) 12:51:02
>>736
こっちで同じスクリプトを実行したら、1.8.1, 1.8.2 共にエラー無く動作したんだが……
もちろんディレクトリも自動で作ってくれた

なぜ
738デフォルトの名無しさん:2005/08/02(火) 16:27:00
libcの仕様が違うんじゃないの、とか適当に勘でいってみる。
739デフォルトの名無しさん:2005/08/02(火) 17:27:55
ビンゴでした。libcを変えてみたら自動で作ってくれるようになりました。ありがとうございました。
740デフォルトの名無しさん:2005/08/02(火) 19:13:06
ということは結局、ちゃんとディレクトリの有無を確認するべきなんだな
741デフォルトの名無しさん:2005/08/02(火) 20:05:28
それか、ルートディレクトリにしかファイルを生成しないようにしちゃうか。
742デフォルトの名無しさん:2005/08/02(火) 20:17:34
これでいいだろ
`ruby -run -e mkdir -- -p #{dir_path}`
`ruby -run -e touch -- #{dir_path}/#{file_name}`
743デフォルトの名無しさん:2005/08/02(火) 21:43:16
FileUtils.mkdir_p でどうでしょ
744デフォルトの名無しさん:2005/08/02(火) 22:30:43
良いと思う。

つーか、元のお題がすっ飛んでる気がするが、気のせいか?
745デフォルトの名無しさん:2005/08/03(水) 12:25:28
すっ飛んでるのはtouchとかいってる約一名。
746デフォルトの名無しさん:2005/08/04(木) 03:08:14
このスレ見て初めてFileUtilsの存在を知ったんだけど
いろいろと便利な機能があるんだなぁ
installとかtouchとかmkpathとか、どことなくステキ
747デフォルトの名無しさん:2005/08/04(木) 08:34:27
cgi.rb でさぁ、フォームフィールトの値を得ようとしてさぁ

cgi = CGI.new
cgi['hoge'].class

としたら String って返ってきたもんでさぁ

cgi['hoge'][2..3] とか cgi['hoge'][2, 2] などやってみたら nil になるワケよ。
むろん、文字列の数は範囲内だし、cgi['hoge'].length はちゃんと文字列数が返ってくる。

ワケワカンネ と思ってマヌアル見直してみたら、配列を返すとある。
もー、意味不明。久々にハマりましたよ。
748デフォルトの名無しさん:2005/08/04(木) 13:03:05
1.8.x 前後の cgi.rb はバージョン毎に微妙に挙動が異なる最悪の仕様
とりあえずここ↓の CGI Adjuster を使うべし
http://www.nslabs.jp/rubycgi-18compat.rhtml

ただし Session::PStore には対応していないことに注意
749デフォルトの名無しさん:2005/08/04(木) 16:00:01
みなさん WEBrick::CGI はお嫌いですか?
750デフォルトの名無しさん:2005/08/04(木) 17:11:46
一目で使い方が把握できるマニュアルがあれば手を出すかも
751デフォルトの名無しさん:2005/08/05(金) 11:49:17
hoge, = cgi['hoge']
っていう書き方がおすすめ。
752デフォルトの名無しさん:2005/08/06(土) 02:15:51
>>749
好き嫌いじゃなくて単に知られていないだけでは。
753デフォルトの名無しさん:2005/08/06(土) 11:27:17
質問ではないんだけれども
ちょっと一つ、このスレで聞きたいことがあるんだ

Ruby関連のドキュメントが不足してるってよく言われるけど
実際、どんなドキュメントが有れば便利なんだろう?
ライブラリの使い方とか?
754デフォルトの名無しさん:2005/08/06(土) 12:26:56
>>753
俺の場合
・リファレンスマニュアルが所々書き方が曖昧なところある
 →試してみないと動作がわからない
・組み込みに関する資料が少ない
・ライブラリの作り方に関して詳しい資料が少ない
755ruby 1.8.2:2005/08/06(土) 14:43:00
■ YahooBB! 規制 ■
規制開始日,時,規制解除日,時,備 考
05.8.4,05:32:25,05.8.4,16:50:25,YahooBB218128★050804臨時地震アスベスト等マルチポスト報告★2
05.8.3,14:35:09,05.8.3,23:53:22,YahooBB221017★20050728 もてない男性板 嵐商事報告スレ 2
05.8.1,15:16:25,05.8.3,00:48:29,YahooBB218122★20050728 もてない男性板 嵐商事報告スレ 2

この場合、規制開始日時 と 規制解除日時の差をとって、
日時分秒に変換するには、どうすんの?
d1="05.8.4"; t1="05:32:25"
d2="05.8.4"; t2="16:50:25"
dtm1 = Obj.method(d1 + t1); dtm2 = Obj.method(d2 + t2)
sa = dtm2 - dtm1
puts sa.to_readable_format()

こんな感じで、読みやすい出力が欲しいです。
この時間を色々調べて、最長、最短の規制、発生頻度とか調べたい。
文字列から、時間オブジェクトは得られないの?
"2005-08-04 12:34:56".to_time みたいな。
756デフォルトの名無しさん:2005/08/06(土) 15:03:50
require 'time.rb'
a="2005-08-04 12:34:56"
p Time.parse(a)
757デフォルトの名無しさん:2005/08/06(土) 15:18:42
>>754
ライブラリの作り方の資料、あったらいいなぁ
ライブラリ向けのクラス設計のコツとかも知りたい
758755:2005/08/06(土) 15:30:56
>>756
ありがとうございました。
759デフォルトの名無しさん:2005/08/06(土) 18:49:47
FreeBSDでCGIライブラリを使ってデバッグするとき
(offline mode: enter name=value pairs on standard input)
を終了するのに何を入力すればいいの?
^Zを送るとOSの処理の方が優先されてRubyがサスペンドしてしまう…(汗
760デフォルトの名無しさん:2005/08/06(土) 19:03:01
^Dじゃなかったけ?
761デフォルトの名無しさん:2005/08/06(土) 19:36:42
>>760
ありがとう。できました。
762デフォルトの名無しさん:2005/08/06(土) 22:00:41
>>753
ドキュメントの数ではない。質だ。わかりにくいドキュメントがたくさんあってもないのと同じ。
あと、リファレンスマニュアルでのクラスの説明では、先頭にメソッド一覧をつけてほしい。
またどんなドキュメントにしたらいいかは、www.php.netを参考にしたらいいかも。PHPユーザから不満を聞いたことがないくらいだし、よくできてると思う。
763デフォルトの名無しさん:2005/08/06(土) 22:56:18
>>762
ttp://www.ruby-doc.org/core/
質に関しては知らないけどな。

単に、誰がコストを払うかの問題だろ。
ユーザを増やさなきゃ、改善される確率は低いままだろね。
あと、Ruby製で良いマニュアル作成ツールを作らないと (w
764デフォルトの名無しさん:2005/08/06(土) 23:47:39
>>753
マニュアルとかっていうより、Rubyをつかったソースをもっと見てみたい。
(マニュアルはttp://www.ruby-lang.org/ja/man/archive/で結構間に合う

特に、オブジェクトパターンをRubyでやったらどうなるのか。とか。
Javaみたいな回りくどい言語でデザインパターンを解説されるより、Rubyみたいな容赦なくシンプルに綴れる言語の方が、理解が早いと思うんだけれど。

あとはRuby on Railsの邦文資料などなど。

#てめぇで書けって話しだな。
765デフォルトの名無しさん:2005/08/07(日) 02:48:13
cgi.rb でさぁ、フォームフィールドの値を得てさぁ、

cgi = CGI.new
cgi.each_pair{ |k, v| puts k + v }

なんてやってみたら例外発生しちゃうのな。
もー意味不明。Hash で格納してるんだよな?
p cgi してみたら #["hoge"] なんかあるんだが、これのせい?

またまた、ハマりましたよ。
…… WEBrick::CGI を試してみるか orz
766デフォルトの名無しさん:2005/08/07(日) 03:13:16
>>765
CGI.new で生成されるオブジェクトは、あくまで CGI オブジェクトであって Hash ではない
なので each_pair というメソッドは使えない

each_pair を実行したいなら、 cgi.params.each_pair と書くべし。
767デフォルトの名無しさん:2005/08/07(日) 11:40:56
まぁでも CGI#each_pair とかがあるといいのになぁと思うことはあるよね。
768765:2005/08/07(日) 12:48:03
ありがとうです
漏れが未熟者でした orz
769753:2005/08/07(日) 13:18:27
>>754 >>762-764
みんな意見ありがとう。超☆感謝

ちょっと考えてることがあるので
もし実現できそうになったら、ここで公開したいと思う
770デフォルトの名無しさん:2005/08/07(日) 13:40:42
しかし、cgi.rb は、あらゆるところで、ボロクソ言われているな。
ベテランも使いにくい、初心者にも使いにくい、
いったい、なんだこれ?
771デフォルトの名無しさん:2005/08/07(日) 13:42:18
Ruby2.0で刷新されます



きっと・・・
772デフォルトの名無しさん:2005/08/07(日) 13:49:13
>>771
やめて希望的観測やめて
773デフォルトの名無しさん:2005/08/07(日) 19:06:04
GCもRuby 2.0で刷新…

されるの?
774デフォルトの名無しさん:2005/08/07(日) 23:05:22
Ruby2.0はmatzのライフワーク
775デフォルトの名無しさん:2005/08/08(月) 01:19:59
Rubyを使い始めて3日のものです。質問させていただきます。
サンプルを参考に以下のように

require 'open-uri'
proxy_addr = 'bc-vip.atl2.corp.earthlink.net:8080'
open("http://www.ruby-lang.org", proxy_addr) {|f|
f.each_line {|line| p line }
}

プロクシサーバを介してウェブファイルを取得しようとしているのですが、

invalid access mode bc-vip.atl2.corp.earthlink.net:8080 (URI::HTTP resource is r
ead only.)
c:/program files/ruby/lib/ruby/1.8/open-uri.rb:131:in `open_uri'
Press ENTER to close the window...

などというエラーが発生してしまいます。

どなたかプロクシを介したウェブページの取得方法を教えていただける方はいませんでしょうか。

よろしくお願い致します。
776デフォルトの名無しさん:2005/08/08(月) 01:44:09
777デフォルトの名無しさん:2005/08/08(月) 03:10:34
>>776
ありがとうございます。
確かに、そうですね。ただ、それでもうまくいきません。
undefined local variable or method `proxy' for main:Object
D:/My Documents/マイ ノート/Ruby/aa3/untitled1.rb:3
Press ENTER to close the window...

となります。他にご回答はありませんでしょうか?
778デフォルトの名無しさん:2005/08/08(月) 03:14:01
>>777
proxy の前のコロン(:)はちゃんと入ってるか?
779デフォルトの名無しさん:2005/08/08(月) 03:31:28
>>778

コメントありがとうございました。

require 'open-uri'
proxy_addr = 'bc-vip.atl2.corp.earthlink.net:8080'
open("http://www.ruby-lang.org", :proxy => proxy_addr) {|f|
f.each_line {|line| p line }
}

とproxyの前にコロンを入れてみましたが、同じく
undefined method
と出てしまいました。

他に試すべき点はありますでしょうか?

よろしくお願い致します。
780デフォルトの名無しさん:2005/08/08(月) 09:46:14
本当に自分でも考えて試してるのか?
open("http://www.ruby-lang.org", "proxy" => proxy_addr) {|f| ...
とか
proxy_addr = 'http://192.168.11.22:7979'
open("http://www.ruby-lang.org", :proxy => proxy_addr) {|f| ...
とか
open("http://www.ruby-lang.org", {:proxy => proxy_addr}) {|f| ...
とかいろいろ思いつくだろ?
781デフォルトの名無しさん:2005/08/08(月) 10:10:05
夏だな
782 ◆m7YeytgDFE :2005/08/08(月) 10:12:54
>>779
プロキシの指定は下記のようにしないとまずくありませんか?

proxy_addr = 'http://bc-vip.atl2.corp.earthlink.net:8080/'
783デフォルトの名無しさん:2005/08/08(月) 11:46:34
本当に初歩的な質問ですいません。
手始めに、Linuxでエディタの作るバックアップファイルを削除するスクリプトを
つくろうと思ったのですが、対象ファイル(例えば、#hoge.txt#)を正規表現で補足
してくれません。内容は以下のようなもので、エラーの内容もよく分からないのです。
どなたか原因ご指摘下さい。

irb(main):001:0> str = "#hoge.txt#"
=> "#hoge.txt#"
irb(main):002:0> /^#.+#$/ =~ str
SyntaxError: compile error
(irb):2: unterminated string meets end of file
(irb):2: syntax error
from (irb):2
784デフォルトの名無しさん:2005/08/08(月) 12:12:39
すみません。\エスケープで自己解決しました。
自分でいうのも何ですが、これはもうれっきとした夏です。真夏です
785デフォルトの名無しさん:2005/08/08(月) 12:24:44
$ ruby -e '/#/'
$ ruby -e '/#$/'
-e:1: unterminated string meets end of file
-e:1: syntax error

BUGじゃね?
786デフォルトの名無しさん:2005/08/08(月) 12:41:57
/\#$/
787デフォルトの名無しさん:2005/08/08(月) 12:46:04
>>758
どうなんでしょう…。難しいことは分かりませんが、
下でうまくいきました。#はメタ文字?それとも全く意味が変わってる?
よくは分かりません。

irb(main):001:0> str = "#hoge.txt#"
=> "#hoge.txt#"
irb(main):002:0> /^\#.+\#$/ =~ str
=> 0
788デフォルトの名無しさん:2005/08/08(月) 13:19:06
#は(少なくとも現時点では)正規表現のメタ文字ではないはずなので
エスケープしないとエラーが出るのはおかしい……と思う
多分本体側のバグだろう

とりあえず今のところは>>787の方法でOK
789デフォルトの名無しさん:2005/08/08(月) 13:41:28
仕様だ。#$/は#{$/}と等価。
ほんとに夏だな。すげー夕立もきたし。
790デフォルトの名無しさん:2005/08/08(月) 15:47:35
>>789
こんな仕様があったのか・・知らなかった
791デフォルトの名無しさん:2005/08/08(月) 16:55:14
>>782
>>780

本当にありがとうございました!
やっとうまくいきました。

今まではどこが駄目だったのか検証してみます。
792デフォルトの名無しさん:2005/08/08(月) 23:53:18
質問です。
1.8.3はクリスマスまで出ないのでしょうか?

ruby_1.8の
ext/enumerator 以下が空なのはHEADで移動になったときの
cvs ci のミスなのでしょうか?
793デフォルトの名無しさん:2005/08/09(火) 03:09:37
791です。

また質問させていただきます。

open-uriライブラリを使ってウェブサイトのHTMLを取得しても、カウンターが回らない現象が確認できたのですが、これは何故かどなた説明していただけますでしょうか。

よろしくお願いいたします。
794デフォルトの名無しさん:2005/08/09(火) 03:40:57
open-uriライブラリを使ってウェブサイトのHTMLを取得しても、カウンターが回らないから
795デフォルトの名無しさん:2005/08/09(火) 04:52:43
カウンタは普通、HTMLをそのまま読み込んだだけでは回らないようにできてる
796デフォルトの名無しさん:2005/08/09(火) 05:41:45
>>794
>>795
そうだったんですか、ありがとうございました。
もう少し自分で調べてみますが、カウンターが反応するようにすることへの何かアドバイスがいただければ幸いです。
797デフォルトの名無しさん:2005/08/09(火) 05:46:27
WebProgにRubyなCGIスレがあるよ
798デフォルトの名無しさん:2005/08/09(火) 06:39:46
boostでpythonが組み込めるようですが
rubyも同じように組み込むことが出来るのでしょうか?
導入の手引きなどありましたら紹介してください
799デフォルトの名無しさん:2005/08/09(火) 06:42:52
>>792
> ruby_1.8の
> ext/enumerator 以下が空なのはHEADで移動になったときの
> cvs ci のミスなのでしょうか?
cvs upのミス。-dと-Pをつけれ。
詳しくは cvs -H up
800デフォルトの名無しさん:2005/08/09(火) 12:21:23
>>789
盲点だな
801デフォルトの名無しさん:2005/08/09(火) 13:13:15
>>796
そもそものカウンターの仕組みを考えてみれ。
小学生の夏休みの自由研究にはちょうどいいくらいだろう。
802デフォルトの名無しさん:2005/08/09(火) 13:51:54
>>801
access.logを解析してhtmlをupdateするdaemonが常駐してる
803デフォルトの名無しさん:2005/08/09(火) 14:35:17
最近はSSIって話題にも上らないのか。
804デフォルトの名無しさん:2005/08/09(火) 17:44:52
おまいらがちゃんと面倒見てやらないから ML に変なのが居着いちまったじゃねえかよ!
805デフォルトの名無しさん:2005/08/09(火) 17:54:24
ML の人たち、本当にご苦労様です……
806デフォルトの名無しさん:2005/08/09(火) 19:49:59
いちいち反応するからだよ。
807デフォルトの名無しさん:2005/08/09(火) 20:05:44
>>797
>>801
>>802
ありがとうございました。
WebProgの方でも質問させていただきました。
808デフォルトの名無しさん:2005/08/09(火) 20:14:14
ほんと、MLは丁寧な対応で感心する。
でもきっと内心はどろどろ。
809デフォルトの名無しさん:2005/08/09(火) 22:18:22
とりあえず毎度々々バカみたいなテストメール投げんのだけはヤメレ。
810デフォルトの名無しさん:2005/08/09(火) 22:28:37
こいつか
811デフォルトの名無しさん:2005/08/09(火) 22:30:18
812デフォルトの名無しさん:2005/08/11(木) 18:23:52
文字コードがEUCか否か判別したいんだけど何か良い方法ありますか?

NKF.guessはイマイチ上手く動かないようだし1.8.1以前と1.8.2以降で挙動が違うみたいだし…orz

>ruby -v
ruby 1.8.2 (2004-12-25) [i386-mingw32]

test.rb(euc-jp)

require 'jcode'
require 'nkf'
$KCODE = 'e'

p NKF.guess('あいうえお')
p NKF.guess1('あいうえお')
p NKF::EUC
p NKF::ASCII
#=>
5
2
2
5
813デフォルトの名無しさん:2005/08/11(木) 18:56:45
よい方法なぞない。
EUCとSJISは絶対に判別不能な組み合わせが存在するから、
自動判別はあてにせず、文字コードを明示的に指定できるように
しておくべき。
814デフォルトの名無しさん:2005/08/11(木) 18:57:45
[ruby-list:41013] では不足ということ?
815デフォルトの名無しさん:2005/08/11(木) 18:59:54
うぅ、かぶった。「完全な方法は無い」けど「よい方法なぞない」はどうかと。
816デフォルトの名無しさん:2005/08/11(木) 20:33:07
The RWiki - たむら::日本語文字コードの自動判定
http://rubyurl.com/EBT3p

を読むとか。

Mconvとかよさげ。
817812:2005/08/11(木) 22:37:01
>>813
>自動判別はあてにせず、文字コードを明示的に指定できるように
>しておくべき。
判別機能を使用したいスクリプトはフォームからの入力をうけるCGIなので
入力されるコードを限定することは不可能なんです

イタズラ防止目的でEUC以外のデータが入ってきたらエラーを返すようにしようかと思っているのですが…

>>816
サンクス
NKF.guessってeuc-jpの判別精度はかなり悪いね…(汗
MconvはGPLみたいだし…
他のはどうやってLinux用バイナリを作るかって問題が…<実際動かす鯖はLinuxなので。自分はLinuxマシンはない
どうするか…orz
818デフォルトの名無しさん:2005/08/11(木) 22:44:35
「JIS以外のデータが入ってきたら」「UTF-8以外のデータが入ってきたら」にしたら?
819812:2005/08/11(木) 22:55:26
>>818
それだとバイナリデータをぶち込まれた場合に通しちゃいそうな気がしますが…
820デフォルトの名無しさん:2005/08/11(木) 23:46:48
UTF-8とEUCは同じようなもんだろう。
JISのほうが条件はずっと絞られる。
821デフォルトの名無しさん:2005/08/12(金) 01:01:57
EUC-JP で受けると Shift_JIS の半角カナを拾っちゃう。
 "アイ"(sjis) ← "\xb1\xb2" → "渦"(euc)
だから、受け側を EUC-JP にするのは、結構最悪の選択肢だと思う。
(イタズラ防止目的なら特に)

「他の文字コードの入力を誤判定しないように」という目的なら、
受ける文字コードは、
 1. ISO-2022-JP(ESC があるから間違えない)
 2. UTF-8
 3. Shift_JIS(ただし半角カナは捨てる←EUC-JP の入力を拾うから)
上から順番におススメ。

あと、>>819 の「バイナリデータをぶち込まれた場合に通しちゃう」というのが
よく分からない。 文字コードの validate するなら通すはずがないと思うけど。

と、素人考えを書いてみましたよ……。

822デフォルトの名無しさん:2005/08/12(金) 01:03:12
コンストラクタに引数を持つクラスを継承させたいのですが、
うまく作れません。例えば、

class Foo
def initialize(a)
@a = a
end
end

class Bar < Foo
def initialize(a, b)
super(a)
@b = b
end
end

bar = Bar.new("aaa", "bbb")

てな具合にやると「allocator undefined for Bar」と
エラーが出てしまいます。どうすれば良いのでしょうか。
823デフォルトの名無しさん:2005/08/12(金) 01:21:01
>>822
それをそのままコピペして実行したらちゃんと動くけど。
最後に
p bar
をつけたら
#<Bar:0x402a5e30 @a="aaa", @b="bbb">
こうなった。
824822:2005/08/12(金) 01:48:31
>>823
ですね。。。
本番プログラムは違う箇所でまちがっているのかな。
ご迷惑をおかけしました。せっかくなので、質問です。
new と initialize メソッドの違いが良く分からないのですが。
>>822 で initialize を new に変えても同じことですか?
825デフォルトの名無しさん:2005/08/12(金) 02:17:08
>>824
オブジェクトの生成は誰がすることになるのか考えてみればどうだろう。
826812:2005/08/12(金) 02:29:09
>>820-821
説明不足でスマン
文字コードの範囲内で化ける分には特に問題ないんです

CGIの最終的な出力先はメールなのですが露骨にバイナリなメールが送信されて万が一メーラーが
誤動作したりするのは出来れば避けたいので

def euc?(text)
 text.gsub!(/([\xa1-\xfe][\xa1-\xfe])|(\x8e[\xa1-\xdf])|(\xa4[\xa1-\xf3])|(\xa5[\xa1-\xf6])|(\x8f[\xa1-\xfe][\xa1-\xfe])|([\x20-\x7e])|(\x0d|\x0a)/n, '')
 text.size == 0
end

こんな感じでチェックさせる事にします。これで少なくとも変なコントロールコードとかエスケープコードが
送られるようなことはなくなるはず…
827デフォルトの名無しさん:2005/08/12(金) 02:56:41
>>826
重箱の隅だけど、引数を破壊するのはどうかと。
828デフォルトの名無しさん:2005/08/12(金) 02:57:45
>露骨にバイナリなメールが送信されて
???
829デフォルトの名無しさん:2005/08/12(金) 03:04:42
つーかCGIでしょ?Hiddenで"あ"とかおくりゃーいんじゃないの?
830812:2005/08/12(金) 04:08:15
>>827
あ、素で忘れてた…orz
今のコードじゃ問題ないのは確認したけどあとでコード使いまわしたときにはまる可能性はありそうなので
dupしておいた。

>>828
たとえばフォームの内容をJISに変換してsendmailでメールで送信する様なスクリプトの場合
文字コードのチェックを行わない場合フォームにバイナリデータを貼るとかしたらコントロールコードとかが
混じったメールが送信されたりしない?
スクリプトとかからやればバイナリファイルの中身をフォームの値として送り込むことも可能な気がするけど
831デフォルトの名無しさん:2005/08/12(金) 05:12:14
バイナリをベタで送れるのか?
と思って、試しにバイナリ貼ったメールを送ってみようかと思ったが、ヤンクできなかった。
他のメーラをインストールするのマンドクセ。
鯖 postfix だし。
832デフォルトの名無しさん:2005/08/12(金) 08:03:46
>>822
そのコードでは
> てな具合にやると「allocator undefined for Bar」と
このエラーがでるわけはない。
FooがDataのサブクラスとかなんとか、重要なところを書いてない。
833デフォルトの名無しさん:2005/08/12(金) 12:19:11
Rubyって、皆さんどんなエディタ使ってHackしてますか?
834 ◆m7YeytgDFE :2005/08/12(金) 12:41:06
>>833
emacs+rd-mode。
835デフォルトの名無しさん:2005/08/12(金) 13:14:15
コテハンだけあって、変わった人だな。
836デフォルトの名無しさん:2005/08/12(金) 13:41:37
>>826
文字コード判別じゃなくて、単に EUC-JP かどうかがわかればいいのであれば、
Kconv::iseuc(str) なんてのがありますけど、もう解決しちゃってますかそうですか。
837デフォルトの名無しさん:2005/08/12(金) 13:44:37
>824
newはクラスメソッド
initializeはインスタンスメソッド

クラスがnewでオブジェクトを生成した後オブジェクトは自身をinitializeで初期化する
838 ◆m7YeytgDFE :2005/08/12(金) 14:04:31
>>835
あぁ、何を書いてるんだ...。>自分
もちろん834はemacs+ruby-modeの間違いでございます。

"el4r - EmacsLisp for Ruby"というプログラムが登場したので、
ますますemacsを使うことになるかも。
839デフォルトの名無しさん:2005/08/12(金) 15:42:33
別に彼を責めるつもりはないが、なんであんな面倒なemacsを使うんだろう?
わたしはマカーだが、miで充分、事足りる。
840デフォルトの名無しさん:2005/08/12(金) 15:46:46
俺はマカーだからこそemacsを使ってる。
UNIX/Linuxはもちろん、Windowsでも同じ使用感を得られるからね。
X11やWinのGUIは使いたくないし。
841デフォルトの名無しさん:2005/08/12(金) 16:12:14
>>840
>俺はマカーだからこそemacsを使ってる。
>UNIX/Linuxはもちろん、Windowsでも同じ使用感を得られるからね。
そんなにいろいろOSを使わないとしたら、まーエディタぐらい好きなのを使えって。
秀丸でRUBYっていうのはあまり聞かないけれど。
842デフォルトの名無しさん:2005/08/12(金) 16:39:16
[POWERBOOK-12:~] ****% ruby /Users/****/Sites/****/****.rb
というように、tcsh上から実行しようとすると、下記のように怒られます。

/Users/****/Sites/****/****.rb:3:in `require': No such file to load -- ****.rb (LoadError)

はて?
843デフォルトの名無しさん:2005/08/12(金) 16:57:48
伏字にするなよ。特に /Users/ の後ろ。

ruby -e "p $:" の結果と LoadError の出ている ****.rb のパスを確認してみれ。
844842:2005/08/12(金) 17:21:46
>>843
>伏字にするなよ。特に /Users/ の後ろ。
しつれい。こんな感じ。
---------
/Users/ownerName/Sites/cgi-bin/Ctr_test/logic/test.rb:9:in `require': No such file to load -- tool.rb (LoadError)
---------
tool.rb」は「test.rb」と同じディレクトリ「logic」に入っている。
---------

で、$:をpで確認してみた。あー、この環境変数の中に納められているpathのエントリしか実行しないのか。

---------
tcsh上から
ownerName% setenv RUBYLIB /Users/ownerName/Sites/cgi-bin/Ctr_test/logic

としたところ、無事実行できた。
---------
こんなタコな質問にヒントをありがとう>>843
845デフォルトの名無しさん:2005/08/13(土) 16:59:37
初心者以下な質問で申し訳ないのですが
rubyで日本語を入力するにはどうしたらよいのでしょうかORZ
何かソフトが必要なのでしょうか。
846デフォルトの名無しさん:2005/08/13(土) 17:06:06
さすがに意味不明過ぎだw

もちっと、やりたいことを詳しく説明するか、
とりあえずアルファベットで良いから、サンプルスクリプトを貼ってごらん。
847デフォルトの名無しさん:2005/08/13(土) 17:21:54
845ですが>>846サンは、僕へ結ってくださっていらっさryのですおうか
人工無脳が作ってみたくて「恋するプログラム rubyでつくる人工無脳」という本を購入したのですが
print("ワンツー¥n")という分を練習なのですがその日本語が入力できないです。
半角英数しか表示されないので日本語が入力できません。
インストールもちゃんとできていると思うのですが。
プログラミングは以前にコボルをちょろっとやっていた時はXFERボタンと南下のボタンを押せば日本語に変換できたのですが
いろいろいじってみても日本語にならないです。
もしかして全部半角英数でやるべきなのでしょうか。

具具ってみてのですが見つからなかったと思います。探し方がおかしいでしょうかorz
848デフォルトの名無しさん:2005/08/13(土) 18:57:45
> もしかして全部半角英数でやるべきなのでしょうか。
そんなことはないです。

というか XFER ってことは PC98 使いなのか?
環境が Windows なら南下(何か?)ってのは、大抵 Ctrl だと思うのだが。
FreeBSD かなぁ。それだと IME に依存するんでちと分からない。
そもそも、2ch に日本語で投稿できてるのだから、そういった話じゃないだろうけど。

ちなみに、それはコンソールで `ワンツー' が入力できないということ?
「恋するプログラム」なら irb での話かもしれないかな。
それは Ruby とは別問題の可能性が高いと思う。
一旦エディタでスクリプトを保存して、それを実行してみたら良いと思う。
849デフォルトの名無しさん:2005/08/13(土) 19:26:55
>>848さん
レスありがとうございます。
環境はwinXPです。以前学校でcobolの授業で使ったpcがwin98でしたのでXFERボタンを使いました。言葉足らなくて申し訳ないです。
2ch含め、他のところでは日本語で入力できますが、irbとruby consol使うと言語バーも小さくなってしまって変換の仕方がわからないのですorz

メモ帳で日本語文章打ってコピペしたら入力できました。質問内容スレ違いっぽいかったですね、すみません。
丁寧に教えてくださりどうもありがとうございました。これからしっかり勉強して覚えようと思います○┓ペコリ
850デフォルトの名無しさん:2005/08/13(土) 21:52:33
>>849
コマンドプロンプトって日本語入力できなかったっけ?
とりあえずRDEあたりとか使ってみちゃどうよ。
http://homepage2.nifty.com/sakazuki/rde.html
851デフォルトの名無しさん:2005/08/13(土) 22:00:53
w2kだとALT+漢字で日本語入力できますよ。もっかい漢字キー押すと戻ります。

d:\temp>irb -Ks
irb(main):001:0> a="あいう"
=> "あいう"
irb(main):002:0>
852デフォルトの名無しさん:2005/08/13(土) 22:23:29
学校の PC が PC98 系で Win98 が入っていて、
それを覚えていて、DOS/V 機でそれをしようとしてハマったという感じかな。
コンソールでもメモ帳と同じ方法で日本語モードに変わると思うけど。

しかし、Linux の VT ならまだしも、cmd.exe へコピペという発想が凄いな。
試してみたら、C-v ではなく右クリしたらコピペされた。ちょっとビックリ。
853845:2005/08/14(日) 07:45:20
>>850-852さん
レスありがとうございます。
alt+半角/全角でキーで日本語入力できました!!
最後までコピペで乗り切るところでしたorz
紹介sいていただいたRDE使ってみようと思います。
感謝です○┓ペコリ
854デフォルトの名無しさん:2005/08/15(月) 02:44:07
質問です。

Eclipse + RDT(Ruby Development Tools) 環境を準備しようとしているのですが、実行設定の画面で「An error has occurred. See error log for more details.」というエラーが発生してしまいます。しかしerror logがどこにも見当たりません。

DOJA(DoCoMoの携帯端末のエミュレータ)などは問題なくEclipseにインストールすることができました。

どなたかお分かりになる方いらっしゃいましたら解決方法をよろしくお願いします。
855842:2005/08/15(月) 02:49:19
>>854
その質問を初心者板に書き込むか。
856デフォルトの名無しさん:2005/08/15(月) 03:30:36
Windowsで簡単に使えるIDE一覧

RDE ついに1.0Release間近!?
http://homepage2.nifty.com/sakazuki/rde.html

FreeRIDE RubyOneClickInstallerでインストールした場合の標準添付
http://rubyforge.org/projects/rubyinstaller/
http://rubyforge.org/frs/?group_id=31

Mondrian Ruby IDE 開発手放したと思いきや、かなり使いやすくなってる。いつの間に!
http://www.mondrian-ide.com/download.html
857zaqdadc75de.zaq.ne.jp:2005/08/15(月) 03:30:53
正規登録
858デフォルトの名無しさん:2005/08/15(月) 03:56:33
854です

>>855
プログラムする以前の問題だったので初心者板が適用かと思ってしまいました(笑)

error logとは「workspaceフォルダ\.medtadata\.log」というファイルだということがわかりました。

Rubyと関係しそうなメッセージは以下のようなものなのですが、
!ENTRY org.eclipse.ui 2 0 2005-08-15 02:33:43.734
!MESSAGE Warnings while parsing the commands from the 'org.eclipse.ui.commands' and 'org.eclipse.ui.actionDefinitions' extension points.
!SUBENTRY 1 org.eclipse.ui 2 0 2005-08-15 02:33:43.734
!MESSAGE Commands need a name: plug-in='org.rubypeople.rdt.ui', commandId='org.rubypeople.rdt.ui.edit.text.ruby.comment'.
!SUBENTRY 1 org.eclipse.ui 2 0 2005-08-15 02:33:43.734
!MESSAGE Commands need a name: plug-in='org.rubypeople.rdt.ui', commandId='org.rubypeople.rdt.ui.edit.text.ruby.uncomment'.
!SUBENTRY 1 org.eclipse.ui 2 0 2005-08-15 02:33:43.734
!MESSAGE Commands need a name: plug-in='org.rubypeople.rdt.ui', commandId='org.rubypeople.rdt.ui.edit.text.ruby.content.assist.proposals'.

!ENTRY org.eclipse.jface 4 2 2005-08-15 02:36:55.296
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jface".
!STACK 0
java.lang.NoClassDefFoundError: org/eclipse/ui/internal/dialogs/ListContentProvider
at org.rubypeople.rdt.internal.debug.ui.launcher.RubyEnvironmentTab.addLoadPathTab(RubyEnvironmentTab.java:65)
at org.rubypeople.rdt.internal.debug.ui.launcher.RubyEnvironmentTab.createControl(RubyEnvironmentTab.java:56)

パッと見わかる方いらっしゃいますか?
859デフォルトの名無しさん:2005/08/15(月) 07:42:06
RDTの作者に聞くか、Eclipseスレで質問したほうがいいと思われ。
860デフォルトの名無しさん:2005/08/15(月) 09:49:11
RDE を遥か昔に試したことがあったけど、また入れみようか。

FreeRIDE と MondrianRubyIDE って、どんな感じなのだろうか。
SS すらないと、面倒でちょっと試してみる気が起きない。
まぁ、ruby-mode で、あまり不満は無いから、使わないだろうけど。
861デフォルトの名無しさん:2005/08/15(月) 10:39:02
あ、でもMondrian、相変わらず日本語使えねぇや。
862822:2005/08/15(月) 21:43:42
>>825 さん, >>824 さん、ありがとうございます。
initialize メソッドを使うようにします。
遅くなってしまって申しわけないです。
863デフォルトの名無しさん:2005/08/17(水) 00:44:51
RDE1.00が神ツールになる予感・・
バグ落ちだいぶ減ったし、アイコンオシャレになったし
864デフォルトの名無しさん:2005/08/17(水) 17:35:54
ネタだよな?
RubyWinのが安定してるし、それよかxyzzyのが使いやすい。
865デフォルトの名無しさん:2005/08/17(水) 18:58:32
Meadow + ruby-mode で良いだろ
866デフォルトの名無しさん:2005/08/17(水) 22:46:27
meadowは重い

xyzzyはなにげに印刷が便利
867863:2005/08/17(水) 22:49:50
RubyWinにはいくつかの欲しい機能が付いてないし
xyzzyやMeadowは、Windowsに慣れた人間には使いづらい

とはいえ、どちらも個人の好みのレベルではある
868デフォルトの名無しさん:2005/08/18(木) 14:30:03
正規表現マッチの時間を測ってみたら、下記のような結果になったのですが、
以下の仮説は正しいでしょうか。

a. コンパイルしたものを変数に入れたのを参照するよりもリテラルで書いた方が速い
b. 正規表現を定数から参照するよりもローカル変数から参照した方が速い

% /usr/bin/time ruby -e 'str = "hoge"; 1000000.times { /og/ =~ str }'
1.04 real 1.03 user 0.00 sys
% /usr/bin/time ruby -e 'str, re = "hoge", /og/; 1000000.times { re =~ str }'
1.22 real 1.22 user 0.00 sys
% /usr/bin/time ruby -e 'str, RE = "hoge", /og/; 1000000.times { RE =~ str }'
1.39 real 1.39 user 0.00 sys
% ruby -v
ruby 1.8.2 (2004-12-25) [i386-freebsd4]
869デフォルトの名無しさん:2005/08/18(木) 21:35:12
b. は、正規表現関係無しに、ローカル変数の参照と定数の参照の問題に帰結できるんでは。
870デフォルトの名無しさん:2005/08/18(木) 21:53:41
>>869
確かにそうかもしれないですね。

ふと思ったのですが、正規表現に限らず、一般的な話として、
ループなどで頻繁に参照する場合には、定数を直接参照するよりも、
一時的にローカル変数に入れてからそちらを参照する方が良い (速い) のでしょうか?
871デフォルトの名無しさん:2005/08/18(木) 23:41:38
>>870
速いかどうかは詳しく知らないが、気になるのは

速い = 良い

が成り立つかどうかはケースバイケースだということ。

872デフォルトの名無しさん:2005/08/19(金) 11:32:51
では

遅い = 良い 

が成り立つケースを一つ上げてください。
873デフォルトの名無しさん:2005/08/19(金) 11:35:32
>>870
一般に速度は
 String以外のリテラル > メソッドスコープのローカル変数 >
 ブロックスコープのローカル変数 > インスタンス変数 > 定数
グローバル変数はたぶん、メソッドスコープのローカル変数よりやや遅いかも。
874デフォルトの名無しさん:2005/08/19(金) 11:53:01
>>871
それは十分条件だけど、必要条件じゃないな
875デフォルトの名無しさん:2005/08/19(金) 12:53:50
>>874
「それ」ってどういう命題?
876デフォルトの名無しさん:2005/08/19(金) 13:34:22
ごめん、レス番間違った。
877デフォルトの名無しさん:2005/08/20(土) 01:12:04
では

遅い = 良い 

が成り立つケースを一つ上げてください。
878デフォルトの名無しさん:2005/08/20(土) 01:46:11
お手軽に西暦→和暦をする方法があったら教えて下さい
和暦→西暦ならParseDateが使えそうなんですが…
出来れば標準で付いてくるライブラリで出来ると嬉しいです
879デフォルトの名無しさん:2005/08/20(土) 02:04:04
便乗で質問
平成と昭和ってどこで切り替わるの?
880デフォルトの名無しさん:2005/08/20(土) 08:02:15
881デフォルトの名無しさん:2005/08/20(土) 09:50:51
昭和は最初も最後も一週間づつだけ。
882デフォルトの名無しさん:2005/08/20(土) 14:19:07
可読性を悪くしてまで速くするぐらいなら

遅い=良い(遅い方がマシ)

と言えないだろうか?
細かな速度改善は Ruby のバージョンが変わると役に立たなくなるかもしれない
883デフォルトの名無しさん:2005/08/20(土) 15:12:41
>>881
へぇ
884デフォルトの名無しさん:2005/08/20(土) 20:23:52
遅い方がマシ、なんて思った事ないなあ
885デフォルトの名無しさん:2005/08/20(土) 20:44:07
遅い代わりに良い点があるかどうか、であって、
速度だけしか変わらないのなら速い方がいいに決まってる。

可読性が上がるとか、保守性が高くなるとか、そういうことなら
速度より優先しても良いとは思う。
886デフォルトの名無しさん:2005/08/20(土) 21:20:39
というか>>874がどれと間違えたのかが気になる。
887デフォルトの名無しさん:2005/08/20(土) 22:31:05
さあ、おまえらどうやって知名度を高めればいいか考えようぜ。
888デフォルトの名無しさん:2005/08/20(土) 22:32:02
では

遅い = 良い 

が成り立つケースを一つ上げてください。
889デフォルトの名無しさん:2005/08/20(土) 22:43:08
比べるなら

遅くて使い易い vs 速くて使い難い

だろ。
つか、スレ違い。
比較スレに行くなり、一生全て C でも使ってろよ。
890デフォルトの名無しさん:2005/08/20(土) 23:58:41
仮にRubyが使いやすいとして、
Ruby並に使いやすいCが誕生すればそれでいいわけだよ
891デフォルトの名無しさん:2005/08/21(日) 02:00:37
C並みに早いRubyでもいいんだよね
892デフォルトの名無しさん:2005/08/21(日) 02:35:48
Cより遅いRuby処理系なんて見たことないんだが
893デフォルトの名無しさん:2005/08/21(日) 12:23:46
gcc: 1984年開発開始
Ruby: 1993年開発開始

少なくとも gcc よりも Ruby の方が遅いですね
894デフォルトの名無しさん:2005/08/21(日) 22:20:11
質問です。
ruby-mode.el ,inf-ruby.el,rubydb2x.elで
できるようになるのは何なのでしょう。
またそのキーバインドはどうなっているのでしょうか。
895デフォルトの名無しさん:2005/08/21(日) 23:18:10
現在実行されているソースファイルがあるディレクトリを取得する方法があったら教えて下さい。
896デフォルトの名無しさん:2005/08/21(日) 23:20:31
>>895
File::dirname($0)
でどうでせう
897デフォルトの名無しさん:2005/08/21(日) 23:26:41
>>896
即レスthx
組み込み変数の方だったのか…組み込み定数の方探してた…orz
898 ◆m7YeytgDFE :2005/08/22(月) 01:17:07
>>894
キーバインドの件は、調べたいモードでdescribe-bindingsをやってみるとか?
899デフォルトの名無しさん:2005/08/23(火) 00:34:10
>>898
おお、こんな便利なコマンドがあったのか。
thx!!!
900デフォルトの名無しさん:2005/08/23(火) 18:11:39
ary = ["foo", "bar", "baz"] を "foo\nbar\nbaz\n" にするにはどうしてますか?
パッと思い付いたのはこんなんですが、なんかイマイチなので。

ary.join("\n") << "\n"
ary.inject("") { |t, l| t << l << "\n" }
901デフォルトの名無しさん:2005/08/23(火) 18:32:16
ary.map{|s| s+"\n"}.join
とかかなあ。
ary.join("\n") だけにしといて、末尾の改行は出力時の puts でやるとかかな。

x = ""; StringIO.new(x).puts ary とかはどうだ。
902デフォルトの名無しさん:2005/08/23(火) 22:24:01
901のはじめのやつか、(ary + [nil]).join("\n") かなぁ
903デフォルトの名無しさん:2005/08/24(水) 00:21:53
StringIOを使うのはputsの仕様(配列は要素ごとに改行される)に
依存しているのが何となく気に入らないけど、カコイイな。

自分でやるなら collect/map してjoinでやるだろうけど。
904デフォルトの名無しさん:2005/08/24(水) 00:26:09
>>900
injectを使うなら、<<のところは+でいい。
905デフォルトの名無しさん:2005/08/24(水) 00:28:53
題意とはズレるけど、
"foo\nbar\nbaz\n" を最終的にどこかに出力するんなら、
その時までずっと ary のまま持ってて puts するという手も。
906デフォルトの名無しさん:2005/08/24(水) 00:40:18
Matzにっきが更新されないのはなぜですか?
907デフォルトの名無しさん:2005/08/24(水) 00:49:30
更新されていないんじゃなくて、日がずれているだけ。
現在は約 12日遅れで更新中。そのうち追いつくでしょう。
908デフォルトの名無しさん:2005/08/24(水) 01:07:31
>>907
よくわかりました
ありがとうございます
909デフォルトの名無しさん:2005/08/24(水) 15:53:40
すいません。質問です。
簡単なスクリプトを作ろうと思っているのですが、例えば禁煙タイマーのようなものを
想定していただければそう遠くありません。
つまり、a時点とb時点を設定し、その間の時間差を求めたいのですが

irb(main):001:0> a = Time.now; b = a + 60 * 60 #a時点1時間後
=> Wed Aug 24 16:51:47 JST 2005
irb(main):002:0> p b-a
3600.0
=> nil

というので、時間差がsecでしか出てきません。これをある程度、月や週などのまとまった
単位を使って求めたいのですが何かよい方法はないのでしょうか?
もちろん、求めるだけなら簡単なのですが、ゴタゴタとコードを書くのが醜いと思ったので
質問とさせてください。
910デフォルトの名無しさん:2005/08/24(水) 16:11:52
911デフォルトの名無しさん:2005/08/24(水) 16:18:47
>>910
ありがとうございます。むぅ、難しそうなクラスですね。
Time.local(0, 1, 1, 1, 0, 0)時間を設定して経過時間足して、後はstrftimeでうまく
行きそうなことに気づきました。どうも、すみませんでした。ありがとうございました。
912デフォルトの名無しさん:2005/08/24(水) 16:26:51
>>910
自前でメソッド用意すれば良い。そんなに複雑にならないかと。
ちなみに俺は、月変わりの処理などが面倒なので、
一旦、起算時に変えて、計算後また必要な形に戻してる。むしろ sec だらけ。

ちゃんと期待した値が返ってるから良いのかもしれないが、
b = a + 60 * 60 みたいに、Time + Fixnum オブジェクトみたいな形は、
Ruby 的に、かなり気持ち悪いと思うんだが……
913912 orz:2005/08/24(水) 16:28:19
× >>910
>>909
914デフォルトの名無しさん:2005/08/24(水) 16:42:39
XML ファイルを出力しようと思うんですが、
テキストを適当にエスケープするのにお手軽な方法があれば教えてください。
エンコーディングは UTF-8 だけに対応で構いません。
915デフォルトの名無しさん:2005/08/24(水) 18:15:13
あえて安直にCGI.escapeElementとかCGI.escapeHTMLを使ってみるとか。
916デフォルトの名無しさん:2005/08/24(水) 18:16:27
テキストを適当にエスケープするってどういう意味?

> → >

みたいなやつ?
それともCDATAセクションとかそーゆー話?
917デフォルトの名無しさん:2005/08/24(水) 18:17:11
ぐは、実体参照書くと置き換えられるのか。
918デフォルトの名無しさん:2005/08/24(水) 18:26:58
いや、 CDATA はいらないです。 #PCDATA というやつですかね。
なるほど、 CGI::escapeHTML とかでも十分そうですね。
そういえばと思って rss/utils.rb を見てみたら、同じようにやってますね。
919デフォルトの名無しさん:2005/08/24(水) 22:49:08
vim を使っている皆さん、タグは利用されていますか?
先日 Exuberant Ctags を試したのですが、いまひとつでした。
Ruby と相性の良いものがあれば、ご教示ください。
920デフォルトの名無しさん:2005/08/25(木) 11:08:21
まつもとさんが

  「Perlの$_を流用したのは失敗だった。」

と言う記述を見かけたのですが、$_の何がまずいのでしょうか?
921920:2005/08/25(木) 11:29:37

スラッシュドット ジャパン | まつもとゆきひろ 答える
http://slashdot.jp/article.pl?sid=03/03/14/0258247&topic=86

>Larryはずっと昔から私の尊敬する人物のトップ10には入っていて、
>彼がRubyについて知っているというだけで感激モノです。
>また、Rubyのローカル変数のスコープの点に気がついた彼はやっ
>ぱりとても鋭い人だと思います(古今最高のルネッサンス人かどうか
>は別として)。私自身もこれはRubyの最大の欠点だと思っていて、
>機会があれば直したいと思っているので。

これ↑は>>920の質問と関係しているのでしょうか?
それともまた違う欠点でしょうか?
922デフォルトの名無しさん:2005/08/25(木) 14:04:07
>>920
暗黙の引数かつ戻り値なとこ。
>>921はまた別の話。
923920:2005/08/25(木) 15:28:16
>>922
レスありがとうございます。
要するに変数が表に出てこないためソースが読みにくくなるという意味でとらえていいのでしょうか?

>>921の質問は、色々とググって推測しました。
Perlでは局所変数は、myとlocalできちんと宣言するけれども、Rubyではそれがないから
ソースの可読性が落ちるということでしょうか?

my 宣言とレキシカル (lexical) 変数
http://sonic64.hp.infoseek.co.jp/2002-11-01.html
924デフォルトの名無しさん:2005/08/25(木) 16:24:27
>>923
これも参考にどうぞ
ttp://www.rubyist.net/~matz/20031121.html#p02 ← 失敗したと思ってる点
ttp://www.rubyist.net/~matz/20050309.html#p03 ← Ruby 2.0 の仕様
925デフォルトの名無しさん:2005/08/25(木) 16:29:15
$_ がらみはライブラリに括り出すのは無理?

可読性が落ちるから美しくないのは分かるけど、
ワンライナーや短いフィルタだと重宝する時もあるから、廃止はつらい。

ライブラリになって、ワンライナーで毎回 -rxxx って指定するのも面倒っちゃ面倒だけど。
926920:2005/08/25(木) 16:52:47
>>924
サンクス。
疑問点全てが氷解しました。
927デフォルトの名無しさん:2005/08/26(金) 00:19:26
>>925
ライブラリに括り出すってのはどういうことをイメージしてる?
メソッドスコープからスレッドローカルのグローバルにして、
あとは勝手にアクセスさせるって話?
928デフォルトの名無しさん:2005/08/26(金) 07:06:39
vrubyを使ってUTF-8のファイルを扱いたいのですが

VRTextやTRTreeviewにテキストを直接渡しただけでは文字化けしてしまいます
VRRichedit なら文字コードを自動判別してくれるようなのですが
Richedit以外のフォームでUTF-8の表示を行うにはどうすればいいのでしょうか?
929デフォルトの名無しさん:2005/08/26(金) 08:20:33
SJISに変換してから渡せば?
NKF.nkf("-Ws", str)
930デフォルトの名無しさん:2005/08/26(金) 15:23:42
>>929
日本語とアクセント記号付きの英字を同時表示させたいので
できればUTF-8のままで扱いたいんです
931デフォルトの名無しさん:2005/08/26(金) 16:17:56
>>930
じゃあUCS2に変換してから渡せば?
NKF.nkf("-Ww16L", str)
932925:2005/08/26(金) 18:16:14
>>927
スマン。$_ がメソッドスコープってこと知らなかったよ。

要は Regexp.last_match 関連($&, $1, ...)と同じ扱いなわけね。
そう考えると、別に $_ もそんなに悪くない気がしてきた。

(ユーザじゃなくて)Ruby を実装する側は
 Regexp のマッチ → 本質的には一個のメソッド → 管理が楽
 gets や readline → いろんなところで → 管理が大変
という違いがあるのかな?(StringIO#gets でも $_ は変更されるみたいだし)
933デフォルトの名無しさん:2005/08/26(金) 19:19:30
正規表現の特殊変数もイラネ。
934デフォルトの名無しさん:2005/08/26(金) 20:26:02
>>933 確かにないほうがRubyらしく、すっきりするなぁ。
935デフォルトの名無しさん:2005/08/26(金) 21:44:05
Regexp.last_match[0] は長いよ
標準で、もちっとまからんかのぅ
936デフォルトの名無しさん:2005/08/26(金) 22:32:51
単に match するだけなら
if (match = str.match(/re/)) ...
みたいに MatchData オブジェクトが返ってくるからいいけど、
gsub なんかだと Regexp.last_match 経由しかないもんな。
937デフォルトの名無しさん:2005/08/27(土) 00:10:07
gsubがyieldするものをMatchDataにしちゃえ、って意見もあったが。
あと困るのがwhenでマッチさせたときだな。
938デフォルトの名無しさん:2005/08/27(土) 00:14:52
> gsubがyieldするものをMatchDataに
MatchData#to_str を実装すれば過去のコードも救え……ないわな。やっぱナシか。
gsub(/[^\s-~]/) {|s| "%"+s[0].to_s(16)}
みたいのは救えない。
逆にこれを救ってしまうと変える意味がなくなってしまう。
940928:2005/08/27(土) 04:13:05
>>931
utf-16の出力オプションをすべて試してみたんですが文字化けしてしまいます
ruby のバージョンは1.8.2(cygwin)です。

とりあえず特殊英字を使わなければsjisで表示ができるので今回はこれで我慢することにします
ありがとうございました。m(_ _)ノシ
941デフォルトの名無しさん:2005/08/27(土) 20:40:14
これ↓って訳本の出版予定はあるのでしょうか?

Programming Ruby: The Pragmatic Programmers' Guide, Second Edition
http://www.amazon.com/exec/obidos/tg/detail/-/0974514055/102-5531784-5437727
942デフォルトの名無しさん:2005/08/27(土) 21:17:10
>>941
Matz が UNIX USER 9月号で、
「邦訳が予定されている」と書いている。
943デフォルトの名無しさん:2005/08/27(土) 21:24:22
>>942
サンクス。
944デフォルトの名無しさん:2005/08/27(土) 23:39:55
訳本は高いんだよな……
1.8 対応のお薦めのリファレンス本みたいなのってあります?
945デフォルトの名無しさん:2005/08/28(日) 08:24:06
>>944
htmlマニュアルを自分で印刷。
946デフォルトの名無しさん:2005/08/28(日) 12:07:47
>>944
Wiki
947デフォルトの名無しさん:2005/08/28(日) 20:50:18
refe
948デフォルトの名無しさん:2005/08/28(日) 22:13:44
訳本は表紙のデザインがしょぼくなる
949デフォルトの名無しさん:2005/08/28(日) 23:24:01
>948
原著も買う→原著の表紙を切り取って(or カラーコピー……これは著作権法の許容範囲……だよね? )
訳書にノリでペタリ→ウマー
950デフォルトの名無しさん:2005/08/29(月) 08:59:59
著作権なんてものは、購入した「自分」が「自分に対して」行う限り、何しても良いのでは。
「自分」が「他者に対して」何かする時は、気をつけるべきだけれども。
951デフォルトの名無しさん:2005/08/29(月) 20:44:45
class A
class B
end
end

とするのと

class A::B
end

とするのって何か違いがあるんでしょうか?
952デフォルトの名無しさん:2005/08/29(月) 21:07:21
後者は class A が既に存在していなければ NameError
953デフォルトの名無しさん:2005/08/29(月) 21:39:52
質問が悪かったようです。後者がこういう場合だと、違いはあるでしょうか?

class A
end
class A::B
end
954デフォルトの名無しさん:2005/08/29(月) 21:48:34
そういうシンプルすぎる例は例にならないと思うが、
>>953はModule Aが既に存在していればエラー。
955デフォルトの名無しさん:2005/08/29(月) 21:49:40
というのは前者もそうか。
956デフォルトの名無しさん:2005/08/29(月) 23:01:30
ソースを見易くするのに役立つとか……
957デフォルトの名無しさん:2005/08/29(月) 23:03:40
Aクラスに後付でA::Bを追加するときは後者になるわな。
最初からA、A::Bの構成が決まってれば前者。

とか云ってみるテスト。
958デフォルトの名無しさん
>>941
ちょっと原著第2版をめくってみた。
Unitテスト, irb, RDoc, RubyGems あたりの記述がある程度しっかりなされてる感じ。
あと、WEBrickやSOAP、System Hookなんかについてちょろちょろと加筆してある。
組み込みクラスのリファレンスは1.8で追加されたものもしっかり網羅されていていいね。
ただ、標準ライブラリは簡単な例の記述にとどまっているので、過度の期待は禁物。
とはいえ、比較的新しい内容もここまでコンパクトに収まってるのはすごいけど。

翻訳を待つかどうかはともかく、リファレンスになるようなRuby本って最近少ないから、
買い換えても損はないかも。