Ruby初心者スレッドPart6

このエントリーをはてなブックマークに追加
1980
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは2以降。Ruby on Railsの質問はWebProg板のRailsスレで。

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

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。


宗教的な話題は禁止します。
2デフォルトの名無しさん:2006/05/18(木) 11:12:07
#本スレ
Rubyについて Part 22
http://pc8.2ch.net/test/read.cgi/tech/1147897915/

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

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

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


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

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

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

Ruby初心者スレッドPart4
http://pc8.2ch.net/test/read.cgi/tech/1137927749/

Ruby初心者スレッドPart5
http://pc8.2ch.net/test/read.cgi/tech/1143403165/
3デフォルトの名無しさん:2006/05/18(木) 11:13:45
#関連リンク

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

リファレンス
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)

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

Programming Ruby - The Pragmatic Programmer's Guide … 書籍をまるごと公開
http://www.ruby-doc.org/docs/ProgrammingRuby/

RAA - Ruby Application Archive … Rubyのアプリやライブラリが検索できる
http://raa.ruby-lang.org/

RubyForge … sourceforge.netのRuby特化版
http://www.rubyforge.org

日本Rubyの会 公式Wiki - 日本Rubyの会Wiki … Ruby関連のニュースとか
http://jp.rubyist.net/

Rubyist Magazine - るびま … RubyのWebマガジン
http://jp.rubyist.net/magazine/
4デフォルトの名無しさん:2006/05/18(木) 11:15:50
#関連リンク

Matzにっき … Ruby作者の日記
http://www.rubyist.net/~matz/

Ruby hotlinks 五月雨版 … Ruby関連の日記やblog
http://www.rubyist.net/~kazu/samidare/

Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2

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

Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/
5デフォルトの名無しさん:2006/05/18(木) 11:21:09
6デフォルトの名無しさん:2006/05/18(木) 11:24:23
華麗にgets
>>1
7デフォルトの名無しさん:2006/05/18(木) 11:30:14
>>1
8デフォルトの名無しさん:2006/05/18(木) 11:34:47
9デフォルトの名無しさん:2006/05/18(木) 11:51:41
10デフォルトの名無しさん:2006/05/18(木) 11:54:09
11デフォルトの名無しさん:2006/05/18(木) 14:37:07
>>1乙華麗
12デフォルトの名無しさん:2006/05/18(木) 18:32:02
CGI#out の文字コード変換だけど、
charset が iso-2022-jp, euc-jp, shift_jis の場合は
元の content が「日本語」で書かれていると想定できるから
アレで良いかも知れないけど、
charset が utf-8 の場合は、
元の content が何語で書かれてるか想定はできないので、
NKF で自動的に変換するのはまずくないかな。
13デフォルトの名無しさん:2006/05/18(木) 19:47:52
>>12
おれもちょうどcgi.rb見直してたとこなんだけど、outとかHTMLタグ生成関連って分離できねーの?
思ったより行数あるなーとおもったら、あれ取ったら半分以下になったよ。
cgi/http.rb
cgi/cookie.rb
cgi/html.rb
とかにわけて、cgi.rbはそいつらをrequireするだけにしてほしい。
14デフォルトの名無しさん:2006/05/18(木) 19:49:29
cgi.rbをrequireするからおなじことでわ?
15デフォルトの名無しさん:2006/05/18(木) 19:52:47
いらないときは必要な.rbだけ直呼びできるってことでわ?
16デフォルトの名無しさん:2006/05/18(木) 19:54:40
>>13
では早速やってください
17デフォルトの名無しさん:2006/05/18(木) 19:56:57
21/22/23は捨てスレ

ここが本スレってことで
18デフォルトの名無しさん:2006/05/18(木) 20:03:42
いやここは初心者スレだから
本スレの代用なんかに使われて、ここまで荒れたら困るよ
19デフォルトの名無しさん:2006/05/18(木) 20:19:30
>>16
つか今までだれも提案しなかったの?
20デフォルトの名無しさん:2006/05/18(木) 20:20:32
cgi.rb一個で足りる便利さのほうが支持を受けてたとかそんなとこでは
21デフォルトの名無しさん:2006/05/18(木) 20:22:41
cgi.rbはそいつらをrequireするだけのことでわ?
22デフォルトの名無しさん:2006/05/18(木) 20:43:23
23デフォルトの名無しさん:2006/05/19(金) 00:22:16
済みませんが、質問です。
ActiveRubyで、テキストファイルを一行位置ファイルに分割するプログラムを
書こうとしているのですが、改行コードをLFのみにすることが出来ません。出
来たファイルの改行コードは、すべてCR+LFになってしまいます。

count = 1
while gets
file_name = "hogehoge" + count.to_s + ".tsv"
foo = File::open("tsv/" + file_name, "w")
foo.print NKF.nkf('-Lu', $_)
foo.close
count += 1
end

どこが間違っているのでしょうか?
24デフォルトの名無しさん:2006/05/19(金) 00:32:58
binmode()
25デフォルトの名無しさん:2006/05/19(金) 00:38:41
ActiveRubyっつー事は、Windowsだよな?
Winでファイルへ書き込む場合"w"はテキストモードって言って
簡単に言うと改行コードとかをWinが自動で\r\n直してしまう。

"wb"って感じでbを付けて、バイナリモードにしなきゃ。

Rubyリファレンスマニュアル - 組み込み関数#open
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%B4%D8%BF%F4#open
Rubyリファレンスマニュアル - Win32ネイティブ版Rubyの互換性問題
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=Win32%A5%CD%A5%A4%A5%C6%A5%A3%A5%D6%C8%C7Ruby%A4%CE%B8%DF%B4%B9%C0%AD%CC%E4%C2%EA
26デフォルトの名無しさん:2006/05/19(金) 00:51:17
既に答え出てるみたいだけど、サンプルとしてはこんな感じ
chompしたり"\n"つけたりしなきゃいかんのかなと思ったんだけど
何かこれでちゃんとLFだけになるみたい

require 'kconv'
ARGF.each_with_index do |line, i|
 filename = "hogehoge#{i}.tsv"
 open('tsv/' + filename, 'wb'){|f| f.print line.toutf8}
end
27デフォルトの名無しさん:2006/05/19(金) 01:17:31
モルモン教/教義への疑問点
http://www.geocities.co.jp/Bookend-Ohgai/6832/syk_sb2.html

カルト - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AB%E3%83%88
カルトの定義とだましのテクニック(蓮月)
http://www.jimmin.com/2000b/page_021.htm

新興宗教とは?
http://park8.wakwak.com/~kasa/Religion/prologue.html
28デフォルトの名無しさん:2006/05/19(金) 07:05:48
htmlをパースしてわびさび方式にしてくれるライブラリってありますか?
29デフォルトの名無しさん:2006/05/19(金) 07:21:33
>>28
htreeというライブラリがそれっぽいかと思ったけど違うかも。
30デフォルトの名無しさん:2006/05/19(金) 07:43:10
>>29
ども、できました。qwikのほうにhtree-to-wabisabiなんてのが入ってたんですね
31デフォルトの名無しさん:2006/05/19(金) 11:29:27
>>23,25
ActiveScriptRuby?
ActiveStateはrubyだしてないよな。
3223:2006/05/19(金) 11:37:09
>>24-26
できました!ありがとうございます。Rubyって本当に便利ですね。
33デフォルトの名無しさん:2006/05/19(金) 11:46:49
>>32
便利だけど質問と答えを見る限りは全く便利そうに見えないな。
34デフォルトの名無しさん:2006/05/19(金) 11:51:02
うむ
具体的にどうとは言えんがなんかあまり便利そうには見えん
35デフォルトの名無しさん:2006/05/19(金) 16:15:18
おまえら、急にw
36デフォルトの名無しさん:2006/05/19(金) 18:56:54
特定の範囲のテキストを処理したい場合はどうするのが普通なんでしょう?
<start>
中略
<end>
の用に囲まれている部分を抜き出したり置換する場合です。
37デフォルトの名無しさん:2006/05/19(金) 18:58:22
その範囲のテキストを抜き出してきたり置換したりするのが普通です。

じゃなくて、えーと、正規表現を使います、とかいう答えでいいのかな?
38デフォルトの名無しさん:2006/05/19(金) 19:26:48
>>37
抜き出し方が分からないんです
39デフォルトの名無しさん:2006/05/19(金) 19:54:45
"foo\n<start>\nbar\nbaz\n<end>\nquux".scan(/<start>\n(.*)<end>/m){p $1}
40デフォルトの名無しさん:2006/05/19(金) 19:55:58
>>38
ぜんぶ読み込んで、正規表現で抜き出す。
str = File.read('file.txt')
str.scan(/<start>(.*?)<end>/m) do
 matched = $1
 puts matched
end
あとは、一行ずつ読み込んで、開始パターンにマッチしたらフラグをたて、終了パターンにマッチしたらフラグをおろすという方法がある。
41デフォルトの名無しさん:2006/05/19(金) 20:40:01
>>39-40
ありがとうございます

ところでそういうブロックが同じ文章中にいくつもあって
2番目のブロックだけ処理したい場合がわかりません
最初の<start>と最後の<end>が対応してしまうような
42デフォルトの名無しさん:2006/05/19(金) 20:47:41
>>41
試してから書くべきではないか。
43デフォルトの名無しさん:2006/05/19(金) 21:04:19
# flip-flop
if (/^<start>$/=~$_)..(/^<end>$/=~$_)
44デフォルトの名無しさん:2006/05/20(土) 03:57:37
>>41
2番目のブロックというのが何をさしているのかわからない。
...<start>...<end>...<start>...<end>... のようになっているだけだったら、教えられた方法でできる。
...<start>...<start>...<end>...<end>... のように入れ子になっているんだったら、もうちょっと難しいやり方が必要。
ほんとうにやりたいことは何なのかをもっと詳しく。
45デフォルトの名無しさん:2006/05/20(土) 04:25:08
>>44
<start>
abcde

fghij
<end>

<start>
klmno

prqst
<end>
こういう内容の空行を含むtxtがあったとして
str = open("file.txt").read
str.scan(/<start>(.*?)<end>/m) {
matched = $1
puts matched
}
これだと
abcde

fghij

klmno

prqst
こう表示されるのですわ。

klmno

prqst
これだけあるいは最初のabcde〜だけを選択して抜き出せればってことなのですが。
46デフォルトの名無しさん:2006/05/20(土) 05:51:56
>>45
よくわからんが
i = 0
str.scan(/<start>(.*?)<end>/m) {
 i += 1
 matched = $1
 puts matched if i > 1
}
じゃだめなのか?
47デフォルトの名無しさん:2006/05/20(土) 07:22:41
scanにブロックを渡さず、ふつうに<start>〜<end>にマッチした文字列の配列を吐き出させて、ゆっくり料理すりゃいいじゃん。
マッチした文字列が<start>か<end>を含んでいたら、その要素は削除するとか。
48デフォルトの名無しさん:2006/05/20(土) 07:25:24
あ、マッチした文字列の途中に<start>か<end>があったら、に訂正。
49デフォルトの名無しさん:2006/05/20(土) 09:40:38
>>45
ひとつ。puts だとわけがわからなくなる。 p 使え。正規表現やってるときは特に。
もうひとつ。ブロックを使ってるときに「これの2番目に出てくるやつを…」とか考えるのは面倒なのでやめとけ。

str = open("file.txt").read
matchedarr=str.scan(/<start>(.*?)<end>/m)
p matchedarr

実行結果:
[["\nabcde\n\nfghij\n"], ["\nklmno\n\nprqst\n"]]


目的っぽいスクリプト:
str = open("file.txt").read
matchedarr=str.scan(/<start>.(.*?).<end>/m).flatten
puts matchedarr[1]


抜き出したいのが2番目かどうかは実は内容によって決まるとかいうなら
配列matchedarrに対してfindやgrep使って目的の要素探せ
50デフォルトの名無しさん:2006/05/20(土) 13:24:12
>>46-49
ども
45で書いたものの出力結果をどうにかして配列に入れようとしていたのですが
scanを使えばそのまま入ってくれるのですね
参考になりました。
51デフォルトの名無しさん:2006/05/21(日) 16:00:43
RDocで、行頭の * が<ul>、[ ] が<dl>になりますが、これをエスケープするにはどうしたらいいですか。
バックスラッシュをつけたら、そのバックスラッシュも表示されてしまいました。
52デフォルトの名無しさん:2006/05/21(日) 18:24:09
むきー!
Vine の Ruby は 1.8.2 のくせに Kconv::UTF8 が定義されてねぇぇぇーーーーー!!!

$ ruby --version
ruby 1.8.2 (2004-11-03) [i386-linux]

$ irb
irb(main):001:0> require "kconv"
=> false
irb(main):002:0> Kconv::EUC
=> 2
irb(main):003:0> Kconv::UTF8
NameError: uninitialized constant Kconv::UTF8
from (irb):3

なにこれ…。
53デフォルトの名無しさん:2006/05/21(日) 20:13:20
>>52
1.8.4をコンパイルしろというお告げではないか?
54デフォルトの名無しさん:2006/05/21(日) 21:34:21
>>52
そのRuby(多分 1.8.2 preview 2)にはまだKconv::UTF8がなかった、
というオチではないかと。
いずれにしろ最新版、せめて1.8.2にはしてもらったほうがいいと思う。
55デフォルトの名無しさん:2006/05/21(日) 21:51:10
Vine Linux の Ruby、
ruby --version は 1.8.2 ってでるけど
rpm -qi したら version 1.8.1 って書いてありました。
56デフォルトの名無しさん:2006/05/21(日) 21:56:55
VineのRubyは確かにそうなってた
VineSeedにしたら1.8.4になった
57デフォルトの名無しさん:2006/05/21(日) 22:31:43
面倒なバージョンがデフォになってんなあ
58デフォルトの名無しさん:2006/05/22(月) 01:10:47
>>51
試してないけど、実態参照か数値参照でやってみれ。
59デフォルトの名無しさん:2006/05/22(月) 01:14:51
>>52
そういえば、使わてもらってる鯖が Vine で困ったことがあったな。
60デフォルトの名無しさん:2006/05/22(月) 14:08:58
チラシの裏。

自分でがんばって作った便利スクリプトと同じか上等なサービスが既に展開されてるとなんか寂しい。
ヤッホーテレビ欄を取り込んで注目フレーズをgrepして自分用ページで表示するとかいうの作ってたら
ライブドア.comがなんか始めた。
ttp://tv.livedoor.com/rss/make_url

ヤッホー天気予報を取り込(中略)ライブドア.comがなんか始めた。
ttp://weather.livedoor.com/weather_hacks/ical.html

「気になるアーティストの曲がラジオでかかることがわかったら録音して曲近辺を切り出してBGMの完成」
とかいうこともやってるがこれはさすがのライブドアでも公開できまいやーいやーいグスン
ちなみに録音と切り出し行為自体は外部プログラムでRubyは全然関係ない
61デフォルトの名無しさん:2006/05/22(月) 16:25:47
チラシの裏ここまで
62デフォルトの名無しさん:2006/05/22(月) 17:49:57
適切なクラス名とインスタンス変数使ってデータ状態を表現するのと
適当な名前のハッシュ変数に適当な入れ子構造でデータ保持するのって
データ書き換えたり読み込んだりという点においてはあんまご利益変わらなくね?
63デフォルトの名無しさん:2006/05/22(月) 18:27:05
変数は単なるオブジェクトの器だからなあ。
どちらかというとその中身のほうが重要なんだが。
64デフォルトの名無しさん:2006/05/22(月) 19:22:17
構造の決まってるコンテナオブジェクトが何重にも入れ子になるような場合は、一個そんなクラスを作って再帰的定義する方がかっちょよくね?
65デフォルトの名無しさん:2006/05/22(月) 19:42:44
俺の知ってるクラスはそんな便利そうで超面白カッコいいぜなことはしてくれん(w
66デフォルトの名無しさん:2006/05/22(月) 20:04:30
便利機能は自分で定義しなきゃ。

例えば中身はただの配列なんだけど、頭からウン番目までの仕様が決まってるんだったら、そこの要素だけはメソッドでもアクセスできるとか、そんな程度を定義しとくだけでもあとあと楽できるよ。
67デフォルトの名無しさん:2006/05/22(月) 23:03:44
それってなんてStruct ?
68デフォルトの名無しさん:2006/05/22(月) 23:51:05
うにおn
69デフォルトの名無しさん:2006/05/23(火) 01:16:40
rubyでUNIXのgrep -vのような機能(正規表現にマッチしないパターンを出力する)を
作ってるんですが、どうすりゃいいかが思い浮かばないです。
とりあえず・・・
・OptionParserで-vを定義する
・ARGV.shiftでコマンドライン引数からパターンを抜き出す。
・パターンに[^hoge](hoge以外にマッチする正規表現)を前後からくっつける
って具合でやってるんですが、上手く行きません。Rubyじゃ[^]って使えないんでしたっけ?
70デフォルトの名無しさん:2006/05/23(火) 01:33:35
>>69
「うまくいかない」だけじゃ正直わかんないんだが、
Rubyに限らず[](character class)は底に含まれる文字の集合/補集合に
マッチするもんなんだけど、その辺勘違いしてるってことないか?

> ・パターンに[^hoge](hoge以外にマッチする正規表現)を前後からくっつける 

ここ読むとひじょーにアヤシイんだが。

71デフォルトの名無しさん:2006/05/23(火) 02:20:47
>>70
ええと、まず実装したいのは
Unixのgrep -vのような機能
・正規表現にマッチしない部分を出力
で、
http://www.ruby-lang.org/ja/man/?cmd=view;name=%C0%B5%B5%AC%C9%BD%B8%BD#a.ca.b8.bb.fa.a5.af.a5.e9.a5.b9
の文字クラスってあたりを読んだんですが・・・。

>>・パターンに[^hoge](hoge以外にマッチする正規表現)を前後からくっつける
>ここ読むとひじょーにアヤシイんだが。
正直自分でも、あやしいです。

require 'optparse'
patopts = 0
opt = OptionParser.new
opt.def_option("-i" , "case insensitive"){
patopts = Regexp::MULTILINE
}
opt.parse!
temp1 ="[^"
temp2 =".]$"
pattern = temp1 + ARGV.shift + temp2
p pattern
regexp = Regexp.compile(pattern,patopts)
ARGF.each{|line|print line if (regexp =~ line)
}
なんか分からなくて、無理矢理やってる感が。。。
72デフォルトの名無しさん:2006/05/23(火) 02:54:00
[^hoge]は
e, g, h, o の4文字のどれにも当てはまらない文字にマッチするよ
73デフォルトの名無しさん:2006/05/23(火) 02:56:09
[^hoge]は
e, g, h, o のどれにも当てはまらない文字
にマッチ
74デフォルトの名無しさん:2006/05/23(火) 06:18:56
>>69
試してないけどこんなんでいいんじゃない?

pattern = ARGV.shift
regexp = Regexp.new(pattern)

while line = gets()
 print line unless line =~ regexp
end
75デフォルトの名無しさん:2006/05/23(火) 07:05:52
車輪の再発明することないとおもうけどな
76デフォルトの名無しさん:2006/05/23(火) 07:06:37
>>74
それだと改行越えするときに問題起きる
77デフォルトの名無しさん:2006/05/23(火) 09:17:16
>>76
kwsk
78デフォルトの名無しさん:2006/05/23(火) 09:49:33
79デフォルトの名無しさん:2006/05/23(火) 09:52:47
mjk
80デフォルトの名無しさん:2006/05/23(火) 15:03:04
>>76
grep -v を実装したいんでしょ?だったら行ごとでよくね?なんで改行越えが問題になるの。

・・・と思ったけど、エスパー発揮してみた。
以下は「hogehoge」以外の部分を出力するスクリプト。

str = ARGF.read()
str.scan(/(.*)hogehoge/m) do
 unmatched = $1
 print unmatched
end
rest = $'
print rest if rest
81デフォルトの名無しさん:2006/05/23(火) 16:59:39
ハッシュオブジェクトのテストってどうするのが賢いですか。
今はinspectで文字列にしてからassert_equal()しているんですけど、
なにかの拍子でinspectの結果がちょこちょこ変わるので困ってます。
json = { :x=>1, :y=>2 }
json.inspect #=> {:x=>1, :y=>2}だったり{:y=>2, :x=>1}だったり
inspectがキーの値でソートしてくれればいいんですけど。
82デフォルトの名無しさん:2006/05/23(火) 17:08:10
文字列にしないでそのまま assert_equal すればいいじゃない
83& ◆bLDZf./c4g :2006/05/23(火) 17:16:46
{:x => 1, :y => 2} == {:y => 2, :x => 1} # => true
84デフォルトの名無しさん:2006/05/23(火) 20:41:27
Rubyの構文木を出力するライブラリってないすか?
85デフォルトの名無しさん:2006/05/23(火) 20:45:11
86デフォルトの名無しさん:2006/05/23(火) 20:52:10
>>82,83
テスト対象となっているオブジェクトはハッシュと配列とが入れ子になっているので、めんどくさいので全体をinspectして文字列に変換しています。
もしかして、入れ子になっていても問題なく==で比較できるんでしょうか。試してガッテン。
87デフォルトの名無しさん:2006/05/23(火) 21:11:10
88デフォルトの名無しさん:2006/05/23(火) 21:37:37
>>86
自分でも試してみようよ。

{:x => 1, :y => [1, 2, 3], :z => {:a => [4, 5]}} == {:z => {:a => [4, 5]}, :x => 1, :y => [1, 2, 3]}
=> true
89デフォルトの名無しさん:2006/05/23(火) 21:42:41
配列には順序があるので[1, 2] != [2, 1]だが、
ハッシュ(のキー)には順序が無いので{1 => 2, 3 => 4} == {3 => 4, 1 => 2}。
90デフォルトの名無しさん:2006/05/23(火) 22:29:03
>>85>>87
ありがたい。

brubyって、exerbで使われてるんだな。
もしかして、exerbってコンパイルしてたりする
91デフォルトの名無しさん:2006/05/23(火) 22:50:47
どんなに複雑でもハッシュというデータ構造が維持される限りハッシュ部分はハッシュとして振舞う


ブロックつきメソッド通すとハッシュから配列になることはあるけどな

irb> h = { 'k1' => 'v1', 'k2' => 'v2' }
=> {"k1"=>"v1", "k2"=>"v2"}
irb> h.find{ |k,v| k=='k1' }
=> ["k1", "v1"]

いやまあ配列を返すってきちんと書いてはあるんだがなんか悲しい
92デフォルトの名無しさん:2006/05/23(火) 23:25:34
>>91
言ってる意味がわかんない
93デフォルトの名無しさん:2006/05/24(水) 00:53:23
>>91
言ってる意味はわかるが言いたいことはわからない。
94デフォルトの名無しさん:2006/05/24(水) 01:14:24
1行目と2行目以降に関連性があまりないな
95デフォルトの名無しさん:2006/05/24(水) 01:22:40
> ハッシュというデータ構造が維持される限りハッシュ部分はハッシュとして振舞う

これがもの凄いトートロジーに見えるのは俺が変なのかな?
96デフォルトの名無しさん:2006/05/24(水) 03:06:29
アイデンティティが維持される限りそれはそれであり続ける、という話だからそう珍しいわけでもない
言葉の技巧はいいからもうちょいわかりやすく喋れ、という気はしなくもないが
97デフォルトの名無しさん:2006/05/24(水) 05:47:33
>>95>>81 を読んでいないような気がする
98デフォルトの名無しさん:2006/05/24(水) 05:50:16
>>90
コンパイルはしていない

ソースをアーカイブしてローダーとRuby実行環境付けてexe化してるだけ

とりあえずオプションでソースを圧縮するかしないかを選べる

暗号化・難読化は未対応
99デフォルトの名無しさん:2006/05/24(水) 13:48:14
file=open("./test.dat","r")
while line=file.gets
print line
end
file.close

これってのは一行ずつ読み込んで、最後の行まで達したらその次の行でnilを返されるからwhileが終了するってのでおk?
100デフォルトの名無しさん:2006/05/24(水) 13:56:41
おk
101デフォルトの名無しさん:2006/05/24(水) 14:03:25
ありがと。
あと、この手のループってのはたくさん使う機会が出てくるのだと思うけど、
while使ったやり方が一番スマートって認識でおk?
102デフォルトの名無しさん:2006/05/24(水) 14:05:26
んg
103デフォルトの名無しさん:2006/05/24(水) 14:07:12
>>101

・each 使うほうがいい
・ファイルディスクリプタはあんまり長い間あけっぱなしにしないのが賢いらしい
 → lines = File.readlines(filename) #これだとオープンとクローズ書かなくて済むし

lines.each do |line|
print line
end
104デフォルトの名無しさん:2006/05/24(水) 14:11:18
なるほど。じゃあ初心者用にとりあえずわかりやすく説明のタメに使ってるのかな。
これからも似たような例でwhile使われてたりしたら、自分で変換してみることにします。
ありがとです。
105デフォルトの名無しさん:2006/05/24(水) 14:42:43
whileのほうが直感的でわかりやすい場合はあると思う。
標準入力からユーザー入力を受け付ける場合とか。

while input=STDIN.gets.chomp do
break if input=='exit'
puts "#{input}さん、こんにちは!"
end

あるいはFile.readとかで変数として一気に格納するには
ちょいと大き過ぎるファイルを相手にする場合とか。
(こっちの理由の場合が多いと思う)
106デフォルトの名無しさん:2006/05/24(水) 14:48:57
close し忘れがちな漏れはこうかな。

File::foreach(filename) { |line|
puts line
}
107デフォルトの名無しさん:2006/05/24(水) 14:50:20
>>103
> ・ファイルディスクリプタはあんまり長い間あけっぱなしにしないのが賢いらしい
巨大なファイルをフィルタリングしたくなったときに、んなことないだろと思ってIO::readしてたコードが問題になる気がしてて、
ケースバイケースなのはわかるんだけど、開けっ放しイクナイの実例が記憶にないので教えていただけると大変嬉しいです。
108デフォルトの名無しさん:2006/05/24(水) 14:54:28
>>105
そこはinputじゃなくnameとかのほうが好ましい希ガス
名前として扱われる変数は名前っぽい名称で使うことを癖にしとくといい
109デフォルトの名無しさん:2006/05/24(水) 15:00:12
STDIN.gets と書いてある時点で 'input' であることはわかるわけだしな。

とするとファイルでもないものに each do |line| とかline(行)を使うのは好ましくない?
110デフォルトの名無しさん:2006/05/24(水) 15:29:49
ファイルポインタでもないものにfpとか使うのも好ましくないな(w
111デフォルトの名無しさん:2006/05/24(水) 15:41:47
>>109
場合によるのでは。
たとえばファイル名が入ってることを想定してるならfilenameのほうが適切な気がする。
なんかのテキストデータを単に各行マッチングかけて、とかするときはlineで合ってると思う。

fpはシラネ。fはよく使うけど。それどこの文化?
112デフォルトの名無しさん:2006/05/24(水) 15:46:08
113デフォルトの名無しさん:2006/05/24(水) 15:48:00
C言語の解説書だと大体

FILE *fp;

と宣言してる気がする。
つーか、ポインタは変数名の末尾が p で、
ポインタのポインタとかになると pp(FILE **fpp; とか)とかしてたな。
その辺の名残と思われ。
114デフォルトの名無しさん:2006/05/24(水) 16:10:14
>>110
fdでも使っとけ
115デフォルトの名無しさん:2006/05/24(水) 17:24:01
>>114
d は何の略?
Perlのサンプルソースなら、fh が多い気がする。C++ なら fin, fout が多い気がする。
116デフォルトの名無しさん:2006/05/24(水) 17:40:02
split("=")とsplit(/=/)はどこか違うんですか?
117デフォルトの名無しさん:2006/05/24(水) 17:52:59
>>116
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=String#split
Rubyのバージョンによって扱いが変わるみたい。
118デフォルトの名無しさん:2006/05/24(水) 18:00:41
わざわざありがとうございます。
見てもサッパリ分からないので、とりあえず後者を使っておくことにします。
119デフォルトの名無しさん:2006/05/24(水) 18:02:19
>>115
fd はファイルディスクリプタのことだろう。

File.open('hoge.txt') はなんと呼ぶのが正しいんだろうな
120デフォルトの名無しさん:2006/05/24(水) 19:03:05
ウェブサイトの更新チェッカーを作ろうとしているのですが。

http://jp.rubyist.net/magazine/?0013-BundledLibraries
> 詳しい解説はしませんが、 User-Agent, If-Modified-Since については設定した方が 望ましい

というところの、設定方法がよくわからず。マニュアルも読んだんだけれども…。
諸賢のみなさま教えくださいませ。
121デフォルトの名無しさん:2006/05/24(水) 19:29:02
>>120
できないことはするな
必要なことができないのならそもそもするな
下手糞なWebフェッチャを作る奴は全員氏ね


というかあれだ、それはHTTPについての知識が要る。
「HTTPヘッダ」とかそういうのについて勉強したのちに適切なヘッダを発行させろ。
122デフォルトの名無しさん:2006/05/24(水) 19:50:08
>>120
大人しくはてなアンテナ使った方が幸せになれる希ガス
123デフォルトの名無しさん:2006/05/24(水) 20:05:30
>>121
ツンデレ?
124デフォルトの名無しさん:2006/05/24(水) 20:21:28
>>119
Fileオブジェクトなんだからfoでどうだろう
125デフォルトの名無しさん:2006/05/24(水) 21:29:40
ブロック変数は、いつもxにしてる。
126デフォルトの名無しさん:2006/05/24(水) 21:37:49
>>121
>下手糞なWebフェッチャを作る奴は全員氏ね
鯖管理者? ごくろうさま。
127デフォルトの名無しさん:2006/05/24(水) 21:53:58
>>124
わざわざオブジェクトって言わなくたって全部オブジェクトなんだから、o を取って f ってことで。
128デフォルトの名無しさん:2006/05/24(水) 21:59:26
>>109
より具体的な名前があるならそれをつけたほうがいい、
という話であって、代入時に自明な名前(fgetsだからinputとか)
をつけること自体は悪くないだろ。
その名前は代入時以外にも使われるんだから。
129デフォルトの名無しさん:2006/05/24(水) 22:04:24
>>125
俺も{}を使った一行ブロックのときは
基本的にxで統一してるな
do〜endならだいたい名前付けるけど
130デフォルトの名無しさん:2006/05/24(水) 22:19:02
おれはelementのeにしてるけど、簡単な処理なら groovyみたいに it が欲しいなと思うこともあるねぇ。
131デフォルトの名無しさん:2006/05/24(水) 22:36:45
>>127
俺はそうしてる

>>130
kwsk
132デフォルトの名無しさん:2006/05/24(水) 22:38:50
>>130
groovyは、
{ x | println x }

{ println it }
これが一緒ってことか
133デフォルトの名無しさん:2006/05/25(木) 00:02:08
セグメントセレクタとオフセットで構成される
farポインタ
134デフォルトの名無しさん:2006/05/25(木) 00:04:51
it は便利なんだが、結局 Perl の $_ と同じ気がするのでやっぱりいらない。
135デフォルトの名無しさん:2006/05/25(木) 00:49:52
>>107
オープンできるファイル数に制限があった頃の名残じゃないかなぁ
今でもあると思うけど

そんだけくらいですまん
136デフォルトの名無しさん:2006/05/25(木) 04:21:36
>>134
$_よりはいいよ。意味わかるし
137デフォルトの名無しさん:2006/05/25(木) 06:28:18
引数のうち大きいほうを返すメソッドって標準でありませんでしたっけ?
module Math
module_function
def max(x, y)
x > y ? x : y
end
end
なんてのがあるかと思いましたが、ないようです。
どっかにあったような気がしたんですが、見つかりません。
138デフォルトの名無しさん:2006/05/25(木) 07:13:33
>>136
$_も意味分かるからいいと思うけど
省略可っていうのがあれだ
139デフォルトの名無しさん:2006/05/25(木) 07:50:22
>>137
Enumerableモジュールあたりにmaxメソッドとかなかったっけ
[x,y].max とかできたような気が
140デフォルトの名無しさん:2006/05/25(木) 09:08:32
クラスやらモジュールやらメソッドやらはリファレンスを見て覚えろとあるのですが、
書いてあることが難しすぎて分からない事が多いです。
もっと平易な表現で書いてあるものは無いでしょうか?
それとも、リファレンスを読めるレベルになるまで、様々な入門サイト等で勉強した方が良いのでしょうか?
141デフォルトの名無しさん:2006/05/25(木) 09:22:36
>>140
わからないことはここで聞いたらいいよ。
MLでもいいけどこっちの方が簡単。
とりあえず何をしたくて何を調べたのか。
コード書いたのならコードも可能な範囲で晒すとよい。
コードの意図も書くと尚よいな。
142デフォルトの名無しさん:2006/05/25(木) 09:34:57
>>140
どういうところがわからんのかがわからんので確かなことは言えんが、おーむねYESだ。
一般に、リファレンスマニュアルは専門用語を理解した人向けに書かれている。

つか、「リファレンス読むと便利」のリファレンスっていうのは
「組み込みクラス/モジュール/例外クラス」と「添付ライブラリ」のあたりの一覧を指してるはず。
その前にある言語仕様や文法についてのところはみんなあんま読んでないと思うぞ。
この辺は解説本や初心者サイトあたりで概略つかんだほうがいい。
143デフォルトの名無しさん:2006/05/25(木) 09:42:33
Web上でなら逆引きRubyが役に立つことがある
ttp://www.namaraii.com/rubytips/

マニュアルはマニュアル語を最大限理解した人にとって最大限に便利になるように書かれてるから
“普通”に読んでるだけではやたら小難しく書いてあるように感じるかもしれない

マニュアルとして記述が不足してるという場合も多々あるけどな
144デフォルトの名無しさん:2006/05/25(木) 09:51:04
>>140
最初の勉強には書籍がお勧め
できれば購入した方が良いけれど、図書館で探してもいい

俺のお薦めは「たのしいRuby」
145デフォルトの名無しさん:2006/05/25(木) 10:51:16
>>141-144
レスありがとうございます。
書籍の購入も視野に入れて、勉強してみます。
その上でどうしてもわからなかったら、コードやエラーコードを晒して、
添削していただこうと思います。
アドバイスありがとうございました。
146デフォルトの名無しさん:2006/05/25(木) 11:43:26
>>145
がんばれ。
147デフォルトの名無しさん:2006/05/26(金) 04:09:24
Windowsタスクマネージャみたいいに全プロセス名を取得するにはどうすればいいですか?
148デフォルトの名無しさん:2006/05/26(金) 07:17:00
シングル、ダブルクォテーションは混在させるのと、常にダブルで統一する方のどちらが良いのでしょうか?
149デフォルトの名無しさん:2006/05/26(金) 07:24:33
用途によって違うんだからどっちも使うよ
150デフォルトの名無しさん:2006/05/26(金) 07:55:45
それでは、エスケープシーケンスの使用の有無によって使い分けるという事で良いですか?
それとも、もっと他の意味なども含めてという事でしょうか?
151デフォルトの名無しさん:2006/05/26(金) 08:17:04
   __,{ ;;,,             ミミ   i ´Z,
   ゝ   ''〃//,,,      ,,..`ミミ、_ノリ}j; f彡
  _)        〃///, ,;彡'rffッ、ィ彡'ノ从iノ彡
  >';;,,       ノ丿川j !川|;  :.`7ラ公 '>了
 _く彡川f゙ノ'ノノ ノ_ノノノイシノ| }.: '〈八ミ、、;.)
  ヽ.:.:.:.:.:.;=、彡/‐-ニ''_ー<、{_,ノ -一ヾ`~;.;.;)
  く .:.:.:.:.:!ハ.Yイ  ぇ'无テ,`ヽ}}}ィt于 `|ィ"~
   ):.:.:.:.:|.Y }: :!    `二´/' ; |丶ニ  ノノ
    ) :.: ト、リ: :!ヾ:、   丶 ; | ゙  イ:}    逆に考えるんだ
   { .:.: l {: : }  `    ,.__(__,}   /ノ
    ヽ !  `'゙!       ,.,,.`三'゙、,_  /´   「エスケープシーケンスを使いたくない時に
    ,/´{  ミ l    /゙,:-…-〜、 ) |
  ,r{   \ ミ  \   `' '≡≡' " ノ     シングルクォーテーションする」と考えるんだ
__ノ  ヽ   \  ヽ\    彡  ,イ_
      \   \ ヽ 丶.     ノ!|ヽ`ヽ、
         \   \ヽ `¨¨¨¨´/ |l ト、 `'ー-、__
152デフォルトの名無しさん:2006/05/26(金) 08:27:23
            ____
         __,,/  _, ----`ヽ
        / _     ___   、\
       / /   i      \   \\
       ,'./       i  ヽ:.   ヽ:.:.. ヽ.ヽ
      ,'/    / .ハ ヽ ヽ:.:.:.:. ヽ::.. ヽヽ
       |i .i i  .i /  ヽ ト 、 \、:.:.:. ',:.',:.:.lヽ}
       |i .i l  :N_, -弋 \弌弋ナ:}:.:}      わかりました。
      |i∧ ', :{ ,ィjモト \  イjミトイイV
       .|  :メヽ.', `ozZ}      izN。ハ::{        そういう風に考えてみます。
        |  :ヾ_! ゝ "゙゙    '  `゙ ハ.:',
      |  :.:_イ .:.ヽ.   (二フ , イ :.:.:!:.ヽ          ありがとうございました。
      / rィイ | :.:.ヽ: >r/`<ノ .:.::.}ヽ、\
      / ∧l;l ! :.:.:.://{二 ̄ .} ..:..::リ//ハ.:\
    / .{. ',ヾ、ヽi .:.:.{ /(^`  |.:.:.:.//: : :.}: . ヽ.
   / /  ) ヽ ヾ、ヽ:.ハ ヤ{   ∧/.-‐'": : |:.:. i ',
  ./ .,イ .:..} : :\ヾレ'ハ ∧__ノノハヾ、  : : : l:.:.: .ハ ',
  { /| .:.:ハ : : :i Y {ヾ`Yヽニン'ノ}: : } : : : :/:.:.:/ }:.}
  V | .:.:/:.:|_,ィ' ̄  ヽ三{ `ー-ノ : イ : : :/:.:i.:{  リ
    ヽ:.:{、.:.V     : : ヘ     : : {: : :/:.::∧|
     ヽ! )人    : : :人      : : : / \!
      "  ヽ : : : : :/イ{     :.ノ: : : :.\
          \__///: :\______/: : : : : : : ヽ
           / //: : :|;|: : : : : : i: : : __: : : : ',
             / 、 {;{   |;|   . : i/. : : : : : :|
          / `Y;{. . . .|;|. : : : /i: : : : : : : : :l
153デフォルトの名無しさん:2006/05/26(金) 08:54:41
>>148
これはときどきみかけるけど、結局は「好きにして」としか言いようがない。
154デフォルトの名無しさん:2006/05/26(金) 09:33:26
バックスラッシュ記法と変数展開の有無でこまめに使い分けるか
気にせずダブルクォートで統一するかどちらかだろう

変数が展開されるダブルクォート乱用は本来好ましくないんだが
Rubyでは #{ } がないと動かないからあんま気にしなくていいな
155デフォルトの名無しさん:2006/05/26(金) 09:42:03
> 変数が展開されるダブルクォート乱用は本来好ましくないんだが
kwsk
156デフォルトの名無しさん:2006/05/26(金) 09:44:27
>>150
式展開を忘れてるじゃないの。
ダブルクォートの時は式展開してくれるけど、シングルクォートだと式展開されないんだから。
わかってるとは思うけど%記法とヒアドキュメントでも同じことが言えるんだからね。
157デフォルトの名無しさん:2006/05/26(金) 09:47:22
>155
shとかperlとかの話っしょ。 ruby では関係ない。

青木さんのコーディングスタイルから。これもひとつの考え方として。
http://i.loveruby.net/w/RubyCodingStyle.html

> まず、エスケープや式展開がなく、一行のときは常に「'」。このほうが見やすいじゃないか。
> エスケープや式展開があるときは「""」にする。ちなみに、\n はできるだけ使わず puts を使うほうが好きだ。
> 「"」が文字列中に出てきてバックスラッシュが多くなるときは迷わず % 文字列を使う。
> 最後に使うのがヒアドキュメント。これを使うとインデントの最中に割り込んでくるので気持ちわるい。 <<-HEREDOC を使えばインデントはできるが、インデント部分が取り除かれるわけではないので、例えば出力するための文字列には使えない。


おれは基本的に "" を使っていて、それでややこしい時に % を使ってるなぁ。
158デフォルトの名無しさん:2006/05/26(金) 09:47:35
漏れは

str = Q(あほ >>#{148} , ばか >>#{151} , かわいい >>#{152}\n)

とかで統一してるけど
159デフォルトの名無しさん:2006/05/26(金) 10:26:36
インデント判別するヒアドキュメントもありゃいいのにね
160デフォルトの名無しさん:2006/05/26(金) 10:47:17
クォートで速度が変わったりしないの?
161デフォルトの名無しさん:2006/05/26(金) 10:48:51
インデントは、HTMLみたいに
ひとつの空白にまとめるなんて
アホな仕様にならないといいな。
162デフォルトの名無しさん:2006/05/26(金) 11:41:44
>>160
変わらないこともないこともないこともないけど、
そんなの気にするよりもっと他にチューニングすべきことが山のようにあるはず。
163デフォルトの名無しさん:2006/05/26(金) 11:56:51
>>162
俺のATOKタンだったら怒りそうな文章だな。
164デフォルトの名無しさん:2006/05/26(金) 12:10:06
クォートとダブルクォートのどちらが速いかはrubyの最適化うんぬんで誰かのページでみたな
165デフォルトの名無しさん:2006/05/26(金) 12:35:50
どっちが速いかって比べないと分からないようなものでしょうか?
166デフォルトの名無しさん:2006/05/26(金) 12:41:55
素直に考えればシングルクォーテーションのほうが処理速度は速いはずだな

これを気にする人は読み込み時のファイルサイズ増大を嫌ってインデントの空白も取り去ってるだろうがね
167デフォルトの名無しさん:2006/05/26(金) 12:44:48
Rubyで最速を求めるのは無理な話だし、細かいところは気にしないのが吉
168デフォルトの名無しさん:2006/05/26(金) 13:17:29
>>167
禿同
とりあえずyarvベースになってからだな。
169デフォルトの名無しさん:2006/05/26(金) 13:32:19
YARV ベースになっても気にしないだろ。
コンパイル終わったら差が無いんだし。
170デフォルトの名無しさん:2006/05/26(金) 13:45:14
>>169
あるだろ。

文字列の展開は静的な処理じゃないんだから。
171デフォルトの名無しさん:2006/05/26(金) 13:50:52
文字列の展開?

シングルクォートとダブルクォートの比較をしてるんだから、
文字列の展開があるようなケースは関係ないでしょ。
172デフォルトの名無しさん:2006/05/26(金) 14:25:34
実はシングルクォートよりダブルクォートの方が速いという研究成果があったと思う。
173デフォルトの名無しさん:2006/05/26(金) 14:33:26
実はコンパイラによって違う。というデマを流してみるテスト。
174デフォルトの名無しさん:2006/05/26(金) 18:21:15
'#{value}'
"#{value}"

この二つだと当然スピードは変わる。

'value'
"value'

これらの場合はどうなんだろうね。展開しなくてもいいような文字列だから、
''と同じ扱いをするようにコンパイルをするのか、それともそのままなのか。
そのままなら、'value'の方が速いって事になるんじゃない?
175デフォルトの名無しさん:2006/05/26(金) 18:55:47
うん、そこまではみんな理解してると思う。

しかし、
> ''と同じ扱いをするようにコンパイルをするのか、それともそのままなのか。
に答えられる香具師がなかなか現れないという初心者スレクオリティ。
176デフォルトの名無しさん:2006/05/26(金) 19:12:04
>>175
Stringオブジェクトにさえなってしまえば元々どうクォートされていようがその先は関係ない。
パースするとこは確実に処理が違うし、それ故速度も違う。
でも気にするほどじゃない。
177デフォルトの名無しさん:2006/05/26(金) 21:28:28
俺はエスケープシーケンスや式展開はもちろん考慮するが
なんとなく単語ならシングル、文ならダブルを使ったりする

ハッシュのキーとかなら、なんとなく文字列でなくシンボルを使ったりする
178デフォルトの名無しさん:2006/05/26(金) 21:57:21
ハッシュのキーには文字列よりシンボルの方が格段にパフォーマンス良いからね。



という都市伝説。
179デフォルトの名無しさん:2006/05/26(金) 22:31:16
すみません、これ↓って何をしているのですか?

attr :sgr0

同じクラス内に、@sgr0 っていう変数があるのですが、これと何か関係してるのでしょうか?
180デフォルトの名無しさん:2006/05/26(金) 22:31:41
そもそもパフォを求めるのにスクプリト(なぜか変換できない)使ってんじゃねーよwwww
軽量言語なんだから、とにかく早くできればいいいんだよ。


そういや今年のLLゴンって行くやついる?
181デフォルトの名無しさん:2006/05/26(金) 22:35:00
182デフォルトの名無しさん:2006/05/26(金) 22:50:27
>>181
ごめんなさい。
マニュアルを見て理解不能だったので質問させてもらいました。
183デフォルトの名無しさん:2006/05/26(金) 23:03:12
>>182

attr :sgr0



def sgr0
 @sgr0
end

と同義、とそのマニュアルには書いてある
184デフォルトの名無しさん:2006/05/26(金) 23:26:34
>>178
都市伝説なのか?
185デフォルトの名無しさん:2006/05/26(金) 23:26:35
def sgr0
 return @sgr0
end

これならわかると思う
returnをやたら省略したがるのはRubyの悪い癖
186デフォルトの名無しさん:2006/05/26(金) 23:45:23
>>185
あっ!、わかりました。
hoge.sgr0で@sgr0の値が取れるということですね。
サンクス。
187デフォルトの名無しさん:2006/05/26(金) 23:48:51
>>184
こんなんありましたけど。
ttp://www.fdiary.net/ml/learn-ruby-in-kansai/msg/1233
188デフォルトの名無しさん:2006/05/27(土) 00:33:37
> returnをやたら省略したがるのはRubyの悪い癖

あったほうがわかりやすいよな。
メソッドの最後の行に変数だけ書かれてると「書き間違い?」とか思うぞ。
189デフォルトの名無しさん:2006/05/27(土) 02:07:09
return を省略した方が格段にパフォーマンス良いからね。



という都市伝説。
190デフォルトの名無しさん:2006/05/27(土) 02:28:52
まぁ慣れてしまうとそうでもない
191デフォルトの名無しさん:2006/05/27(土) 03:52:22
ttp://shugo.net/ruby-codeconv/codeconv.html

ここによるとreturnは必須らしいな。
192デフォルトの名無しさん:2006/05/27(土) 06:24:12
現在のメソッド名を知る方法はありますか。
callerだと呼び出し元のメソッド名はわかりますが、今実行しているメソッド名は取得できないようです。
193デフォルトの名無しさん:2006/05/27(土) 08:18:45
caller(0) の in `メソッド名'
194デフォルトの名無しさん:2006/05/27(土) 09:18:00
イテレータブロックの戻り値を next value で書くのは好きじゃない。
195デフォルトの名無しさん:2006/05/27(土) 09:24:08
よーわからんが
x = bar(y, z) do
  ...
end
こういう書き方のこと?
196デフォルトの名無しさん:2006/05/27(土) 09:53:35
>>189
> return を省略した方が格段にパフォーマンス良いからね。
メソッド末尾のreturnは内部的に省略されるようになったから、
ほとんどの場合変わらない。

と思ったらこれ1.9 featureだったか。
197194:2006/05/27(土) 10:15:17
>>195
いや、たとえば
(1..16).to_a.map do |x|
 if x < 10
  next x
 else
  next (?a + x - 10).chr
 end
end

みたいな。
return が書ければ分かりやすい気もするんだけど、仕方ないんだろうね。
198デフォルトの名無しさん:2006/05/27(土) 10:34:20
(1..16).each do |x| hoge(x) end.each |x| fuga(x) end
199デフォルトの名無しさん:2006/05/27(土) 10:57:37
>>198
吐いた
200デフォルトの名無しさん:2006/05/27(土) 11:52:51
>>193
さんくすこ。caller()は引数をとれるんですね。
201デフォルトの名無しさん:2006/05/27(土) 22:29:14
やっとruby会議のチケットとれたお。
202デフォルトの名無しさん:2006/05/27(土) 23:35:04
>>201
 そう かんけいないね
 メ几
→木又してでもうばいとる
 ゆずってくれ たのむ!!
203デフォルトの名無しさん:2006/05/28(日) 12:42:09
/<a href=
204デフォルトの名無しさん:2006/05/28(日) 12:44:22
/<a href="(.*?)次の/ =~ '<table border=0 cellpadding=5 cellspacing=0 width="100%">
<tr><td><small>* 分割による調整については、<a href="http://help.yahoo.co.jp/help/j
p/fin/quote/historical/his_07.html">こちら</a>を参照してください。</small></td><td
align=right><small>[<a href="t?s=6758.t&a=1&b=1&c=1980&d=5&e=28&f=2006&g=d&q=t&y=
50&z=6758.t&x=.csv">前の50件</a> | <a href="t?s=6758.t&a=1&b=1&c=1980&d=5&e=28&f=
2006&g=d&q=t&y=150&z=6758.t&x=.csv">次の50件</a>]</small></td></tr></table></td><
/tr></table></center><br>' #本来は一行です
print $1

とすると下のように延々マッチしてしまいます。
http://help.yahoo.co.jp/help/jp/fin/quote/historical/his_07.html">こちら</a>を参照
してください。</small></td><td align=right><small>[<a href="t?s=6758.t&a=1&b=1&c=1
980&d=5&e=28&f=2006&g=d&q=t&y=50&z=6758.t&x=.csv">前の50件</a> | <a href="t?s=6758
.t&a=1&b=1&c=1980&d=5&e=28&f=2006&g=d&q=t&y=150&z=6758.t&x=.csv"> #これも出力結果は1行です

最後のリンクだけ取り出したいのですが何が間違ってるのでしょうか?

t?s=6758.t&a=1&b=1&c=1980&d=5&e=28&f=2006&g=d&q=t&y=150&z=6758.t&x=.csv
↑こういうのが欲しい
205デフォルトの名無しさん:2006/05/28(日) 13:01:47
/<a href="([^"])*?)">次の/

みたいにしてみたらどうだ?
206デフォルトの名無しさん:2006/05/28(日) 13:04:24
>>204
そりゃ
/<a href="(.*?)次の/
にマッチするのは
 「<a href="」の次から最初の「次の」の前まで
だろ。イメージ的には。

/\| <a href="(.*?)">次の/

でどうだ。
“本文”に「|、スペース、Aタグ」の順番の文字列が出てこないことが前提だけど。
207sage:2006/05/28(日) 13:09:43
>>205-206
ども
/<a href="([^"]*?)">次の/
で行けました

最短マッチで後方が指定してあれば
その直前を拾ってくれるかと思ったんですが

[^"]こいつがいったい何なのか、今から調べてきます
208デフォルトの名無しさん:2006/05/28(日) 14:35:24
eclipse + rdt の環境でコードの保管が出来ない?のですが、
教えてください〜。

とりあえず、ctrl + spaceを押すと
自己定義変数名などは出てくれます。
putsなども出してくれます。

クラスメソッド名までは出してくれません。

そういう物なのでしょうか。

OS:XP
eclipse 3.1.1 + rdt 8.0?(org.rubypeople.rdt-0.8.0.604272100PRD.zip)
209デフォルトの名無しさん:2006/05/29(月) 03:36:26
ロリポップでeruby(rhtml)使えますか?初心者質問じゃなくてすみません。
210デフォルトの名無しさん:2006/05/29(月) 08:17:23
exerbのサイトからexerb3.3.1とmswin32版バイナリ3.2.0を取ってきて
exyファイルを生成し、exerb.exeを実行してみたのですが
どうやら3.2.0のバイナリはexy形式に対応していないらしく
unknown directiveエラーになってしまいます。

exy形式でも実行できるバイナリって、どこかで配布していませんか?
211デフォルトの名無しさん:2006/05/29(月) 08:18:41
エクリプススレのほうがいいと思う。
エクリプスが、全クラスインクルードしまくってサーチしてくれるとは思えないけどな。
自己定義変数名もそのファイル内程度でしょ。
212デフォルトの名無しさん:2006/05/29(月) 08:59:01
>>209
ブラウザで *.rhtml を指定したら実行されるかってことかな?
デフォルトではたぶん実行されないようになっている。
.htaccess をかけばもしかしたら使えるようになるかもしれない。
だめだったら CGI プログラムから *.rhtml を読み込むようにするしかないと思う。

require 'cgi'
cgi = CGI.new
print cgi.header('text/html; charset=UTF-8')

require 'erb'
trim_mode = 1
erb = ERB.new('file.rhtml', $SAFE, trim_mode)
print erb.result(binding())
213デフォルトの名無しさん:2006/05/29(月) 21:38:39
>>210
漏れは、
http://arton.hp.infoseek.co.jp/indexj.html
にある
ActiveScriptRubyに同封されているのを使っている。
214210:2006/05/29(月) 23:11:30
>>213
ありがとうございます!
これから落として使ってみます
215デフォルトの名無しさん:2006/05/30(火) 00:07:16
使ってみてから返事書けよ
取り急ぎのお礼なんていらねーって
216デフォルトの名無しさん:2006/05/30(火) 14:01:46
結局、Matz(Ruby作者)が、日記でカルト宗教の宣伝をやっている件につ
いては、どうなったんですか?
もう下火ですか?
217デフォルトの名無しさん:2006/05/30(火) 14:02:51
テンプレから、カルト宗教日記を外す提案は、どうなったのでしょう?
218デフォルトの名無しさん:2006/05/30(火) 14:22:10
しかしRubyの進むべき方向を見定めるには教祖様のお告げは不可欠
219デフォルトの名無しさん:2006/05/30(火) 14:37:05
>>216-218
スレを間違えてはおられませんか?
本スレでは、そんな話で盛り上がっていたようですが
ここは初心者スレですので
どうなったのか、と聞かれても、別にそういう話題は扱っていませんよ
220デフォルトの名無しさん:2006/05/30(火) 15:19:10
class Foo
 def initialize
  @child = Bar.new(self)
 end
end

class Bar
 def initialize(parent)
  @parent = parent
 end
end

こういう関係の二つのオブジェクトを作る時、子オブジェクトに親オブジェクトがどれかを伝えるには
newメソッドにselfを引き渡す他に方法はないでしょうか
例えばクラスの継承関係をあらわすancestorsメソッドのように
生成元オブジェクトを表すようなメソッドや変数は存在しませんか?
221デフォルトの名無しさん:2006/05/30(火) 18:02:52
>>220
クラスの親子関係とオブジェクトの親子関係をごっちゃにしている。
class Foo < Bar はクラスの親子関係を表しており、ancestorで調べられる。
インスタンスオブジェクトには基本的に親子関係はない。あるのは他オブジェクトへの参照のみ。
それを人が見て親子関係だと見なしているだけ。
繰り返す。オブジェクトには親子関係はない。

もし、newにselfを渡すのが面倒くさいというだけなら、次のようにするとよい。

class Foo
 def initialize
  @child =Bar.new
  @child.parent = self
 end
end

class Bar
 attr_accessor :parent
end
222 :2006/05/30(火) 19:10:48
>>221
レスありがとうございます。
ちょっと、意図をよくご理解いただけなかったようですが
子クラスから親クラスを参照するように、というのは喩えとして出したまでのことです。
またparent、childなどのプロパティを設定したのも、設計上のものであってクラス継承を意図したものではありません。
要は、あるオブジェクトA内で、別のオブジェクトBを生成するときに、
AからBに明示的にselfなどの情報を伝達する他に、BからAを特定する方法はないか、ということです。

Bar.parentをattr_accessorで定義してしまうと
Bar外部から自由にparentが書き換え可能になってしまうわけですから
設計上はあまり好ましいことではないですよね。
この種のプロパティはread onlyにするのが普通だと思いますので。

ですから、それより他に手がないということであれば、new(self)で生成時に自分自身への参照を送るしか
ないのかな、と思うのですが、newメソッドに他に引き渡すべきデータがあるときには、new(data, self)とか
なっちゃって、どうもあんまり美しくない気がするんですよねえ・・・
223デフォルトの名無しさん:2006/05/30(火) 20:28:21
ないんじゃないかな。
美しくない気がする理由もよく分からない。
224デフォルトの名無しさん:2006/05/30(火) 20:29:40
>>222
Object#instance_variable_setを使えば、Bar#parentなしでできる。

class Foo
 def initialize
  @child = Bar.new
  @child.instance_variable_set("@parent", self)
 end
end

>AからBに明示的にselfなどの情報を伝達する他に、BからAを特定する方法はないか

ない。わかるのは、メソッド呼び出しの関係ぐらい。
caller()を使えばメソッド呼び出しの情報はわかるが、そこにはクラスの情報が含まれていない。
225デフォルトの名無しさん:2006/05/30(火) 20:30:12
方法はないように思えるので、美しくないけど我慢してください。
呼び出し元のBindingを取り出す方法があればいいか、とか思うんだけどね。

なんとなくこんなの思いついたけど、事実上何も変わってない。

class Foo
 def initialize
  @child = Bar.new{self}
 end
end

class Bar
 def initialize
  @parent = yield
 end
end
226デフォルトの名無しさん:2006/05/30(火) 21:24:20
>>223-225

成程、たいへん参考になりました。
どうもありがとうございました。
227デフォルトの名無しさん:2006/05/30(火) 21:30:11
$STACK = []
set_trace_func(Proc.new do |event, file, line, id, binding, klass|
case event
when "call"
$STACK.push(eval("self", binding))
when "return"
$STACK.pop
end
end)

class A
attr_reader :b
def initialize
@b = B.new
end
end

class B
attr_reader :owner
def initialize
@owner = $STACK[-2]
end
end

a = A.new
p(a.b.owner)
228デフォルトの名無しさん:2006/05/30(火) 22:04:14
>>227
すごい力技だが正直感動した。
229デフォルトの名無しさん:2006/05/30(火) 22:09:26
>>227
すごいことはわかったから、多少なりとも解説をいれてくれ。
ここは初心者スレだ。わかるやつだけわかればいいという、まるでRubyのリファレンスマニュアルみたいなのは勘弁。
230デフォルトの名無しさん:2006/05/30(火) 22:20:40
っていうかわかるやつにしかわからんからわからんやつにわからせようとするだけむだとさとったきょうこのごろ
231デフォルトの名無しさん:2006/05/30(火) 22:35:40
>>230
っていうか
まで読んだ。
232227:2006/05/30(火) 23:00:23
>>227の内容は、メソッド呼び出し時に self を保存していって、
後からその self の履歴をさかのぼって参照する、というものです。

$STACK = []
class A
def initialize
$STACK.push(self)
@b = B.new
$STACK.pop
end
end
class B
def initialize
$STACK.push(self)
@owner = $STACK[-2]
$STACK.pop
end
end
a = A.new
p(a.b.owner)

これは >>227 と似たようなことをやろうとしているもの。
上記でいちいち push して pop しているところ、
組み込みメソッドの set_trace_func を使うことで、
その push pop を一カ所にまとめて書いています。
set_trace_func の詳細はリファレンスマニュアルを読んでください。

set_trace_func以外は特に難しいことはしていないつもりだけどどうかな。
233デフォルトの名無しさん:2006/05/30(火) 23:48:50
それってスタックにしたのは何か意味があるの?
$STACK = self
@parent = $STACK
でも同じ?
スタックにしてすべてのオブジェクトの生成を監視した方が
汎用性が高いってこと?
234デフォルトの名無しさん:2006/05/31(水) 04:50:36
>>232
GJ
235デフォルトの名無しさん:2006/05/31(水) 09:13:21
>>233
A以外からBオブジェクトを生成しないと仮定できれば、それでも良いですね。

>>232に書いたように、各メソッド内でselfを管理してもそんなに違いは
無いんですよ。ただ、いちいち書くのが面倒で、Rubyには便利なメソッドが
用意されているのでそれを使おう、これに尽きます。

全てのメソッド呼び出しを管理しているのは今回は成り行き上なのですが
(管理するselfを選別するほうが面倒そうですし)、
A -> B -> (なにか) -> A -> B -> ... などのネストにも対応できるので、
便利といえば便利だと思います。
236デフォルトの名無しさん:2006/05/31(水) 12:01:54
でも元はといえば222の設計が悪いだけだと思っている。
237デフォルトの名無しさん:2006/06/02(金) 15:51:08
でかいテキストファイルを一発でreadlinesするとメモリを圧迫するので注意

と何かに書いてあったけど

小分けにして何度もファイルの入出力を行うのもマシンの負担となると何かに書いてあった

かといってファイルを長時間開きっぱなしにしたまま一行ずつちまちま処理するのもあまりよろしくないようで

一般的にはどうするのが最良とされているのでしょうか

たとえば何万行もあるcsvファイルの3列目の値が"HOGE"となっている行だけを抽出して新たなcsvファイルを作りたいときとか
238デフォルトの名無しさん:2006/06/02(金) 16:05:27
小分けで入出力しとけばOSが適切なサイズでバッファリングを行ってくれると期待する、というのはどうかな。
239デフォルトの名無しさん:2006/06/02(金) 17:30:04
5Mくらいまでなら一気に読み込んじゃうなぁ。
100M超なら切り分けて読み込むけど。
240デフォルトの名無しさん:2006/06/02(金) 17:31:36
誰もそんなことは聞きたくないと思われ
241デフォルトの名無しさん:2006/06/02(金) 17:32:12
テキストファイルで行ごとに処理するなら、File#each_line でいいじゃない。
242デフォルトの名無しさん:2006/06/02(金) 17:37:44
>>240
じゃあ何を聞きたいか詳しく説明しる
243デフォルトの名無しさん:2006/06/02(金) 19:19:32
>>237は「俺がどうしているのか」を聞きたいのではないだろう
244デフォルトの名無しさん:2006/06/02(金) 21:46:13
grep使って出力もらったほうがrubyより速かったりして
245デフォルトの名無しさん:2006/06/02(金) 21:50:22
一般的には、最適な方法を選択するのが最良とされています。
246デフォルトの名無しさん:2006/06/02(金) 22:04:36
じゃあRubyの出番ないなー
247デフォルトの名無しさん:2006/06/02(金) 23:02:59
このお題だとそうだね。
248デフォルトの名無しさん:2006/06/02(金) 23:07:38
「てきとーにgrepやcutしていたシェルスクリプト」をRubyで書き直すとたいていワンテンポ遅いな
249デフォルトの名無しさん:2006/06/03(土) 07:55:09
モルモン♪
250デフォルトの名無しさん:2006/06/03(土) 14:07:51
ここが rubyist.net だったら
>>249 を消してやるのに!
251237:2006/06/03(土) 22:38:42
>>238
なんだか無難な感じですね。参考にします。

>>239
大変参考になりました。

>>241
それだとファイル開きっぱなしになるのでは?

>>244-248
まあ、そういわずにRubyを使う前提でよろしくお願いします;
あと、シェルスクリプトとかgrepとかcatとかの話もunixをまったく知らないのでご勘弁ください…なにぶん初心者なもので…orz。
252デフォルトの名無しさん:2006/06/03(土) 23:08:39
ファイルが開きっぱなしで困るってのは、他のプロセスからのアクセスを
考慮してのことだと思うんだけど、同じスクリプトからのアクセスだったら
排他制御をしっかりしとけばいい話だと思う。

そうでないとしても、本当にそんなことを気にする必要があるのかな。
253237:2006/06/03(土) 23:27:27
>>252
>本当にそんなことを気にする必要があるのかな。

ハイ、まさにそこなんです;
一般に言われている「〜の場合には〜した方がよい」的なのがあれば、変なクセが付く前にその定番的手法を身につけておきたいっていう気持ちがありまして。
このへんに関して特に一般論が存在せず「お好きなように」ということであれば、気にせずreadlinesなりファイル開きっぱなしでeach_lineなりで処理したいと思います。
254デフォルトの名無しさん:2006/06/04(日) 08:13:29
別にreadlinesでもeach_lineでもいいんじゃねーの
それが変な癖であって何か問題が生じるということに気づいたら
それを修正していくことで段々ノウハウわかっていくんだから

最初から定番的方法だけ効率的に覚えていこうなんざおこがましいってもんよ
255デフォルトの名無しさん:2006/06/04(日) 14:33:41
一般論は存在しないだろうね。

一気に読み込んだほうがいい場合もあるし、一行一行処理した方がいい場合もある。
何のためのプログラムなのか、どんなとき使うのかを考えれば
どうやるのがベストかは自ずと分かるような気がする。
256デフォルトの名無しさん:2006/06/04(日) 15:13:02
>>254
世間様に氾濫する「俺流プログラミングテクニック」が矯正されてるかというとあんまそうでもないことを鑑みるに
最初から「正しく」覚えるのは学習コストの面から言っても悪くない選択だと思うぞ

Rubyの場合は「どう書いてもたいてい正しいし趣味レベルではたいして変わらん」というのが少なくないけどな
257デフォルトの名無しさん:2006/06/04(日) 22:23:03
悪いコードがなぜ悪いと言われるのか説明出来てこそ良いコードを書く資格があるというもの

そのために失敗の経験をすることは無駄ではない

経験があることで初めて最初から悪いコードを避け良いコードを書くことが出来る

良いコードだけ都合良く覚えようなんて虫が良過ぎる
258デフォルトの名無しさん:2006/06/04(日) 22:34:06
>>257
俺も無駄とは思わないけど
そんなに暇あるわけじゃないし

良いコードを都合よく覚えてなんの問題があるというのか

よほどの天才以外はどうせそれでも失敗するんだし
259デフォルトの名無しさん:2006/06/04(日) 22:52:12
特に独学だと、それが悪いということにすら気が付かない可能性もある。
始めから良いコードに揉まれるのも良いと思うがね。

Perl の KENT 厨や、PHP 使いなんか見ると特にそう思う。
260デフォルトの名無しさん:2006/06/04(日) 23:03:51
>よほどの天才以外はどうせそれでも失敗するんだし

それならいいよ

良いコードを都合よく覚えると失敗しないと思ってる馬鹿がいるからね
261デフォルトの名無しさん:2006/06/04(日) 23:32:37
小姑の論理だな

楽は許さない
自分と同じに苦労せよ
262デフォルトの名無しさん:2006/06/05(月) 00:02:06
KENTって駄目ソースなの?
読みやすいし、初期のころはセキュリティホールになるだろって
言うコードもあったけど、最近はいいんでない?

スクリプトに生の管理パスワード書かせる仕様はやめた方がいいと思うけど。
263デフォルトの名無しさん:2006/06/05(月) 00:09:43
>KENTって駄目ソースなの?
>読みやすいし、初期のころはセキュリティホールになるだろって
>言うコードもあったけど、最近はいいんでない?

読んだの?

評判だけで判断するより読めば分かる話だよ。
264デフォルトの名無しさん:2006/06/05(月) 00:39:54
>>257
なんか典型的なバカ上司だな
265sage:2006/06/05(月) 01:00:59
はいはいこんな低レベルなスレ覗いてる時点で同類なのに何をいがみ合うことがあるのか。
まあでもどちらかというと、暇がないのに、効率を気にしているのに、
こんなスレ覗いてる香具師がアホっぽいな。

あといきなり細部に拘るようなプログラマは概して使えないと思われ。
ファイル操作のとこだけ鉄板教えてもらってあとどうするつもりなんだこいつは。
教えて君が一生許させるなら別にいいが大抵はそうじゃないんだぞ。
266デフォルトの名無しさん:2006/06/05(月) 02:43:13
生パスは馬鹿除けでしょ。本当はMD5エンコードぐらいさせるべきだし。
まともな香具師ならKENT使わないし、自分で最低限エンコードハックぐらいするでしょ。

何万行もあるならその時点でperlやrubyって選択肢は無いね。プロトタイプぐらいは作るかも知れないけど、最終的にはCで組む。面倒だから最初からCで組むなあ。
267デフォルトの名無しさん:2006/06/05(月) 03:17:32
>>265
> ファイル操作のとこだけ鉄板教えてもらって
じゃあファイル操作のところだけは鉄壁になるな。
いい癖がつくことはいいことだ。
268デフォルトの名無しさん:2006/06/05(月) 03:34:56
きっとモジュールの利用も否定派なんだろうな
こんなもの使ったら身にならないとか本質がわからないとか言って


コードの再利用がありえるのならコーディングスタイルの再利用があってもいい
269デフォルトの名無しさん:2006/06/05(月) 06:10:17
>>266
>何万行もあるならその時点でperlやrubyって選択肢は無いね。プロトタイプぐらいは作るかも知れないけど、最終的にはCで組む。面倒だから最初からCで組むなあ。

おれなら逆だな。何万行にもなるプログラムだからこそPerlやRubyで書いて、行数を減らす。
これをCで書いたら大変すぎ。Cで1万行になるコードはスクリプト言語だと千行で済むから、大きいプログラムほどスクリプト言語で書いて楽をする。
そして、本当に速さが必要な部分だけをCで書く。
270デフォルトの名無しさん:2006/06/05(月) 06:13:18
>>269

Cで構造化プログラミングしてないんですか?
271デフォルトの名無しさん:2006/06/05(月) 08:08:45
>>270
はぁ?バカですか?
272sage:2006/06/05(月) 09:19:55
>>269
状況にも因るかな。
→人間が楽したい(させなければいけない)OR機械に楽させたい(させなければいけない)。
273デフォルトの名無しさん:2006/06/05(月) 09:24:33
何万行もあるならってのは、読み込む対象のファイルが何万行もあるってことでない?
274デフォルトの名無しさん:2006/06/05(月) 09:24:57
>>272
sageはそこじゃなかった orz
275デフォルトの名無しさん:2006/06/05(月) 10:40:53
rubyで何万行も読み込んだら、速攻kernelにkillされてアボーンするよ。
276デフォルトの名無しさん:2006/06/05(月) 10:59:22
んなこたぁない
277デフォルトの名無しさん:2006/06/05(月) 11:06:40
irbで何万行も読み込んだら、速攻Segmentation faultでBUGにされてアボートするよ。
278デフォルトの名無しさん:2006/06/05(月) 11:09:35
それは行数じゃなくて容量の問題じゃないのか?
279デフォルトの名無しさん:2006/06/05(月) 12:32:50
>>267
File::(open|read|write|close)する部分は実アプリだとごくごく一部だけどな。

まあ教えてやってよ。鉄板コードを。その都度。
280デフォルトの名無しさん:2006/06/05(月) 12:55:53
>>279
最早負け惜しみにすら聞こえんな
281デフォルトの名無しさん:2006/06/05(月) 13:58:20
>>263
たとえばどんなとこが駄目なの?

おれが敢えて挙げるとすれば、グローバル変数がやたらと多いくらいしか
不満はないんだけど、他にはどういうところが良くない?

巷でよく使われているスクリプトの中には、絶望的なくらい汚いソースの
ものもあるけど、KENTってかなりましな方だと思っている。
282デフォルトの名無しさん:2006/06/05(月) 14:05:25
下と比べて叩いて喜んでる場合じゃないと思うが
283デフォルトの名無しさん:2006/06/05(月) 14:11:46
だよなー。それほどまでに KENT を擁護して何か得るものがあるとは思えないし。
284デフォルトの名無しさん:2006/06/05(月) 15:11:42
>>280
そりゃそうだ。
勝ち負けの話じゃねえんだから。
285デフォルトの名無しさん:2006/06/05(月) 15:18:44
べつに負け惜しみって勝敗についてだけ使う言葉じゃねえよな
286デフォルトの名無しさん:2006/06/05(月) 15:19:34
>>284
アレは明らかに皮肉なのだが。
287デフォルトの名無しさん:2006/06/05(月) 15:44:45
この頭の弱さになんか可哀想になってきた
288デフォルトの名無しさん:2006/06/05(月) 16:12:34
まあせいぜい頑張って KENT みたいなコードが書けるようになれよ。
289デフォルトの名無しさん:2006/06/05(月) 16:30:41
ruby廚は無駄な再生産はしない。
わざわざkentライクなもの作るくらいならrorで作る。

なんでもperlで済ませようとするperl廚とは違うよ。
290デフォルトの名無しさん:2006/06/06(火) 00:41:11
KENTのコードは汚い
これだけはガチ
291デフォルトの名無しさん:2006/06/06(火) 09:00:09
KENTでPerlの勉強をした。
Rubyはお手本がないから困る。
292デフォルトの名無しさん:2006/06/06(火) 10:13:45
Perlerが糞コードばっかり書くのはKENTがお手本になってるからなのか
293デフォルトの名無しさん:2006/06/06(火) 10:15:54
誰が悪いってわけでもないけどな
294デフォルトの名無しさん:2006/06/06(火) 10:18:49
悪いお手本なら無い方がマシなので Ruby ユーザは恵まれてるよな。
295デフォルトの名無しさん:2006/06/06(火) 15:25:07
KENT的なコードは収斂の結果だと思う
適当に書くとそうなるってことはその利用感覚が「普通である」証拠

「凡人が普通に適当に使う」と足元を撃ち抜く仕様であるというのなら
それは言語作者やモジュール作者が気を遣うべき箇所だと考える

…Perlくらい有名なら「定型動作しかしないがガチガチにセキュアなネット利用モジュール」とか
誰か作ってそうなもんだけど
296デフォルトの名無しさん:2006/06/06(火) 20:06:44
KENTってどっかのサイトで、10年前のような糞コードの塊とか言ってさらされてたなー。
どこだっけか。
297デフォルトの名無しさん:2006/06/07(水) 18:55:43
perlってああいうもんだと思ってたんだけど、そうでもないの?
perlの綺麗なソースっていうと、たとえばどんなのがあるかな。
298デフォルトの名無しさん:2006/06/07(水) 19:31:15
今時のperlはこういうのを覚えとけって言うページがあった。
10年前の大学生のようなコードかくなっていう記事。
前にこのスレでも見かけたのだがどこだったか。
299デフォルトの名無しさん:2006/06/07(水) 20:07:46
use strict と use warnings だかなんだか最初から使ってプログラミングしろというのは聞いた覚えがある
300デフォルトの名無しさん:2006/06/07(水) 20:40:38
301デフォルトの名無しさん:2006/06/07(水) 21:33:50
こんだけケント・ベックを貶すってこのスレの住人は一体何様だよ、と。
302デフォルトの名無しさん:2006/06/07(水) 21:37:17
有名だから嫉妬?
303デフォルトの名無しさん:2006/06/07(水) 21:41:17
ユタ州イナカジャナイヨ!
304デフォルトの名無しさん:2006/06/07(水) 22:19:19
相談です。
プログラム始めようと思い人に相談すると、最初はRubyを進められました。
で、参考書買おうと思いますが、何かお勧めを教えてください。
達人プログラマーガイドというのが、評判よさそうですが、玄人向きですよね。

(相談した人はあまり参考書に詳しくありませんでした)
305デフォルトの名無しさん:2006/06/07(水) 22:23:49
最初にRuby勧める奴はロクなやつじゃねえぞ
目指すものにもよるがな


Amazon.co.jp:たのしいRuby―Rubyではじめる気軽なプログラミング: 本
http://www.amazon.co.jp/exec/obidos/ASIN/4797314087/

発売は古いが普通に学ぶだけならおおむね問題ない
というかこれ以外いいのがないのが実情
306デフォルトの名無しさん:2006/06/07(水) 23:01:33
どもです。
会社の環境と学びやすさから勧められました。
ある程度マスターしたらJavaに進んで、それからは自由に。
という感じ。
はじめたらまた来ますね。
307デフォルトの名無しさん:2006/06/07(水) 23:03:41
rubyの場合、言語仕様の前にオブジェクト指向の説明が入ってそれを理解しないとうまく使えないのが問題。
オブジェクト指向って、ふっと発想の転換でアハッするものだしねえ。
308デフォルトの名無しさん:2006/06/07(水) 23:10:57
というか、この本品切れですか…。
amazonはアホみたいな値段ついてるし。
309デフォルトの名無しさん:2006/06/07(水) 23:16:10
>>307
それは非オブジェクト指向の経験があるからでしょ
最初からプログラミングとはこういうもんだよ、
つって覚えれば、発想の転換なんて必要ないだろ
オブジェクト指向って苦労するのは、転換が必要なときであって
最初からそれで覚えるなら、そんなに難解ではないと思うんだけど、どうよ
310デフォルトの名無しさん:2006/06/07(水) 23:19:17
同感だね
オブジェクト指向むずかしいって言う人しばしば見かけるけど
個人的にはオブジェクト指向になんら違和感は覚えなかったし
むずかしいって言う人は非オブジェクト指向からの乗り換えに苦労した人ではなかろうか

というか俺はいまだにポインタとかの方が難解だと思う
311デフォルトの名無しさん:2006/06/07(水) 23:19:27
>>307
>>305だと133ページまでロクな解説は出てこないから安心しろ(w
それまでは「なんかドットの後ろにやらせたいことつけるらしい」程度の理解でいいし


なんならずっとその程度の理解でもいい
312デフォルトの名無しさん:2006/06/07(水) 23:45:29
>>311
それだよ
「なんかドットの後ろにやらせたいことつけるらしい」ってのに気づいたとき
急にRubyがわかるようになった
313デフォルトの名無しさん:2006/06/08(木) 01:12:37
>312
それって、VBすら出来なくないか?
314デフォルトの名無しさん:2006/06/08(木) 01:45:43
>>300
読んでみたけど、Perlは糞と言うイメージがいっそう強くなったんだが。
こんなの気にして書くくらいならRuby,Python,次点でPHP(Perlよりてきとう)のほうがいいよ。

汎用性はともかく勉強目的で
気楽に実行だけならLisp系インタプリタでもいいな。
でなきゃCインタプリタとかttp://labs.cybozu.co.jp/blog/kazuho/archives/c/
315デフォルトの名無しさん:2006/06/08(木) 03:27:06
漏れはポインタは理解出来た香具師だからオブジェクト指向のほうが苦労したけどな。
CPU的にどう動くのか理解できなかった。
316デフォルトの名無しさん:2006/06/08(木) 04:02:47
さいですか
317デフォルトの名無しさん:2006/06/08(木) 12:45:15
カプセル化や継承がわかんないうちは、オブジェクト指向が理解できたとはいわない。


と思う。
318デフォルトの名無しさん:2006/06/08(木) 12:45:59
ポインタ理解できたらオブジェクト指向も理解しやすいんじゃ。
ポインタなくて非オブジェクト指向系の言語からの乗換えが一番大変な気がする。
319デフォルトの名無しさん:2006/06/08(木) 12:51:43
「オブジェクト指向が理解できた」ってのは「C言語マスターした」と同じくらい間抜けな概念だと思う
320デフォルトの名無しさん:2006/06/08(木) 13:06:19
カプセル化や継承がオブジェクト指向に要ると思ってるうちは、理解できたとはいわない。


と思う。
321320:2006/06/08(木) 13:08:37
我ながら言ってることがおかしいな。
要るっちゃあ要る。けど必須ではない。くらいか。
322デフォルトの名無しさん:2006/06/08(木) 13:24:43
クラス継承が出来ないとほとんどのオブジェクト操作が使えないんだけどね。
323デフォルトの名無しさん:2006/06/08(木) 13:39:52
>>322
んなこたーない。クラスがないインスタンスベースの言語はどうなる?

>>320
それらの要不要は「オブジェクト指向」の文脈による。

ttp://d.hatena.ne.jp/sumim/20040525/p1
324デフォルトの名無しさん:2006/06/08(木) 18:03:22
> ポインタなくて非オブジェクト指向系の言語からの乗換えが一番大変な気がする。
Rubyユーザは、Perl から乗り換えたタイプの人が一番多い気がする。

一応 Perl はOOPLだけどさっ。
325デフォルトの名無しさん:2006/06/08(木) 20:25:31
Rubyとは直接関係ないけど、プログラミングの質問。
ファイル名はfile、ディレクトリ名はdirという変数をよく使うんですが、
ファイルでもディレクトリでもどっちもとるような変数を何にするかでよく困ります。
ディレクトリもファイルの一種というのがUNIXの設計だそうですが、
一般的な間隔だとファイルとディレクトリ(フォルダ)は別のものだと思うんです。
で、「ファイルまたはディレクトリ」を表すような適当な用語を知らないんで、
もしなんかいい名称があれば教えてください。
変数名重要。
326デフォルトの名無しさん:2006/06/08(木) 20:27:44
path
327デフォルトの名無しさん:2006/06/08(木) 20:39:48
file_or_directory
328デフォルトの名無しさん:2006/06/08(木) 20:51:24
むしろfileという名前が色々使えるのが困る

File.open(file){|file|
file=file.read
}

とかどれも違和感ないもの
329デフォルトの名無しさん:2006/06/08(木) 20:54:04
>>326
pathか。。。path。。。path。。。
なんか、pathだとfileともdirectoryとも違う、微妙に別の概念のような気がするんですが、そんなことないですか。

>>327
それはちょっとやだなあ。file_or_dirもなんかかっこわるい。
せっかくのアドバイスに文句いって申し訳ない。
330デフォルトの名無しさん:2006/06/08(木) 20:55:40
>>328
そうなんですよね。
・ファイル名
・ファイルオブジェクト
・ファイルの中身
のどれもfileで表しそうだから、それぞれ
・filename
・f
・content
とかにしてます。
331デフォルトの名無しさん:2006/06/08(木) 21:24:50
「ディレクトリエントリ」で e とか「ノード」で n とか。
332デフォルトの名無しさん:2006/06/08(木) 21:35:43
ストリーム
333デフォルトの名無しさん:2006/06/08(木) 22:18:52
>>330でいいんじゃねーの?
つか、ファイルもディレクトリも取り得る変数ってどんな状況?
334デフォルトの名無しさん:2006/06/08(木) 22:20:41
http://d.hatena.ne.jp/keyword/Ruby
はてなのRubyがリンク集になっているのに気づいたw
誰だよこれやったの。
335デフォルトの名無しさん:2006/06/08(木) 22:25:51
>>333
ディレクトリをopen()してread()しているときです。
ディレクトリの要素はファイルかもしれないし、ディレクトリかもしれない。

>>331
エントリかあ。それもいいかも。
336304:2006/06/08(木) 22:27:40
けっきょくのところ、305の本以外には学ぶに値する本は無いってことですか?
下手に本買うならネットで学習したほうがよい?
337デフォルトの名無しさん:2006/06/08(木) 22:48:45
>>335
pathだな

どうせそのあとファイルなのかディレクトリなのか調べるんだろ
そのときRubyリファレンスでは、

> File.directory?(path)
> FileTest.directory? と同じです。

ほらpathだ、と言おうとしたら

> FileTest.directory?(filename)
> filename がディレクトリの時、真を返します。

こっちはfilenameだった・・・orz
338デフォルトの名無しさん:2006/06/08(木) 23:38:42
>>336
>>305は初心者向けなんだが、>>304がずっと初心者でいるつもりならそ
う思ってもいいかも。
339デフォルトの名無しさん:2006/06/08(木) 23:42:20
>>338

いえ、尼では品切れみたいで手に入りにくそうなので、
他のよさそうなのをお尋ねしているのですが。
340デフォルトの名無しさん:2006/06/08(木) 23:49:10
>>335
(広義の)file でいいんじゃねーの?
regular fileもディレクトリもデバイスファイルその他も「ファイル」なんだし。
341デフォルトの名無しさん:2006/06/09(金) 00:59:17
でもディレクトリ名もファイル名も含むのはパスだしなあ。
漏れもfile_or_directoryがいいとおもう。
342デフォルトの名無しさん:2006/06/09(金) 02:36:34
>>339
初心者から入るならウサギ本を(高いけど)買えばこれ一冊で間違いないよ。書評みてみ。
http://www.amazon.co.jp/exec/obidos/ASIN/4894714531/

英語が読めるなら原書で買えば、最新版にも対応してるしちょっと安いぞ。あんまり変わらないけどね。
343デフォルトの名無しさん:2006/06/09(金) 02:52:52
>339
しいて買うなら、Rubyプログラミング基礎講座、かな。新しいし。
たのしいRubyは半分以上がリファレンスみたいなものだから、一通り読んだらなくてもかまわないんだが、
PC版HTMLヘルプがすこうし使いづらいんで、紙のマニュアルが手元にあるとはじめのうちは心強い。
>プログラム始めようと思い
配列・文字列・正規表現・ファイル入出力とかある程度できないうちは、他の本よんでもなあ。
とりあえず、本買う前にrubyco(るびこ)の日記とRubyistMagazineでも読んでみそ。
344デフォルトの名無しさん:2006/06/09(金) 07:10:46
>>343
> 新しいし
そういう理由で物を勧めるな
345デフォルトの名無しさん:2006/06/09(金) 09:46:06
>>342
今それを買うのは時期的に微妙・・・
346デフォルトの名無しさん:2006/06/09(金) 10:39:26
これ?

プログラミングRuby 言語編
http://www.amazon.co.jp/gp/product/4274066428/
347デフォルトの名無しさん:2006/06/09(金) 10:53:39
発売前の場合はAmazonは不適切だな

プログラミングRuby 第2版 言語編
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-06642-8
> 定評があるRubyの解説書を、Ruby作者の監訳により日本語に翻訳(言語編)

プログラミングRuby 第2版 ライブラリ編
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-06643-6
> 定評があるRubyの解説書を、Ruby作者の監訳により日本語に翻訳(ライブラリ編)

今月発売らしいが具体的に何日かはよくわからん
あとあんま入門書っぽくない

あとウサギ本は入門書としてはちと小難しいぞ、英語ベースだし
ジュークボックスの例えにピンとくる日本人がどれだけいるやら
他のまともな文法の言語の経験がない場合は読み進めるのは辛いと思う

>>343の本は現在入手可能で初心者のほうを向いた安い本だが…なんか…なんか…つまんねえ
Rubyは手段であるという視点で学べるが利用モチベーションが上がらないという器用な本
348デフォルトの名無しさん:2006/06/09(金) 11:39:17
>>347
そうなんだよ、Rubyプログラミング基礎講座、この本つまらんよな
教科書みたい
349デフォルトの名無しさん:2006/06/09(金) 11:47:56
なんつーか実際にやりたいこと(目標・目的、最初は高望みイクナイ)があって、
それをどういうふうにプログラムにすりゃいいかっていうがプログラムを書くために肝心なところであって、
そういうのはあんまり本で読んだことないんだけど俺は。

俺の場合UNIXシェルプログラミングとかの本で、入力に対してif ;then;else;fiとか
globしてwhileしてgrep|sort|awkしてとか、そんなののほうがわかりやすかったよ。
ちょうどそのときテスターで入ったとこがHP-UXで処理結果ファイルからシェルでサマリ出したりとか
してたんで目標があってモチベーションが高かったから理解できたんだと思っている。
Rubyもその昔静的にRDからHTMLに吐く日記ツールをなんとなく必要に迫られて作って使ってたから今それなりに使えてる。
つまり、自分のニーズに合わないサンプルなんかで勉強しても身に付かない
目標、目的もないでは、モチベーションが低いのでプログラミングは学習できない、と言いたい。
なので、目的があるならそれを書いたら誰かピンポイントな本を知ってるかも知れないよ。
それはRuby本じゃないかもしれないけど。

Rubyに限らず要件を満たすための手順をどうプログラムに変換するかっていう
考え方の壁だけ越えればあとはだいたい大丈夫だしほとんどの言語は使えると思うんだけどな。
350デフォルトの名無しさん:2006/06/09(金) 12:32:32
>>349
「水流をやわらげ、水はねを防ぎます」まで読んだ
351デフォルトの名無しさん:2006/06/09(金) 15:37:14
>>347-348
> あわせて買いたい
> 『Rubyプログラミング基礎講座』と『恋するプログラム―Rubyでつくる人工無脳』、どちらもおすすめ!
これはどうよ。
352デフォルトの名無しさん:2006/06/09(金) 16:05:43
>>351
Rubyの入門書としてはいかがなものかと。
353デフォルトの名無しさん:2006/06/09(金) 16:09:16
結局、ロクな書籍は無いってことでおk?
354デフォルトの名無しさん:2006/06/09(金) 16:22:16
プログラミング初心者にRubyを薦めるのがアフォ
355デフォルトの名無しさん:2006/06/09(金) 16:47:58
煽りとしては疑問だが独学に際してのサポート力という点では正解だな
356デフォルトの名無しさん:2006/06/09(金) 16:55:17
日本語でおk
357デフォルトの名無しさん:2006/06/09(金) 18:09:52
>>355
掃いて捨てるほど書籍のあるPerlのほうが好ましいともいえる
358デフォルトの名無しさん:2006/06/09(金) 19:20:08
それらの書籍が掃いて捨てられる程度のプログラマを量産してるわけですね
359デフォルトの名無しさん:2006/06/09(金) 21:05:43
本は数じゃなくて質だろ。Javaみたいにクソな本がたくさん出てるより、一冊でいいからまともな本があればそれでいい。
初心者には「たのしいRuby」、中級者以上にはウサギ本でOK。
360デフォルトの名無しさん:2006/06/09(金) 21:23:37
RubyはTIPSを知らなくても使いこなせる言語だから本は要らないって感じ。
なんつーかPerlのように使いこなしの「コツ」みたいなのは特になくって
技術的な知識あればマニュアルがすらすら読める感じ。
361デフォルトの名無しさん:2006/06/09(金) 21:40:25
つ【レシピ本】
362デフォルトの名無しさん:2006/06/09(金) 22:15:20
技術的な知識がないとマニュアルをすらすら読むのは厳しい。厳しすぎる。
363デフォルトの名無しさん:2006/06/09(金) 22:36:49
技術的な知識ってつまりクラスとかメソッドとか
マニュアル読めるレベルの予備知識ね。
Java/C++を使えるなら、すらすら掛けるまで3日とかからないはず。
364デフォルトの名無しさん:2006/06/09(金) 22:51:40
レシピブックは良書。
365デフォルトの名無しさん:2006/06/09(金) 23:18:36
>>334
サンクス。
勉強になった。
366デフォルトの名無しさん:2006/06/10(土) 04:16:54
a,b,cと3(n)個の要素があった時に、
全通りの組み合わせを出力するにはどんなやり方が賢いですか?
a-b-cとc-b-aは区別しますし、a-a-aや、a-aも出力したいです。
nは最大でも10程度なので、簡単なアルゴリズムで良いと思うのですが。
367デフォルトの名無しさん:2006/06/10(土) 08:00:59
>>366
arr = ['a', 'b', 'c']
arr.each do |x|
 arr.each do |y|
  arr.each do |z|
   puts "#{x}-#{y}-#{z}"
  end
 end
end
368デフォルトの名無しさん:2006/06/10(土) 08:56:35
module Enumerable
  def repeated_permutation(n)
    if n == 1
      each {|x| yield [x]}
    else
      each do |x|
        repeated_permutation(n-1) do |y|
          yield [x] + y
        end
      end
    end
  end
end

ary = [1,2,3,4,5]

ary.repeated_permutation(1) {|a| puts a.join("-")}
ary.repeated_permutation(2) {|a| puts a.join("-")}
ary.repeated_permutation(3) {|a| puts a.join("-")}
369デフォルトの名無しさん:2006/06/10(土) 13:27:29
>>367,368
うわ、さすが綺麗。
ありがとう
370デフォルトの名無しさん:2006/06/10(土) 15:35:36
gemでpermutationモジュールがあったなあ。
あと俺はこれを参考にあるプログラムを書こうと思っているが気合いが入らない。
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/26545
371デフォルトの名無しさん:2006/06/11(日) 04:54:22
a,b,cと3(n)個の要素があった時に、
重複しない全通りの組み合わせを出力するにはどんなやり方が賢いですか?
a-b-cとc-b-aは区別します。
a-a-aや、a-aは出力しません。

1,2,3 のときは

1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1

の6通りを出力です。
372デフォルトの名無しさん:2006/06/11(日) 06:39:19
これってどっかの宿題だろ。どうみても実プログラムで困ってるとは思えん。

def f(arr)
 arrの要素eについて繰り返す
  arrからeを取り除いたものをarr1とする
  arr1が空なら
   print e, "¥n"
  そうでなければ
   print "#{e}-"
   f(arr1)
  end
 end
end

まずは自分で考えような。
で、Rubyの宿題を出すような学校ってどこ?
373デフォルトの名無しさん:2006/06/11(日) 18:50:51
>>371-372
マルチ?
374デフォルトの名無しさん:2006/06/11(日) 20:50:03
マルチのようだが微妙に質問内容が変わってるな
今度のの方が簡単になってる
375デフォルトの名無しさん:2006/06/11(日) 21:03:58
マルチ指摘するなら、そっちのスレも教えてくれよ。
376デフォルトの名無しさん:2006/06/11(日) 21:41:22
マルチじゃねえや
このスレのすぐ上だった
377デフォルトの名無しさん:2006/06/11(日) 21:49:39
JSF(JavaServer Faces)2
http://pc8.2ch.net/test/read.cgi/tech/1142573697/

これか!
378デフォルトの名無しさん:2006/06/11(日) 22:51:36
うへ、366で俺が質問したのだれかがパクって371で質問してやがる。
379デフォルトの名無しさん:2006/06/11(日) 23:16:27
これはひどい自演ですね
380デフォルトの名無しさん:2006/06/12(月) 16:29:11
【日本Rubyカンファレンス2006】「趣味の言語からビジネスの言語へ」
ttp://itpro.nikkeibp.co.jp/article/NEWS/20060612/240648/
381デフォルトの名無しさん:2006/06/13(火) 13:09:57
Subject: [ruby-list:42388] Rubyカンファレンスのレポート記事を公開させていただきました

貴社のの力不足により,事例を中心とした一部のご紹介にとどまってしまいましたこ
とをお詫びいたします。

貴社じゃおかしくないか?
382デフォルトの名無しさん:2006/06/13(火) 13:53:50
弊社だね
383デフォルトの名無しさん:2006/06/13(火) 14:03:55
貴社で正しい可能性もなきにしもあらずだが間違えてると考えるほうが妥当だな
そしてスレ違い
384デフォルトの名無しさん:2006/06/13(火) 14:05:29
記者の変換ミスくらい目をつぶろうよ……。
385デフォルトの名無しさん:2006/06/13(火) 15:04:35
なるほど、記者の間違いなのか。弊社との間違いだと思ったよ。
386デフォルトの名無しさん:2006/06/13(火) 15:29:01
それもなんかおかしい。
他人事のように感じる。
387デフォルトの名無しさん:2006/06/14(水) 20:34:52
ループの上限を無限にすることってできるんですか?
調べてみたけれど見つかりません…

ある条件を満たす最初の正の整数を求めたいんですが、
今は、
1.upto(10000000000000) {
}
と適当に大きい数を上限にしていますが、
上限を無しで、条件を満たしたらbreakにしたいのです
388デフォルトの名無しさん:2006/06/14(水) 20:48:37
while true do
end
389デフォルトの名無しさん:2006/06/14(水) 21:18:06
loop do

end
390デフォルトの名無しさん:2006/06/14(水) 22:00:42
>>388,389
ありがとうございます
やっぱそうなりますか

schemaか何かで
ループの範囲で 0..
って書いてたのを見たので
391デフォルトの名無しさん:2006/06/14(水) 22:07:46
>>389がRubyっぽいと思う

i=0
loop do
 break if calc(i)
 i=i+1
end



i=0
until calc(i) do
 i=i+1
end

のどっちがカッコイイかはよくわからない
392デフォルトの名無しさん:2006/06/14(水) 22:19:15
STDIN.each {
p $.
}
393デフォルトの名無しさん:2006/06/14(水) 22:24:05
>>391
ループからの脱出個所が1箇所だけ(untilのとこ)なら後者
ループからの脱出個所がbreakとかreturnとかでたくさんあるなら前者
394デフォルトの名無しさん:2006/06/14(水) 23:29:13
静的にRDからHTMLに吐く日記ツール見てみたい。うpしといて。

当社じゃないの? おまいらビジネスマナー研修すら受けてない?
395デフォルトの名無しさん:2006/06/14(水) 23:51:18
もし内容の不都合があるとしたら、それはまず自分自身だという意味で「記者」って書きたかったんでしょ。
つか、書いた本人が「弊社の力不足」なんて言ったら、それこそ他人事みたいだ。
396デフォルトの名無しさん:2006/06/15(木) 00:37:30
Rubyでperlで言う
なんとか or die
みたいなのをやるのってどうするんでしょ
397デフォルトの名無しさん:2006/06/15(木) 00:44:06
begin
resume
ensure
end
398デフォルトの名無しさん:2006/06/15(木) 00:47:30
>>396
ああいう妙に便利な感じにはできない
できると便利だと思うんだがRubyには輸入されなかった
399デフォルトの名無しさん:2006/06/15(木) 01:03:43
>>396
なんとか or raise "ほげほげ"
400デフォルトの名無しさん:2006/06/15(木) 01:05:36
なんとか or die

オブジェクト指向的じゃないような
401デフォルトの名無しさん:2006/06/15(木) 01:20:00
Rubyにもor演算子あるから、
f = open('file') or raise "error"
とかけるよ。
402デフォルトの名無しさん:2006/06/15(木) 01:27:01
開けなかった場合、FALSEじゃなくて例外が発生するから、or dir みたいな書き方は出来ない。
403デフォルトの名無しさん:2006/06/15(木) 01:56:41
私のjcpadの宿題を全部やってくれる所はありませんか?
404デフォルトの名無しさん:2006/06/15(木) 03:13:00
>>402
なら rescue 演算子で良いんじゃないの?
405デフォルトの名無しさん:2006/06/15(木) 09:00:05
「なんとか」がエラー時に例外を発生させるもので、エラーに乗じて何かメッセージを出したい場合

なんとか rescue(STDERR.puts "エラーだよ: #{$!}")

begin
 なんとか
rescue => err
 STDERR.puts "エラーだよ: #{err}"
end

「なんとか」が自作でエラー時にfalseを返すものである場合

 なんとか or raise

 なんとか or raise('姉さん事件です')

…これは「なんとか」の中で素直に例外を発生させてくれ


dieほどお手軽便利なものはないな
事前の用意がご面倒でも範囲を指定して待ち構えて例外を捕捉するのがRuby流なんじゃないかな
406デフォルトの名無しさん:2006/06/15(木) 10:27:34
>>395
一人称が「記者」って見慣れないな。
「筆者」なら見るが。
この場合素直に「私」でいいとオモタ。

>>396
openでdieしたいだけならRubyではエラーの場合ほっとけばその場で自動的にdieすっから何もしなくていいぞ。
例外時デフォルトでor dieするRubyは先進的だなあ。
407デフォルトの名無しさん:2006/06/15(木) 16:35:53
>>406
筆者ってああいうレポートの場合にも使うの?
あと、「私」は私的な印象が強い感じがする。
408デフォルトの名無しさん:2006/06/15(木) 20:01:31
弊社を使うと他人事に感じるという感覚が俺には分からん
409デフォルトの名無しさん:2006/06/15(木) 20:15:16
いいかげんしつこいよ
410デフォルトの名無しさん:2006/06/15(木) 20:15:51
だって「記者」って仕事は特別だから。
411デフォルトの名無しさん:2006/06/15(木) 20:24:58
スコープがよくわかりません
下のような一括してテキストの一部を置換するスクリプトを書きましたが
この場合グローバル変数を使う以外に方法がないのでしょうか?
グローバル変数は使ってはいけないように言われている気がするのですが

file = Dir.glob("./*.html")
file.each {|t|
File.open(t) {|f|
content = f.read
$ncontent = content.gsub(/aaa.ne.jp/, "bbb.ne.jp/")
}
File.open("./2/" + t.gsub(/.\//, ""), "w") {|f2|
f2.write($ncontent)
}
}
412デフォルトの名無しさん:2006/06/15(木) 20:43:14
「ブロックのそと」で有効だった変数は「そのブロックの中にあるブロックの内部」でも有効
ブロックの外でも利用したい変数があるならブロックが開始される前に代入して存在させておけばよい
なんとなく気持ち悪いがこれは仕方がない

file = Dir.glob("./*.html")
file.each {|t|
ncontent = '' # File.openのブロックの外で利用したいので
File.open(t) {|f|
content=f.read
ncontent = content.gsub(/aaa.ne.jp/, "bbb.ne.jp/")
}
File.open("./2/" + t.gsub(/.\//, ""), "w") {|f2|
f2.write(ncontent)
}
}

っていうかいろいろ変だな
aaa.ne.jpの正規表現はきっと望んだ形ではないだろうしf2はfでよかろう
413デフォルトの名無しさん:2006/06/15(木) 20:44:56
>>411
3行目に、"ncontent = nil"とすればグローバル変数を使わずに住むし、File.openでブロックを
使わなくてもグローバル変数にする必要が無い。
ただその程度のスクリプトならグローバル変数でもかまわないと思う。
スクリプトはちゃちゃっと書いて、さっと動かすもんだし。
414デフォルトの名無しさん:2006/06/15(木) 20:46:10
>>412
わかりました、どうも
確かに気持ち悪いですね

aaa.ne.jpは書き込み時に適当に書いてしまいました
正規表現が身に染みこんでいないので適当か不適当かまで
考えてなかったです
415411:2006/06/15(木) 20:49:28
>>413
> ただその程度のスクリプトならグローバル変数でもかまわないと思う。

確かに(^_^;
でもやっぱり気になりますね
Cの宣言みたいな物だと思っておけばいいのかな
416デフォルトの名無しさん:2006/06/15(木) 20:53:40
files = Dir.glob("*.html")
files.each {|file|
  replaced = String.new
  File.open(file) {|f|
    content = f.read
    replaced = content.gsub(/aaa\.ne\.jp/, 'bbb.ne.jp/')
  }
  File.open("./2/" + file, "w") {|f|
    f.write(replaced)
  }
}

>>413
スコープを理解できないという理由でグローバル変数を使うのは危険で無駄
417デフォルトの名無しさん:2006/06/15(木) 20:55:52
ん?ブロックの終わりでローカル変数のスコープが終わるってわかってるから
グローバル変数にしたんじゃないの?
418デフォルトの名無しさん:2006/06/15(木) 20:59:54
スコープの範囲の利用の仕方を理解すると、
書き捨てスクリプトでもグローバル変数を使う機会はまずなくなるな。
普段のスクリプトを書くときも書き捨てを書くときもたいてい同じ書き方になる。

>>417
スコープの範囲というかスコープの扱い方を知ってるかどうかだと思う。
ブロック前に変数に代入しておくとか、そういうことをたまたま知らなかっただけでは。
419デフォルトの名無しさん:2006/06/15(木) 21:03:48
>>412でグローバル変数をローカル変数にするメリットが全然わからんのだが・・・
いや、議論するつもり無いんで読み捨ててください。
420デフォルトの名無しさん:2006/06/15(木) 21:04:50
ぐは、>>411のまちがい
421419:2006/06/15(木) 21:07:02
ちなみに俺も>>412のように書くから。
でもそれはプログラマとしての強迫観念のなせる業であって、俺自身なぜローカルにするのだと
聞かれると答えられないんだよね・・・
422デフォルトの名無しさん:2006/06/15(木) 21:09:41
>>419
スコープという安全装置のないグローバル変数を使わずにすむ


まああれだ、どんな小さなスクリプトでも必ずクラスを作ってスクリプトの最後に

Hoge.new

の一行で実行させるとかそんな細かい手前勝手ポリシーの一種だと思ってもらえれば
423デフォルトの名無しさん:2006/06/16(金) 00:20:39
>422
更に初期化子に何でもかんでもさせるんじゃない!! という強迫観念にとらわれた漏れなんぞは
hoge = Hoge.new # initializeにはできるだけ「初期化」に関わることしか書かない。例外上がるようなのも書かない
hoge.setup # 例外が上がるかも? な「初期化」はここ
hoge.do_work # お仕事本体
とわざわざ分ける……意味ねーって? いいじゃねーかヽ(`Д´)ノ
424デフォルトの名無しさん:2006/06/16(金) 00:50:13
なんでグローバル変数が駄目と言われるかというと、使いやすくて便利だからだな
goto文みたいなもんだ
425デフォルトの名無しさん:2006/06/16(金) 00:54:10
>>423
あんまりいくない。
おまじないを強要させてるだけ。
そのクラスを使う側のことも考えろ。
426デフォルトの名無しさん:2006/06/16(金) 02:28:22
>>423
読み出し順間違えて、はじょうしそうだなw
427デフォルトの名無しさん:2006/06/16(金) 02:31:08
USB メモリで実行できる PortableRuby みたいなのってある?
インタプリタだから、あると面白いと思うんだけど。
428デフォルトの名無しさん:2006/06/16(金) 02:31:56
>>411
そういうときはIO.read

Dir.glob("./*.html") {|t|
content = File.read(t)
content = content.gsub(/aaa\.ne\.jp/, "bbb.ne.jp/")
File.open("./2/" + t.sub(/.\//, ""), "w") {|f2|
f2.write(content)
}
}
429デフォルトの名無しさん:2006/06/16(金) 02:33:06
>>427
USB メモリにインストールすればいいだけ。
430デフォルトの名無しさん:2006/06/16(金) 03:12:00
そこがRubyのいいところでもあるな。必要なディスクスペースは10MB前後。
それに対してPerlは100MB前後。その分ライブラリが充実してるとも言えますが。
431デフォルトの名無しさん:2006/06/16(金) 07:29:21
>>427
USB HDDに入れて持ち歩いてる
432デフォルトの名無しさん:2006/06/16(金) 09:42:33
>>427
俺の場合、USBメモリにrubyを放り込んだ上で
NYAOSとJmEditorを入れて簡易開発環境にしてる
NYAOSのおかげで環境変数設定の手間も要らないぜ

本当はRDEを使いたいんだけど
RDEはレジストリ使ってるみたいなので断念
433デフォルトの名無しさん:2006/06/16(金) 10:58:14
>>426
> 読み出し順間違えて、はじょうしそうだなw
はじょう?
波状?
434デフォルトの名無しさん:2006/06/16(金) 11:06:17
435デフォルトの名無しさん:2006/06/16(金) 13:36:08
PerlにあってRubyにないようなライブラリで、主なものってのはどんなのがある?
自分がほしいものとしては、これといって思いつかないんだけど。
436デフォルトの名無しさん:2006/06/16(金) 15:06:18
そういう意味のライブラリじゃないけど、諸文字エンコーディング間のコンバージョン。
437デフォルトの名無しさん:2006/06/16(金) 19:00:43
あんま初心者スレで聞くようなことでもないな
438デフォルトの名無しさん:2006/06/16(金) 19:27:52
「はじょう」は、わざと読み間違えて

←なぜか変換できない

ていうアレと同じロジックだよ。
439デフォルトの名無しさん:2006/06/16(金) 22:53:55
>>438
ごめん。破綻のことを言ってるって全然わからなかったorz
440デフォルトの名無しさん:2006/06/16(金) 23:32:26
a href="http://なんとか" ではなく、
a href="なんとか" という文字なときに処理をしたいのですが、
以下のような感じでできました。
ちょっと、冗長です。
もう少しスマートにできまないでしょうか?

if !(line =~ /<a href="http:/) and line =~ /<a / then
441440:2006/06/16(金) 23:44:20
実は、
line.gsub!(/(<a href=")([^"]*")/) { $1 + "http://ほげほげ/" + $2}
として、置換をしたいのですが、
http://が含まれているときだけ、は置換したくないのです。
上記の、ifの例だと複数置換できませんよね・・・
442デフォルトの名無しさん:2006/06/17(土) 00:07:50
line.gsub!(/(<a href=")([^"]*")/) { $1 + "http://ほげほげ/" + $2} unless line =~ /<a href="http:\/\//
443デフォルトの名無しさん:2006/06/17(土) 00:43:38
俺はこうしてみる

line.gsub!(%r{<a href="((?!http://[^"]*?)[^"]*?)"}){
 %!<a href="http://ほげほげ/#{$1}"!
}
444440:2006/06/17(土) 01:14:03
そのまま、条件式でやってみますた。

line.gsub!(/(<a href=")([^"]*")/) do
 head = $1
 url = $2
 if $2 =~ /^http:/ then
  head + url
 else
  head + "http://ほげほげ/" + url
 end
end

>>442-443
わお。
いろいろやり方ありますね。
参考になります!
445デフォルトの名無しさん:2006/06/17(土) 01:16:10
URIライブラリないんだっけ?
446440:2006/06/17(土) 01:16:46
>>442
<a href="nantoka">hoge</a><a href="http://kantoka">hoge</a>
とあったときにうまくいかないキガス・・・・
447デフォルトの名無しさん:2006/06/17(土) 01:44:08
http://capslockabcjp.kitunebi.com/faq.html#htmltag
HTML解析用のクラスが置いてある。
448デフォルトの名無しさん:2006/06/17(土) 18:48:59
すみませんが、質問です。
どこかに、Rubyに関する高橋メソッドのプレゼンテーションがありました。
内容は
「Rubyはひとつの書き方を強制することはない。
行末のセミコロンや、引数の括弧をつけることも許す。
プログラマがRubyに習熟するにつれ、自然によりRubyらしい
エレガントな記述に導かれていく」
という感じのものでした。

URLを忘れてしまいましたので、ご存知の方、お教えいただけませんか?
449デフォルトの名無しさん:2006/06/17(土) 21:04:34
>>448
ttp://www.rubycolor.org/takahashi/yapc2006/

仕事場で読んじゃだめだぞ
450デフォルトの名無しさん:2006/06/18(日) 03:17:08
>>423
俺ならここまでやるかな

class Hoge
 def setup!
  setup
  return self
 end
end

Hoge.new.setup!.do_work
451450:2006/06/18(日) 03:18:51
でもやっぱりsetupはinitialize内でやると思うけどなぁ……
452デフォルトの名無しさん:2006/06/18(日) 06:12:29
個人的に bang method の後に method chain するのは見た目に違和感があるなあ。
453デフォルトの名無しさん:2006/06/18(日) 11:18:49
失敗したときに nil が返ってくる仕様なメソッドが多いからねぇ。
454デフォルトの名無しさん:2006/06/18(日) 14:12:52
初心者スレということで敢えて聞いてしまいますが
initializeで例外発生したときにそのインスタンスいぢって大丈夫なんだっけ?
(よくあるでしょ、初期化子が完了しないとインスタンスに触れただけであぼーんな言語)
455デフォルトの名無しさん:2006/06/18(日) 14:21:38
>>454
initialize で例外発生したらインスタンス取得できないと思ふ。
456デフォルトの名無しさん:2006/06/18(日) 14:23:42
ぜったいにだめというわけではない。クラスの定義しだい。
initializeはたんなる初期化のメソッドにすぎないから、initalizeで失敗したオブジェクトは
「initialize()が完了しなかったオブジェクト」以外の何者でもない。
457デフォルトの名無しさん:2006/06/18(日) 14:45:58
>>456
どんな定義の場合OKなんでしょうか?
458455:2006/06/18(日) 15:09:21
あり?俺が思いっきり初心者か。
initialize で例外発生したときのそのインスタンスってどうやって取得するの?
459デフォルトの名無しさん:2006/06/18(日) 15:18:21
>>458

def initialize
$a = self
raise
end

>>456は知ったか
460457:2006/06/18(日) 15:21:53
いやいや、俺らが知らないだけかもしれないし。
本気で>>456のレス待ってますから。
煽りじゃないよ。
461デフォルトの名無しさん:2006/06/18(日) 15:43:13
>>460
てか、その前に、

>initializeで例外発生したときにそのインスタンスいぢって大丈夫なんだっけ?

initilalizeで例外発生したときに、そのインスタンスを弄るというのは
どんな状況か答えろ
462457:2006/06/18(日) 16:16:37
俺につっかからないでくれよ。俺も>>458と同じ認識だよ。
俺の知らないRubyの深遠が覗けるかもしれないと思ってるだけだよ。
463457:2006/06/18(日) 16:18:19
ああ、俺は>>454じゃないよ。
ななめから口はさんだだけです。
464デフォルトの名無しさん:2006/06/18(日) 16:28:08
少なくとも通常の使い方ではないな
スタンス間違ってそうな気もする
465デフォルトの名無しさん:2006/06/18(日) 16:59:33
p Time.now.to_f
http = Net::HTTP::start(host, port)
p Time.now.to_f
CGIから↑のメソッドを呼び出すと毎回約20秒かかっているようです
普通のrubyスクリプトだと1秒もかかりません

原因分かる人いませんか?
466デフォルトの名無しさん:2006/06/18(日) 17:11:16
OSは?
httpdは?
CGIはマルチプロセス?モジュール?
467デフォルトの名無しさん:2006/06/18(日) 17:18:33
OS: Linux
httpd: Apache 1.3
CGI: マルチプロセス

です
468側近中の側近 ◆0351148456 :2006/06/18(日) 17:47:27
(っ´▽`)っ やあ☆RubyがあるってことはSapphireもあるの?
469デフォルトの名無しさん:2006/06/18(日) 19:10:58
Rubyの次はPeridotじゃないの?
470455:2006/06/18(日) 19:12:28
>>459
うわあ、その手があったか・・・
471デフォルトの名無しさん:2006/06/18(日) 21:15:29
Matz 日記で既存の仕様に縛られて動きが鈍くなってくるから、
Emerald とか作ろうかと冗談半分で言ってたことがあったような?
472デフォルトの名無しさん:2006/06/18(日) 21:39:58
コテに返事返す阿呆の集まるスレはここですか?
473448:2006/06/18(日) 23:04:12
>>449
遅くなりましたが、ありがとうございました。読み返してみて、
Rubyが初心者でもすぐ使える理由は、まさにこれだと思いました。
474454:2006/06/19(月) 00:28:12
やあ知ったかが戻ってきましたよorz
皆さん申し訳ない。初期化中に例外投げるなってどっかで習い覚えた気がしてたんだが
改めて調べたらC++のバッドプラクティスの話だったようで。
スレ汚し失礼しますた。
475デフォルトの名無しさん:2006/06/19(月) 00:31:20
えええっ!
そんなことどこに書いてた?
デストラクタの間違いじゃないか?
476デフォルトの名無しさん:2006/06/19(月) 15:11:41
477デフォルトの名無しさん:2006/06/19(月) 15:48:10
>>476
そのページの内容は糞。
しかも、デストラクタ内での例外に関する説明は嘘八百。
478デフォルトの名無しさん:2006/06/19(月) 23:19:55
Hash#mergeとHash#updateとHash#merge!の違いが覚えられない
一発で思い通りに動作した覚えがない

ってゆーか、このへんのリファレンスマニュアルもうちょっとだけわかりやすく書いてくれ
何度読んでもピンとこないぞ
479デフォルトの名無しさん:2006/06/19(月) 23:33:59
>>465-466
分かる人カモン
480デフォルトの名無しさん:2006/06/19(月) 23:34:08
>>478
hash1 << hash2 のようなもの
hash1をhash2の内容で*更新*(hash1は変わる)
  hash1.update(hash2)

hash1 + hash2 のようなもの
hash1とhash2を*混ぜる*だけ(hash1はそのまま)
  hash1.dup.update(hash2)
  hash1.merge(hash2)

字面は混ぜるだけのはずなのにhash1が書き換わる危険なメソッドがmerge!
つまりupdateと同じ動作

こんな理解でどうだ
っていうかハッシュ同士の演算って定義されてないのな
なんで?
481デフォルトの名無しさん:2006/06/20(火) 00:00:21
>>477
読んだが、糞というほど間違っては居ない。お前が糞
482デフォルトの名無しさん:2006/06/20(火) 00:02:58
>>481
あっそ。じゃ、あのとおりにやれば?
483デフォルトの名無しさん:2006/06/20(火) 00:03:23
bang methodだから、merge!でhash1が変更されるのは自然
484デフォルトの名無しさん:2006/06/20(火) 00:19:36
そういう話でもないと思われ
485デフォルトの名無しさん:2006/06/20(火) 01:34:01
>>482
まてまて、そういう切捨て方はよくない。

>>481
あの考えでは、標準C++ライブラリやSTLはバッドノウハウだらけなんだけど、それはどう思う?
それから、あの考えだと、コードがポインタだらけになりかねないんだけど、そうれはどう思う?
Effective C++は読んだことある?(読んでるからえらいって言ってるわけじゃないよ)
486デフォルトの名無しさん:2006/06/20(火) 01:46:52
スレ違い
487デフォルトの名無しさん:2006/06/20(火) 05:04:20
読んでるからえらいってことはないが読んでないなら糞だな
488デフォルトの名無しさん:2006/06/20(火) 07:53:10
デストラクタでの例外送出の禁止は、もっと強く言うべき、ってこと?
489デフォルトの名無しさん:2006/06/20(火) 08:19:09
>>485
2版、3版共に読んでるが何か?

Cマガジンの記事はコンストラクタで絶対に例外を投げるなと言ってるわけではないだろ。
投げるならちゃんと後始末をしろ、しないなら投げるな。と書いてある。
事実、チームで開発する場合、全ての人がそういう精神を持っていないことは明白。
何が間違っている?

デストラクタは例外投げたら完全に死ぬってのが抜けてるだけだろ。
EffectiveC++の表現だけを神聖視して、
ちょっとでも違う表現を何でもかんでも糞扱いするのは低脳の証。
490デフォルトの名無しさん:2006/06/20(火) 09:24:20
スレ違い
491デフォルトの名無しさん:2006/06/20(火) 10:08:07
で、Rubyでは、
デストラクタで例外出していいの?
コンストラクタで例外出していいの?
コンストラクタで自分自身をグローバル変数に保存していいの?
492デフォルトの名無しさん:2006/06/20(火) 11:27:32
>>489
しかし、あの記事を読んで、「コンストラクタで例外をスローするのはバッドノウハウ」と
思考停止してしまうのはいかがなものか。
493デフォルトの名無しさん:2006/06/20(火) 11:40:31
>>489
コンストラクタでは初期化は行わず、initializeメソッドを常に用意し、呼び忘れを
防ぐために必ずfactoryメソッドを用意する。
これのどこが「賢い」やり方なんだ?これこそが、無駄にコードを複雑にする
バッドノウハウだろうが。

あの記事の代わりに、Effective C++にあるような、例外が起こる可能性がある
オブジェクトを、安全にコンストラクタ内で初期化する方法を載せといたほうが
よっぽどまし。

デストラクタの件は、「例外は絶対に投げちゃいけない」だ。
それ以外の説明は糞。
494デフォルトの名無しさん:2006/06/20(火) 11:42:50
>>492
例外処理を使えない、使わないプログラマとで働くのは嫌なものだが、なあに、かえって免疫力がつく。
495デフォルトの名無しさん:2006/06/20(火) 11:43:17
スレ違い
496デフォルトの名無しさん:2006/06/20(火) 12:20:32
まぁ、引数付コンストラクタが氾濫する世の中で、コンストラクタで初期化しちゃいかん
つーのは変だわな。
497デフォルトの名無しさん:2006/06/20(火) 18:00:41
ネットワークエラーとか、ファイルオープンエラーとかは出しちゃマズイだろうけど
newがこける状況なら回復しても悲惨だから許容する。
致命的な場合だけは投げるというポリシーで良い。
498デフォルトの名無しさん:2006/06/21(水) 00:59:08
>>465-466
分かる人koikoi
499デフォルトの名無しさん:2006/06/21(水) 08:52:57
>498
>CGIから↑のメソッドを呼び出す
どんな風に呼び出すん?

#!/usr/local/bin/ruby
require 'net/http'
def get_head_code(host,port)
stime = Time.new.to_f
http = Net::HTTP::start('www.ruby-lang.org',80)
head = http.head('/')
ftime = Time.new.to_f
[stime.to_s, ftime.to_s, head.code,host].join("\n")
end

puts "Content-type: text/plain\n"
puts get_head_code('www.google.co.jp',80)
exit

WindowsXP Apache/2.0.58 ASR1.8.4.2 ADSL1.5M だけど1秒もかからんなあ。
#=>
1150847371.265
1150847371.765
302
www.google.co.jp

500デフォルトの名無しさん:2006/06/21(水) 08:55:47
× http = Net::HTTP::start('www.ruby-lang.org',80)
○ http = Net::HTTP::start(host,port)
501デフォルトの名無しさん:2006/06/21(水) 12:35:33
俺はRubyを始めて実質3時間のド初心者だが、スレタイ読めない奴が低脳か文盲なのは理解できてる。
>>477,481,482,485,487,489,492,493あたりが低脳な連中だな。
つーか>>491の回答が気になるので、エロい人、教えておくれ。
502デフォルトの名無しさん:2006/06/21(水) 12:55:30
>>501
何を持ってOKというか分からんが、
可能かどうかで判断するとすれば、

×デストラクタで例外出していいの?
○コンストラクタで例外出していいの?
○コンストラクタで自分自身をグローバル変数に保存していいの?

になると思われ。
グローバル変数に保存は使い道が思い浮かばないがね。
503デフォルトの名無しさん:2006/06/21(水) 13:07:00
ですとらくたとかこんすとらくたってなんだろうと思うオレはRubyをシェルスクリプト的にしか使っていない
504デフォルトの名無しさん:2006/06/21(水) 13:33:56
>>502
そもそもファイナライザはあってもデストラクタはないもんな。

>>501
ファイナライザで例外出すのは可能なんだけど
>ObjectSpace.define_finalizer | proc の呼び出しで発生した大域脱出(exitや例外)は無視されます。
Rubyではオブジェクトを明示的に破棄しないし、いつGCされるかわからないし、無意味。

グローバル変数に保存するのは、自分でしなくてもどっかですればいいだけだから、悪手だと思う。

コンストラクタで例外は必要なだけ出していいと思うよ。
505デフォルトの名無しさん:2006/06/21(水) 13:51:05
>>501
もともtRubyの話から発展した話題だから、そう目くじらたてんでもいいだろ。
現に君は>>491の内容に対して判断がつかなかったんだろう?
506デフォルトの名無しさん:2006/06/21(水) 13:53:31
ああ、そうかくとまた変にとられそうなんで付け加えておくと、Rubyは特に特殊な
言語じゃないんで、他のOOPLと同じように判断すればいいってことだよ。
507デフォルトの名無しさん:2006/06/21(水) 13:54:19
C++での善悪を論じてるのは馬鹿でよい
508デフォルトの名無しさん:2006/06/21(水) 14:00:31
一番馬鹿なのはC++でコンストラクタから例外を出しちゃいけないから、
Rubyでもそうだと思い込んだ奴。
509デフォルトの名無しさん:2006/06/21(水) 14:23:52
他のOOPLが疑似オブジェクト指向だから、真のオブジェクト指向のrubyでは戸惑う罠。
510デフォルトの名無しさん:2006/06/21(水) 14:45:31
真のオブジェクト指向ならコンストラクタ内で初期化処理するのは当然だろ
511デフォルトの名無しさん:2006/06/21(水) 14:52:44
いや、問題はその次のステップでね
512デフォルトの名無しさん:2006/06/21(水) 14:59:42
次のステップて何?
513デフォルトの名無しさん:2006/06/21(水) 18:01:46
右足を軽く前に出す
514デフォルトの名無しさん:2006/06/21(水) 19:14:24
そして右足が沈む前に左足を
515デフォルトの名無しさん:2006/06/21(水) 19:45:44
右足に寄せるとみせて
516デフォルトの名無しさん:2006/06/21(水) 19:49:48
右足のアウトサイドでボールを右に
517デフォルトの名無しさん:2006/06/21(水) 19:54:11
転がしたと思ったら自分の左脚につまづいて
518デフォルトの名無しさん:2006/06/21(水) 19:57:22
こう言った。「俺柳沢」
519デフォルトの名無しさん:2006/06/21(水) 19:57:55
クラスって言うのが何のためにあるのかわかりません
実用的なプログラミング時に何のために、どんなときに使ったりする物なのでしょうか?
520デフォルトの名無しさん:2006/06/21(水) 20:02:01
ファイルをフォルダごとにまとめるようなもんだ
521デフォルトの名無しさん:2006/06/21(水) 20:04:30
全ての処理がsqrt(x)関数のように副作用も何もなければクラス定義など不要だが
そうでなければ構造体を定義したり、それに関連する関数を作ったりとか、
クラス定義に類似した作業が結局必要になる。
522デフォルトの名無しさん:2006/06/21(水) 20:13:16
よくわからなけりゃ
「関連する関数とかをひとつにまとめておく入れ物」ぐらいに考えときゃいい
その点ではモジュールも似たようなもんだが
クラスの場合は「その型のコピー(インスタンス)をたくさんつくることができる」
そして「各コピーごとに変数とかを保持することができる」
というのがポイントだ

他にも継承とかいろいろあるけど
まあ最初のうちはこんなもんだろ
523デフォルトの名無しさん:2006/06/21(水) 21:04:48
型を表すオブジェクトがクラスだと思う
あってるか知らないけどこの理解で特に困ったことはない

プログラム自体もあまり知らないなら
タイヤキ(インスタンス)とタイヤキ作るときの型(クラス)
という理解で十分だと思う
524デフォルトの名無しさん:2006/06/21(水) 21:21:37
コンストラクタで例外云々は、
オブジェクト指向ってよりGCがあるかないかの問題だろう
525デフォルトの名無しさん:2006/06/21(水) 21:24:43
意味不明
526デフォルトの名無しさん:2006/06/21(水) 21:28:38
freeしなくてもリークしないってことだろうけど
C++でもbad_allocが飛ぶような状況って
ミドルウェア側の致命的な問題やヒープの破壊など、
どうせ検知してもエラー吐いて落ちることしかできないありさまだよ。
527デフォルトの名無しさん:2006/06/21(水) 23:22:57
#!/usr/bin/env ruby

require 'net/http'
print "Content-Type: text/html\n\n"
p Time.now.to_f
http = Net::HTTP::start('www.2ch.net', 80)
p Time.now.to_f
res = http.get('/')
p res.code

ブラウザからCGIとして実行すると
1150899495.98265 1150899516.2025 "200"
1150899563.27309 1150899583.4663 "200"
1150899615.03507 1150899635.2512 "200"
1150899647.47004 1150899667.6945 "200"
こんな感じでだいたい20秒かかる
なんで?

みやびちゃんのおっぱいが小さすぎてすいません
528527:2006/06/21(水) 23:31:51
名前解決っぽい
IPだと1秒かからん
529デフォルトの名無しさん:2006/06/21(水) 23:32:11
急に質問されても答えられないよ。
530デフォルトの名無しさん:2006/06/22(木) 00:08:44
>>528
パケット覗いてみれば 名前解決かはっきりするんじゃね?
はっきりしても直せるかは知らんが。
531デフォルトの名無しさん:2006/06/22(木) 00:14:28
>>527
>みやびちゃんのおっぱいが小さすぎてすいません
これは何だ
532デフォルトの名無しさん:2006/06/22(木) 03:02:01
ここはロリコンの巣窟?
533デフォルトの名無しさん:2006/06/22(木) 14:30:30
おっぱいが小さすぎて謝ってるんだから、ロリコンじゃないんじゃない?

で、みやびちゃんって何?
534デフォルトの名無しさん:2006/06/22(木) 14:55:25
フィルタの働きをするコマンド hoge.exe があるときに、
rubyスクリプトから hoge.exe の標準入力に文字列データを渡して
hoge.exe の標準出力からの処理結果を再び rubyスクリプトで受け取りたいのですが
上手いやりかたはありますか?

ret = `hoge.exe`
だとデータを渡せないし、

io = IO.popen('hoge.exe', 'w')
io << data
だとデータを受け取れない・・・
535デフォルトの名無しさん:2006/06/22(木) 15:07:21
っ 双方向パイプ

と言いたいところなんだが、.exeとか言ってるからWindowsなんだろうなあ。
微妙。

ruby aaa.rb | hoge | ruby bbb.rb

とかでいいんじゃん?
536デフォルトの名無しさん:2006/06/22(木) 15:10:05
io = IO.popen("hoge.exe", "r+")
io << data
io.close_write
nanika = io.read
io.close_read
537534:2006/06/22(木) 15:20:11
おおおおお、できました!
聞いてみて良かったっす(T_T)
ありがとうございます!
538デフォルトの名無しさん:2006/06/22(木) 15:22:33
>>536
今さっきputsしたあとgetsで刺さるので悩んでたよ。
サンクス。
539デフォルトの名無しさん:2006/06/22(木) 16:19:45
>>534>>537
ヘルプにのってるやん
winhelpいれなさい
540デフォルトの名無しさん:2006/06/22(木) 22:04:03
ruby -e 'i = 1; print "%02d" % i'
こういう技を覚えたのですが
ruby -e 'i = 1; j = 2; print "%02d %02d" % i, j'
だとエラーが出ます。変数2つの時はどう書くんでしょ?
541デフォルトの名無しさん:2006/06/22(木) 22:08:19
% [i, j]
542デフォルトの名無しさん:2006/06/22(木) 22:11:08
>>541
ありがと
543デフォルトの名無しさん:2006/06/22(木) 22:12:20
printf "%02d %02d", i, j
544デフォルトの名無しさん:2006/06/22(木) 22:25:16
>>543
あー、( )をつけるのが面倒でprintfを使うのをさけようとしたんですが
rubyでは省略できるんですか
545デフォルトの名無しさん:2006/06/22(木) 22:46:12
( ) がなくても解釈が1通りに定まりそうな場合は省略しても適度に解釈してくれる
[ ] や { } がそばにあって見にくい場合は省略する人も多い
546デフォルトの名無しさん:2006/06/22(木) 22:50:18
antidojinをexerbで作ってた人は

def func arg1, arg2
 p arg1, arg2
end

なんつーような書き方してた。
547デフォルトの名無しさん:2006/06/23(金) 00:06:24
括弧省略すんの普通かと思ってた
548デフォルトの名無しさん:2006/06/23(金) 00:13:46
関数的に使われるメソッドは省略することはあるけど
包括関係がわかりにくいから基本的には省略しないのが「普通」な気がする

Rubyのパーサ(だっけ?)はメソッドの引数の数を知ってるから
明示的なカッコがなくてもひと目でメソッドと引数部分を区切れるけど
人間の目は引数をいちいち考えて
「これはこのメソッドに渡ってこれも渡って」
とか考えないといけなくて却って不便だと思う
549デフォルトの名無しさん:2006/06/23(金) 00:43:57
そこで改行ですよ
550デフォルトの名無しさん:2006/06/23(金) 01:22:24
引数の数多すぎやねん
551デフォルトの名無しさん:2006/06/23(金) 03:45:42
>>535

双方向バイブ

に見えた orz
552デフォルトの名無しさん:2006/06/23(金) 06:40:17
括弧省略する/しないについては↓が参考になるかも
ttp://jp.rubyist.net/magazine/?0014-Hotlinks#f29

> *29 括弧 : collect/map 対立以外にも、Ruby コミュニティには括弧を省略す
> べきでない派と省略できるところでは省略すべし派の対立がある。須藤さん
> は省略しない派だが、ささだは省略する派。省略する派をささだ以外見たこ
> とがないのだけれど。ちなみに、優先順位の影響などがあるために、完全に
> 括弧を排除した Ruby スクリプトを書くというのは結構難しい。

----
>>548
> Rubyのパーサ(だっけ?)はメソッドの引数の数を知ってるから
> 明示的なカッコがなくてもひと目でメソッドと引数部分を区切れるけど

そんなことはやってない
553デフォルトの名無しさん:2006/06/23(金) 13:46:15
546、547、552を総合すると、antidojinを作ったのはささださん=547?
554デフォルトの名無しさん:2006/06/23(金) 13:50:46
普通に考えてそういうのはお里が知れないように
普段の自分と違うコーディングスタイルをとるもんなんじゃないの?
555デフォルトの名無しさん:2006/06/23(金) 14:50:54
電波強い人がいますな
556デフォルトの名無しさん:2006/06/23(金) 15:01:36
そういうスレですから
557デフォルトの名無しさん:2006/06/23(金) 16:55:17
>>553
ちょ、おまwww

ていうか、>>552で自分一人と認識してるから>>547とは合わないだろwww

558デフォルトの名無しさん:2006/06/23(金) 17:23:59
print Dir.glob("./"+ ARGV[0])
として、引数にhtml\*.htmlを与えると、最初の一つのファイルしか表示されません。
ディレクトリ内のすべての.htmlを表示したいのですが、何まずいのでしょうか?
mswin32 rubyです。
559デフォルトの名無しさん:2006/06/23(金) 17:34:08
>>558
cmd.exeかなにかわからんが、そのコマンドラインをrubyに渡す前に展開してるのが原因。
展開されないようにシングルクォーテーションで囲んで渡せ。
なお、mswin32版は良く分からんが、パス区切り文字は/を使ったほうが良い。'html/*.html'を渡せ。
560デフォルトの名無しさん:2006/06/23(金) 17:42:52
>>559
その通りでした
くくった所、期待通りの挙動
/も参考にさせていただきます。
561デフォルトの名無しさん:2006/06/23(金) 20:42:56
外部コマンドに
標準入力からデータを与えて
標準出力 (実行結果) を得る
方法が分かりません。

入力を与えて出力を捨てるなら open('|command', 'w') {|f| ... }
入力を与えずに出力を得るだけなら `command`
で済むのですが、両方を同時に実現できるのでしょうか?
562デフォルトの名無しさん:2006/06/23(金) 20:47:39
そんなのの解決法が立ち読みしたレシピ本にあった希ガス
563デフォルトの名無しさん:2006/06/23(金) 21:06:50
つい最近このスレでそんな話があった希ガス
564561:2006/06/23(金) 21:28:56
>>563
うは、ほんとだ… orz
>>534-539 ですね。ありがとう。
565デフォルトの名無しさん:2006/06/23(金) 23:14:50
rubyというよりはアルゴリズムに関する質問なのですが、配列の要素をある数だけ
組み合わせた配列を求めるにはどのようにすればいいのでしょうか。
個数(n)と配列(a)が入力され、r==a.sizeとすると、出力は、nCr個の配列がでる感じです。
出力の順序や、計算時間、オブジェクトがコピーされるのかなどはいまのところ気にしていません。
例をあげると以下のようになります。

p kumiawase(2,[1,2,3,4]).map{|x| x.sort}.sort
=> [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]
4C2=(4*3)/(2*1)=6 6個の配列が出る。

p kumiawase(3,["a","b","c","d"]).map{|x| x.sort}.sort
=> [["a", "b", "c"], ["a", "b", "d"], ["a", "c", "d"], ["b", "c", "d"]]
4C3=4C1=4 4個の配列が出る。

よろしくお願いします。
566デフォルトの名無しさん:2006/06/23(金) 23:29:46
しゅくだい?
567565:2006/06/23(金) 23:58:41
>>566
宿題ではないです。独学でrubyを勉強しています。
再帰をつかっていろいろやっているのですが、うまくいきません。

↓n=1以外で変な結果が出る失敗例

def kumiawase(n,a)
 kumiawase2(n,a).map{|x| x.sort}.sort.uniq
end
def kumiawase2(n,a)
 n==1 and return a.map{|x| [x]}
 r=[]
 a.size.times{|i|
  b=a.dup
  x=b.delete_at(i)
  r<<kumiawase2(n-1,b)
 }
 r
end
568デフォルトの名無しさん:2006/06/24(土) 01:01:52
ruby廚は検索さえ出来ないのか。

RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/l50
569デフォルトの名無しさん:2006/06/24(土) 01:10:15
nCr = {n-1}Cr + {n-1}C{r-1} を意識してみながら、書いてみた。
yield を使ってブロックで処理するのと、yieldを使わないでふつーの再帰で処理するの

class Array
  def combination(r)
    if r == 0
      yield []
    elsif r == size
      yield self
    else
      x = (ary = dup).shift
      ary.combination(r - 1){|y| yield [x] + y } # self[0] を含む
      ary.combination(r){|y| yield y } # self[0] を含まない
    end
  end
end
[1, 2, 3].combination(2) {|c| p c }

def kimiawase(n, a)
  case n
  when 0
    return [[]]
  when a.size
    return [a]
  else
    x = (ary = a.dup).shift
    return kimiawase(n-1, ary).map{|y| [x] + y} + kimiawase(n, ary)
  end
end
p kimiawase(2, [1, 2, 3])
570デフォルトの名無しさん:2006/06/24(土) 01:52:22
>>569
おお、>>565じゃないけど勉強になりますた。
571デフォルトの名無しさん:2006/06/25(日) 13:16:16
ここからデータをとろうと思うのですが
http://www3.nikkei.co.jp/nkave/data/index.cfm
postを受け付けてもらえません。

下の場合、99.36という値を得たいのですが
http://www3.nikkei.co.jp/nkave/data/index.cfm
にふつうにアクセスした場合の、15,124.04が返ってきてしまいます。

どう修正すればいいのでしょうか?

require 'net/http'
response = nil
Net::HTTP.start('www3.nikkei.co.jp') {|http|
response = http.post('/nkave/data/index.cfm', 'yyyy=1950&mm=1&dd=11')
print response.body.scan(/<td><span class="onedown"><b>(.*?)<\/b><\/span><\/td>\s*<\/tr>/m)
}
572デフォルトの名無しさん:2006/06/25(日) 13:25:30
うちでは 99.36 が返ってきました
573565:2006/06/25(日) 13:48:24
>>569
ありがとうございました。
シンプルにかけるものですね。
非常に勉強になりました。
574デフォルトの名無しさん:2006/06/25(日) 13:59:32
うちも99.36が表示されるなあ

とりあえず

p response

#<Net::HTTPOK 200 readbody=true>が返ってきてることを確認して
p response.body
で目的のHTMLファイルが送られてきてることを確認したあと
ローカルにそのファイルを保存しておもむろにirbを起動し
file=File.read('index.htm')
としたあと
p file.scan(/<td><span class="onedown"><b>(.*?)<\/b><\/span><\/td>\s*<\/tr>/m)
して正規表現に誤りがないか確かめる

かなあ
575571:2006/06/25(日) 14:13:13
>>572, 574
http://www.garbagecollect.jp/ruby/mswin32/ja/download/stable.html
ここの最新版ruby 1.8.4 (2006-06-12) に問題があったようです。
ruby 1.8.4 (2006-04-14)でもだめです。

ruby 1.9.0 (2006-04-15)にしてみたら99.36が返ってきました。
これバグですよね
576572:2006/06/25(日) 14:20:38
うちのは古いけど
ruby 1.8.1 (2003-12-25) [i386-cygwin]
577574:2006/06/25(日) 14:47:31
~$ ruby -v
ruby 1.8.2 (2005-04-11) [i386-linux]

ぶっちゃけそんなのはどうでもよくて、データがどのように扱われていったか手と目で確かめろって
不具合が出る部分があるならそこを自作スクリプト上で極力絞り込め

バグかどうか考えるのはその部分が判明してからだ
578デフォルトの名無しさん:2006/06/25(日) 15:02:38
>>577
しかしあんな短いスクリプトでミスが起きるはずがないだろ
579デフォルトの名無しさん:2006/06/25(日) 15:19:29
15,124.04
ruby 1.8.4 (2005-12-24) [i386-mswin32]
580デフォルトの名無しさん:2006/06/25(日) 15:20:09
なるほどなるほど。
>>575で動かすと何らかの理由で
Content-Type: application/x-www-form-urlencoded
をサーバに送ってないな。

require 'net/http'
response = nil
Net::HTTP.start('www3.nikkei.co.jp') {|http|
header={'Content-Type'=>'application/x-www-form-urlencoded'}
response = http.post('/nkave/data/index.cfm', 'yyyy=1950&mm=1&dd=11',header)
print response.body.scan(/<td><span class="onedown"><b>(.*?)<\/b><\/span><\/td>\s*<\/tr>/m)
}

これなら99.36が表示されるはず
添付ライブラリのバグだと思う
581デフォルトの名無しさん:2006/06/25(日) 21:47:35
RubyでDLLって作れますか?
exerbなんかで、exeは作れるみたいですが・・・
582デフォルトの名無しさん:2006/06/25(日) 21:54:46
>>581
DLLは作れない。
COMなら作れる。
583デフォルトの名無しさん:2006/06/25(日) 22:41:05
DLLも作ろうと思えば作れるんじゃないかなぁ。
誰もその仕組みのものを作ろうとしないだけで。
584デフォルトの名無しさん:2006/06/25(日) 23:31:16
やっぱり、組み込みRubyで組み込んで間接的にDLL作るしかないかな・・・
585デフォルトの名無しさん:2006/06/26(月) 00:01:53
exerb の exe にしても
ちょっと違うんじゃないの?

ってシロモノだからなぁ
586デフォルトの名無しさん:2006/06/26(月) 04:49:29
kwsk
587デフォルトの名無しさん:2006/06/27(火) 11:10:17
流れをぶった切って質問です。
$ ls /tmp/
sqlite.rb test.db

$ cat sqlite.rb
require 'rubygems'
require_gem 'sqlite-ruby'

# db = SQLite::Database.new('test.db') # 1
# db = SQLite::Database.new('./test.db') # 2
# db = SQLite::Database.new('../tmp/test.db') # 3
# db = SQLite::Database.new('/tmp/test.db') # 4

上記のスクリプトで、# 4の場合のみエラーが出てしまいます。
$ ruby sqlite.rb
/usr/lib/ruby/gems/1.8/gems/sqlite-ruby-2.2.3/lib/sqlite/database.rb:117:in `open': unable to open database: /tmp/test.db (SQLite::Exceptions::DatabaseException)
from /usr/lib/ruby/gems/1.8/gems/sqlite-ruby-2.2.3/lib/sqlite/database.rb:117:in `initialize'
from sqlite.rb:7

1.sqlite-rubyで絶対パスを扱うことはできませんか?
2.バージョンによっては可能なのでしょうか?
Railsのconfig/database.ymlで相対パスで書いていても、
勝手に絶対パスに直されてしまうのでエラーが出てしまって困っています。

@@環境
ruby 1.8.4 (2005-12-24) [i386-cygwin]
sqlite-ruby 2.2.3
sqlite 2.8.17
588デフォルトの名無しさん:2006/06/27(火) 15:58:34
/tmpがない、または書き込み権限がない、というオチ?
ls -ld /tmp してみよう。
589デフォルトの名無しさん:2006/06/27(火) 17:42:21
インスタンス変数に、protected属性みたいなのってないんですか?

自作クラスに dup 書くときによく感じるんだけど、インスタンス変数を
コピーするためだけに、attr_writerを指定するのって良くないですよね。
590デフォルトの名無しさん:2006/06/27(火) 17:59:33
>589

どうも勘違いしてるみたいだが
元々Rubyのインスタンス変数には可視性なんてない。
言うなれば全てprivateみたいなもん。

attr_系がやってる事はpublicな変数を定義してるのではなくて
【インスタンス変数にアクセスする為のpublicメソッドを定義】している。
具体的に言うと

attr_accessor :name



def name
 return @name
end
def name=(val)
 @name = val
end

と同じ。だからこの場合なら protected :name
:name= とやれば多分望みに近い動作になるはず
591590:2006/06/27(火) 18:02:01
ゴメン最後のところ、protected :name=
592589:2006/06/27(火) 18:55:29
>>590
了解です。
attr_* はただのシンタクスシュガーで変数には
直にアクセスは出来ない仕様になってるんですね。

教えていただいたように、protected なメソッドで
アクセスすることにします。
593デフォルトの名無しさん:2006/06/27(火) 19:19:52
しかし、そのprotectedは本当に求めるprotectedなのかね?
594589:2006/06/27(火) 23:12:20
本当に求めているものかどうかは、よく分からないです。
とりあえず現状では十分な感じですけど。

言語によってprotectedの動作が異なるって言うのは
なんとなく知っていたけれど、それぞれの細かい違いは
知らないし、実用的なソフトを作る上でどれくらいの影響を
もたらすものか分かんないです。OOPは奥が深い(気がする)。

その内じっくり勉強しようと思ってるけど、なかなかその内がやって来ない。
595デフォルトの名無しさん:2006/06/27(火) 23:51:32
>>588
> /tmpがない、または書き込み権限がない、というオチ?
> ls -ld /tmp してみよう。
1,2,3,4は全て同じパスを見ているのですが・・・?
596デフォルトの名無しさん:2006/06/28(水) 00:51:36
>>595
なんでsqlite3を使わないのかと小一(ry
597デフォルトの名無しさん:2006/06/28(水) 00:59:57
>587
みてみたけど sqlite-ruby はあんま大したことしてなくて、けっきょく sqlite_open を呼んでるだけっぽいな。
コマンドラインで
sqlite /tmp/test.db
とかはできてる?


あと、なぜいま sqlite2 ?
598デフォルトの名無しさん:2006/06/28(水) 01:01:00
>>596
あぁ、3だとできるんですね。
どうもありがとうございました。
599デフォルトの名無しさん:2006/06/28(水) 01:52:03
まあ当たり前。
sqliteはrubyのコンパイル時からやり直しでもしないと、rubyに組み込めないし。

まずはmysqlとかrorが前提にしてる環境で作ったほうがいいよ。
応用は動作確認してからじゃないと、何が悪いか切り分け出来なくて、解決策が見つけにくくなる。
600デフォルトの名無しさん:2006/06/28(水) 01:56:58
>>599
> まずはmysqlとかrorが前提にしてる環境で作ったほうがいいよ。
> 応用は動作確認してからじゃないと、何が悪いか切り分け出来なくて、解決策が見つけにくくなる。
mysqlでは動きますよ?どこをどう曲解したらそうなるんでしょうか?
601デフォルトの名無しさん:2006/06/28(水) 09:29:17
でもsqlite2で変なのは変なんだよな。
バージョンも最新みたいだし。
tracとかMLとかないのかね。

>>595
同じパスを参照してるってどうやって確かめたの?
>>587で1〜3の場合ls -l /tmp/test.dbするとファイルがあるってこと?
602デフォルトの名無しさん:2006/06/29(木) 12:01:35
ruby標準のwebrickを使ってHTTPサーバもどきとしています。
これで公開している、DocumentRoot以下全てにユーザ認証をかけたいのですが、
何かよい方法はあるでしょうか。
リファレンスマニュアルのWEBrick::HTTPAuth::BasicAuthを参考にしながら
mount_proc('/')とするとres.bodyで書いたものしか表示できず、公開部分が表示できなく
なってしまいます。
webrickはリファレンスマニュアルのWEBrick::Config::HTTPと同じように
書いています。
603デフォルトの名無しさん:2006/06/29(木) 16:52:10
>>602
require "webrick"

callback = Proc.new{|req, res|
WEBrick::HTTPAuth.basic_auth(req, res, "WEBrick's realm") {|user, pass|
user == 'webrick' && pass == 'supersecretpassword'
}
}

httpd = WEBrick::HTTPServer.new(
:DocumentRoot => File::dirname(__FILE__),
:RequestCallback => callback,
:Port => 10080
)
trap(:INT){ httpd.shutdown }
httpd.start
604デフォルトの名無しさん:2006/06/29(木) 17:03:29
そういえば trap(:INT) { httpd.shutdown } くらいデフォルトで定義しといてくれよ
と思っているのは俺だけだってのはもうとっくにわかってるからほっといてくれよな。
605602:2006/06/29(木) 18:38:48
>>603
ありがとうございます。
そのままコピペして実行してみたのですが、なぜか認証なしで
実行ディレクトリが表示されてしまいました。
RequestCallbackがなぜか動いていないような感じがします…
606デフォルトの名無しさん:2006/06/29(木) 19:52:00
プログラミングRuby デビット トーマス (著)って初版からだいぶたっているのですが
これから始めようという人にもオススメできますか?
仕様の変更とかで動かないと、この本で勉強してもおもしろくないだろうし・・・・
607デフォルトの名無しさん:2006/06/29(木) 20:02:20
>606
オススメできない。なぜなら、来月には第二版の翻訳が出るから。
もうちょっとだけ待て。

http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-06642-8
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-06643-6
608デフォルトの名無しさん:2006/06/29(木) 20:04:49
本当は今月出るはずだったんだけどね
609デフォルトの名無しさん:2006/06/29(木) 20:24:32
>>606
英語版1版だったら無料で読める
610デフォルトの名無しさん:2006/06/29(木) 22:13:56
出る出る詐欺には騙されねーど
611デフォルトの名無しさん:2006/06/30(金) 02:36:09
>>605
:RequestCallbackを:RequestHandlerに変えたらどうなる?
その前にRubyのバージョンいくつ?
612602:2006/06/30(金) 08:57:40
>>611
ありがとうございます。
求めている動作がおこなえました。
Rubyのバージョンは、
WEBrick/1.3.1 (Ruby/1.8.1/2003-12-25)
となっています。
613デフォルトの名無しさん:2006/06/30(金) 09:30:02
ちょwwww古wwwww
614デフォルトの名無しさん:2006/06/30(金) 15:11:59
>>606
でも今度出るのは2冊組で高くつくし、普通の用途なら旧版でも十分だから
今のうちに買っておくのも悪くない。内容は既刊の中で未だトップレベルだ。
615606:2006/07/01(土) 06:07:09
>>607
おおおおおおおおおおおおおおw
よい情報をありがとうございました!
これからRubyを始めたいと思います``
616606:2006/07/01(土) 06:20:44
みなさんレスありがとうございました!
これからもよろしくです。
617デフォルトの名無しさん:2006/07/03(月) 15:45:04
すいません。
ruby1.8での日本語変換はどうすればできるのですか?
初歩的な質問ですいません。
618デフォルトの名無しさん:2006/07/03(月) 16:39:22
>>617
詳しく
619デフォルトの名無しさん:2006/07/03(月) 16:43:39
すいませんできるようになりました。
しかし改行がどうすればいいのかわかりません。
620デフォルトの名無しさん:2006/07/03(月) 16:53:40
621デフォルトの名無しさん:2006/07/03(月) 17:08:20
>>620 を参考にしてくれなきゃ、何が言いたいのかサッパリだが、
String#gsub!("\r\rn", "\n") みたいので言いんじゃね?
622デフォルトの名無しさん:2006/07/04(火) 00:59:37
>>621
>>619 がサッパリな質問なのは同意するが、その回答もサッパリだな。
623デフォルトの名無しさん:2006/07/04(火) 01:31:32
さっぱり
さっぱり
624デフォルトの名無しさん:2006/07/04(火) 08:53:45
mysqlで動くならrorには問題は無いね。
単純にsqliteの問題。sqliteスレにでも逝けば?
625デフォルトの名無しさん:2006/07/04(火) 17:59:16
http://www.google.com/trends?q=perl%2Cpython%2Cruby%2Cphp&ctab=0&geo=all&date=all

Ruby が意外に健闘してるのか、Python が意外に普及してないのか、その両方なのか……
626デフォルトの名無しさん:2006/07/04(火) 19:23:37
#! ruby -Ke
#!/usr/local/bin/ruby

open(file,"r"){|f|
while line = f.gets
if /pattern/ =~ line
print line
end
end
}

このようなコードでeuc_jpコードのファイルから日本語で正規表現を行おうとしたのですが、
日本語がshift-jisに認識され文字化けが起きてうまくいきません。どうすれば正しく認識して
くれるのでしょうか。環境はWindowsXP上のCygwinでRubyは1.8.4,エディタはmeadowを使ってます。
627デフォルトの名無しさん:2006/07/04(火) 19:39:27
Cygwin の VT が Shift_JIS 専用だから print line で EUC-JP が吐かれても化けて当然というオチとみた。
つまり、Ruby はちゃんと処理してるんじゃない?

require "kconv"
して
print line.tosjis
してみたり、
require "nkf"
して NKF#guess で文字コードをちゃんと見てみたらどうよ?

あと、一行目と2行目を足して
#!/usr/local/bin/ruby -Ke
とするのが普通。
それじゃあ、2行目は、ただコメントアウトされてるんじゃないか?
628デフォルトの名無しさん:2006/07/04(火) 19:55:01
ついでに、ちょっと調べてみたけど、
以下の ck というターミナルなら複数のコードに対応していて、問題なさそうなことを確認した。
Cygwin で libpng12 を入れないと起動しなかったけど。
http://www.geocities.jp/cygwin_ck/
629デフォルトの名無しさん:2006/07/04(火) 20:35:18
>>627,628
返信ありがとうございます、それが原因のようでした。リンク先のやつ早速
導入させていただきます。
630tojis はトジス:2006/07/05(水) 00:36:34
>>627
>print line.tosjis
ruby では、to_i, to_s, to_f があるから、
to_sjis, to_utf8 とかになるのが普通だと、見るたびに思う。

もう、何度も話題にしているような気がするけど・・・
631デフォルトの名無しさん:2006/07/05(水) 00:40:13
俺はそうは思わない。
ほら、これでevenだ。普通じゃなくなったよ。
632デフォルトの名無しさん:2006/07/05(水) 00:56:21
>>631
> ほら、これでevenだ。
不用意な言葉使いを皮肉ろうとするあまりに、
根拠なしに文句言うだけのノイズになっちゃう例?
633デフォルトの名無しさん:2006/07/05(水) 00:58:27
>>630
エンコードの数だけメソッドを用意するんかい。
といって-Keだとかkconvだとか$kcodeみたいなK(たぶんKanjiのK)なんちゃらっ
てのも前時代的だよねえ。
PerlIOはスマートな解決法だと思う。
634デフォルトの名無しさん:2006/07/05(水) 01:02:58
xxtojisみたいな関数名は、古くからあるコード変換ライブラリにありがちだから、
tojisというメソッドも違和感なし。
toiとかtosなら違和感ある。
635デフォルトの名無しさん:2006/07/05(水) 01:44:44
Ruby的にはtosjisもto_sjisも
両方使えるべきであると思うがどうか
636デフォルトの名無しさん:2006/07/05(水) 01:55:57
tosijsはいいとしても、変換元のコードを明示的に指定しないといろいろまずくないか?
637デフォルトの名無しさん:2006/07/05(水) 03:18:16
>>625
今年1月初頭にRuby人気が上がったきっかけは
Ruby Harvey vigil this afternoon
だったのかww
638デフォルトの名無しさん:2006/07/05(水) 13:20:13
phpが実際以上に多いような気がするんだけど、これはきっと
URLの拡張子のせいだな。
639デフォルトの名無しさん:2006/07/05(水) 14:28:11
いっそのこと、このスレで
いくつかの便利メソッドを追加したKconv+を作ろうぜ
640デフォルトの名無しさん:2006/07/06(木) 01:23:08
昔本スレでNKFに異議あり!!と唱える猛者がいたんだが

まだ頑張ってくれてるのだろうか
641デフォルトの名無しさん:2006/07/06(木) 11:03:25
M17N の動向を生暖かく見守ってるところ
642デフォルトの名無しさん:2006/07/06(木) 15:01:44
日本原産なのに日本語操作関連がPHP並にがっかりなのはどうにかしてほしい
643デフォルトの名無しさん:2006/07/06(木) 15:05:27
詳しく
644デフォルトの名無しさん:2006/07/06(木) 15:51:35
かつて、日本語処理が楽そうなので Ruby を始めた俺も知りたい。
Unicode に統一されてないからなどの話?
そんなのが、Matz 日記あたりに最近あったな。
645デフォルトの名無しさん:2006/07/06(木) 15:57:39
Perlに比べりゃ全然まし
646デフォルトの名無しさん:2006/07/06(木) 17:49:06
ああはなりたくないね
647デフォルトの名無しさん:2006/07/06(木) 18:05:15
kwsk
648デフォルトの名無しさん:2006/07/06(木) 20:30:02
ML の「世代別 GC について」の人のトップページを見て期待度あっぷした俺
649デフォルトの名無しさん:2006/07/06(木) 20:54:53
だめだこりゃ
650デフォルトの名無しさん:2006/07/07(金) 01:42:56
>>647
utf8 flag というろくでもない機構
651デフォルトの名無しさん:2006/07/07(金) 08:41:03
>>626
if /pattern/e =~ line

こんなんでいけないものか
652デフォルトの名無しさん:2006/07/07(金) 11:38:30
まつもとさん
連載やめて本を出してください。
653デフォルトの名無しさん:2006/07/07(金) 12:17:21
その本の価格がべらぼーに高くなる予感


連載ってそれ自体はそんなお金入んないか
654デフォルトの名無しさん:2006/07/07(金) 12:33:48
発売日: 2006/08/31 。。。
655デフォルトの名無しさん:2006/07/07(金) 13:49:05
去年の10月に「半年以内には出てると思います」って言ってたけど
高校生みたいなやつが発売日に関してしつこく質問したり
マーケティングって言葉を使いたくてしょうがなさそうな頭の悪いやつが
ぐだぐだ言ったから、翻訳する気がなくなったのかなと思ったりw
ググっててそれらしいやりとりを見つけた。
それともただ忙しいのか・・・・もしくは生後確認に一生懸命なのか・・・・
お盆休みにゆっくり読みたかったorz
656デフォルトの名無しさん:2006/07/07(金) 14:33:30
自分用CGIでAmazonのAPIに投げるISBNの正当性チェックに3時間もかかった俺アホス
もっと早く書けるようになりたい
っていうか来年1月からISBNが13桁に変わるなんて知らなかった

>>655
してやったりと思ってるかもしれないぞ
657デフォルトの名無しさん:2006/07/07(金) 16:41:07
>>655
> お盆休みにゆっくり読みたかったorz
ゆっくり1.8.5をインストールしてくれ。
658デフォルトの名無しさん:2006/07/07(金) 22:21:54
ruby と perlってどう違うの?
パールを元にしてルビーって作ったんですよね?
パール 時代遅れのテキスト処理で見辛い
ルビー 作者が日本人でコード見易い。ただ教科書が少ない
って聞いたんですけどそれぞれの特徴教えてください
659デフォルトの名無しさん:2006/07/07(金) 22:33:37
Perl
いろんな関数を知っていなければいけないので
使いこなすのにコツがいる。

Ruby
メソッド名や使い方がある程度統一されているので、
基本を押さえていればおおよそ使い方が分かる。
文字列から整数への変換はto_iだが、
浮動少数から整数への変換もto_i。
660デフォルトの名無しさん:2006/07/07(金) 22:43:29
perl
先駆者にして常に時代の最先端を行く。
メジャーバージョンアップの度にぶっとんだ仕様をぶち込んできて
ユーザーの度肝を抜く。
もうすぐperl6が出るということになっているが、いつになるのやら。

ruby
perlの機能を参考にして作られた。
マイナーバージョンアップの度に予期せぬ仕様変更をぶち込んできて
ユーザーの怒りを呼ぶ。
もうすぐruby1.8.5が出るということになっているが、いつになるのやら。
661デフォルトの名無しさん:2006/07/07(金) 22:54:28
何のために特徴知りたいのかで答は違うな
662デフォルトの名無しさん:2006/07/07(金) 22:56:29
30行未満ですむプログラムならPerl
30行以上になるならRuby

イメージで言うと、
Rubyのプログラムは行数に比例して複雑になり、
Perlのプログラムは行数の二乗に比例して複雑になる。
PHPなら行数の1.5乗に比例して複雑になる。

こんなのもある。
ttp://www.geocities.jp/shido_takafumi/py/python1.html
663デフォルトの名無しさん:2006/07/07(金) 23:00:39
言語自体は後発のRubyの方がはるかによくできてる

ただしPerlの方がドキュメントいっぱいあるし
先人の作ったライブラリいっぱいあるし
CGIで使えるレンタルサーバーいっぱいある
664デフォルトの名無しさん:2006/07/07(金) 23:09:58
Perlでは飯が食えるがRubyでは飯が食えない
665デフォルトの名無しさん:2006/07/07(金) 23:14:06
>>664
あのへんで今とりあえず飯が食える言語はPHPだと思う
あと2〜3年は食いっぱぐれないでそ

変な言語が流行っちゃったなあ
666デフォルトの名無しさん:2006/07/07(金) 23:22:04
vbs だと、

Function func()
 MsgBox "Hi!"
End Function
Set document.OnLoad = GetRef("func")

って書けるんですけど、
これを ActiveScriptRuby で書くにはどうしたらいいでしょう?

def func()
 # なにか
end
document.OnLoad = func

とやっても、func の呼び出しになっちゃうんですよね〜。
667デフォルトの名無しさん:2006/07/07(金) 23:42:30
>666
そこはJavaScriptみたくbodyのonload属性に仕込む。

<body onload="func" language="RubyScript">
668デフォルトの名無しさん:2006/07/08(土) 08:43:05
>>667
すみません、HTML で使うんじゃないんですよ。
単に、拡張子.rb のスクリプトファイル内で、com のイベントを拾いたいんです。

相手は GetIDsOfNames せずに、単に Invoke(dispid=0) してくるだけなので、

document.onload=proc{ puts "Hi!"}

としたら一応動きました。
これを、

def func
  puts "hi!
end

document.onload=(なにか演算子?)func

に書き換える方法が知りたいんです。
669デフォルトの名無しさん:2006/07/08(土) 09:18:28
>>668
COM知らないんだがw
method(:func)
はどう?
670668:2006/07/08(土) 10:39:04
>>669
COM の説明はよけいでしたね^^;

教えていただいた方法でばっちり動きました。
ありがとうございました。
671デフォルトの名無しさん:2006/07/08(土) 19:04:14
>>665

PHPなんて言語じゃないよな
672デフォルトの名無しさん:2006/07/08(土) 21:22:16
>671
う〜、ばうあう!!
がうがうがうあ、がうがう!!
673デフォルトの名無しさん:2006/07/08(土) 22:58:23
>>671
PHP はくそだよなぁ。
Python がはやるならまだ納得できるが。
674デフォルトの名無しさん:2006/07/09(日) 00:04:36
いくつかのディレクトリと、その中のファイルネームとファイルサイズを扱いたいけど、どう扱うのが良い?
多元配列?
% ls -l dir*
dir_a:
total 0
-rw-r--r-- 1 rubyuser rubyuser 1 9 Jul 00:00 file_aa
dir_b:
total 0
-rw-r--r-- 1 rubyuser rubyuser 2 9 Jul 00:00 file_ba
-rw-r--r-- 1 rubyuser rubyuser 3 9 Jul 00:00 file_bb
675デフォルトの名無しさん:2006/07/09(日) 00:10:00
後から何度も使うデータ構造として持っておきたいなら、Composite pattern。
676デフォルトの名無しさん:2006/07/09(日) 00:15:12
HashにHash入れればいいんじゃないかな
しっかり作るなら>>675
677デフォルトの名無しさん:2006/07/09(日) 05:10:01
Composite patternは難しくて勉強しないと手に負えず。orz
多重連想配列ですかね。

動かしてないけどこんな感じ?
dir = Hash.new
dir["dir_a"] = { "file_aa" => 1 }
dir["dir_b"] = { "file_ba" => 2 }
dir["dir_b"] = { "file_bb" => 3 }
たぶん、
{"dir_a"=>{"file_aa"=>1}, "dir_b"=>{{"file_ba"=>2}, {"file_bb"=>3}}
になる。
678デフォルトの名無しさん:2006/07/09(日) 05:47:45
entry[:name] = "abc"
entry[:size] = 0
entry[:leaves] = []

leavesがあるならDir なければFile
の方がいい気がするがどうだろ
679デフォルトの名無しさん:2006/07/09(日) 16:12:49
struct版
dir_name_class = Struct.new(:dir_name, :file_name, :byte_size)
data = []
data[0] = dir_name_class.new("dir_a", "file_aa", 1)
data[1] = dir_name_class.new("dir_b", "file_ba", 2)
data[2] = dir_name_class.new("dir_b", "file_bb", 3)
data.each_index {|number|
 i = 0
 data[number].members.each {|value|
  if i != 0 then
   printf", "
  end
  i += 1
  printf("%s = %s", value, data[number].send(value).to_s)
 }
 printf("\n")
}
実行結果
dir_name = dir_a, file_name = file_aa, byte_size = 1
dir_name = dir_b, file_name = file_ba, byte_size = 2
dir_name = dir_b, file_name = file_bb, byte_size = 3
680デフォルトの名無しさん:2006/07/09(日) 16:13:19
ハッシュのハッシュは無理。
dir_name_hash = Hash.new
dir_name_hash["dir_a"] = { "file_aa" => 1 }
p dir_name_hash["dir_a"].keys
dir_name_hash["dir_b"] = {{ "file_ba" => 2 }, { "file_bb" => 3 }}
p dir_name_hash["dir_b"].keys
p dir_name_hash
実行結果
["file_aa"]
[{"file_ba"=>2}]
{"dir_a"=>{"file_aa"=>1}, "dir_b"=>{{"file_ba"=>2}=>{"file_bb"=>3}}}

配列の配列はおk。
dir_name_array = []
dir_name_array.push ["dir_a", "file_aa", 1]
dir_name_array.push ["dir_b", "file_ba", 2]
dir_name_array.push ["dir_b", "file_bb", 3]
p dir_name_array
実行結果
[["dir_a", "file_aa", 1], ["dir_b", "file_ba", 2], ["dir_b", "file_bb", 3]]
681デフォルトの名無しさん:2006/07/09(日) 18:51:10
>>680
> ハッシュのハッシュは無理。
> dir_name_hash["dir_b"] = {{ "file_ba" => 2 }, { "file_bb" => 3 }}
dir_name_hash["dir_b"] = { "file_ba" => 2, "file_bb" => 3 }
682デフォルトの名無しさん:2006/07/10(月) 16:26:33
kick ='ローキック'
10.times do |t|
if t%2 == 0
puts('ワンツー')
else
puts(kick)
end
end
でエラーが出てしまうんですけどどうしてでしょう?
683デフォルトの名無しさん:2006/07/10(月) 16:31:50
>>682
どんなエラーが出たのかコピペすれ。
てか、そのプログラム過去に見た記憶が・・・
684デフォルトの名無しさん:2006/07/10(月) 16:40:33
SyntaxError: compile error
(irb):7; parse error,unexpected tINTEGER, expecting $
kick ='ローキック'
10.times do |t|
if t%2 == 0
puts('ワンツー')
else
puts(kick)
end
end

^
from(irb):7
from:0
です。
685デフォルトの名無しさん:2006/07/10(月) 16:48:47
>>684
$KCODE = 's'
686デフォルトの名無しさん:2006/07/10(月) 16:51:53
$ ruby --version の結果と、
irb じゃなくて、ruby -d スクリプトフィアル の結果はどうなる?
687デフォルトの名無しさん:2006/07/10(月) 16:55:00
>>685
どうゆう意味っすか???
688デフォルトの名無しさん:2006/07/10(月) 17:20:36
唐突でわかりにくいよな
689デフォルトの名無しさん:2006/07/10(月) 18:17:29
>>683
スレッドで動かすとワンツーキックの順序が崩れるかもとかそんな説明のスクリプトじゃない?
690デフォルトの名無しさん:2006/07/10(月) 18:58:22
結局、どうすればエラーは直るんでしょう?
691デフォルトの名無しさん:2006/07/10(月) 19:57:29
>>684
いや、ちゃんと動くぞ。irbでやったけど。

$ ruby -v
ruby 1.8.2 (2005-04-11) [x86_64-linux]
692デフォルトの名無しさん:2006/07/10(月) 20:50:05
おかしいっすね。

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

irb(main):002:0> kick='ローキック'
10.times do |t|
if t%2==0
puts('ワンツー')
else
puts(kick)
end
end
SyntaxError: compile error
(irb):2: parse error, unexpected tINTEGER, expecting $
kick='ローキック'
10.times do |t|
if t%2==0
puts('ワンツー')
else
puts(kick)
end

^
from (irb):2
from :0

693デフォルトの名無しさん:2006/07/10(月) 21:05:00
まてまて、それ全部一行として扱われてるぞ。
それじゃあエラーにもなるよ。

それってDOS窓上のirbにコピペしてるの?
694デフォルトの名無しさん:2006/07/10(月) 21:20:32
はい、そうです。
どうすれば改行できるんすか??
695デフォルトの名無しさん:2006/07/10(月) 21:36:03
いや、手元で試すとちゃんと動くんだけど。
ASRのRuby Console上のirbに、
このスレからソースをコピペしてみた。

irb(main):001:0> kick='ローキック'
=> "\203\215\201[\203L\203b\203N"
irb(main):002:0> 10.times do |t|
irb(main):003:1* if t%2==0
irb(main):004:2> puts('ワンツー')
irb(main):005:2> else
irb(main):006:2* puts(kick)
irb(main):007:2> end
irb(main):008:1> end
ワンツー
ローキック
ワンツー
ローキック
ワンツー
ローキック
ワンツー
ローキック
ワンツー
ローキック
=> 10
irb(main):009:0>

うまく動かない状態を再現できない。
696デフォルトの名無しさん:2006/07/10(月) 21:53:23
できました。
ありがtぷございます。
>>695
697デフォルトの名無しさん:2006/07/10(月) 22:39:10
恋するRubyとかなんとかだっけ?
698デフォルトの名無しさん:2006/07/11(火) 09:58:23
699デフォルトの名無しさん:2006/07/11(火) 10:02:07
>>696
で、なにが原因でうごかなくて、どうやって解決したの?
それがなくて「できました」だけじゃあ、参考にならんなあ。
700デフォルトの名無しさん:2006/07/11(火) 10:11:39
参考にしてもらう気も別にないんだろう
701デフォルトの名無しさん:2006/07/11(火) 10:52:06
正直、それを知りたいとも思わんな。
702デフォルトの名無しさん:2006/07/11(火) 16:11:48
そして再び同じ質問が永遠に繰り返される不毛の大地。
703デフォルトの名無しさん:2006/07/11(火) 19:21:46
こんな意味不明の質問を投げる奴はこいつしかいないから、
同じ質問はさすがにもう来ない。
キチガイが荒らす場合以外は。
704デフォルトの名無しさん:2006/07/11(火) 22:46:35
複数行あるテキストを、最下行から順に表示して行くにはどうしたらいいんでしょうか?
705デフォルトの名無しさん:2006/07/11(火) 22:56:24
コマンドで言うtacかな。
上から配列に入れてreverseしたものを表示しろ。
706デフォルトの名無しさん:2006/07/11(火) 22:57:00
>>705
できました
ども
707デフォルトの名無しさん:2006/07/11(火) 23:15:03
テキストがでかい場合、全部読み込んでreverseすると大変。

末尾から適当に区切って読み込んでいけるスクリプトが書ければ
初心者から初級者にランクアップできるぞ。1
708デフォルトの名無しさん:2006/07/12(水) 00:11:17
どのように組めばいいのかわからずに困っています。アイデアをお願いします。
このようにその日の最高と最低気温を記録したデータあります。
2006/06/27,23.3,20.9
2006/06/28,25.5,23.0
2006/06/29,33.3,27.6
2006/06/30,24.6,22.1
2006/07/01,33.7,31.7
2006/07/02,30.1,28.0
2006/07/03,29.4,20.4
2006/07/04,31.3,30.0
2006/07/05,25.5,19.8
2006/07/06,28.8,21.0
2006/07/07,32.6,25.7
2006/07/08,22.0,16.5
また、例年の平均気温の週ごとのデータもあります。
2006/07/01,27.9,24.5
2006/07/08,24.4,20.0
日付を比較して週ごとのデータを日ごとのデータにくっつけたいんです
2006/06/27,23.3,20.9,27.9,24.5
2006/06/28,25.5,23.0,27.9,24.5
2006/06/29,33.3,27.6,27.9,24.5
2006/06/30,24.6,22.1,27.9,24.5
2006/07/01,33.7,31.7,27.9,24.5
2006/07/02,30.1,28.0,24.4,20.0
2006/07/03,29.4,20.4,24.4,20.0
2006/07/04,31.3,30.0,24.4,20.0
2006/07/05,25.5,19.8,24.4,20.0
2006/07/06,28.8,21.0,24.4,20.0
2006/07/07,32.6,25.7,24.4,20.0
2006/07/08,22.0,16.5,24.4,20.0
(続く)
709デフォルトの名無しさん:2006/07/12(水) 00:15:30
(続き)
日ごとのデータの日付の/を削除し整数値のデータに変換した後で
週ごとのデータをeachで全て読み込み、そのデータと大小比較して
貼り付けるという物を考えたのですが、複雑すぎるような気がして
混乱しています。

もっと単純な方法はない物でしょうか?
710デフォルトの名無しさん:2006/07/12(水) 00:19:33
そのアイデアでも十分単純に組めるとは思うけど?

ただ、/を削除して整数値に変換する必要はないね。文字列のまま比較してよし。
次に比較でなく、日付から相当する「週」のラベル(日)を出すロジックを考えるといいかも。
あとはハッシュなり配列なりで工夫して。

もっとうまい手もあると思うけどね。
711デフォルトの名無しさん:2006/07/12(水) 00:24:24
両方のデータがともに日付でソートされているなら

df = open('daily')
wf = open('weekly')
w, wt = wf.gets.chomp.split(/,/, 2)
df.each do |dl|
&nbp; d, t = dl.chomp.split(/,/, 2)
&nbp; while d > w
&nbp; &nbp; w, wt = wf.gets.chomp.split(/,/, 2)
&nbp; end
&nbp; puts [d, t, wt].join(',')
end
wf.close
df.close
712デフォルトの名無しさん:2006/07/12(水) 00:30:29
“消えない”空白は&nbsp;
Non-Breakable whiteSPace(区切り候補にならない空白)の略
713デフォルトの名無しさん:2006/07/12(水) 00:31:23
失敗。&nbp;はスペース。
あとエラーチェックとか全然してない。
714デフォルトの名無しさん:2006/07/12(水) 00:34:44
>>710
やっぱりその方法もありなんですか
今の腕だと結構ハードで

>>711-713
参考にさせていただきます

ありがとうございました
715デフォルトの名無しさん:2006/07/12(水) 04:35:14
> 日付から相当する「週」のラベル(日)を出すロジックを考えるといいかも。
> あとはハッシュなり配列なりで工夫して。
こんなのか?

require 'date'
delta = nil
weeklyh = {}
IO.foreach('weekly') do |l|
a = l.split(/,/,2)
d = Date.parse(a[0])
weeklyh[d.cweek]= a[1]
delta ||= (7 - d.cwday)
end

IO.foreach('dayly') do |l|
d = Date.parse(l[/\d+\/\d+\/\d+/]) + delta
puts l.chomp + ',' + weeklyh[d.cweek]
end
716デフォルトの名無しさん:2006/07/12(水) 05:38:05
Windowsへインストールする際、One-click InstallerとActiveScriptRubyは
どちらがおすすめでしょうか? 差がよくわからなくて...
717デフォルトの名無しさん:2006/07/12(水) 06:49:12
何をしたいかを書け

おすすめのしようがない
718716:2006/07/12(水) 07:45:35
Rubyを勉強してちょっとしたテキスト処理のスクリプトをしたいだけです。
あと、ゆくゆくWindowsのGUIを使ったスクリプトも作りたいです。
719デフォルトの名無しさん:2006/07/12(水) 09:39:58
よくわからんがRubyというものに触れて今後の糧にしたいのなら普通のRubyにしとけ
720デフォルトの名無しさん:2006/07/12(水) 10:12:46
OneClickInstallerでいいと思う。
違いはよく知らないんだけど。
721デフォルトの名無しさん:2006/07/12(水) 12:37:30
>>718
mswin32版ruby+RDE
722デフォルトの名無しさん:2006/07/12(水) 12:45:00
ttp://homepage2.nifty.com/sakazuki/rde/index.html
とりあえずこれつかっとけ。
723デフォルトの名無しさん:2006/07/12(水) 12:52:50
ASR + RDE で良いんじゃね?
724デフォルトの名無しさん:2006/07/13(木) 01:37:38
740821853621031666072323047816479569603068959994684069733778925634
こんな感じのランダムな数字があって、これを4文字ずつに切り分けるにはどうしたらいいんでしょう?
unpackを使うらしいのですが
unpack("a4")
とやっても7408が切り出されるだけで、残りが無視されてしまいます
725デフォルトの名無しさん:2006/07/13(木) 01:44:36
7408・・略・・925634.to_s.scan(/..../)

どうでしょうか
726デフォルトの名無しさん:2006/07/13(木) 01:51:48
>>725
なるほど、その手がありましたか
どうも
727デフォルトの名無しさん:2006/07/13(木) 05:17:23
第二版ですが、いっそのこと来年春発売予定にしておいてくれませんか?
どんどん延長しますね。
楽しみにしているのが馬鹿馬鹿しく思えてきました。
つーか、もう出さなくてもイイですよ。
728デフォルトの名無しさん:2006/07/13(木) 05:48:30
いま Python に乗り換えるかどうか迷っています
729デフォルトの名無しさん:2006/07/13(木) 11:01:37
>>728
学ぶ時間があるのなら迷わず乗り換えちまえ。
言語はそれぞれに独特の考え方があって視野を広げてくれる。
自分の都合で言語を選べるのは恵まれているのだから
チャンスは生かせばいい。
730デフォルトの名無しさん:2006/07/13(木) 11:43:27
はじめまして。Rubyをちょくちょく勉強してる者なんだけど
今回RDF/XMLを使おうと思うんだけど、それに関するいい書籍はありませんか?
Rubyの本を調べてみたけど、どれもピンとこないので実際に読んでる人に
教えて貰いたいんだけど・・・

いいのがあったら購入を考えてるのでお願いします
731730:2006/07/13(木) 11:56:47
ごめん書き方が悪かったです。
Rubyを使ってRDF/XMLを作れる、使えるような事を書いてる本です。
Rubyについてはそこそこ本が出てますけど、
具体的な中身がわからないので・・・
732デフォルトの名無しさん:2006/07/13(木) 12:00:56
733デフォルトの名無しさん:2006/07/13(木) 12:50:45
>>727
去年そうそうに英語版買った俺が買ち組。1冊だし、安いし。
734デフォルトの名無しさん:2006/07/13(木) 13:54:50
今となってはどうでもいい。
735デフォルトの名無しさん:2006/07/13(木) 17:56:26
require 'net/http'
host = 'www.amazon.co.jp'
directory = '/test'
h = Net::HTTP.new(host, 80)
while htmlfile = DATA.gets
htmlfile = htmlfile.chomp
resp, data = h.get(directory + "/" + htmlfile, nil)
data.each { |i| puts i }
end
__END__
product/B0000AIRN3/250-6594702-0116251?v=glance&n=561958

このやり方でamazonのページを取得できないのですがなぜでしょうか?
ちなみにほかのサイトは取得できました。
736デフォルトの名無しさん:2006/07/13(木) 18:06:11
DATAって何だよ
737デフォルトの名無しさん:2006/07/13(木) 18:12:08
普通に取得できるが。404だけどな。
738デフォルトの名無しさん:2006/07/13(木) 18:26:34
先ほどのプログラムにミスがありました。
こっちが正しいやつです。すみません。

require 'net/http'
host = 'www.amazon.co.jp'
directory = '/gp'
h = Net::HTTP.new(host, 80)
while htmlfile = DATA.gets
htmlfile = htmlfile.chomp
resp, data = h.get(directory + "/" + htmlfile, nil)
data.each { |i| puts i }
end
__END__
product/B0000AIRN3/250-6594702-0116251?v=glance&n=561958

これも試してみましたが、>>737さんのおっしゃるとおり何も取得できません。

http://www.amazon.co.jp/gp/product/B0000AIRN3/250-6594702-0116251?v=glance&n=561958
↑このページは存在するのに、なぜ何も取得できないのでしょうか?
739デフォルトの名無しさん:2006/07/13(木) 18:30:57
>>738
ヒント: 301 MovedPermanently
740738:2006/07/13(木) 18:44:13
MovedPermanently・・恒久的に移動しました。
とありましたが、こういった場合はどうやって取得すればよいのでしょうか?
741デフォルトの名無しさん:2006/07/13(木) 18:48:55
Locationヘッダ
742デフォルトの名無しさん:2006/07/14(金) 16:26:44
erubyを
tp://blog.koss.jp/article_346.html
の方法に従ってdebain/sergeにインストールしたんですが。

eruby上でエラー構文を書くと、webの表示で「500 Internal Server Error」となってしまいます。
こういうものなんでしょうか?

もう少し親切にエラーで怒ってくれないものでしょうか。
743デフォルトの名無しさん:2006/07/14(金) 16:28:16
begin
rescue
end
744742:2006/07/14(金) 16:42:27
自分でエラーを書けって事ですね。
つまり構文のエラーを突っ込んでくれるような機能はデバッガ等を導入しろって事だと理解しますた。
745デフォルトの名無しさん:2006/07/14(金) 16:46:28
ちがうよ
746デフォルトの名無しさん:2006/07/14(金) 16:52:48
ていうかWebサーバから見てInternelServerErrorである以上
ユーザーに対してInternelServerErrorを表示するのは当たり前

Webサーバのエラーログあたりを見ろ
Rubyが返してるエラーが書き出されてるはずだ
747742:2006/07/14(金) 16:56:47
>>746さん
ご指摘ありがとうございます、apacheのログを確認してみようと思います。

これ以上簡便なエラー表示方法は無いのでしょうか?
デバッグ中はweb上からエラー表示するとか・・
748デフォルトの名無しさん:2006/07/14(金) 17:05:15
標準エラー出力に何も表示されなければWebサーバ側からは内部エラーが起きたとはわからないはず
エラーや例外の出す標準エラー出力を全部捕捉して標準出力に書き直せばいんでないの
749デフォルトの名無しさん:2006/07/14(金) 17:34:45
>>748
標準エラー出力を捕捉して書き直しってけっこう大変だと思うが。
>>743のいうように、rescue Exceptionで、文法エラーも含めて全部捕捉して、
書き出すのが楽だと思う。
それでも捕捉できなかったら、ローカルで、ruby -cとやってみること。
750デフォルトの名無しさん:2006/07/14(金) 17:55:59
サーバアプリの場合、詳細なエラーメッセージ出すと
セキュリティ上良くない場合もあるからね
500しか言わなくて良いよ
751デフォルトの名無しさん:2006/07/14(金) 22:48:20
> 標準エラー出力を捕捉して書き直しってけっこう大変だと思うが。
Perl だとサクッと出来る。
752デフォルトの名無しさん:2006/07/14(金) 22:50:50
たぶん、>>742がほしいのは、erubyを書いててsyntax errorがあったときに
簡単に見つける方法なんじゃないだろうか。
もしそうだとしたら、こんなのはどうでせう?
$ erb -x file.rhtml | ruby -wc

erb -x で file.rhtml を rubyスクリプトに変換し、それを ruby -wc で構文チェックかけてます。
753デフォルトの名無しさん:2006/07/15(土) 00:36:16
>>749
文法エラーはスクリプトの実行前に発生するので無理だが、
実行時のエラー出力は$stderrを変えておけば捕捉できる。

$stderr = StringIO.new
begin
  ...
ensure
  err = $stderr.string
  unless err.empty?
    puts err
  end
end
754デフォルトの名無しさん:2006/07/15(土) 01:08:54
>>751
perlだったらCGI::Carpってのがあるけど、rubyにはないのだろうか。
755デフォルトの名無しさん:2006/07/15(土) 09:16:31
不器用ですが、無理やり表示

#!/usr/bin/ruby
END { puts "Content-type: text/html\n\n<h3>#{$@}<br>#{$!}" if $!}
hoge.to_s
puts "Content-type: text/html\n"
puts "<html>"

puts "</body></html>"
exit

#=>
D:/www/cgi-bin/index.cgi:3
undefined local variable or method `hoge' for main:Object
756デフォルトの名無しさん:2006/07/15(土) 11:06:31
$@は複数行になるんだけど、headingにすんの?
つーかタグ閉じろよ。サニタイズしろよ。
757デフォルトの名無しさん:2006/07/15(土) 11:59:20
>>754
syntax error も捕捉してくれるんだっけか?
758デフォルトの名無しさん:2006/07/15(土) 12:09:47
というかデバッグ用だったらtext/plainでいい罠
759デフォルトの名無しさん:2006/07/16(日) 11:59:32
>>757
しない。
つーか捕捉する側のコードがerrorだったらそもそも走らない。
別ファイルに分けてloadするか、evalするかしないと無理。
760デフォルトの名無しさん:2006/07/16(日) 13:48:02
こんな感じ?
begin
  load "foo"
rescue Exception => e
  print "Content-Type: text/plain\n\n"
  print "#{e.backtrace[0]}: #{e.to_s} (#{e.class})\n"
  e.backtrace[1 .. -1].each do |bt|
    print "\tfrom #{bt}\n"
  end
end
761デフォルトの名無しさん:2006/07/16(日) 18:04:10
>>757 は Perl の話なんじゃね?

=cut

ところで今日

proc do
 retry if gets
end.call

ってやったら retry 出来なくてびっくりした
762デフォルトの名無しさん:2006/07/16(日) 20:35:33
require 'open-uri'
require 'nkf'
title = Array.new
url = "http://money.jp.msn.com/newslist.aspx"

def get_title(url)
body = NKF.nkf("-s", open(url).read)
title << body.scan(/<div class="newsheadlinelist">(.*?)<\/div>/)
if /<a href='(.*?)'>次へ>/s =~ body
next_url = $1
get_title(next_url)
end
end

get_title(url)
title.each {|i|
print i, "<br>\n"
}

なんでこれ
msn.rb:8:in `get_title': undefined local variable or method `title' for main:Obj
ect (NameError)
とか言われるんでしょうか?
一番外で最初に宣言してるのですが
763デフォルトの名無しさん:2006/07/16(日) 20:40:07
変数のスコープの問題だね。

C とかとはちょっと違うんだよね。
変数をグローバルスコープで使いたい場合は、title じゃなくて $title としましょう。
764デフォルトの名無しさん:2006/07/16(日) 21:15:06
Rubyにおいては、メソッドの定義の中では外部のローカル変数にアクセスできない。

…なんでかはよくわからん。
Rubyのいくつかのスコープは字面は同じなのに不思議な挙動を示すことがある。

書き捨てならグローバル変数にしてしまうか、引数でメソッド内部に持ち込め。
765デフォルトの名無しさん:2006/07/16(日) 21:57:15
defやclassは外と共有しない新しいスコープ
do〜endや{〜}は外のも読める入れ子のスコープ
if〜endやwhile〜endはスコープを作らない
766デフォルトの名無しさん:2006/07/16(日) 21:57:45
>>763-764
なるほど、グローバル変数ですか
ども
767デフォルトの名無しさん:2006/07/16(日) 22:02:48
Rubyでグローバル変数勧める奴は氏んでいいよ
768デフォルトの名無しさん:2006/07/16(日) 22:07:42
いいんだよ。
変数表でしっかり管理していれば
グローバルが最強なのはどの言語にも言えること。
変数スコープはバグの温床。
769デフォルトの名無しさん:2006/07/16(日) 22:10:45
変数表ってなに?
770デフォルトの名無しさん:2006/07/16(日) 22:11:44
クラスのメソッド定義内でグローバル変数にアクセスするなんて、
筋が悪いにもほどがある。
771デフォルトの名無しさん:2006/07/16(日) 22:13:34
げふっ、クラスじゃなかった。
>>770は取り消す。
772デフォルトの名無しさん:2006/07/16(日) 22:14:18
グローバル変数とは
プログラム構造が複雑怪奇でどうしても如何ともし難いときに
最終奥義としてうやうやしくこっそりと最低限の用量で慎重に使うものだ


でも実際上はフツーの人が作るプログラム程度においては破綻の原因にはなりっこない罠
773デフォルトの名無しさん:2006/07/16(日) 22:18:13
書いた瞬間は破綻はそう無いけど、後日そのコードを何かしようと
したときに破綻のトリガーになったりする。
774デフォルトの名無しさん:2006/07/16(日) 23:07:18
もまいらMatzもオススメのCOBOLに一辺触れてみ。
グローバル変数なんて一生使いたくなくなるから。
775デフォルトの名無しさん:2006/07/16(日) 23:32:33
質問者がグローバル変数として使うつもりのようなんだから
グローバル変数の使い方教えて何が悪い。
776デフォルトの名無しさん:2006/07/16(日) 23:35:25
意地が悪いかも
777デフォルトの名無しさん:2006/07/17(月) 07:12:46
俺はトップレベルでクラス変数を使った事がある
778デフォルトの名無しさん:2006/07/18(火) 05:42:04
長さの不揃いな「配列の配列」をtransposeしたいんですが
良い方法はないでしょうか?Rubyは1.8です
779デフォルトの名無しさん:2006/07/18(火) 08:09:50
ruby matrix transpose で検索したら、Matrixクラスというのがあるらしい。
ttp://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Matrix
いちおうtransposeメソッドもあるみたい。
長さの不揃いな配列の配列を、Matrixオブジェクトに変換してみてはどうだろう。
780デフォルトの名無しさん:2006/07/18(火) 12:04:54
RubyでRSSリーダーを作ろうと思ってるんですが
そういうのを解説したサイトとかありませんか?
781デフォルトの名無しさん:2006/07/18(火) 12:09:23
>779
ありがとうございます。
ですがこれ、数値が前提みたいで……
扱いたいのは自作クラスのインスタンスなんです。

一応自分でこんなのを作ってみました。
でも、もう少しサラっと書けないかなぁと思います。

def trans_aryary(src)
 dst = []
 row = 0
 begin
  tmp = []
  found = nil
  src.each do |col|
   tmp.push col[row]
   found ||= col[row]
  end
  dst.push(tmp) if found
  row += 1
 end while found
 return dst
end
782デフォルトの名無しさん:2006/07/18(火) 12:26:11
>>780
そんなピンポイントな解説サイトなんてあってたまるかー
いや、あっても楽しそうな気もするが

せっかくの自作なら自力で作っていくのもいいんじゃね

RSSを読んでREXMLでパースするもやたら遅すぎるので正規表現で適当に区切って
1回目の表示はうまくいったけど未読と既読の管理の実装どうしようというとこで是非挫折してくれ(w
783デフォルトの名無しさん:2006/07/18(火) 13:02:33
え、巷のRSSリーダーって、ローカルにarticleを貯めないのか?
784デフォルトの名無しさん:2006/07/18(火) 13:33:01
「読んだ」記事とはなんぞや、というRSSリーダー特有の問題のことだろう

title一覧からクリックしてdescriptionを表示した記事だけを既読として扱うのかとか
titleとdescriptionをセットでずらずら一覧表示して全部既読ということにしてしまうのか

メーラーのような既読処理のほうが間違いはないが、数十数百の記事になるととてもとても
785デフォルトの名無しさん:2006/07/18(火) 13:35:37
それRSSリーダ特有の問題なの?
786780:2006/07/18(火) 13:41:38
>>780
確かに。でも他の言語ならあってもおかしくない気も・・・
挫折前提ですかw
とりあえずでいいから動くものを作りたいです
そっからカスタマイズでいいので・・・
未読既読は後でもいいかなとか
787780:2006/07/18(火) 13:45:03

アンカーミスだ・・・
>>782
です
788デフォルトの名無しさん:2006/07/18(火) 14:50:21
>>780
ttp://internet.kill.jp/wiki/index.php?%B5%BB%BD%D1%2FRuby%A4%C7RSS
「Ruby RSS」でぐぐっただけだから、内容までは知らん。
789デフォルトの名無しさん:2006/07/18(火) 16:24:29
railsの話ですが、ttp://wota.jp/ac/?date=20060525#p02 に認証プラグインが載っているのですが、
インストールして、コントローラーに
htpasswd :user=>"foo", :pass=>"bar"
と入れて実行してみると
undefined local variable or method `htpasswd_options' for #<BbsController:0x409d1014>
となって、エラーになってしまう。なんでだろ?知っている人おしえてください。
790デフォルトの名無しさん:2006/07/18(火) 18:41:01
791780:2006/07/18(火) 19:56:27
>>788
おーサンキューです。調べが足りなかったですね。
でも、ほんとに読み込むだけだな・・・
これをWebにするならRailsを使わないと駄目なわけか・・・
792780:2006/07/18(火) 19:58:01
そういえば、Rubyの日本語のIDEってありますか?
CとかのCpadみたいな・・・
探してるんですが、英語版しか無いんで・・・
793デフォルトの名無しさん:2006/07/18(火) 20:04:54
RDEで良いんじゃない?
794デフォルトの名無しさん:2006/07/18(火) 20:30:11
俺もRDEをオススメする。
795デフォルトの名無しさん:2006/07/18(火) 21:13:05
>>782
それなんて日記?
796デフォルトの名無しさん:2006/07/18(火) 21:17:21
中学生日記
797780:2006/07/18(火) 22:09:35
>>793,794
ありがとうございます。早速インストールしたのですが
日本語化の仕方が分からない・・・
TransrationFileってどこだー!
798デフォルトの名無しさん:2006/07/18(火) 23:03:19
799780:2006/07/18(火) 23:30:43
>>798
できたよ〜。
何から何までありがと〜
800デフォルトの名無しさん:2006/07/19(水) 04:40:16
質問なんですが、
ttp://www.tea4miki.org/articles/2004/11/15
ここのサイトを見て、RubyでRSSを自動生成する物を作れると知って
このプログラムをうってみたのですが、
なぜかエラーが出ます・・・どうすればいいか分かる方いませんか?
801デフォルトの名無しさん:2006/07/19(水) 05:20:19
エスパーさん、出番です
802デフォルトの名無しさん:2006/07/19(水) 06:46:40
とりあえず打ち間違いを直しましょう
803デフォルトの名無しさん:2006/07/19(水) 07:12:08
何をして、どの様なエラーが出たかをちゃんと書かないと。
たぶん、「RSSを構築する」の部分ソースを動かしたのだと思うが。

Ruby をちゃんと普通に学習するなり、このサイトをベースにしてちゃんと学習するなりして、
本家行って RSS の仕様(英語)をちゃんと読んで、
両者を理解して上で自分で作らないと、むしろ茨の道な気がするが。
俺は自前で作ったことあるけど、あまり苦労しなかったし。
804デフォルトの名無しさん:2006/07/19(水) 08:26:12
>781
def transpose_nonsquarematrix(mtx)
max = mtx.map{ |array| array.size }.max
mtx.map{ |e| e.concat( Array.new(max - e.size, nil) ) }.transpose
end
805800:2006/07/19(水) 14:11:19
>>803
そうです。RSSを構築するの部分のソースを動かしたんですけど、
RDE使ってデバッグした所、
1行目と
rss=のところの行にエラーが出て何これ?って感じでした・・・
Rubyの本は注文したのですが、まだ届いてない状況。

自前で作るのが難しそうなので、こういったサイトを頼りにしてたのですが・・・
806デフォルトの名無しさん:2006/07/19(水) 15:08:54
とりあえずプログラム作ること自体初心者なのはわかった。
わかったからエラー内容をコピペ汁。
807800:2006/07/19(水) 15:16:18
>>806
C:/DOCUME~1/○○○/LOCALS~1/Temp/rb13.tmp:11:in `make': wrong number of arguments (2 for 1) (ArgumentError)
from C:/DOCUME~1/○○○/LOCALS~1/Temp/rb13.tmp:11
Completed(1)

実行するとこんなエラーが出ます・・・
808デフォルトの名無しさん:2006/07/19(水) 15:33:44
なにこれ
809デフォルトの名無しさん:2006/07/19(水) 15:53:29
>>807
11行目でmakeという関数を実行しようとしたが、(rb13.tmp:11: in `make')
引数の数が違っていますよ。(wrong number of arguments)
引数に1つだけ値を渡すべきところに2つ渡されていますよ。((2 for 1))

というエラーが出ているようだ。
810デフォルトの名無しさん:2006/07/19(水) 19:40:27
>>807
ttp://www.tea4miki.org/articles/2004/11/15 では
Ruby version 1.8.1を使っているが、>>807もそれにあわせている?
ruby -vの実行結果をコピペして欲しい。

ttp://www.cozmixng.org/~rwiki/?cmd=view;name=RSS+Parser%3A%3AReference.ja
ここを読むと最新版はRSS::Maker.makeの引数の数が変わっているので
エラーになるのだろう。
811デフォルトの名無しさん:2006/07/19(水) 20:20:15
it = Hoge.newするとit[0]やit[2]でデータが取り出せるクラスを作りたいんですがうまくいきません。
class Hoge
def initialize(str)
i = 0
strs = str.to_s.split(/\t/)
strs.each do |s|
self[i] = s
i = i + 1
end
end
def []=(x,y)
end
end
みたいに見よう見まねで書いてみたんですが[]=がうまくいかないです。
どうかヒントだけでも
812デフォルトの名無しさん:2006/07/19(水) 20:23:51
>>811
ではヒントをあげよう。

   見 よ う 見 ま ね で 書 く な

以上。
クラスの作り方とメソッドの作り方を勉強してからいじれ。
813デフォルトの名無しさん:2006/07/19(水) 20:28:52
見よう見まねは、プログラミングの基本
814デフォルトの名無しさん:2006/07/19(水) 20:30:30
>>810
1.8.2から1.8.3の境目って結構そーいうの多いよね
815デフォルトの名無しさん:2006/07/19(水) 20:34:25
>>813
「動かなくても文句言わない」が付随すると思うぞ
816デフォルトの名無しさん:2006/07/19(水) 20:40:02
class Hoge
def initialize(str)
@strs = str.to_s.split(/\t/)
end
def [](x)
return strs[x]
end
end
817デフォルトの名無しさん:2006/07/19(水) 20:46:33
initializeで処理を溜め込むのもどーかと思うけどね
818デフォルトの名無しさん:2006/07/19(水) 20:48:00
>>812
いやまあ確かにそうなんだけど
演算子の多重定義とか言ったってC++のoperator+とかみたいに
構造が見てれば分かるような記法じゃないみたいだし
せっかく買った入門書には変態的な例が一つだけ載っていてしかも
「このような真似はしないほうがいいでしょう」とか書いてあって
ちょっと相当参ってます。なにとぞ
819デフォルトの名無しさん:2006/07/19(水) 20:48:34
>>817
へ?何で?
820デフォルトの名無しさん:2006/07/19(水) 20:48:54
とか言ってるうちにレス来てましたか。
本当に申し訳ない。んでは
821デフォルトの名無しさん:2006/07/19(水) 21:07:37
>>816

return @strs[x]

だった

すまん
822デフォルトの名無しさん:2006/07/19(水) 22:18:59
>>819
あまり複雑な事をやらせて、そのうち例外処理とかまではいったら
目も当てられないだろう。

initializeはあくまでインスタンスを作成する為の処理だと思う。
823デフォルトの名無しさん:2006/07/19(水) 22:29:53
こんな奴がstartとかいうメソッド作るんだろうな、と思う
824デフォルトの名無しさん:2006/07/19(水) 22:47:07
class Hoge
def initialize(str)
@strs = str.to_s.split(/\t/)
end
def [](x)
return @strs[x]
end
def each
@strs.each {|s| yield s }
end
end

h = Hoge.new("aho\tbaka\thage")
h.each {|s| p s}
825800:2006/07/19(水) 22:53:25
>>810
わ、マジですか・・・
確かVerは1.8.4だと思います・・・
Verを1.8.1に変えて今一度やってみます。
826デフォルトの名無しさん:2006/07/19(水) 22:54:28
そんなやつがabortするプログラム組むんだろうな
827デフォルトの名無しさん:2006/07/19(水) 22:54:54
いやそのアプローチは正直どうかと
1.8.4用に書き換えようよ
828800:2006/07/19(水) 23:02:34
C:/DOCUME~1/Owner/LOCALS~1/Temp/rb398.tmp:3:in `require': No such file to load -- rss/1.0 (LoadError)
from C:/DOCUME~1/Owner/LOCALS~1/Temp/rb398.tmp:3
Completed(1)

1.8。1に変えました。
でも
C:/DOCUME~1/Owner/LOCALS~1/Temp/rb398.tmp:3:in `require': No such file to load -- rss/1.0 (LoadError)
from C:/DOCUME~1/Owner/LOCALS~1/Temp/rb398.tmp:3
Completed(1)

こんなエラーが・・・
829デフォルトの名無しさん:2006/07/19(水) 23:06:04
ほう。で?
830デフォルトの名無しさん:2006/07/19(水) 23:13:43
831800:2006/07/19(水) 23:27:41
>>830
RSSパーサですよね?インストールしました。ですが、
C:/DOCUME~1/Owner/LOCALS~1/Temp/rb3A1.tmp:6:in `require': No such file to load -- uconv (LoadError)
from C:/DOCUME~1/Owner/LOCALS~1/Temp/rb3A1.tmp:6
Completed(1)

と出ます。uconvって何だ・・・
まだ何かインストールしないと駄目なんですかね?
832デフォルトの名無しさん:2006/07/19(水) 23:30:16
「こんなエラーが」とか思考停止すんなよ。英語なんだから読めよ。
そんなレベルじゃ、初心者スレでも相手にされないって。思考しない向上心も無い初心者なんてクソだ。
RDE の事情なんて知ったこっちゃないが、
恐らく、C:/DOCUME~1/Owner/LOCALS~1/Temp/rb398.tmp:3 がソースファイルなんだろ?
公式のマニュアルで require を知れ。わざわざクォートで括って強調してくれてるんだろ?
そうすれば、$LOAD_PATH 以下に foo.rb やら bar.so があるかどうか、自然と調べるだろうに。
$ ruby -e 'p $LOAD_PATH' とかやってみな。
833800:2006/07/19(水) 23:33:41
>>832
すみません・・・
831のエラーは、requireってCで言うインポートみたいなもんですよね?
で、インポートする為のファイルが読めないってエラーだと思うんですが・・・
で、tmpの6行目だからuconvつーものが読めないって事だと思うんですが違いますかね?
834800:2006/07/19(水) 23:35:51
検索したらUconvってモジュールがあるんですね。
いけるかどーか分かりませんがとりあえずインストしてみます。
835800:2006/07/19(水) 23:50:48
Uconvをインストしようとして色々調べたんですが
ruby extconf.rb
make
make install
と順番に入れると書いてあったのでそのようにしたのですが、
makeの所で、
’Make'は内部コマンドまたは外部コマンド・・・
と出てきて認識してくれません。
ruby exconf.rbでは、ちゃんとcreating makefileと出るんですが・・・
原因分かる方いませんか?
836デフォルトの名無しさん:2006/07/20(木) 00:02:17
>>835
ドザはこれだから。
837デフォルトの名無しさん:2006/07/20(木) 00:05:11
どういう環境なんだろ?
OS板でもどうぞ。

まずはRoRが前提としてる環境を理解したほうがいいよ。
838デフォルトの名無しさん:2006/07/20(木) 00:15:32
>>833
Cにインポートなんてものはない。
839800:2006/07/20(木) 00:22:40
>>833
ごめん。Javaだった・・・

makeがなぜかできねぇぇぇぇ・・・
どういう事だろ?環境変数のPATHはちゃんと通してるはずなんだけど・・・
840デフォルトの名無しさん:2006/07/20(木) 00:31:54
>>800
とりあえず、Ruby 以前の問題だから出直してきた方がいいよ。
初心者スレッドだからって、何聞いてもいいわけじゃない。
841デフォルトの名無しさん:2006/07/20(木) 00:35:10
教訓:「なぜかエラーが出る」という奴にろくなのはいない
842デフォルトの名無しさん:2006/07/20(木) 00:43:59
試されていると考えるんだ!

http://www.garbagecollect.jp/ruby/mswin32/ja/download/ext.html
843デフォルトの名無しさん:2006/07/20(木) 00:45:41
>>842
お前のような奴がスレを駄目にする
後に続く何百何千の人間が迷惑を被る
844デフォルトの名無しさん:2006/07/20(木) 00:50:19
まじで?

すまん。
実際そんなにいるのか知らんけど、
後につづく、何千もの人間の人、すまんかった。
845デフォルトの名無しさん:2006/07/20(木) 01:06:57
リンク張られちゃったサイトのアクセスログによると1日30人くらいはいると思う
1年で1000人くらいにはなるかと(w
846800:2006/07/20(木) 01:11:57
>>840
すみませんでした。皆様にはご迷惑おかけしました。
なんかRubyの本体を解凍した中&インストした中にmakeが無いのは如何に?って感じですが・・・
パチもん掴まされたのか、そういうものなのか・・・

何はともあれせめてまともに動くようになってからまた来ます。
847デフォルトの名無しさん:2006/07/20(木) 01:38:43
あ、回答が間違ってたの?
間違った回答に誘導される人にとって迷惑だと。

てっきり、「安易に回答する」ことに対して
>843に説教いただいたのかと
思ってました。

すみませんでした。

あと>846は、まともに動くようになったら、もう来なくていいと思った。
848デフォルトの名無しさん:2006/07/20(木) 02:25:07
>> 846

> なんかRubyの本体を解凍した中&インストした中にmakeが無いのは如何に?って感じですが・・・ 

おまえさん、makeってコマンドがどーゆーものか知らないのかえ?
849デフォルトの名無しさん:2006/07/20(木) 02:30:43
まぁ「初心者」だから……と思わんでもないが
さて「makeがないって言われます」なんてFAQ項目が必要なのかな?

# 正直言うと、ことこの板でそんなこと言ってるのは「マウスが机の端まで来てもう動かせません」
# って困ってるのと同レベルな気もしないでもない
850デフォルトの名無しさん:2006/07/20(木) 02:52:07
私は >>800 ではないのですが、

ruby 1.8.1 の環境で

rss 0.1.5
uconv 0.4.12
xmlparser 0.6.8
xmlscan 0.2.3

をなんとか入れてみましたが、
やはりエラーが出てしまいます。
( >>800 さんが指摘していたエラーも一通り出ましたが
上のいくつかをインストールしたら消えました )

/usr/lib/ruby/1.8/date/format.rb:228:in `dup': can't dup NilClass (TypeError)
from /usr/lib/ruby/1.8/date/format.rb:228:in `_parse'
from /usr/lib/ruby/1.8/parsedate.rb:9:in `parsedate'
from /usr/lib/ruby/1.8/time.rb:137:in `parse'
from ./makerss.rb:17
851デフォルトの名無しさん:2006/07/20(木) 02:54:17
なんか誤読してる人が多そうなんで一応いっとくけど、makeはメソッド名だからね。
>>807,809をよーく読むべし。
852851:2006/07/20(木) 02:57:04
って、俺が誤読してるじゃん、死ね、俺 orz
853デフォルトの名無しさん:2006/07/20(木) 04:16:33
なんつーかmakeを知らないというだけで
ここまで厳しくされるのを見てると、Windowsユーザーへの風当たりを感じる

Linuxユーザーは「make知ってて当然」みたいに考えてるのかもしれないが
WindowsでRuby動かす初心者がそんなもん知ってるわけ無いだろ
実際、俺はRuby初めてから3年目にコンパイルという概念を知った
854デフォルトの名無しさん:2006/07/20(木) 04:39:03
>853
俺ドザーだが「makeがない」言われたら
「make.exe」か「make.com」でググるぐらいするよ。
855デフォルトの名無しさん:2006/07/20(木) 04:41:17
>>853
Windowsユーザーだから、makeを知らないから、というよりは、
質問の仕方、自分で調べる姿勢、テンプレ読んでないという問題でしょう。

>>850
rssに付属してるサンプルも動かない?
856デフォルトの名無しさん:2006/07/20(木) 05:18:41
>>800 みたいな行動や、>>853 みたいな解釈をして生きていけたら、ある意味幸せだよな。
857デフォルトの名無しさん:2006/07/20(木) 05:50:21
たったこれだけのソースで time や date あたりでコケてるのが丸見えなんだから、すぐ修正できそうなものだが。
せっかく、スクリプト言語だったり Ruby なのに。
端から見てて、他人のソースで考えずに愚痴るくらいなら、自分で考えて1から書いた方が早そうだ。

ところで、なんでわざわざ非標準添付の uconv 使ってるんだろ?
そもそも、半角等を考慮すると nkf 一択だった記憶があるんだが。
858デフォルトの名無しさん:2006/07/20(木) 07:48:18
コンピューターリテラシー(プッ)の問題だと思う

プログラミング(メジャーでもない言語でしかも非GUIなスクリプト言語)を始める人というのは
なんつーかそれなりにパソコンに詳しい人であろうというのをあちこちで期待されてる節があって
そういう知識というか勘を持たないままプログラミングを始める人が増えてるのは喜ばしいやら寂しいやら
859デフォルトの名無しさん:2006/07/20(木) 07:52:26
「じゃあまずDOSプロンプト開いて下さい」
「どすぷろんぷとって何ですか?」
「…わかったよ悪かったよ2000からはコマンドプロンプトだよなどうせ俺は古い人間だよリターンキーだよ」
「こまんどぷろんぷとって何ですか?」
「皮肉じゃなくて普通に知らないのかよ…」
860デフォルトの名無しさん:2006/07/20(木) 08:39:41
面倒だから ruby 1.8.4 (2006-05-27) [i386-cygwin] で
動作確認したソースをコピペするよ。元のサンプルに出来るだけ合わせた。
あとは好きにして。

require "open-uri"
require "kconv"
require "rss/maker"

response = URI.parse("http://www.tea4miki.org/articles/2004/11/15").read
lastmodified = response.last_modified

rss = RSS::Maker.make("1.0") do |maker|
  maker.channel.about = "http://www.tea4miki.org/rss"
  maker.channel.title = "プログラマっ子の足跡"
  maker.channel.description = "藤本美貴様の指先を見つめるプログラマっ子のサイトです"
  maker.channel.link = "http://www.tea4miki.org/"

  maker.items.do_sort = true

  item = maker.items.new_item
  item.link = "http://www.tea4miki.org/articles/2004/11/15"
  item.title = "Rubyを使ってRSSを生成する"
  item.date = lastmodified
end

File.open("rss.txt", "w") do |file|
  file.puts(rss.to_s.toutf8)
end
861850:2006/07/20(木) 10:01:53
>>860 さんありがとうございます。

素人の私には何がなんやらさっぱり分かりませんが
そのコードで動作しました。 ( 当方 ruby 1.8.1 です )

本当にありがとうございました。
862デフォルトの名無しさん:2006/07/20(木) 10:24:38
ミキサマミキサマオシオキキボンヌ
863デフォルトの名無しさん:2006/07/20(木) 11:13:11
こういう出元不明のソースでもパクって客に納品すればぼったくれるのがプログラマという職業の魅力です。
864デフォルトの名無しさん:2006/07/20(木) 13:03:27
perlで言うとこの s/hoge/huga/e (eオプション)とか
elispで言うとこの query-replace-regexp-eval とかみたいに
置換後の文字列を評価して返す方法って、Rubyでどうするんでしたっけ?

865デフォルトの名無しさん:2006/07/20(木) 13:34:43
古いperlしかしらないので、e修飾子は知らないけど、
string.gsub(/regexp/) { eval($~[0]) }
っていうような感じで何とかなるのかな。
866デフォルトの名無しさん:2006/07/20(木) 14:01:47
s/hoge/huga/e って書くと、huga という文字列が実行されるんじゃなかったっけ。
つまり、string.sub(/hoge/, huga) でいいと思うんだが、違うか?
867デフォルトの名無しさん:2006/07/20(木) 14:44:54
関数を通過して###2の出力をbbbにしたいのですが、
Cみたくポインタとかあるのでしょうか?

def aaa( test )
test = "bbb"
end
st = "aaa"
p st ###1
aaa(st)
p st ###2
868デフォルトの名無しさん:2006/07/20(木) 15:08:41
aaa!
869デフォルトの名無しさん:2006/07/20(木) 15:13:45
Cみたいなポインタは無いよ。
testの指すものがStringなら
def aaa(test)
 test.replace('bbb')
end
870デフォルトの名無しさん:2006/07/20(木) 15:13:52
test.replace("bbb")
871デフォルトの名無しさん:2006/07/20(木) 15:38:20
ありがとうございました
872デフォルトの名無しさん:2006/07/20(木) 17:53:38
>>867=871
余談だけど、「引数の中身を書き換える」ってのはあんまりRuby的じゃないので、
可能なら他の方法をお勧めする
873デフォルトの名無しさん:2006/07/20(木) 18:22:30
gsub!
874デフォルトの名無しさん:2006/07/20(木) 23:45:41
A,1
B,2
C,3
みたいな列と行を記した入力が合って
 A B C
1○
2  ○
3    ○
というテキストの表を出力するとします。

1.列名の配列を作る
2.HashのHashをつくって、hash[行][列]="○"とする
3.列名の配列と、hash.keys を捜査して表を出力する
って泥臭い方法でコード書いてみたいんですが、
もっと、Ruby っぽいシンプルな書き方ありませんでしょうか?
875デフォルトの名無しさん:2006/07/21(金) 00:01:51
動作するならそれでもいいじゃん。
876デフォルトの名無しさん:2006/07/21(金) 00:09:17
>>874
トリッキーなコードを求めているのではないとすれば、無い。
877デフォルトの名無しさん:2006/07/21(金) 00:27:56
matrix mを作ってAを0にした[0,1],[1,2],[2,3]…[i,j]に対してm[i,j]=1とかにして入力を全部登録したあと
m.to_aで配列の配列に戻して配列ごとに1があったら○を出力

うまくいきそうにないな
878デフォルトの名無しさん:2006/07/21(金) 00:33:22
Rつかうといいかもな
879864:2006/07/21(金) 00:44:03
>>865, 866
ほぼその通りでした。
"hoge_huga_hage".gsub(/(^|_)([a-z])/){$2.upcase} # => "HogeHugaHage"
みたいな感じ。ありがとうございました。
880デフォルトの名無しさん:2006/07/21(金) 01:08:23
>>857
nkf-utf8になったのは1.8.2からだからだろう。
881デフォルトの名無しさん:2006/07/21(金) 01:53:46
>>880
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=ruby+1.8.2+feature
ですね。なるほど納得です。
フォローありがとう。
RSS は UTF-8 にしておいた方が無難なので、uconv を使った訳か。
882デフォルトの名無しさん:2006/07/21(金) 02:57:46
>> 853

ActivePerl の ppmみたいな仕掛けが必要ってこと?
あればいいとは思うけど、とてもそこまでのリソースがあるとは思えない。

そもそも、なかむらさんが VC++のランタイムライブラリの名前変更にかなり
頭にきてるみたいだし(ruby-core 参照してね)、基準となるバイナリをどの
コンパイラによるものにするとかいろいろ障害があるね。


883874:2006/07/21(金) 07:11:36
適当なクラスがあって、
while gets
 a=$_.split(/,/)
 hoge[a[0]][a[1]]="○"
end
hoge.fieldseparator=nil
hoge.rowseparator="\n"
puts hoge.to_s
とすれば表になる、みたいなのがあればいいなと
思いましたが、ないですか。

勉強がてら自分でクラスにまとめてみます。
ありがとうございました。
884デフォルトの名無しさん:2006/07/21(金) 09:50:40
>>879
なんか最初に書いてたことと問題が違う気がするんだが?

初心者の向きにはこっちの方がわかりやすい気がする。
"hoge_huga_hage".split("_").map{|x| x.capitalize}.join => "HogeHugaHage"
885デフォルトの名無しさん:2006/07/21(金) 14:05:03
>>882
それでちょうど One Click Installer の Curt Hibbs も悩んでたりするようだね。
886デフォルトの名無しさん:2006/07/22(土) 10:41:07
require 'open-uri'
require 'nkf'
url = 'http://money.www.infoseek.co.jp/MnJbn/jbnindex/'

def getn(url)
url1 = 'http://money.www.infoseek.co.jp/'
str = NKF.nkf("-s", open(url).read)
str.scan(/<li><a href="(.*?)"> (.*?)<\/a><small class="source"> \- (.*?)<\/small><\/li>/){|i|
urlb = url1 + i[0]
print "<a href=\"#{urlb}\">#{i[1]}</a> #{i[2]}<br>\n"
}
if str.match(/次の40件/s)
str.scan(/<a href="(.*?)">次の40件/s)
print "#"
nurl = url1 + $1.to_s
getn(nurl)
end
end

getn(url)

再起してくれないのですがどこを直せばいいんでしょう?
http://money.www.infoseek.co.jp/MnJbn/jbnindex/
ここのニュースの次の40件をどんどんさかのぼってきたいんです
887デフォルトの名無しさん:2006/07/22(土) 11:09:42
<li>のとこの正規表現の空白は投稿時に変換されてるけど&nbsp;だよね

んで、どうしてもファイルからリンクを抜き出さないと駄目なの?
http://money.www.infoseek.co.jp/MnJbn/jbnindex/?st=41
http://money.www.infoseek.co.jp/MnJbn/jbnindex/?st=81
http://money.www.infoseek.co.jp/MnJbn/jbnindex/?st=121
「続き」のURLはこう続いてるように見えるんだけど。
sleep 3 とか挟んだ上で(この手のでsleep無しは下品)eachでぶん回せばいいのでは。
888デフォルトの名無しさん:2006/07/22(土) 11:20:38
>>887
規則性に乗っ取って取得するのもいいんですが
この場合何でうまくいかないのかそれが気になる物で
889デフォルトの名無しさん:2006/07/22(土) 11:34:28
なんだせっかく自動で動くように書き直してたのに(w

>>888

「str.scan(/<a href="(.*?)">次の40件/s) がブロックを伴ってないから」

要は { } の書き忘れですな
いじょ
890デフォルトの名無しさん:2006/07/22(土) 11:57:41
>>889
str.scan(/<a href="(.*?)">次の40件/s) {|i|
print "#"
nurl = url1 + i[0]
getn(nurl)
}
こういうことですか?
でも駄目なようです..
自動で動く版、よかったら見せてください。
891デフォルトの名無しさん:2006/07/22(土) 12:20:19
str.scan(/<a href="(.*?)">次の40件/s) {|i|
print "#"
nurl = url1 + i[0]
p nurl # 内容確認
getn(nurl)
}

ということで渡すurlがどうなってるか確認してみるといい。

ぶっちゃけURLが間違ってる
Infoseekのほうで「次の40件」という文字列を含まない別のページを返してきてるから
2度目のgetnのココで何もマッチせずに終わってる。
892デフォルトの名無しさん:2006/07/22(土) 12:35:38
>>891
どうもありがとうございました
あんな間違いが起きていたと考えてなかったです
893デフォルトの名無しさん:2006/07/22(土) 12:56:45
あんまり初心者的でない方法。
ruby -ropen-uri -rhpricot -e 'h="http://money.www.infoseek.co.jp";a="href";d=Hpricot(open("#{h}/MnJbn/jbnindex/"));(d/"#content//li/a").each{|i|i.attributes[a]=h+i.attributes[a];puts i}'
894デフォルトの名無しさん:2006/07/22(土) 13:04:28
>>892
なんでもかんでも302を返してリダイレクトするインフォシークのアホ仕様の被害者さんですな。
net/httpでアクセスしてればもうちょっと早くに異変に気づけたと思うんだけども。
open-uriはリダイレクトでも無言で辿って別のページを取り込んでしまうので注意(抑制法はある?)。

def check(server,path)
  Net::HTTP.start(server, 80){ |http|
  response=http.get(path)
    puts "net/http"
    puts "response.message: #{response.message}"
    puts "title: #{response.body.scan(/<title>.+?<\/title>/)}"
  }
  html=open("http://#{server}#{path}").read #2chブラウザでは&quot;に見える
  puts "open-uri"
  puts "title: #{html.scan(/<title>.+?<\/title>/)}"
end
check('money.www.infoseek.co.jp','/MnJbn/jbnindex/?st=41') # 正しいURL
check('money.www.infoseek.co.jp','//MnJbn/jbnindex/?st=41')# 誤りなURL

結果:
net/http
 response.message: OK
 title: <title>ニュース 一覧 - Infoseek マネー</title>
open-uri
 title: <title>ニュース 一覧 - Infoseek マネー</title>

net/http
 response.message: Moved Temporarily
 title:
open-uri
 title: <title>株価 外為 信用情報 - Infoseek マネー</title>
895デフォルトの名無しさん:2006/07/22(土) 13:21:27
いや、これはどう考えてもInfoseekのほうが変態的なだけであって
302の移動先に自動でアクセスするopen-uriの挙動は正当なもんだと思うぞ
896デフォルトの名無しさん:2006/07/23(日) 16:58:00
Hash の Hash を使うときの初期化って、

h=Hash.new({})

が正解?
897デフォルトの名無しさん:2006/07/23(日) 18:20:21
h=Hash.new()
898デフォルトの名無しさん:2006/07/23(日) 18:22:07

漏れは

h = Hash.new

h['hoge'] = fuga

で使ってるけど
899デフォルトの名無しさん:2006/07/23(日) 19:22:03
>>898
ハッシュのハッシュを使うにしても

該当のキーが存在しない場合にも空ハッシュを返したいならそれで正解
nilを返されると困る場合やnil判定すると処理がややっこになる場合か

個人的にはそういう理由がなければデフォルトのまま生成して
素直にnil返して貰った方が気が楽かなぁ
900デフォルトの名無しさん:2006/07/23(日) 19:43:04
>>896
不正解、かも。用途によるが。

h = Hash.new({})
h1 = h["ahaha"]
h1["hoge"] = "fuga"
p h["a"]["hoge"] #=> "fuga"

h = Hash.new() {|k, k| h[k] = defvalue } とか h = Hash.new() { raise } あたりの
方が当り障りがないことが多いと思う。
901デフォルトの名無しさん:2006/07/23(日) 21:39:31
ハッシュは即値じゃないから、初期値は
ブロック形式で指定した方が良いかもね
902デフォルトの名無しさん:2006/07/23(日) 21:40:51
なんかかっこわるい
903デフォルトの名無しさん:2006/07/23(日) 22:31:45
elseifじゃなくてelsifにヤラレタ。
904デフォルトの名無しさん:2006/07/23(日) 22:40:22
>>903
>elseifじゃなくてelsifにヤラレタ。
昔の英語の ruby ml で、何度も見た。
905896:2006/07/23(日) 22:46:58
質問の仕方が悪かったです。スマソ

h={}
while なにか
 h[それか]={} if h[それか]==nil ※
 h[それか][これか]=あれか
end

hashのhashを作るとき、※の処理をするのが冗長な気がしたので、
h=Hash.new({})
と書いてみたら ※ の行を削除しても
とりあえず動いたんですが、
この書き方でいいのかな〜。
ハッシュのハッシュの初期化にはなんか別の書き方があるのかな〜
と思って質問しました。
906デフォルトの名無しさん:2006/07/23(日) 23:19:11
そういう目的なら、Hash.new({}) よりも Hash.new(){ Hash.new } がよいね。
h = Hash.new({})
h[1][2] = 3
p h[4] #=> {2 => 3} が表示されるけど、{} であって欲しいでしょ?

あと、関係ないけどキーが登録されているかどうかは
Hash#[] == nil じゃなくて、Hash#key?、 Hash#include? あたりで調べた方がいい。
907デフォルトの名無しさん:2006/07/24(月) 16:22:18
>>906

> そういう目的なら、Hash.new({}) よりも Hash.new(){ Hash.new } がよいね。
それ違うくない?

irb> hoge = Hash.new{Hash.new}
=> {}
irb> hoge[1][2] = 3
=> 3
irb> hoge[4]
=> {}
irb> hoge[1]
=> {}

↑こうなるよ?

↓こっちが正解だと思うけど

irb> fuga = Hash.new{|h,k| h[k] = {}}
=> {}
irb> fuga[1][2] = 3
=> 3
irb> fuga[4]
=> {}
irb> fuga[1]
=> {2=>3}
908りぃか:2006/07/24(月) 18:40:51
助けてください(>_<)
学校の課題で三角形の塗りつぶしをやっているのですが、エラーが消えなくて困っています。
エラーはこんな感じです。
「triangle.rb:219:in '-': nil can't be coerced into Fixnum (TypeError)」
使用環境はruby 1.6.7 (2002-03-19) [i386-linux]です。

プログラミング初心者です、どうかよろしくおねがいします。
909デフォルトの名無しさん:2006/07/24(月) 18:47:33
triangle.rbの219行目にある引き算の
引かれる数にあたる変数か何かの値がnilなので
引き算を実行できないぞバカなんとかしろバカ

だそうな
910デフォルトの名無しさん:2006/07/24(月) 18:51:31
>908
エラーの前後のソース書け
長くなるようなら↓へ池

RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/
911デフォルトの名無しさん:2006/07/24(月) 19:01:52
長くならなくてもそっちのスレに行け。
912りぃか:2006/07/24(月) 19:02:08
長くなるので途中飛ばして書きます。

v = vertices()
x0 = v[0][0]
x1 = v[1][0]
x2 = v[2][0]

それからxの大小関係で場合分けをして、小さい順にax,bx,cxってしました。

問題の219行目が
my = (ay-cy)*(fx-cy)/(ax-cx)+cy

です。
913りぃか:2006/07/24(月) 20:24:16
たびたびすみません。
あと909さんありがとうございました。

ayやcxに数字入れてみたら、ちゃんと三角形が表示されました。
なぜaxとかのままだとnilになってしまうのか、教えていただきたいです。
よろしくおねがいします。
914デフォルトの名無しさん:2006/07/24(月) 20:31:50
夏だな
915デフォルトの名無しさん:2006/07/24(月) 20:49:21
夏だよ
916デフォルトの名無しさん:2006/07/24(月) 21:00:20
おう なつだぜ おれは げんきだぜ
917デフォルトの名無しさん:2006/07/24(月) 21:35:49
>>913
途中飛ばされると分からん
918デフォルトの名無しさん:2006/07/24(月) 21:51:31
どうでもいいけど、もっと新しいRuby入れたいところだな。
919デフォルトの名無しさん:2006/07/24(月) 21:54:01
夏になると小学生までがrubyに手を出すわけ?
920デフォルトの名無しさん:2006/07/24(月) 23:02:19
「3の倍数ではない」というのは、どのように打てば良いのか教えてください。

if n ??? 3 then
print n, "は", 3, "の倍数ではありません。\n"
921デフォルトの名無しさん:2006/07/24(月) 23:05:12
n % 3 != 0
922デフォルトの名無しさん:2006/07/24(月) 23:07:11
宿題なんだからそれくらい教科書嫁よ
923デフォルトの名無しさん:2006/07/25(火) 00:07:43
今、小学生の間でRubyが熱い。
924りぃか:2006/07/25(火) 03:02:36
>>917さん
ご指摘ごもっともです。ありがとうございます。
長くなりますが、書いてみます。邪魔だったらごめんなさい。
セミコロンを使ってる部分は、本当は改行してます。

require 'gfc'; require 'line_utils'; class Gfc; class Triangle
   def fill(g,c)
v = vertices() # v = [[x0,y0],[x1,y1],[x2,y2]]; color=c[0]
g.draw_line(v[0][0],v[0][1],v[1][0],v[1][1],color)
g.draw_line(v[1][0],v[1][1],v[2][0],v[2][1],color)
g.draw_line(v[2][0],v[2][1],v[0][0],v[0][1],color)

x0 = v[0][0]; x1 = v[1][0]; x2 = v[2][0]; y0 = v[0][1]; y1 = v[1][1]; y2 = v[2][1]

if x0 < x1; if x0 < x2; ax = x0; ay = x0; if x1 < x2; bx = x1; by = y1; cx = x2; cy = y2
   (上と同様に、if,elseを使って場合分け、省略)end
## ax < bx < cx となるようにした
fx = ax
## ここから下は,なぜかaxとかがnilになる.
fx.upto(cx) do |x|
my = (ay-cy)*(fx-cx)/(ax-cx)+cy
if fx < bx; ny = (ay-by)*(fx-bx)/(ax-bx)+by
else; ny = (by-cy)*(fx-cx)/(bx-cx)+cy; end
g.draw_vline(my,ny,x,color)
fx = fx + 1
end; end; end; end

g=Gfc.new(300,300,Gfc::COLOR_COLOR); t=Gfc::Triangle.new [[120,60],[50,190],[220,130]]
g.fill_figure(t,[0,0,255]); g.view

draw_lineというのは自分で定義したもので、線分を書くプログラムです。
何故axなどがnilになってしまうのでしょうか??(>_<)
925デフォルトの名無しさん:2006/07/25(火) 05:53:56
>924
RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/
926デフォルトの名無しさん:2006/07/25(火) 14:09:03
>## ax < bx < cx となるようにした

どうやってそうしたんだよ。そこがバグってるに決まってるだろ。
927デフォルトの名無しさん:2006/07/25(火) 14:13:15
くだ質ですが ruby 1.8.4 (2005-12-24) [i386-mswin32] の環境で
文字列クラスのメモリ領域を開放するのって↓のやり方で正しいですか?

str = ""

それとクラス関数で

class IniParam
  def get_string( key, default )
    ret = default
    f = open("myprog.ini", 'r')
    ini = f.read
    f.close
    ini.scan(/^#{key} *=.*/){ |s|
      ret = s.gsub(/^#{key} *= *(.*)/, '\1')
    }
   ret
  end
end

上記のget_string関数を呼び出した後で
ローカルで使った ini のメモリ領域って開放されますか?
928デフォルトの名無しさん:2006/07/25(火) 14:57:14
924の情報の出し方は、わかってからかってるのか真剣に悩んでいるのかちっともわからん。
929デフォルトの名無しさん:2006/07/25(火) 15:01:27
>>927
>文字列クラスのメモリ領域を開放するのって↓のやり方で正しいですか?
いいえ。その後解放されるかもしれないしされないかもしれません。
あと、どうでもいいけど、普通は str = nil とするかと思います。


>ローカルで使った ini のメモリ領域って開放されますか?
いいえ。その後解放されるかもしれないしされないかもしれません。


どうでもいいけど、「開放」じゃなくて「解放」な。
930デフォルトの名無しさん:2006/07/25(火) 15:38:06
if /hoge/ !=~ のようなことがしたいのですが
unless /hoge/ =~ でやるのが普通なんでしょうか?
931デフォルトの名無しさん:2006/07/25(火) 15:40:43
普通 !~ だよな
932デフォルトの名無しさん:2006/07/25(火) 15:41:38
>>928
解ってからかってる方に1るびま
933デフォルトの名無しさん:2006/07/25(火) 15:44:52
>>927
Rubyのメモリの解放は、GCが勝手にやってくれるので
あまり気にしなくてもいい
どうしても意図的にやりたければ

str = nil
GC.start

でおk

>>930
一応、unlessの方が一般的だと思われる
934デフォルトの名無しさん:2006/07/25(火) 16:15:53
>>933
>Rubyのメモリの解放は、GCが勝手にやってくれる
だから、解放されるかもしれないしされないかも(ry
935デフォルトの名無しさん:2006/07/25(火) 16:31:27
>>931
ども
そんなの初めて知りました
936デフォルトの名無しさん:2006/07/25(火) 17:09:14
>>933 はイマイチ理解してなさそうだな。いろいろ。
937デフォルトの名無しさん:2006/07/25(火) 18:03:03
$'と$`で格納する情報が異なることを知ったんですが`はキーボードのどこを打つと出ますかこの書き込みはコピペです。
938デフォルトの名無しさん:2006/07/25(火) 18:04:24
$`の部分がコピペということです。どなたかご教授お願いします。
939デフォルトの名無しさん:2006/07/25(火) 18:06:21
普通に出ました失礼しました。
940933:2006/07/25(火) 18:21:03
>>936
kwsk
941デフォルトの名無しさん:2006/07/25(火) 19:05:47
むしろ933はここにいる他の誰よりも詳しいような気がする。
942927:2006/07/25(火) 19:44:56
>>929>>933
レスありがとうございます。いろいろ考えましたが、ガベコレに任せることにします。

別件でまた質問で恐縮なのですが

sec_files.each { |s|
  dist_files.each { |t|
    break if /^#{s.file}$/ == t.file
  }
  disp_string "削除:[#{s.id}] #{s.file}" if $~ == nil
}

↑の処理するときに、一度も内側のイテレータ通らなかった時って、
$~ が不定だと思うんですが、$~ = nil って勝手に代入しても大丈夫でしょうか?
それとも何かほかの良い方法がありますでしょうか?
943デフォルトの名無しさん:2006/07/25(火) 19:52:52
>>942
いまのところ、不定じゃなくてnilになると思うが、変わるかもしれないし、
普通に一時変数を使ったらどうだ?
944デフォルトの名無しさん:2006/07/25(火) 20:00:04
if $~ == nil
は、
unless $~
と書く方がいいよ。
945デフォルトの名無しさん:2006/07/25(火) 21:50:41
>>944
意味違ってるじゃん。 unless肯定派にしても unless $~.nil? だろ。
946デフォルトの名無しさん:2006/07/25(火) 22:30:08
>>942
dist_filesに一致しないものについてdisp_stringを呼びたいんなら、any?を
使うほうがわかりやすいと思う。
あと、RegexpとStringでマッチさせたいなら==じゃなくて=~だな。

 pat = /^#{s.file}$/
 unless dist_files.any? {|t| pat =~ t.file}
  disp_string "削除:[#{s.id}] #{s.file}"
 end
947デフォルトの名無しさん:2006/07/25(火) 23:26:08
>>945
そもそも$~.nil?にする必要がないもの
値がfalseである可能性があるならともかく
そうでなければわざわざnil?を使う必要はない
948デフォルトの名無しさん:2006/07/26(水) 00:06:16
>>947
可読性って知ってるか?
949デフォルトの名無しさん:2006/07/26(水) 01:08:14
>>948
どっちが自然に感じるかは人による
俺はnil?付けない派だなー
950デフォルトの名無しさん:2006/07/26(水) 01:38:05
945は痛いということがわかった。

951デフォルトの名無しさん:2006/07/26(水) 01:56:33
というか、unlessは俺の言語感覚になじまないので使わない
952デフォルトの名無しさん:2006/07/26(水) 02:00:14
if厨はこれだからwwwwwww



if厨ってなんだ
953デフォルトの名無しさん:2006/07/26(水) 02:22:31
unlessやnil?は各人の好みが出るよな
実用上は大差ないだけに
954デフォルトの名無しさん:2006/07/26(水) 09:19:32
オレはif使わずにunlessだけでやるよ?
955デフォルトの名無しさん:2006/07/26(水) 10:16:26
rubyのGraphics Library で一番メジャーなのは何ですか。
GDは2001年に開発がストップしているみたいなのですが。

956デフォルトの名無しさん:2006/07/26(水) 10:36:20
>>955
そもそも、rubyでGUIを作るか? 他にツールはいくらでもあるが、
まあ、ruby/tkか、ruby/Gtkだろ。
957デフォルトの名無しさん:2006/07/26(水) 11:40:20
>>954
マジか
958デフォルトの名無しさん:2006/07/26(水) 13:28:42
unless と if not は意味が違うからね。
959デフォルトの名無しさん:2006/07/26(水) 14:02:50
>>956
RMagickとかそんな答えを期待しているような気がするが。
imlibのラッパーがあるならそれでもいいかも。
960デフォルトの名無しさん:2006/07/26(水) 14:58:13
unlessにはelsifを続けられないという致命的な欠点があるな。
961デフォルトの名無しさん:2006/07/26(水) 14:59:16
Windowsで、OneClickInstaller + gem で rakeをインストールしました。
cygwinのbashで、rake.batは入るんですが、rakeが(スクリプト)が入ってくれません。
rakeを入れる方法はないですか?
962デフォルトの名無しさん:2006/07/26(水) 18:11:22
>>961
>cygwinのbashで、rake.batは入るんですが、
意味がわからん。
963デフォルトの名無しさん:2006/07/26(水) 19:20:31
rake.batはインストールされるんですが、rakeはインストールされないんです・・・
964デフォルトの名無しさん:2006/07/26(水) 20:30:23
あー、意味がわかった。
cygwinのbashから実行したいからrakeスクリプトそのものが欲しいんだけど、
ということか。

で、意味はわかったけど、解決方法は知らん。
誰か詳しい人、よろ。
965デフォルトの名無しさん:2006/07/26(水) 20:54:58
cygwinのパッケージで入れる。
966デフォルトの名無しさん:2006/07/26(水) 22:40:36
うん
rake.batが、rakeで実行できればいいんだけどねー
って、alias作ればいいのか orz
967デフォルトの名無しさん:2006/07/27(木) 01:18:44
普通にリナクスつかえばいいと思う。
バーチャルPCも無料公開されてるし。
968:2006/07/27(木) 06:19:21
>>955
rcairoは?
969デフォルトの名無しさん:2006/07/27(木) 13:17:59
>>959
ありがとうございます。
参考にします。
970デフォルトの名無しさん:2006/07/27(木) 15:24:00
うい
971デフォルトの名無しさん:2006/07/27(木) 18:36:31
$KCODE を指定すれば正規表現が日本語対応するってのは
完全ではないのかな?
ruby -Ke -e 'p(/[^あ]い/ =~ "あい")'
がマッチしないのに
ruby -Ke -e 'p(/[^あ]い/i =~ "あい")'
がマッチしてしまう。
972デフォルトの名無しさん:2006/07/27(木) 22:05:01
>>971
バージョンは?
973デフォルトの名無しさん:2006/07/28(金) 03:09:50
>>971
それ()1.8系列のバグ。

何ヶ月か前の ruby-list で報告されてたはず。
1.8.5のpreviewか。1.8.4でもstable-snapshotなら多分おk
974デフォルトの名無しさん:2006/07/28(金) 06:40:11
おいおい、よりによってコードロジックからでは見えにくい
正規表現機能にバグがあるのかよ。
やっぱ個人が開発してるフリーソフトは恐くて業務には使えんなあ…
975デフォルトの名無しさん:2006/07/28(金) 07:17:34
0点。
はい、次の方〜
976デフォルトの名無しさん:2006/07/28(金) 07:21:32
商用の場合、こういった修正はむしろ手抜き。
ビジネスではコスト意識が出てくるから、繊細な作業ってカットされる。
針の穴に糸を通すような作業は、時間を浪費できるフリーソフトならではのものだよ。

なお、漢字を100%きっちりサポートする正規表現エンジンはかなり少数派。
(だからRubyの正規表現エンジンは次世代で交代する)
この辺り、世間的に認知されてないから、どこもサポートが悪いの。
977デフォルトの名無しさん:2006/07/28(金) 10:43:45
これでこまるひとってなんでもかんでも正規表現で済ませようとするひとだけでしょ
978971:2006/07/28(金) 11:32:16
>>973
ありがとう。バグか制限かが知りたかったんです。
それでプログラミングの方針が変わりますから。
バージョンは 1.8.4 リリース版です。
979デフォルトの名無しさん:2006/07/28(金) 13:52:13
そもそも日本語を正規表現でマッチさせようとしているのに"i"をつけるのがヘン
980デフォルトの名無しさん:2006/07/28(金) 13:56:40
そんなこと言うならそもそものそもそもとして
IGNORECASEの有無によって日本語文字の正規表現の挙動が変化すること自体
「ぜってーありえねー」と思うんだがどうか
981デフォルトの名無しさん:2006/07/28(金) 14:05:45
>>980
「ありえねー」と考えるほうがありえねー。
ありえるだろ。
982デフォルトの名無しさん:2006/07/28(金) 14:07:04
こういうときにRubyの良さを再認識させられるね
983デフォルトの名無しさん:2006/07/28(金) 14:17:30
ありえるとしても2バイト文字の正規表現の挙動が i の有無で変化してほしくはないな
984デフォルトの名無しさん:2006/07/28(金) 14:22:38
あるサイトで音?動画?見ようと思って書いてあったとおりにいろんなのインストール
しても聞けないし、前聞けたのまで出来なくなっちゃったんですけどどうしたらいいですか?
985デフォルトの名無しさん:2006/07/28(金) 14:22:48
>>983
何を言いたいのか良く分からんが、だからこそ修正された。
986デフォルトの名無しさん:2006/07/28(金) 14:49:38
>>984
小学生大嫌い板、あるいは、日本語のお勉強板に行け。
987デフォルトの名無しさん:2006/07/28(金) 15:10:38
ちょっとお聞きしたいのですが、
drubyをWindowsで動かそうとして、ttp://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-list/37530?37432-39039
から始まるスレッドで
# dhello.rb
require 'drb/drb'

class World
def hello
'Hello, World.'
end
end

uri = ARGV.shift
DRb.start_service(uri, World.new)
puts DRb.uri
puts '[return] to exit'
gets
というサンプルがあって、Windowsで使う場合は、
getsはスレッド全部をとめるから、
Thread.list.each do |t|
t.join
end
にしておけって書いてあるのですが、実行すると確かにそれでうまくはいくのですが、
CPUパワーが100%になってしまいます。もちろん全力でループしているせいなのですが、
これってなんとかならないんですか?CPUを浪費せずに待ちたいです。
988デフォルトの名無しさん:2006/07/28(金) 15:17:47
そのスレッドの最後にsleepする例が載ってるわけだが。
989デフォルトの名無しさん:2006/07/28(金) 16:42:45
なんでRubyって、馬鹿にする輩が多いんですか?
私はJavaやPerlも一通り入門程度の本で学んだだけだけど、
就職の時にRubyが出来たほうが、他と違う言語が出来るという
事でアピールになるかなと思って、しっかり勉強してみようかな
と思ってます。止めた方がいいですか?
990デフォルトの名無しさん:2006/07/28(金) 16:50:13
>>989
そもそも入門書読んだ程度で「できる」なんて言うな。
991デフォルトの名無しさん:2006/07/28(金) 16:51:13
1行目の表現見たら答える気半減

>>989
Rubyを使っていて他人から評価されることはまず無い
あとは好きにしろ


誰か新スレ立てて
992デフォルトの名無しさん:2006/07/28(金) 17:12:09
テンプレ書いて。
993デフォルトの名無しさん:2006/07/28(金) 17:12:43
テンプレ
994デフォルトの名無しさん:2006/07/28(金) 17:27:57
988>>
sleepすると、スレッド全部がsleepするから使えない。
だから逃げ道としてwhileで回しているわけだ。
んで、やり方継続募集中。
995デフォルトの名無しさん:2006/07/28(金) 17:28:11
>>993
だれがうまいものを書けと(ry
996デフォルトの名無しさん:2006/07/28(金) 17:34:20
てか別に>>1のままでいいじゃん
他の部分は好きな人が適当に書くってことで
997デフォルトの名無しさん:2006/07/28(金) 17:40:56
>>989
そういう動機ならやめとけ

あと馬鹿にする輩が多いのは
PerlでもJavaでもPHPでもPythonでもかなりいるから
Rubyに限った話ではない
998デフォルトの名無しさん:2006/07/28(金) 17:53:59
馬鹿にする香具師は自分の少ない知識がばれたり
テリトリーを侵されたりするのを恐れる小心者。

まともに使いこなしてる香具師は馬鹿にしたりはしないから。
999デフォルトの名無しさん:2006/07/28(金) 18:10:32
Ruby初心者スレッドPart7
http://pc8.2ch.net/test/read.cgi/tech/1154077799/
1000デフォルトの名無しさん:2006/07/28(金) 18:11:26
>>999
GJ!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。