Ruby初心者質問スレPart3

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

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

本スレ
Rubyについて Part 14
http://pc5.2ch.net/test/read.cgi/tech/1103997158/
2デフォルトの名無しさん:2005/09/02(金) 00:08:39
前スレ
Ruby初心者質問スレPart2
http://pc8.2ch.net/test/read.cgi/tech/1107799347/

= 関連スレ
: 【Ruby】RubyでCGI
 http://pc5.2ch.net/test/read.cgi/php/988948655/
: 【最高言語】 Rubyist Magazine創刊 【ルビま!】
 http://pc5.2ch.net/test/read.cgi/tech/1094825807/
= 関連スレ?
: RUBYの宿題教えてください。
 http://pc5.2ch.net/test/read.cgi/tech/1106572657/


= 関連リンク
: リファレンス
 http://www.ruby-lang.org/ja/man/
: Ruby Weekly News @ Ruby Garden
 http://www.rubygarden.org/rurl/html/
: ruby-cvs
 http://rrr.jin.gr.jp/rwiki?cmd=view;name=ruby-cvs
: Ruby hotlinks 五月雨版
 http://rrr.jin.gr.jp/~znz/samidare/
: 日本Rubyの会
 http://jp.rubyist.net/
: Rubyist Magazine
 http://jp.rubyist.net/magazine/
: <rubyXML/>
 http://www.rubyxml.com/
: Matzにっき
 http://www.rubyist.net/~matz/
3デフォルトの名無しさん:2005/09/02(金) 00:13:48
最近、rubyでなんかおもしろいことあった?
4デフォルトの名無しさん:2005/09/02(金) 12:26:49
テンプレにリンク切れが多い?
* pc5 -> pc8
* rrrのrwikiはなくなってる。
5デフォルトの名無しさん:2005/09/02(金) 15:29:19
【Agile】Ruby on rails相談所【DRY】
http://pc8.2ch.net/test/read.cgi/php/1118663500/

>>4
RubyでCGI も亡くなってそれなりに経ってるな
6デフォルトの名無しさん:2005/09/02(金) 22:10:38
Delimiter = '%%%'
DicFile = "filter.dic"
@dic = Hash.new

def readDic
 File.foreach(DicFile) do |line|
  next if /^\s*$/ =~ line
  line = line.chomp!
  s1, s2 = line.split(/\t+/)
  strTo = s2.scan(/./).join(Delimiter) << Delimiter
  @dic[Regexp.new(s1, false)] = strTo
 end
end

readDic

def textfilter(line)
 @dic.each{|k, v| line.gsub!(k, v)}
 puts line.gsub(/#{Delimiter}/o, "")
end

while ARGV[0] =~ /^-/
 ARGV.shift
end

ARGF.each{|line| textfilter(line)}

変換対象文字を空文字へ変換する場合どうしたらいいんでしょうか。
これは「Rubyで極める正規表現」p.98、大阪弁変換テキストフィルターを多少いじったものです(使用目的は普通のテキスト変換)
読み込み辞書filter.dicは 変換対象文字の正規表現<Tab>変換文字 という書式になっています。
あいうえお<Tab>"" としても 「あいうえお」が「""」に変わるだけなので・・・ソースを変更すべきか、空文字になるようなものを辞書に書くのか?
7デフォルトの名無しさん:2005/09/03(土) 01:00:16
まず辞書エントリでは変換文字を空にする(タブ文字の後に何も書かない)。s2
にはnilが代入される。
ので、 readDic 中の s1, s2 に代入した直後に s2 = s2.to_s を加えること
で、 s2 が nil の場合に空文字列にする(普通の文字列の場合は変化はない)。



しかし、実作業を知らずに書くのだが、ふつうこの程度の作業なら、
filter.dic を容易するほど一般的な仕組みにしないで、その都度 ruby コー
ドを書き捨てる気もする(ワンライナーとかで)。
8デフォルトの名無しさん:2005/09/03(土) 02:44:12
tDiary についての質問はここで大丈夫ですか?

本文を書く際、< から始まる行は <p></p> で括られません。
HTML タグの場合はこれでいいんですが、
プラグインで <%= a 等と書き始める場合に困ってしまいます。

今は <p><%= a 等と書くようにしているんですが、
プログラムのどこかを変更すれば私の問題は解決できるんでしょうか?
9デフォルトの名無しさん:2005/09/03(土) 11:47:14
rubyのローカル変数のスコープが良く分からないのですが、
詳しく説明してるサイトはありませんか?
10デフォルトの名無しさん:2005/09/03(土) 13:16:26
>>8
プラグインの方を直しときゃいいんじゃないの。
11デフォルトの名無しさん:2005/09/03(土) 14:40:06
>>8
先頭に空白を入れればいいんじゃねーの?
12デフォルトの名無しさん:2005/09/03(土) 19:36:32
13デフォルトの名無しさん:2005/09/03(土) 20:24:37
>>12
>ローカル変数のスコープは、宣言した位置からその変数が宣言されたブロック、
>メソッド定義、またはクラス/モジュール定義の終りまでです。

ここでブロックというのが具体的に何を指すのかが分かりません。
とりあえず
{
から
}
まではブロックのようですが、
他にはブロックは無いのでしょうか?
例えば
if x


end
のxの次の行からendまではブロックにならないのかとか、
自分で単にスコープを制限するためのブロックを作りたい時は
どうすればいいのかとかが分かりません。
14デフォルトの名無しさん:2005/09/03(土) 20:45:16
具体的にはこれ。

[1, 2, 3].each do |i|
# ブロック内
end

[1, 2, 3].each{ |i|
# ブロック内
}

スコープを制限するためにブロックを作るというのが、
何のためにするのかよく分らないな。
15デフォルトの名無しさん:2005/09/03(土) 23:33:32
>>14
たぶんさ、

x = 'foo'
my_scope{
 x = 'bar'
}
puts x #=> 'foo' になって欲しい(けど、'bar' になる)

ってことだよね。

うーん、Ruby ではそういう場合は、別メソッドにするというのが解なのでは。
メソッドはそれぞれにスコープを持つから。

def my_method
 x = 'bar'
end
x = 'foo'
my_method
puts x #=> 'foo'
16デフォルトの名無しさん:2005/09/04(日) 00:03:09
arr[5][6][2] の3次元配列をつくりたいのですが、こんな↓のでいいのでしょうか?
もっとスマートな方法がありそうな・・・

a = [0,0,0]
b = [0..5]

0.upto(5) do |i|
b[i] = [ a.dup, a.dup, a.dup, a.dup, a.dup, a.dup, a.dup ]
end

arr = [ b[0].dup, b[1].dup, b[2].dup, b[3].dup, b[4].dup, b[5].dup ]
17デフォルトの名無しさん:2005/09/04(日) 00:23:01
Array.new(6){ Array.new(7){ Array.new(3){ 0 } } } とか。

数値計算なら NArray を使うのが吉かと。
18デフォルトの名無しさん:2005/09/04(日) 00:32:03
>>17
サンクス。
数値計算でないのでこれでいいです。
19デフォルトの名無しさん:2005/09/04(日) 00:53:40
>>7
希望どうりの動作になりました。ありがとうございます。
20デフォルトの名無しさん:2005/09/04(日) 03:59:37
質問です

どなたかインターネットからテキストファイル以外のファイルをダウンロードして保存するサンプルコードか、サンプルコードへのリンクを貼り付けてもらえますか?
21デフォルトの名無しさん:2005/09/04(日) 05:30:44
protocol も書かないのは、さすがに無茶苦茶だと思うが……
以下ので画像は取得できた。テキストと同じソースだけど。"wb" くらいか?
リファレンスマニュアルの socket の項目など、関係ありそなとこも読んだら良いかと。


require 'net/http'
Net::HTTP.version_1_2

host = "www.ruby-lang.org"
directory = "/rdf.png"
get_file = "./rdf.png"

Net::HTTP.start(host, 80) do |http|
response = http.get(directory)
File.open(get_file, "wb") { |f| f.print response.body }
end
22デフォルトの名無しさん:2005/09/04(日) 09:54:42
>>20
require 'open-uri'
require 'cgi'
url = URI.parse(ARGV.shift)
filename = CGI.escape(url.to_s)
File.open(filename, 'wb'){|f| f.write(open(url).read) }
23デフォルトの名無しさん:2005/09/04(日) 14:04:49
>>21
>>22

ありがとうございました、両方ともうまくいきました。

> リファレンスマニュアルの socket の項目など、関係ありそなとこも読んだら良いかと。
そうですね、ドキュメントが読めるようにします。
24デフォルトの名無しさん:2005/09/05(月) 23:07:41
ruka matsumoto って誰ですか?
ruby-{list,dev}をsubscribeしたときの確認メールのサンプルにあったので気になりました。
extはさくらたんだったのですが。
25デフォルトの名無しさん:2005/09/05(月) 23:37:06
>ruka matsumoto
Matzご本人だとしたらずいぶん気負ったもんだと思ったが
新約のルカはlukeだなorz ちょっと暗黒面に堕ちてくる
26デフォルトの名無しさん:2005/09/06(火) 08:32:19
本人じゃないよ。
27デフォルトの名無しさん:2005/09/06(火) 14:39:23
RubyをIIS6で動かす方法を探してます。
何処かに載ってませんでしょうか?
28デフォルトの名無しさん:2005/09/06(火) 15:32:26
>>27
IIS6かどうかはわからないけど、RubyをIISで動かす方法らしい。
http://gpm.jp/tito/memo/iis-config/

あとは「Ruby IIS」でググってみてください。
29デフォルトの名無しさん:2005/09/06(火) 17:44:47
>>28

> http://gpm.jp/tito/memo/iis-config/

IIS5.1では成功したのですが、IIS6では無理でした。

> あとは「Ruby IIS」でググってみてください。

やってみましたが、皆さんWindows200 or WindowsXPのようで。
30デフォルトの名無しさん:2005/09/06(火) 18:45:25
31デフォルトの名無しさん:2005/09/06(火) 18:48:51
良く読んでないけど、なんか書いてあるか? > IIS6

http://homepages.ihug.com.au/~naseby/13.html
32デフォルトの名無しさん:2005/09/07(水) 00:21:35
多数のwavファイルを1つのwavファイルに結合したいんですが、
Rubyだけでそのようなことはできますか?
もしできるのならば、サンプルコードかなにかあれば教えてください。
33デフォルトの名無しさん:2005/09/07(水) 04:43:46
そういう処理はRubyじゃ無茶苦茶遅いからやめたほうがいい
3427:2005/09/07(水) 09:54:17
>>30
ヒントになってないやん。

>>31
サンクス、読んでみます。
35デフォルトの名無しさん:2005/09/07(水) 12:58:25
皆さんRubyの開発環境何を使っていますか?

Eclipseの RDTというのが気になるのですが
使ってことがある方、使い心地はどうでしょうか?
36デフォルトの名無しさん:2005/09/07(水) 13:42:07
使ってみてから言え
37デフォルトの名無しさん:2005/09/07(水) 14:09:42
それを言っちゃあおしめえよ
38デフォルトの名無しさん:2005/09/07(水) 21:05:14
で、みんなどんな開発環境使ってるの?
39デフォルトの名無しさん:2005/09/07(水) 21:19:59
開発環境の質問て定期的に出てくる気がするけど、なんでなんだろう。

>>38
自分の好きなエディタで書いてる人が大多数じゃないかな。
RDE はどれくらい使われているのだろうか。
40デフォルトの名無しさん:2005/09/07(水) 21:25:33
なんでだろう、と言いながら
結局自分も知りたいのね>39タン
41デフォルトの名無しさん:2005/09/07(水) 21:31:18
XEmacs + ruby-mode.el
42デフォルトの名無しさん:2005/09/08(木) 03:29:42
Pythonは立派なIDEがついてくるのにRubyは無いの?
43デフォルトの名無しさん:2005/09/08(木) 04:56:53
>>33
遅いね。
sysreadとか使うと少しは速いんだろか?
44デフォルトの名無しさん:2005/09/08(木) 06:24:06
>>42
IDE書ける日本人がいない
45デフォルトの名無しさん:2005/09/08(木) 06:29:10
>>43
Rubyが制御する箇所を減らすように書けばなんとかなるんじゃないかな。
RIFFヘッダが44バイトとかだからその辺だけ見るようにして、
あとはRuby管轄のメモリに読まずに全部ファイル操作の外部関数に渡す風にすれば。
46デフォルトの名無しさん:2005/09/08(木) 13:12:39
>>42
作者は標準のGUIライブラリというものを制定する気がないそうだ
47デフォルトの名無しさん:2005/09/09(金) 13:18:22
ttp://svn.modruby.net/repos/mod_ruby/tags/1.2.0/doc/install.ja.euc.rd

で書かれている、
./configure.rb --with-apxs=/usr/local/apache/bin/apxs
の部分でつまずいています。

環境は
・apache1.3
・ruby 1.8.2
・turbolinux8 server
です。

/usr/local/apache/bin/apxってとこは1.3ではどう書けば良いんでしょうか?
よろしくお願いします。
48デフォルトの名無しさん:2005/09/09(金) 13:19:49
>>47
ぁ 忘れてましたけど、mod_ruby1.2.4のインストールについての質問です。
49デフォルトの名無しさん:2005/09/09(金) 14:23:06
turbo使ってないから知らんけど、 which apx の結果は?
/usr/local/bin/apx とか /usr/bin/apx とか 〜sbin とかは試した?
locate apx してみた?
50デフォルトの名無しさん:2005/09/09(金) 15:38:16
>>49
/usr/sbin/apxって、気付いてやったんですけど、
たぶんapacheのバージョンが1.3.3以上ないとだめっぽいです。

自分のはapache-1.3.26-7です。
51デフォルトの名無しさん:2005/09/09(金) 16:58:32
1.3.26のが1.3.3よりはるかに上だろが。
5232:2005/09/12(月) 20:20:14
>>32です
自分で作ってみたんですが基本がいまいちわかってないのでだめだめです。

i = 2

File.open("test-1.wav", "ab"){|wfile|
 File.open("test-#{i}.wav", "rb"){|rfile|
  while data = rfile.gets
   wfile << data
  end
 }
 i += 1
}

(´・ω・`)?ムズカシス
53デフォルトの名無しさん:2005/09/12(月) 20:39:30
>>52
ある意味、マジレスするとまず i=2 ってのがよくないな。
そういう定数値は、一旦定数として宣言してから参照したほうがよい。
あと i += 1 のインクリメントはどこで効いてくるのか。
まずは制御構造を勉強してみたほうがいいよ。
54デフォルトの名無しさん:2005/09/12(月) 22:13:35
>>52
>  File.open("test-#{i}.wav", "rb"){|rfile|
>   while data = rfile.gets

ギャグでいってるのか? (AAry
55デフォルトの名無しさん:2005/09/12(月) 22:21:45
とりあえずフォーマットについて調べれ。
http://www.wotsit.org/
56デフォルトの名無しさん:2005/09/12(月) 22:57:33
>>55
そこを指摘するのはまだ時期尚早というものだろう。
57デフォルトの名無しさん:2005/09/12(月) 22:58:42
>>52
死んだほうがいい
58デフォルトの名無しさん:2005/09/13(火) 00:30:33
>>53
File.open("test-#{i}.wav", "rb"){|rfile|
#{i}これで1つずつ増えていくだろうと?

>>54
マジなんですよ

>>55
(´・ω・`)?ムズカシス

>>56
そうですね、まだそれまでの知識はありませんし

>>57
ヽ( `Д´)ノそんなことは言っちゃだめぇ
59デフォルトの名無しさん:2005/09/13(火) 00:46:28
>58
とりあえず
 wavファイル自体を順に継ぎ足してもただのでっかいゴミファイルにしかならない
ということが理解できるまでぐぐるなりして調べた方がよろし

# ちうか「イテレータ」いう名前なのに繰り返すとは限らないというのは
# 下手にイテレータという言葉を知ってると却って混乱するのだろうかと言ってみるテスト
# (いやさんざガイシュツなのは分かってるつもりなのでカンベソ)
6053:2005/09/13(火) 00:53:51
>>58
>#{i}これで1つずつ増えていくだろうと?
なんでそう思ったの? 「なんとなく」や思いこみじゃだめだよ。
一つ一つ細かい部品に還元して考えていくのが大切だ。
初心者スレなんだから、くじけずがんがれ。
Omotiとかいうガキよりは将来性があるだろう。

>>59
君もそういう根も葉もないことを言わない。w
61デフォルトの名無しさん:2005/09/13(火) 00:55:43
イテレータって表現やめたんじゃなかったっけ?
まぁ、何の話か全然読んで発言してるんだが。
62デフォルトの名無しさん:2005/09/13(火) 02:04:14
>>60
>>59 のどこらへんが根も葉もないの?
63デフォルトの名無しさん:2005/09/13(火) 02:23:51
>>61
ブロック付きメソッド?
64デフォルトの名無しさん:2005/09/13(火) 03:23:01
65デフォルトの名無しさん:2005/09/13(火) 14:06:40
>>52
test-1.wavからtest10.wavまでを結合するだけならこう。

max = 10
output_filename = "test.wav"
File.open(output_filename, "w") do |f|
 i = 0
 while i <= max
  i += 1
  filename = "test-#{i}.wav"
  data = File.read(filename)
  f.write(data)
 end
end

ただし、wavファイルを単に結合しても正しいフォーマットであるかどうかは別。

>>53
無理して答えるな。初心者が混乱するだけだ。
66デフォルトの名無しさん:2005/09/13(火) 15:06:24
>>65
無理して答えるな。初心者が混乱するだけだ。

っていうのは冗談だけど、曲がりなりにも wav だと言ってて、プラットフォームが
Windows だと想定されるんだから、.binmode なり "b" なり付けてやってくれよ。
67デフォルトの名無しさん:2005/09/13(火) 15:37:27
ruby-audiofile
68デフォルトの名無しさん:2005/09/13(火) 15:49:28
FileUtils.copy_stream
69デフォルトの名無しさん:2005/09/13(火) 18:58:17
Code Reading の素材として、オススメのRubyのソースコードはあるでしょうか?

(PythonではBitTorrentがいい、って意見。 http://funk.exblog.jp/2812342/
曰く、「細かな内容はともかく、プログラムの構成(structure)がわかりやす
い。Pythonの言語としてのパワー、Bram Cohenのエレガントなコーディング。
最高のソフトウェアは、最高の教材になる可能性を感じる。」
70デフォルトの名無しさん:2005/09/13(火) 21:04:36
>>69
やっぱ、Rubyじゃないのかな。
71デフォルトの名無しさん:2005/09/13(火) 21:36:27
>>69
Ruby 本体。
72デフォルトの名無しさん:2005/09/13(火) 22:42:29
ついでにRubyのデバッグ部隊にも強制参加させられるという、あの悪夢の
73デフォルトの名無しさん:2005/09/13(火) 22:43:30
>>69
RDoc
理由:達人プログラマーが書いてるから。
74デフォルトの名無しさん:2005/09/14(水) 11:52:03
>>73
達人プログラマーつってもこんなもんか、ってことを学ぶいい素材
75デフォルトの名無しさん:2005/09/14(水) 21:23:27
>>69
69のレベルによっておすすめが違うんじゃないかな。
まあとりあえずRails読んどけば?マイナーな素材読んではずれだったら悲惨だけど、
メジャーならはずれても損はないだろ。
76デフォルトの名無しさん:2005/09/14(水) 21:31:36
入出力がはっきりしてるCGI系が読みやすくて好きだな。
とりあえずBitChannelすすめておく。
77デフォルトの名無しさん:2005/09/15(木) 10:22:24
自分はサンデープログラマーで、オブジェクト指向に興味があり勉強しようと思っています。
Rubyは純粋なオブジェクト指向ということらしので、今のところこれを習おうと考えてます。

でも世間ではJavaの方が一般的なようので、Javaを習った方がいいのでしょうか?
自分的には仕事をする訳ではないので、お手軽なRubyでいいのではと思っています。
78デフォルトの名無しさん:2005/09/15(木) 10:33:02
>>77
じゃあ、Rubyで。

人に決めてもらうより、自分で決めなさい。
79デフォルトの名無しさん:2005/09/15(木) 11:26:18
お手軽というなら Ruby かな。
大きなものを作りたいというなら Java の方が適してるかもしれないが、
直感的な使いやすさより理論優先しているらしい面があって、面倒が多いと思う。
あと、VM の起動とコンパイルがそれなりに遅いので、気軽さは薄れる。
Python という手もあるが、日本語の本がかなり少ないのが難点になるかもしれない。
80デフォルトの名無しさん:2005/09/15(木) 12:35:16
>>79
サンクス。
1000行程度のプログラムを考えているので、Rubyでいきます。
81デフォルトの名無しさん:2005/09/15(木) 13:25:50
プログラムの内容でなく行数で決めているところがなんとも。
82デフォルトの名無しさん:2005/09/15(木) 14:10:56
まぁまぁ。「オブジェクト指向に興味があり」ってレベルだから。
でも、今日は日曜日じゃないよね?
83デフォルトの名無しさん:2005/09/15(木) 14:19:35
Rubyってどんな所で使われてますか?
84デフォルトの名無しさん:2005/09/15(木) 14:28:29
>>81
そんなに悪い指標でもないと思うけどな。
あぁそのくらいの規模ね、って大体想像できるじゃん。
他にもっとマシな評価基準にはどんなのがある?
85デフォルトの名無しさん:2005/09/15(木) 14:43:16
モジュールを呼び出すか、それと同等の処理を丸まる書くかで、行数は判断材料にならないかと。
車輪の再開発をしようとしてるなら謝る。
86デフォルトの名無しさん:2005/09/15(木) 14:50:01
それはわかるけど、それで、もっとマシな評価基準には他に何かあるの?
87デフォルトの名無しさん:2005/09/15(木) 14:57:03
評価?? 指標なら、何人月とかw
88デフォルトの名無しさん:2005/09/15(木) 15:42:45
>>83
ワシが業務に使っている。
tDiary や BaseCamp でも使われている。

どのくらい著名なところで使われていれば気が済むの?
89デフォルトの名無しさん:2005/09/15(木) 15:50:52
銀行のシステムとか。
90デフォルトの名無しさん:2005/09/15(木) 16:14:56
銀行のシステムといってもいろいろあるしな。
使われてる部分もあるんじゃない?そのシステム開発の中で。
91デフォルトの名無しさん:2005/09/15(木) 16:18:36
じゃ逆に、銀行で使われている言語を挙げてみて(1)
その中で、あんたがこれまで使ったものを挙げてみて(2)
9290:2005/09/15(木) 16:20:52
>>91
誰に聞いてるの?(1) このスレで何のために?(2)
93デフォルトの名無しさん:2005/09/15(木) 17:04:29
>>92
>>90に(1)
Rubyの比較対象の言語なんだろうから(2)
94デフォルトの名無しさん:2005/09/15(木) 17:04:59
>>93
ごめん間違えた。

>>89に(1)

だった。
95デフォルトの名無しさん:2005/09/15(木) 17:16:54
>>94
Java、PL_SQL、Cshell
96デフォルトの名無しさん:2005/09/15(木) 17:42:11
>>84
オブジェクト指向プログラムの規模を測る指標については
「オブジェクト指向メトリクス」でググるといろいろ出てくるよ.

97デフォルトの名無しさん:2005/09/15(木) 18:32:40
mswin32版で、gettextを使おうとしているのですが、
あちこちのディレクトリにちらばった .rb ファイルと .rhtml ファイル
(つまりrailsなんですが)を一気に指定して
rgettextするのってどうすればいいんでしょうか?
cygwin版入れて **/*.{rb,rhtml} とかするしかないですか?
98デフォルトの名無しさん:2005/09/15(木) 19:04:06
>>97
mswin32版でまったく同じことができるっしょ。
99デフォルトの名無しさん:2005/09/15(木) 19:16:28
あう、ほんとだ、{,} はできないけど、分けて書けばできますね。
頭からできないと思いこんでいました。
これって、何のレベルで展開されてるんでしょう?
100デフォルトの名無しさん:2005/09/15(木) 22:58:47
ごめん、{,} はできなかったか。Dir.glob だとできるんだけどな。
*、**、?、[] などの処理は ruby インタプリタが内部的に解釈してくれてる。
ワイルドカードを展開しない腐ったシェルしかない環境用のサービス機能。
101デフォルトの名無しさん:2005/09/15(木) 23:41:32
なるほど。よくわかりました。
ありがとうございます
102デフォルトの名無しさん:2005/09/16(金) 00:44:55
>>100
{,}はブレースの展開(brace expansion)つってglobbingとは別。
なぜかDir.globじゃやってるけど。
103デフォルトの名無しさん:2005/09/17(土) 20:50:28
>>100
1.9だと展開するようになった。
104デフォルトの名無しさん:2005/09/18(日) 01:07:28
WEBrickについてなんですが、
class Test < WEBrick::HTTPServlet::AbstractServlet
def initialize
ほげほげ
end
end

のようにするとエラーが出ます。WEBrickのソースを見ると、
initializeには引数が必要なようなのですが、
こういう場合にはどうするのが標準的なRubyでの書き方なのでしょうか?
この私の書いたWEBrickに合わせて、ダミーの引数をinitializeに渡すべきですか?
それとも何か別のテクニックがあるのでしょうか。
105デフォルトの名無しさん:2005/09/18(日) 08:11:07
>>104
何でも受け付ける(もとのメソッドの引数を気にしない)なら

class Test < WEBrick::HTTPServlet::AbstractServlet
def initialize(*args)
super
ほげほげ
end
end

とか。

*args で、どんな引数の数も全て受け付ける。
(引数を伴わない)super で、もとのメソッドを、その引数付きで最初に呼んでおく(きっと
サブクラスにも必要な処理をしているだろうから)。

ただ、もとのメソッドが、

def initialize(foo, bar, &block)
ふがふが
end

とか明示的にブロックも引数に取っていたら、

def initialize(*args, &block)

とかする必要があるかも。
106デフォルトの名無しさん:2005/09/18(日) 11:06:40
>>105
superはブロックは自動的に渡すのでいらない。
渡したくないときは&nilをつける。
107デフォルトの名無しさん:2005/09/18(日) 19:14:32
age
108デフォルトの名無しさん:2005/09/18(日) 19:44:00
109デフォルトの名無しさん:2005/09/19(月) 08:45:26
>>105-106
*argsのように指定してsuperすれば、後は勝手にやってくれるんですね。
ありがとうございました。
110デフォルトの名無しさん:2005/09/19(月) 12:21:58
CGIモジュールのリファレンスって
http://www.ruby-lang.org/ja/man/?cmd=view;name=CGI
↑ここにあるけど、これって完全ですか?

htmlのbackgroundカラー変更の仕方が分からん…
cgi.body()に何か引数くれてやればいいんだと思ったんだけど、ダメみたい
cgi.rb見ても def body っていう記述が無いし
111110:2005/09/19(月) 12:26:54
おおっと!ハッシュを与えれば良い模様ッ!
112デフォルトの名無しさん:2005/09/20(火) 17:23:58
ここはwebで配布されててソースも公開されてるプログラムが
規定の動作をしない、何が悪いんでしょうか?
とかそういう質問もOKですか?
113デフォルトの名無しさん:2005/09/20(火) 17:29:38
Ruby でできてるプログラムの質問ならいいんじゃない。とりあえず質問してみれば。
まずければ誘導するし。
114デフォルトの名無しさん:2005/09/21(水) 01:45:52
ruby用の拡張ライブラリとかruby本体も可。
115デフォルトの名無しさん:2005/09/22(木) 18:29:50
現行のRubyでサブプロセスを扱うときに、command not foundとか、
通信中に相手が落ちたとかをちゃんと区別したい場合には、
exec利用で自分でpipe操作とかしなくちゃいけないんでしょうか?
Open3もcommand not foundの場合は何も検知してくれないし。
116デフォルトの名無しさん:2005/09/22(木) 19:25:37
例外のクラスである程度は判別できるんじゃない?
117デフォルトの名無しさん:2005/09/22(木) 20:16:09
irb(main):001:0> io = IO.popen('hogehoge', 'r+')
(irb):1: command not found: hogehoge
=> #<IO:0x402f2e80>
irb(main):002:0> io.read()
=> ""
irb(main):003:0> io.write('hoge')
Errno::EPIPE: Broken pipe
from (irb):3:in `write'
from (irb):3
こんな感じで、どの段階で問題があったのか切り分けれないです。
118デフォルトの名無しさん:2005/09/22(木) 20:30:02
ホントだ。

IO::popen() の説明には
> パイプ、あるいは子プロセスの生成に失敗した場合は例外 Errno::EXXX が発生します。
って書いてるのにそうはなってないのかな?
119デフォルトの名無しさん:2005/09/22(木) 21:40:53
1.9 featureかな
120デフォルトの名無しさん:2005/09/23(金) 01:06:05
だめだこりゃ
121デフォルトの名無しさん:2005/09/28(水) 10:09:29
[熟語 読み レベル]が書き込んである辞書ファイル(例えば以下のようなもの)

--------------------------
森林 シンリン 1
冊数 サッスウ 2
質問 シツモン 3
--------------------------

から、rand(熟語数)(⇒rand(3))っていうように乱数計算してレベルを算出し、レベルに対応した熟語を(です、等の接尾辞をつけて)HTML形式で表示させ、例えば、

-------------------------------------------------
問.次の傍線部の漢字の読みを答えなさい。

森林です。
----

                 ------------
回答入力欄(Enterで入力完了) |        |
               ------------
-------------------------------------------------

というように学習者に読み方をキーボードから打ち込ませて、Enterで入力完了したら
それをPC側で受け取り、辞書ファイルの読み方と照合してもしあっていれば1、間違っていれば0を、
profile.txtに書き込んで、最初に戻る。以上の流れを3分ほど繰り返すプログラム。
よろしくお願いしますm(__)m どうも初心者なためか、頭がこんがらがってしまいます。。
122デフォルトの名無しさん:2005/09/28(水) 10:11:52
121です。すみません。お手数お掛けしますが、どなたか分かる方お願いしますm(__)m
123デフォルトの名無しさん:2005/09/28(水) 12:42:44
>>121-122
できてるところだけでも出してみ。
124デフォルトの名無しさん:2005/09/28(水) 16:23:53
優しい私がヒントを出してあげよう。

1. 辞書の class を作れ。
2. ファイルを読み込んで、辞書のオブジェクトを生成するようにしろ。
3. その辞書オブジェクトを使って、問題を表示するようにしろ。
4. どの問題を出しているのか、次のセッションに引き継ぐようにしろ。
5. 次のセッションで、問題の特定、回答の判定、記録をするようにしろ。
6. 3分たってなかったら、3. に戻れるようにしろ。

フレームワークを上手く使えば、4. は気にしなくても良い。
125デフォルトの名無しさん:2005/09/28(水) 16:57:32
>>124
ヒントが質問者のレベルに全然合ってない予感。

まずはとりあえずちゃんと「回る」モデルを作るのも手。
難しく考えずに、できるだけシンプルに。
126デフォルトの名無しさん:2005/09/30(金) 09:35:12
MySQL/RubyのWindows版って古いバージョンしかないんですか?
127デフォルトの名無しさん:2005/09/30(金) 13:17:32
(゚Д゚)ハ? 「Windows版」とは?
128デフォルトの名無しさん:2005/09/30(金) 15:53:13
129デフォルトの名無しさん:2005/09/30(金) 16:00:34
ruby-mysqlつかえば?
130デフォルトの名無しさん:2005/10/01(土) 22:57:05
WindowsのバイナリはDLLのバージョンの問題がつきまとうしなあ。
131デフォルトの名無しさん:2005/10/02(日) 01:50:09
Rubyって関数型言語に似てるような気がするけど、
やっぱりラムダ計算とか意識して設計されたの?
型なしMLって感じ。
型あったら安全性が保障されるけど、それほど保障しなくてもいい
プログラムならRubyは最強かも。。。
132デフォルトの名無しさん:2005/10/02(日) 01:53:06
型無し ML は Erlang
133デフォルトの名無しさん:2005/10/02(日) 02:26:14
クロージャがあるだけで関数型言語に似ているなら、世の中の言語の半分くらいは
そうなんじゃないか。オブジェクト指向言語だけでも Smalltalk やら JavaScript とか。
134デフォルトの名無しさん:2005/10/02(日) 09:16:28
>>131
そんなあなたに。

Rubyで関数プログラミング
http://sky.zero.ad.jp/~zaa54437/programming/ruby/
135デフォルトの名無しさん:2005/10/02(日) 11:22:19
>>134
>>131 じゃないが、面白いなコレ。
Haskell の説明サイトはサッパリだったが、なんとなく解ってきた。
頭の悪い素人な俺には、これくらいじゃないとついてけない。
136デフォルトの名無しさん:2005/10/02(日) 15:25:25
>>131
Rubyはオブジェクト指向な「手続き型」言語。
関数型言語では変数への「束縛」はあっても、副作用を伴う「代入」は(基本的には)ない。
Rubyは変数への代入をもろにつかって処理を行うから、関数型言語ではない。
lambda相当の機能を取り入れているから、関数型チックなプログラムはかけるが、だからといってRubyが関数型ということはない。

もちろんRubyで関数型チックなプログラムを書くのはおまえさんの自由。別にそれを否定するつもりはない。
137デフォルトの名無しさん:2005/10/02(日) 17:47:23
以下の二つのメソッド([] (x,y) と []=(x,y,z)) ってなんなの?
どういうときに、この名前を使えるの??

Calss hogehoge
def initialize
end

def [] (x,y)
end

def []=(x,y,z)
end
end
138デフォルトの名無しさん:2005/10/02(日) 19:03:00
>>137
いろいろともちつけ

class Hoge
 def [](x,y)
end

 def []=(x,y,z)
end
end

h = Hoge.new

h[1,2] # [](1,2) の呼び出し
h[1,2] = 3 # []=(1,2,3) の呼び出し

リファレンスだと
http://ruby-lang.org/ja/man/index.cgi?cmd=view;name=%A5%AF%A5%E9%A5%B9%A1%BF%A5%E1%A5%BD%A5%C3%A5%C9%A4%CE%C4%EA%B5%C1
「そのほか特殊な形式をとるメソッド定義を以下に挙げます。」以下。
139137:2005/10/02(日) 19:35:18
>>138
ありがとう。すっきりした!
愛してるぜー
140デフォルトの名無しさん:2005/10/02(日) 23:33:45
s-jisの漢字にマッチする正規表現てどう書くのですか?
141デフォルトの名無しさん:2005/10/03(月) 00:02:25
>>140
require "kconv"
p Kconv::RegexpShiftjis
142デフォルトの名無しさん:2005/10/03(月) 00:02:43
>>140
sjis の文字コード表を見て、適合する正規表現を作ればOK。
143デフォルトの名無しさん:2005/10/03(月) 00:03:35
ソースを s-jis で書いたり、文字コード変更したり、$KCODE = 's' したり、-Ks したり。
144デフォルトの名無しさん:2005/10/03(月) 01:07:25
>>141
こうなりました
/\A(?:[\x00-\x7f\xa1-\xdf] | [\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc])*\z/xn
これでs-jisの漢字のみにマッチできますか?
145デフォルトの名無しさん:2005/10/03(月) 01:25:59
>>144
ゴメン、なんないな。
146デフォルトの名無しさん:2005/10/03(月) 02:23:03
実際、Rubyの案件なんてあるの?
147デフォルトの名無しさん:2005/10/03(月) 05:55:30
「xxx(言語名)の案件」みたいなドメインには、あんまりないんじゃないかな。
148デフォルトの名無しさん:2005/10/03(月) 08:00:57
案件を Ruby にしてしまう。
149デフォルトの名無しさん:2005/10/03(月) 12:43:50
Rubyのバイトコンパイラを作る案件とか
150デフォルトの名無しさん:2005/10/03(月) 13:26:22
Ruby のリリースエンジニアリングを請け負う案件とか
151デフォルトの名無しさん:2005/10/03(月) 19:21:54
inspectとto_yamlの振る舞いが1.8.3で変わったみたいですが、
ruby 1.8.3 featureにそんなこと書いてましたっけ?

$ irb
irb(main):001:0> VERSION
=> "1.8.3"
irb(main):002:0> "あああ".inspect
=> "\"\\244\\242\\244\\242\\244\\242\""
irb(main):003:0> require 'yaml'
=> true
irb(main):004:0> "あああ".to_yaml
=> "!binary |\npKKkoqSi\n\n"
152デフォルトの名無しさん:2005/10/03(月) 20:17:30
inspect の方はどう変わってるの? うちの環境だと 1.8.2 と変わらないけど。
153151:2005/10/03(月) 20:21:24
上書きしたんで手元には1.8.2がないんですが、同じでしたか。
では、to_yamlの方に関してなにかご存じの方はおりますでしょうか?
154デフォルトの名無しさん:2005/10/04(火) 00:00:31
>>151
あ、ちきしょー。
マルチバイトをmime encodeするようにしやがったか。
155デフォルトの名無しさん:2005/10/04(火) 00:49:55
ちゅーか、 EUC-JP や Shift_JIS をエンコードするのは仕方ないとしても、
UTF-8 をエンコードしちゃうのは反則 (ていうかバグ) じゃねーのか?
156デフォルトの名無しさん:2005/10/05(水) 01:13:06
puts " hoge"

と書かれたスクリプトをリダイレクトして実行すると、
行頭のスペースが無くなってしまいます。

行頭のスペースを保存してリダイレクトする方法はないでしょうか?
157デフォルトの名無しさん:2005/10/05(水) 01:20:07
>156
環境をくやしく
漏れはWinXPSP2+Ruby1.8.2(mswin32)だが頭のスペースは残っとるようだけどなぁ
(ブラウザで見たら頭スペースは見えないだろうからスマンがHTMLソース見てくれ)

[C:\Documents and Settings\nanashi]
> echo puts " hoge" | ruby
hoge

[C:\Documents and Settings\nanashi]
> echo puts " hoge" > hoge.rb

[C:\Documents and Settings\nanashi]
> ruby hoge.rb
hoge
158デフォルトの名無しさん:2005/10/05(水) 01:44:40
>>157
環境はWinXPSP1+Ruby1.8.2(cygwin)です。

リダイレクトしなければ行頭スペースは残ります。
やっぱり環境依存なんでしょうか…
159デフォルトの名無しさん:2005/10/05(水) 01:48:47
親のクラスのあるメソッドを、子のクラス
からはみえなくするにはどうしたらいいのん?? 

(親のクラスを継承して、新しくつくったのが、子のクラスね)
160デフォルトの名無しさん:2005/10/05(水) 01:58:47
self のクラスを見て例外上げるとか。
161デフォルトの名無しさん:2005/10/05(水) 05:34:44
>>158
再現手順を希望。手元だと頭スペースは残るけど。
(WinXPSP2 + ruby 1.8.3 (2005-09-21) [i386-cygwin])

$ echo 'puts " hoge"' >! hoge.rb
$ ruby hoge.rb
hoge
162デフォルトの名無しさん:2005/10/05(水) 05:40:53
>>159
undef でどうよ?
----------------------------------------
class C1
def foo
puts "OK"
end
end

class C2 < C1
undef foo
end

C1.new.foo #=> "OK"
C2.new.foo #=> undefined method `foo'
----------------------------------------
リファレンスだと
http://ruby-lang.org/ja/man/index.cgi?cmd=view;name=%A5%AF%A5%E9%A5%B9%A1%BF%A5%E1%A5%BD%A5%C3%A5%C9%A4%CE%C4%EA%B5%C1#undef
163159:2005/10/05(水) 15:46:30
>>162
ありがとう!
リファレンスあるじゃんね。
一応チェックしたのに、目が節穴でした。
お手数おかけしました。
164デフォルトの名無しさん:2005/10/06(木) 00:34:37
C++で拡張ライブラリを作ってrequireしたんですが

./hoge.so: dlsym, Win32 error 127 - ./hoge.so (LoadError)
from hogehoge.rb:2

のようにエラーが出るのですが,(ソースの2行目はrequire 'hoge.so')
どうしたら正常に使えるようになるでしょうか.
試しにC言語で作った適当なのをrequireしたときはエラーは起こりませんでした

いちおうバージョンとかは↓のとおりです.
OS:WindowsXPSP2
ruby 1.8.2 (2004-12-25) [i386-cygwin]
cygwin :1.5.17(0.129/4/2)
165158:2005/10/06(木) 01:37:16
>>161
エディタが原因でした…
お手数おかけしてすみません。
166デフォルトの名無しさん:2005/10/06(木) 03:02:05
>>164
よくわかんないけど↓は参考になる?
ttp://jarp.does.notwork.org/diary/200107c.html#200107261
167デフォルトの名無しさん:2005/10/06(木) 06:09:00
RFC 2396 を考慮して、アルファベットや記号混じりの日本語を、
便利に URL エンコードしてくれるライブラリはありますか?
168デフォルトの名無しさん:2005/10/06(木) 09:16:41
>>164
つまり、Init_hoge() がない。
なんでないかというと、C++は関数名の変形が行われるから。
extern "C" しとけってこった。
169デフォルトの名無しさん:2005/10/06(木) 12:23:46
>>167
RFC 3986 (Obsoletes: 2732, 2396, 1808) ではなくて?
170デフォルトの名無しさん:2005/10/06(木) 13:29:08
>>167
URI::encode ではなくて?
171デフォルトの名無しさん:2005/10/06(木) 14:13:10
>>167
CGI::encode ではなくて?
172デフォルトの名無しさん:2005/10/06(木) 14:24:48
>>171
CGI::encode はなくね?
173171:2005/10/06(木) 14:45:08
>>172
CGI::escape でしたね?
174デフォルトの名無しさん:2005/10/06(木) 14:48:04
>>173
URI::encode(" ") # => "%20"
CGI::escape(" ") # => "+"
HTML 4.01 17.13.4 には適合するけど RFC 3986 2.1. には適合しない悪寒。
175デフォルトの名無しさん:2005/10/06(木) 19:08:02
皆さん、ありがとうございます。色々参考になりました。

URI は、マニュアルの URI を見落として uri.rb の方を見ていました……
そして、強調表示で URI Module がリンクされてるのに気が付かず orz
ttp://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=uri.rb;em=uri
176164:2005/10/06(木) 21:52:30
>>166
>>168
ありがとうございました.
extern "C"入れたら動くようになりました.
C++が関数名を変えてるのが原因だったようです.
177デフォルトの名無しさん:2005/10/08(土) 01:00:14
C++使う人はlinkageの知識くらいは必須だと思うよ。
rubyとは関係なく。
178デフォルトの名無しさん:2005/10/08(土) 20:07:05
DateTimeクラス同士の差を - で求めた時に出る結果の読み方が分からんっす
Rationalクラスで返ってくるんだけど、
要するに単位が分からん
当然「秒」だと思ってたんだけど、以下のコード動かすと変な結果が出る


require 'date'

ONEDAYSEC = 24.0 * 60.0 * 60.0

before = DateTime.parse 'Sat Oct 8 00:00:00 2005'
sa = DateTime.now - before
seed = ONEDAYSEC / sa.denominator
puts (sa.numerator * seed) # 経過秒数?
puts (sa.numerator * seed / 60) # 経過分数?
puts (sa.numerator * seed / 60 / 60) # 経過時間?


逆引きrubyとかいうホームページにこの問題についてのサンプルあったんだけど、
どうも同一日内だと結果おかしくなるような…
179デフォルトの名無しさん:2005/10/08(土) 20:20:20
ああ…、スーパークラスの - が呼ばれてるのか…?
180デフォルトの名無しさん:2005/10/09(日) 09:48:04
>>178
日単位
181デフォルトの名無しさん:2005/10/09(日) 22:06:59
>>180
そうか
別のやり方で解決したけど、日単位だったとしても何か変な気が
そんな気がするだけか
182デフォルトの名無しさん:2005/10/09(日) 22:35:12
そこら辺のオブジェクトで、減算ぽいことができるのって気持悪いよな。
いい加減なのか便利なのか知らんが、とりあえず意味不明なところがなんかPerlっぽい。
俺は、片っ端から起算時にすることにしてるが。
183 ◆m7YeytgDFE :2005/10/10(月) 00:03:53
>>181
Rationalの整数値が日数で、小数値(?)が日数未満の時間を含む値ですよね?

t1 = DateTime.parse( "2005/10/10 12:00:00" )
t2 = DateTime.parse( "2005/10/12 12:05:00" )
d = t2 - t1
printf( "%d days, %d seconds", d.to_i, 24 * 60 * 60 * d.to_f )
184デフォルトの名無しさん:2005/10/11(火) 00:58:10
Rubyist Magazine 0010 号
ttp://jp.rubyist.net/magazine/?0010

↓これは参考になるとおもた

あなたの Ruby コードを添削します
ttp://jp.rubyist.net/magazine/?0010-CodeReview
185デフォルトの名無しさん:2005/10/11(火) 11:01:25
> 色が付く環境を前提にコーディングスタイルを決めるのは不適切だと考えています。
これはどうかと(汗
186デフォルトの名無しさん:2005/10/11(火) 11:29:55
「エディタで色分けされなくても読みやすいスタイルのほうがいい」
って言ってるだけだろ?
どこか変?
187デフォルトの名無しさん:2005/10/11(火) 17:35:37
つか、どこにもそんなこと書いて無いだろ?

昨今のプログラミング環境を考えれば、
色が付く環境を前提に〜 と言い切るような発言は、ある意味凄いなと言いたかっただけ。
色が付かない状況でも読み易いものの方が良い、という意見は俺も同じ。

独断と偏見の添削と断わってるし、強い意味でなく、
適当な添削をしていることくらい脳内補完してる。
他人のソースを採点といった企画では、各々心の中でツッコミだらけでしょ。
そういったものも含んで、面白いと思ったよ。
188デフォルトの名無しさん:2005/10/11(火) 18:55:32
Rubyist Magazine の「標準添付ライブラリ紹介」で OptionParser やって欲しい。
もう全くワケワカラナス・・・
189デフォルトの名無しさん:2005/10/11(火) 19:02:53
190デフォルトの名無しさん:2005/10/11(火) 19:17:19
いつのまにそんなものが。それ読んで頑張ってみます。
191デフォルトの名無しさん:2005/10/13(木) 17:35:16
「Rubyでつくる人工無脳」のChapter-9-2、204ページを試しているのですが、実行すると

Search: google
error: No Deserializer found to deserialize a ':key' using encoding style
'http://schemas.xmlsoap.org/soap/encoding/'.

となります、どうすれば解決できるんでしょうか。
192デフォルトの名無しさん:2005/10/13(木) 19:48:50
「Rubyでつくる人工無脳」を持ってる人しか答えられません

あと、多分Rubyのバージョンを書かないと答えられないタイプの問題だと思います
193デフォルトの名無しさん:2005/10/14(金) 01:15:28
持ってるが、Google にアカウントか何か作らなきゃらなん項だった記憶があってスルーした。
194デフォルトの名無しさん:2005/10/14(金) 02:00:52
あと、多分執筆当時のGoogleを用意しないと答えられないタイプの問題だと思います
195デフォルトの名無しさん:2005/10/14(金) 04:43:03
あと、著者に尋ねたくとも尋ねることができない問題だと思います
196デフォルトの名無しさん:2005/10/14(金) 04:50:47
確かに・・・
197デフォルトの名無しさん:2005/10/15(土) 13:30:00
著者亡くなってたのか。
198デフォルトの名無しさん:2005/10/15(土) 19:18:29
霊界ラジオが必要だ
199デフォルトの名無しさん:2005/10/15(土) 20:21:19
Podcast のつぎは Spilitscast
200デフォルトの名無しさん:2005/10/15(土) 22:56:38
id = Array.new
body = STDIN.read

body.scan(/ID:(.*)<\/dt>/) {|a|
id.unshift(a)
}

print id.uniq.size

書き込み人数を調べたいのでこんなの作ってみたのですが
一定以上の大きさのhtmlを読ませると0を返してきます
どこが問題なんでしょう?
201デフォルトの名無しさん:2005/10/16(日) 00:45:31
>>200
バッファのサイズが足りてないとか?

filename = 'ファイル名' # どっかから持ってくる
id = Array.new

open('filename'){|file|
file.each{|line|
id << line.scan(/お好きなように/)
}
}

#もし2chのログ解析だったらdatを解析した方がやりやすいと思う。

202デフォルトの名無しさん:2005/10/16(日) 00:46:21
>>200
<\/dt>となっているところを<dd>でokっぽい動作になりました。
@モバイル板のhtmlにて

2chってhtml出力が板によって違ったりするのだろうか。
具体的にどこの板のhtmlで問題があったのですか? >>200
203デフォルトの名無しさん:2005/10/16(日) 00:53:36
>>202
え〜っと、こういうのです
http://camani.on.arena.ne.jp/cgi-bin/test/read.cgi/aniradi/1128180268/

バッファなのかなぁ、Windowsがいけないんだろうか
204202:2005/10/16(日) 01:19:22
ご所望のページのソースに</dt>っていうタグは無いので、
やっぱ<dd>じゃないですか?

314とかそれらしい数字でてきましたが、
自分で数えた訳では無いので本当にカウントできているかわかりませんが。。
205デフォルトの名無しさん:2005/10/16(日) 01:29:00
mozillaでview selection sourceとかってやると<br>が消されて
次行先頭の<dt>が付くようでした
そうやって一部を抽出して書いたのでhtmlを流し込んだときと
書式が変わってしまったようです

ども
206202:2005/10/16(日) 01:30:07
#!/usr/bin/ruby
require "open-uri"

id = []
open(ARGV[0]) { |body|
body.each{ |line|
if line =~ /ID:(.*)<dd>/
id.unshift(($~).to_s)
end
}
}

print "\n",id.uniq.size

#引数にURLでカウントします。
#いやぁ、rubyってホントにすばらしい
#情報処理勉強の息抜きにこんな事ばっかりやってて良いのか
207デフォルトの名無しさん:2005/10/16(日) 03:39:41
#!/usr/bin/ruby
require "open-uri"

id = Hash.new(0)
open(ARGV[0]) { |body|
body.each{ |line|
line.scan(/ID:(.*)<dd>/)
id[$1] += 1
}
}

id.sort{|b, c|
c[1] <=> b[1]
}.each{|key, value|
print "#{key}: #{value}\n"
}
print id.size

書き込み者のランキングも出るようにしました、が
IDに/が入ってるとそれが表示されないような...
気のせいかな
208デフォルトの名無しさん:2005/10/16(日) 04:00:59
#!/usr/bin/ruby
require "open-uri"

id = Hash.new(0)
open(ARGV[0]) { |body|
body.each{ |line|
line.scan(/ID:(.*)<dd>/)
if $1 != nil
id[$1] += 1
end
}
}

id.sort{|b, c|
c[1] <=> b[1]
}.each{|key, value|
print "#{key}: #{value}\n"
}
print "参加者:", id.size

これでいいみたい
/は関係なかった
/とは関係なくkeyの値にnilが入っちゃうことがあって..
209デフォルトの名無しさん:2005/10/16(日) 04:36:06
ruby 1.8.2, cgi/session/pstore.rb について質問です。

CGI::Session#[]= を呼び出さずに CGI::Session#update すると
restore が呼ばれず @hash の値が nil のため
セッション情報が空になってしまいます。
initialize 時に restore を呼ぶべきではないでしょうか?
210デフォルトの名無しさん:2005/10/16(日) 04:38:07
>>208
> /とは関係なくkeyの値にnilが入っちゃうことがあって..
String#scan の使い方を勘違いしている悪寒・・・
211202:2005/10/16(日) 18:26:25
>>210 解説希望

207のコードをベースにして
最後に下記コードを追加した結果 141(中途半端?) となりました。

print "nill counter = #{id[nil]}"

どこに一致してんだ?
212デフォルトの名無しさん:2005/10/17(月) 02:11:38
>>211
String#scan は、何度もマッチを繰り返す場合に使うモノだと思うので、

body.each{ |line|
if /ID:(.*?)<dd>/ =~ line
id[$1] += 1
end
}

とするか、 String#scan を使うなら、

open(ARGV[0]).read.scan(/ID:(.*?)<dd>/) {
id[$1] += 1
}

ではないかと。
# IO#scan って無いのか・・・

あと、141 になるのは件の HTML を見てみれば当然というか、
件の HTML の総行数が 3141 行といえばわかる?
213デフォルトの名無しさん:2005/10/17(月) 05:38:16
順列とか組合せのための関数はないのですか??
自分で書いても、たかだか数行だからない??

あと、** な関数がないか探すには、どうするものなの??
いまは、ひたすらgoogle してる。
214デフォルトの名無しさん:2005/10/17(月) 08:08:41
> ** な関数がないか探す
HTMLHelp版のRubyリファレンスマニュアルで探すのがベスト
215デフォルトの名無しさん:2005/10/17(月) 13:31:31
getsで一定時間入力がない時に
次の処理に移るようなプログラムを書きたいのですが
どう書けばいいでしょうか?
216デフォルトの名無しさん:2005/10/17(月) 13:48:37
timeout.rb?
217デフォルトの名無しさん:2005/10/17(月) 14:04:11
おーこんなのがあったんですね。ありがとうございます。
でもHelp見たらWindows版だとgetsでtimeoutできないそうですね。
無念。。。
218デフォルトの名無しさん:2005/10/18(火) 00:46:40
selectを使ってみるとか?
windows版がどうかは知らないが……。
219202:2005/10/18(火) 01:03:04
>>212
サンクスです。
220デフォルトの名無しさん:2005/10/18(火) 01:07:37
>>217
1.9では最近改善されたはず。

>>218
同じだよ。selectが動かないからtimeoutもできない。
221デフォルトの名無しさん:2005/10/21(金) 16:00:30
ruby でデーモンを作成しようと思うのですが
参考になるサイトや書籍を教えていただけないでしょうか?

プログラミング言語Ruby にチャットサーバの例があったようなないような。
実家に送ってしまったので確認できず、、、
222デフォルトの名無しさん:2005/10/21(金) 16:35:14
223デフォルトの名無しさん:2005/10/21(金) 18:09:12
>222
レシピブックが役に立ちそうなので
内容を確認して購入してこようと思います。
ありがとうございました。

ML を検索していなかったことをお詫びします。
224デフォルトの名無しさん:2005/10/23(日) 00:17:59
ERb使おうとしているのですが、うまく使えません。
以下のスクリプトで間違ってるところは、どこでしょうか??
@fooに値がうまく入らないで困っています。
よろしくお願いします。

require 'erb'
class MyCGI
def initialize(script)
@foo = 'bar'
@erb = ERB.new(script)
end
def build_page
@erb.run
end
end

eruby_script= <<EOS
<html>
<body>
<%= @foo %>
</body>
</html>
EOS

mycgi = MyCGI.new(eruby_script)
mycgi.build_page
225デフォルトの名無しさん:2005/10/23(日) 00:29:43
ERBのrunはデフォルトではバインディング(変数→値の対応表みたいなもの)と
してトップレベルを使う。そういうローカルなバインディングを使いたい場合は
@erb.run(binding)
とすると動く。詳しくは、
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=ERB#ERB.23run

http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%B4%D8%BF%F4#binding
を参考のこと。
226デフォルトの名無しさん:2005/10/23(日) 02:38:53
なるほど、バインディングっていう考え方は初めて知りました。
bindingメソッドによって、それぞれのレベル(クラスやモジュールで区切られたレベル(??))に
対応表のようなものが用意されるんですね。
で、そのbindingによって得たBindingオブジェクトによって、どのメソッドや、どの値をevalするときに対応させるかを指定できるんですね。

なんとなくわかりました。ありがとうございます。
227デフォルトの名無しさん:2005/10/24(月) 00:27:34
Rubyで「継続」が使えるってWikipediaに書いてあったので俄然興味をもって
検索してみたら、バグだらけとか作者が消したいと思ってるとか言われてる
ページしか出てこないんですが、最新バージョンだとどうなんでしょうか?
実用レベルになってます?
228デフォルトの名無しさん:2005/10/24(月) 00:30:16
どういうふうに使いたいわけ?
229デフォルトの名無しさん:2005/10/24(月) 09:39:47
非決定性プログラミングに使いたいです。
230デフォルトの名無しさん:2005/10/24(月) 20:55:48
無理です
231デフォルトの名無しさん:2005/10/25(火) 00:52:49
>>227
「消したいと思ってる」ってのは、VMとかに作り直すときに条件が厳しくなるから。
どういうレベルを実用というのか分からんけど、「バグだらけ」という実例は?
直せるもんなら直すけど。
232デフォルトの名無しさん:2005/10/25(火) 05:10:33
タイムリーにMatz日記 <ttp://www.rubyist.net/~matz/20051016.html#p02> で
「(継続を)今後「なくす」とか言いにくい状況になったか。」との記述が。
233デフォルトの名無しさん:2005/10/25(火) 13:08:23
自分なりにrubyのリファレンスマニュアルなど参照してみたのですが
わからないことがあるので質問させて頂きます

puts "#$! (#{$!.class})"

ソース内に↑のような表記が出てくるのですが
これはどんな処理をしているのでしょうか?
puts関数は分かるのですが、ダブルクォーテーションの中味が
何をどう処理してるのかさっぱり想像がつきません
rubyは1.8.2です。宜しくお願いします
234デフォルトの名無しさん:2005/10/25(火) 13:16:07
「リテラル」の頁と「組み込み変数」の頁を読むべし
235233:2005/10/25(火) 14:06:39
>>234
回答ありがとうござます。よく注意して見てなかったようです
例外処理中に例外メッセージとクラス名を出力していたのですね
236デフォルトの名無しさん:2005/10/25(火) 15:47:18
>>230
On Lispに出てくるscheme版chooseとfailは
rubyのcall_ccでは実装できませんか?
237デフォルトの名無しさん:2005/10/25(火) 16:34:11
クラスが理解できません、どなたかわかりやすく説明していただけませんか?
238デフォルトの名無しさん:2005/10/25(火) 16:37:30
理解できないというだけの人に説明するのは無駄。
239デフォルトの名無しさん:2005/10/25(火) 16:48:06
>>237
クラス=スーパー構造体だ
240デフォルトの名無しさん:2005/10/25(火) 16:48:39
<<238
よう説明しないって正直に言えよ。
241233:2005/10/25(火) 16:53:57
>>237
担任の先生に聞いてみなさい
242デフォルトの名無しさん:2005/10/25(火) 17:02:41
>>241
>>237 がクラスの担任の、・・・いや、なんでもない。
243デフォルトの名無しさん:2005/10/26(水) 01:29:24
>>237
なんかものを作る雛型
244デフォルトの名無しさん:2005/10/26(水) 02:09:48
>>233
組み込み変数を使わない場合には以下のようになる。
例外オブジェクトを明示的に変数へ入れるので、
こっちの方が分りやすいかと。

class MyError < StandardError
end
begin
  raise MyError, "foo"
rescue MyError => e
  puts "#{e} (#{e.class})"
end
#=> foo (MyError)
245デフォルトの名無しさん:2005/10/26(水) 21:41:57
モジュールのメソッドで、シンボルを受け取る表記は
どうやって書くんでしょうか?

呼び出し側

x= Hage.new
p x.hoge(:symbol)

受け手側

module Hage
def hoge(x) ← ここの表記がよく解らず
self[x]
end
end

やはり Hashクラスを取り込まないと表記できないのかなあ...
246デフォルトの名無しさん:2005/10/26(水) 21:58:45
>>245
>def hoge(x) ← ここの表記がよく解らず
そこは全然間違ってないんだけど、他が全然ダメだ。
247デフォルトの名無しさん:2005/10/26(水) 22:07:16
>>245
それで受け取れてるから安心しる
248デフォルトの名無しさん:2005/10/26(水) 22:39:24
>>247
>>246 の言う通りな気がするのだが。
「そもそも何をやりたいのか」が混乱している気も。
249245:2005/10/27(木) 00:07:35
混乱してますが、少し頭冷やして戻ってきました。
ええと、やりたいことは(2)のような感じで、モジュール内のメソッドで、(1)のような処理を
実現したいんですが、モジュール内でどうやって書くべきなのかわからず困ってます。
多分、大きな勘違いしてるんだとは思うのですが

--- hoge.rb:モジュール側
module Hoge
module_function
def hoge
 h ={}
 h[:symbol]='test'
 h
end

def hoge_get(k) ← ここでつまずいてる。
 self[k]
end
end

--- moge.rb:呼び出し側
require "hoge.rb"
class Hash
 def moge_get(k)
  self[k]
 end
end

 m = Hoge.hoge;
 p m.moge_get(:symbol) # (1)
 p m.hoge_get(:symbol) # (2)
250デフォルトの名無しさん:2005/10/27(木) 01:22:40
それだと
 m = Hoge.hoge
 m.class #=> Hash
なんだけど、そこは期待通りなの?

それでよくて、Hash クラスの定義を書き換えたくないんなら、hoge の定義を
def hoge
 h ={}
 h[:symbol]='test'
 def h.hoge_get(k)
  self[k]
 end
 h
end
とでもすれば(h に特異メソッド hoge_get を持たせれば)いいんじゃない。
251245:2005/10/27(木) 02:21:52
>m.class #=> Hash
>なんだけど、そこは期待通りなの?

はい、okです。

>(h に特異メソッド hoge_get を持たせれば)いいんじゃない。

おぉ!言われてみればその通りです。

モジュールで、インスタンスが出来ないことばかりに気が行っていて
混乱していたようです。

助かりました。 : -)
252デフォルトの名無しさん:2005/10/27(木) 08:22:04
Amritaで
<select name="board">
 <option value="tech">マ板</option>
 <option value="prog">ム板</option>
</select>
ってのはどうやるの?
select要素のname属性指定とoption要素のリストを操作したいんだけど
253デフォルトの名無しさん:2005/10/27(木) 19:58:46
すいません。ファイルの各行を配列の各要素のように使えるクラスを書いていて、[]メソッドの書き方は合ってるっぽいのですが、[]=メソッドの書き方がわかりません。
class FileLikeArray
def intialize(path)
@path = path
end
def [](idx)
file = open (@path,"r")
a = file.readlines
file.close
return a[idx]
end
def [](idx)=(value)
file1 = open("temp.txt","w")
file2 = open(@path,"r")
c = 0
while line = file2.gets
if c == idx
file1.print value,"\n"
else
file1.print line
end
c += 1
end
file1.close
file2.close
File.rename("temp.txt",@path)
end
end
filelikearray = FileLikeArray.new("test.txt")
filelikearray[2] = "ほげ"

を実行すると「def [](idx)=(value)」のところでエラーがでます。なにが違うのでしょうか?
254デフォルトの名無しさん:2005/10/27(木) 20:22:46
def []=(idx, value)
255253:2005/10/27(木) 21:51:31
>>254
ありがとうございました!動きました!
しかし[]系メソッドの定義のしかたってどこにドキュメントがあるんでしょうか。
手がかりがほとんどなく、たのしいRubyのRingArrayクラスのソースだけが参考資料でした。
「def []=(idx,value)」なんて絶対思いつかないよ・・・orz。
256デフォルトの名無しさん:2005/10/27(木) 21:53:19
257253:2005/10/27(木) 22:16:44
>>256
・・・そんなところにぽつんと;
ありがとうございました。
とりあえずインターフェイスだけ配列っぽいクラスが作れるようになったので利用の幅が広がりました。
258デフォルトの名無しさん:2005/10/27(木) 22:17:00
>>252
いくつかの方法があるが、属性値の展開を利用するのが
もっとも簡単だと思う
http://www.nslabs.jp/amrita-altered.rhtml
259デフォルトの名無しさん:2005/10/29(土) 16:39:05
main.rbでhogeとpiyoをrequireしてればhogeでpiyoをrequireする必要ないみたい
だけど、どのファイルでどこまでrequireすればいいの?
実行ファイルで全部requireすれば他のファイルにrequire書く必要ない?
--- main.rb ---
require 'hoge'
require 'piyo'
Hoge.new.hoge

--- hoge.rb ---
class Hoge
 def hoge
  Piyo.PIYO
 end
end

--- piyo.rb ---
class Piyo
 PIYO=123
end
260デフォルトの名無しさん:2005/10/29(土) 18:47:19
>>259
うん、必要ない
requireってのは要するに「他のスクリプトを実行する」だけだから
261デフォルトの名無しさん:2005/10/29(土) 19:24:24
i386-mswin32版のruby 1.8.3を使ってます。
以下のようなプログラムで、終了する前(acceptで待っている時)にC-cで中断しようとしても
中断されないのですが、そういうものなのでしょうか?
cygwin版の方は中断されたのですが。

require 'socket'

gs = TCPServer.new(80)
gs.accept
262デフォルトの名無しさん:2005/10/29(土) 23:04:54
class A
 X=1
 def a
  p X
 end
end

class B < A
 X=2
end

クラスAとBが↑みたいにあって
B.new.a
実行すると1になるんだけどなんで?
263デフォルトの名無しさん:2005/10/29(土) 23:51:45
socketを使ったプログラムについて質問させてください。

tcpサーバが返してくる文字列の行数がわからない場合は
クライアント側ではどのように読んだら良いのでしょうか?

例えばサーバから3行返ってきた場合、クライアントは

s = TCPSocket.new('localhost', 12345)
s.gets #=> 1行目
s.gets #=> 2行目
s.gets #=> 3行目

で良いと思うのですが、3行ということがわからない場合
getsを呼ぶ回数をどう判定したら良いのでしょうか?

3行目をgetsしたあとs.getsとすると、4行目を読もうとして(でも存在しないので)
止まってしまうので困っています。
264デフォルトの名無しさん:2005/10/30(日) 00:03:37
while line=s.gets
p line
end
じゃあかんの?
それか全部配列に呼んでからsizeを見るとか
265デフォルトの名無しさん:2005/10/30(日) 00:06:21
sysread
266デフォルトの名無しさん:2005/10/30(日) 00:13:45
>>265の方法でできました!

>>264だと、>>263の例でいうなら4回目のs.getsで止まってしまいました。

これで半日作業が止まっていたので、助かりました。
Rubyistのみなさん、ありがとう!
267デフォルトの名無しさん:2005/10/30(日) 00:17:43
>>262
p self.class::X
268デフォルトの名無しさん:2005/10/30(日) 00:37:41
>>267
thx
わざわざself.classをつけなならんのか
269デフォルトの名無しさん:2005/10/30(日) 04:47:02
Hoge::Piyo::Foo::Barクラスを
include Hoge::Piyo::Foo
Bar.new
って書くのと
Hoge::Piyo::Foo::Bar.new
って書くのは同じですか?
270デフォルトの名無しさん:2005/10/30(日) 15:28:12
モジュールについて質問があります。以下のようなプログラムを書いてて

module A
 def hoge
 end
end

class B
 include A
 def hoge
  super.hoge
 end
end

class B の hoge メソッドの中で super.hoge を呼んでるんですけど、これで
は Object クラスの hoge が呼ばれてしまいます。なんとか
module A の hoge メソッドを呼べないものでしょうか?

よろしくおねがいします。
271デフォルトの名無しさん:2005/10/30(日) 15:29:06
(∩´∀`)∩ age
272デフォルトの名無しさん:2005/10/30(日) 15:36:41
>>269
そのスコープで別のBarを定義してなければ。
273デフォルトの名無しさん:2005/10/30(日) 15:45:25
>>270
それだと、A#hogeが呼ばれてその結果に対してまたhogeが呼ばれるはずだが。
274270:2005/10/30(日) 16:24:03
>>273
あ、本当ですね。間違ってました。
確かに A#hoge のあと、その返り値のオブジェクトのhoge? が呼ばれました。

super を Java と同じ感じだと思っていましたが、それだけでメソッド呼び出しになるのですね。
解決しました。ありがとうございました。
275デフォルトの名無しさん:2005/10/30(日) 16:50:47
case hoge
when 0 .. 19
・・・
when 20 .. 60
・・・
when ここで 60以上 の処理をしたいのですが、どう書けばいいですか?
・・・
end
else以外で書けませんか?
276デフォルトの名無しさん:2005/10/30(日) 18:23:17
when 100..1/0.0
とか
277デフォルトの名無しさん:2005/10/30(日) 19:20:05
when (def (o=Object.new).===(other) other >= 60; end; o)

……すまん。
278デフォルトの名無しさん:2005/10/30(日) 19:41:14
case
when (0..19) === hoge
...
when (20..60) === hoge
...
when 60 < hoge
...
end

とかは?

hogeを繰り返すのがいやだけど

>>276のはすごいな…0.0で割ると例外にならないのね。Infinityかー
279デフォルトの名無しさん:2005/10/30(日) 20:14:12
>>278
それもうifでいいじゃない
280デフォルトの名無しさん:2005/10/30(日) 20:34:38
ありがとうございます。
>>276>>277 はすぐ意味がわからないので、後で試してみます。
>>278みたいなのは思いついたんですけど、やっぱ>>279なんですかね・・・?
281デフォルトの名無しさん:2005/10/30(日) 21:14:19
Rangeで x..Inf を使えるようにしておくれよ
282デフォルトの名無しさん:2005/10/30(日) 21:42:00
>>278
それで思い出した。
Infinity とか NaN って、そういう定数が定義されてるわけじゃないんだよね。
それでハマったことがあった。
283236:2005/10/30(日) 21:59:00
284デフォルトの名無しさん:2005/10/30(日) 22:35:37
>>275
when (hoge > 60 ? hoge : nil)
とか。
でも(20..60)===60はtrueだけどな。
285デフォルトの名無しさん:2005/11/02(水) 17:40:49
def gt(obj, value)
(obj > 60) ? obj : nil
end

when gt(hoge, 60)
とかどうだろう? いまいち?
286デフォルトの名無しさん:2005/11/02(水) 18:21:19
Range クラスを拡張しちゃうとか。
when 60..Range::Infinity
みたいにできるように。
287デフォルトの名無しさん:2005/11/02(水) 18:41:35
>>285
式抜きのcaseで使うんならメソッドにする必要はないだろ。
case hogeに対しては動かんし。
288デフォルトの名無しさん:2005/11/02(水) 22:03:35
そこでネコ演算子ですよ。(関係ない)
289デフォルトの名無しさん:2005/11/03(木) 01:22:14
キャットファイト
290デフォルトの名無しさん:2005/11/03(木) 03:24:39
例えばメソッドgetsが、gets.chomp という使い方も出来るようなんですが、

method.method というような形になり、何か変じゃないですか?
object.method なら判るのですが
291デフォルトの名無しさん:2005/11/03(木) 03:41:29
Kernel.gets.chomp
292デフォルトの名無しさん:2005/11/03(木) 04:01:38
>>290
「メソッドを呼んで、その返り値に対してメソッドを呼ぶ」という
俗に「メソッドチェーン」と呼ばれる仕組みです。二つに限らず、
たとえば gets.split.sort.reverse のようにたくさんつなげることもできます。

好みの問題ですが、メソッドチェーンの利点として、
* 「split して sort して reverse する」みたいに読める
* 無駄な一時変数を使わなくていい(上の例でメソッドチェーンを使わないと
 tmp1 = gets
 tmp2 = tmp1.split
 tmp3 = tmp2.sort
 tmp4 = tmp3.reverse
みたいに書くことになる)
という利点があります。

293デフォルトの名無しさん:2005/11/03(木) 04:18:29
I.understand
294デフォルトの名無しさん:2005/11/03(木) 09:10:40
メソッドには括弧つけたいYO
295デフォルトの名無しさん:2005/11/03(木) 14:27:30
>>290
省略せずに書けば「$stdin.gets.chomp」でしょうから、
「object.method」の形式ですね。
296デフォルトの名無しさん:2005/11/03(木) 14:38:14
>>295
ARGF.gets.chomp
297デフォルトの名無しさん:2005/11/03(木) 14:39:09
object.method -> object
object.method.method -> (object.method).method -> object.method
298デフォルトの名無しさん:2005/11/03(木) 14:43:22
>>296
$stdin = File.open("/path/to/file")
puts gets.chomp
299デフォルトの名無しさん:2005/11/03(木) 14:56:49
>>298
% cat hoge.rb
$stdin = File.open("/path/to/file")
puts gets.chomp
% ruby hoge.rb hoge.rb
$stdin = File.open("/path/to/file")
300デフォルトの名無しさん:2005/11/03(木) 15:20:12
>>295
Kernel.gets.chomp
301デフォルトの名無しさん:2005/11/03(木) 19:55:06
th = "コードで語り合うスレ"
printf("%sはここでつか?", th)
STDOUT.flush
ans = /^\s*y/i =~ gets
302デフォルトの名無しさん:2005/11/03(木) 20:44:56
CGI.newとCGI::newの違いって何?
require "cgi-lib"とrequire "cgi" の違いって何?
303デフォルトの名無しさん:2005/11/03(木) 22:13:08
>302
CGI.newとCGI::newは実体は同じ。参照の仕方が違う。
普通は前者を使う気がする。

2つめの質問については、
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=cgi-lib.rb;em=cgi-lib
> このライブラリはobsoleteです。 cgi.rbを使ってください。
304デフォルトの名無しさん:2005/11/03(木) 22:36:44
>>303
なるほどそういうことか、ありがとう
特に後者はすごく簡単に調べられたんだな、申し訳ない
305デフォルトの名無しさん:2005/11/03(木) 23:46:30
:: と . って、使われる場面に、習慣的な違いがあるんじゃなかったっけ?
306デフォルトの名無しさん:2005/11/04(金) 00:14:05
オレは "." 派なので想像だけど、
クラス・モジュールと、定数に代入した(その他の)オブジェクトとを
見た目を区別するためなんじゃなかろうか。

SomeClass::some_class_method
SomeConstant.some_instance_method

みたいに。
307デフォルトの名無しさん:2005/11/04(金) 01:09:40
俺は定数参照にはスコープ演算子、特異メソッドの実行にはドットって使い分けてる。

MyClass::FILE_SIZE
MyClass.class_eval
308デフォルトの名無しさん:2005/11/04(金) 07:20:41
>>299
false
309デフォルトの名無しさん:2005/11/04(金) 13:17:41
eRubyのインストール方法がわかりません。
310デフォルトの名無しさん:2005/11/04(金) 13:54:15
それでいい。
世の中わからないことだらけだ。
311デフォルトの名無しさん:2005/11/04(金) 13:57:14
erbじゃだめなの?
> ERBはeRubyのRubyによる実装です。
であり、普通にRubyに標準添付されているわけだが。
312デフォルトの名無しさん:2005/11/04(金) 14:06:38
>>311
ヒント:あぱっちょ
313デフォルトの名無しさん:2005/11/04(金) 15:26:36
>>309
チラシの裏に書いてろ、な。
314デフォルトの名無しさん:2005/11/04(金) 16:20:41
>>313
くず。
むなしくない?
315デフォルトの名無しさん:2005/11/05(土) 01:50:35
>>309
とりあえずマジレスしとくと

「eRuby」は規格そのものの名称であって、実装の名称ではない。
そのため「eRubyをインストール」は間違い。

「erubyをインストール」なら正しいが、どちらにしてもERbを使った方がいいと思う
erubyはインストールに手間を食うし、サーバによっては使えないこともある
316デフォルトの名無しさん:2005/11/05(土) 14:27:22
グラフを描いて,BMP形式で保存したいです.
グラフは以下のようにするとできそうです.

require "sdl"

SDL.init(SDL::INIT_VIDEO)
screen = SDL.setVideoMode(640, 480, 16, SDL::SWSURFACE)

screen.fillRect(0, 0, 639, 479, [255, 255, 255])
screen.drawRect(50, 50, 539, 379, [0, 0, 0])
screen.drawLine(50, 50, 589, 429, [0, 0, 255])
screen.drawLine(589, 50, 50, 429, [0, 0, 255])
screen.updateRect(0, 0, 0, 0)

loop do
case event = SDL::Event2.poll
when SDL::Event2::Quit
exit
end
end

Winodowsのmswin版で,Ruby/SDLは動作します.
描いた図をファイルに保存するには,どうすればよいでしょうか.
よろしくお願いします.
317デフォルトの名無しさん:2005/11/05(土) 14:47:54
screen.saveBMP('a.bmp')

で保存できました.
ありがとうございました.
318デフォルトの名無しさん:2005/11/07(月) 21:15:15
while i < line.size
(条件を満たした時の処理)
end



while i< line.size do
(条件を満たした時の処理)
end

とdoを使った時では処理はどう違うのでしょうか?
どちらでやっても結果が同じになったのですが。
319デフォルトの名無しさん:2005/11/07(月) 21:21:12
while などの do や if の then は省略できる。してもしなくても全く変わらない。
おれは付ける派だけど付ける方が少数派かなあ。
320デフォルトの名無しさん:2005/11/07(月) 21:30:59
thenはほぼ100%省略するけど、doは100%つける派。
{と} に対して doとend があるというイメージがある。
321デフォルトの名無しさん:2005/11/07(月) 21:45:59
doかなにか省略可能なやつの有無で動作のタイミングが変わる言語があったなあ。
322デフォルトの名無しさん:2005/11/07(月) 22:46:49
do endと{ }の区別がつきません
323デフォルトの名無しさん:2005/11/07(月) 23:36:48
>>322
{}の方が優先順位が上だったような。

メソッド1 メソッド2 { ・・・}
メソッド1 メソッド2 do ・・・end

上記の例だとメソッド1の引数に、メソッド2+イテレータブロックの戻り値が渡され、
do endだとメソッド1にメソッド2の戻り値とイテレータブロックが渡されるです。
まぁ()を付けるべきだと思いますが。
324323:2005/11/07(月) 23:38:22
>>322
って、質問の意図を取り違えてましたね。
325デフォルトの名無しさん:2005/11/08(火) 00:06:29
>>323
へーへーへー 3へー 市欄買った
326デフォルトの名無しさん:2005/11/08(火) 00:51:33
rubyってスペースあけとかないとハマるケースってあるの?
327デフォルトの名無しさん:2005/11/08(火) 05:00:54
hoge << _END_
omae mona
_END


hoge <<_END_
omae mona
_END
328デフォルトの名無しさん:2005/11/08(火) 11:33:38
def one; 1; end

one+1 #=> 2
one+ 1 #=> 2
one + 1 #=> 2
one +1 #=> ArgumentError
329デフォルトの名無しさん:2005/11/08(火) 19:39:07
気持ち悪い
330デフォルトの名無しさん:2005/11/09(水) 03:10:27
どうしても行数が長くなってしまう場合の def で定義したメソッドの
endとのペアリングわかりにくくないですか?

何かエディタで例えばブレス{}のペアリング
はxyzzyとかでチェック機構つけられるけど、end のペアリングチェック
ってうまい方法ありますかね。
331330:2005/11/09(水) 03:11:10

行数長くならなくても、例えばネストが深くなった場合とかも同じ
事が言えると思いますが。
332デフォルトの名無しさん:2005/11/09(水) 03:51:58
ruby-modeのC-M-fとかの類いもイマイチだしなあ
333デフォルトの名無しさん:2005/11/09(水) 09:16:54
わしはend # def [](i)みたいに何のendかわかるようにしてまつ。
334デフォルトの名無しさん:2005/11/09(水) 10:56:31
かっこわるー

が、それくらいしか打つ手もないか。
335デフォルトの名無しさん:2005/11/09(水) 14:50:49
エディタの機能に頼らなくて良い程度に抑えるのが吉?
ネストが深くなったりメソッドが長くなったりするようなら、
複数のメソッドに分けちゃいます。
336デフォルトの名無しさん:2005/11/09(水) 15:04:45
自作の細かいクラスとメソッドだらけというのもなんだかなという気もす
337デフォルトの名無しさん:2005/11/09(水) 17:51:50
>>336
詳しく!
338デフォルトの名無しさん:2005/11/09(水) 18:05:08
Ruby/SDLで描いた図を,GIF形式で保存したいのですが,
どうすれば良いでしょうか.
BMP形式ではファイルサイズが大きくなりそうですので.
GIF画像を読み込み,貼り付けることはできました.

require "sdl"

SDL.init(SDL::INIT_VIDEO)
screen = SDL.setVideoMode(640, 480, 16, SDL::SWSURFACE)

a = SDL::Surface.load("a.gif")

screen.put(a, 320, 240)
screen.updateRect(0, 0, 0, 0)

loop do
 case event = SDL::Event2.poll
 when SDL::Event2::Quit
  exit
 end
end

保存の方法を教えて下さい.
よろしくお願いします.
339デフォルトの名無しさん:2005/11/09(水) 18:17:57
undefined class/module SocketError
と出るわけだが、これは一体どこで定義されてるんだ?
require 'socket'しても出るぞ
340デフォルトの名無しさん:2005/11/09(水) 18:22:25
あひゃ、require 'socket'したら出なかった。スマソ
341デフォルトの名無しさん:2005/11/09(水) 20:15:41
今から
def func() {
 chinko
 manko
 unko
}
を許したら混乱する?
3420029:2005/11/09(水) 20:33:25
HSPで裁判のゲームを作っているので、「無罪」の場合は勝手に終了して、「死刑」の場合は、「控訴しますか?」というダイアログを表示するようにしてくれださい!
343デフォルトの名無しさん:2005/11/09(水) 22:30:16
>>330
エディタの機能でメソッドを短く閉じてる人もいる。

http://www.rubyonrails.com/media/video/rails_take2_with_sound.mov
344デフォルトの名無しさん:2005/11/09(水) 23:30:26
>>341
混乱じゃなくて衝突する。
345デフォルトの名無しさん:2005/11/09(水) 23:40:10
>>343
何か怪しげなリンクだなw
346デフォルトの名無しさん:2005/11/10(木) 01:24:40
>>338
save_bmpメソッドで保存した後、convertとかでGIFにする。
347デフォルトの名無しさん:2005/11/10(木) 01:47:25
windowsにw32ルビーを入れたのですが、これはあまり推奨されませんか?
348デフォルトの名無しさん:2005/11/10(木) 02:12:11
>>346
そうですね.
BMPにしてからGIFにすることならできそうです.

それでソフトを探してみましたら,以下のソフトがありました.

wGigamaree
コマンドライン上で実行するBMP→GIF変換ソフトウェア
http://www.vector.co.jp/soft/win95/art/se343747.html

プログラムのあるフォルダに,このソフトの実行ファイルを入れて,
プログラムに,317にあるBMPで保存する行の後に,
system "wGigamaree a.bmp"
としました.
GIFで保存できるようになりました.
ありがとうございました.
349デフォルトの名無しさん:2005/11/10(木) 03:40:56
>>343
なにこれ、970x754って画面に収まらねー
350デフォルトの名無しさん:2005/11/10(木) 04:55:35
>>343
ナニこのエディタ?
351デフォルトの名無しさん:2005/11/10(木) 10:51:27
網構造を表現できるライブラリを探しています。
どなたかご存知の方、教えてください。
352デフォルトの名無しさん:2005/11/11(金) 02:50:23
windowsにw32ルビーを入れたのですが、これはあまり推奨されませんか?
353デフォルトの名無しさん:2005/11/11(金) 03:23:56
作者をのぞけば。
354デフォルトの名無しさん:2005/11/11(金) 03:26:10
rubyのライブラリをCでかけるみたいですが
C++とrubyが連携する方法はどんなものがありますか?
355354:2005/11/11(金) 05:41:19
Swigっての見つけた。
すげーな、これ
356デフォルトの名無しさん:2005/11/11(金) 10:38:09
ファイルの内容をreadlinesした配列の内容に変更をかけると自動でそれを察知して元ファイルも更新するようなのをマルチスレッドを使って実装してみたいのですが、
裏で変更がかかったかどうかを常にチェックしてたらやっぱメインスレッドの挙動は半分のスピードに落ちるんでしょうか。
357デフォルトの名無しさん:2005/11/11(金) 14:30:04
>>356
ふつーは「常にチェック」なんてせずに Observable 使うとかするんじゃね?
358デフォルトの名無しさん:2005/11/11(金) 14:42:12
「その配列を変更する専用のメソッド」を作って
変更したいときに呼べばいいじゃんと思った俺は初心者だがスレ準拠なので謝らない
359デフォルトの名無しさん:2005/11/11(金) 14:45:13
>>351
まず網構造とは何かがわからないんだが
360デフォルトの名無しさん:2005/11/11(金) 15:30:51
グラフのことじゃないか?
361デフォルトの名無しさん:2005/11/11(金) 15:36:24
とりあえず木構造とかの類のデータの話だと思ったがどうしようかという案は特にない
362デフォルトの名無しさん:2005/11/11(金) 17:04:38
なら普通にSetとかで表現できそうだが。
何で表現するかじゃなくて、それをどう使いたいかが見えないとなぁ。
363デフォルトの名無しさん:2005/11/11(金) 18:26:30
拡張ライブラリのデバッグってどうやってますか?
GC のタイミングで SEGV で落ちた時点ではあとのまつりで、
gdb で追っかけようにもどこが大元の原因なのやらさっぱりで。
デバッグ用に ElectricFence な Ruby でも用意しようかとも思いましたが面倒ですし。
364デフォルトの名無しさん:2005/11/11(金) 20:22:25
>>359
Winny本読んでP2P作ろう!
と意気込んでる所じゃね?
365デフォルトの名無しさん:2005/11/12(土) 17:34:28
FreeBSD ports ruby18+oniguruma 壊れてない?
366デフォルトの名無しさん:2005/11/12(土) 18:07:19
壊れてるな。
367デフォルトの名無しさん:2005/11/12(土) 18:39:24
>>351
グラフのことだとしたらふつうに配列を使えば表現できるんじゃないかな?
a,b,c,dの4点があって、ab,ad,acの3辺があったら、そのグラフは
[[[a,b],[a,c],[a,d],[b,c],[b,d],[c,d]],[a,b],[a,d],[a,c]]で表せるじゃん。
有向グラフも同じ要領で配列で表現可能。
368367:2005/11/12(土) 18:42:38
ごめん、
[[[a,b],[a,c],[a,d],[b,c],[b,d],[c,d]],[[a,b],[a,d],[a,c]]]
だった・・・orz。
369デフォルトの名無しさん:2005/11/12(土) 19:06:04
>>365
onigurumaって良いの?
370デフォルトの名無しさん:2005/11/12(土) 19:17:51
キーワードA\tなんだかんだー\t …
キーワードB\tどうしたこうしたー\t … …
キーワードC\tイエー\t … …
     :

とかいう感じのタブ区切りファイルがあります。\tはタブ文字のつもりです。この際CSVでもいいです。
「キーワードNで代表されるN行目の内容だけを更新する」ということをしたいです。

更新個所の指定方法はなんでもいいので、簡便な感じに一発で書き換える方法はありませんか?

 「ファイルを読み込んで全行を配列に保存しつつ
 キーワードにヒットすればその行のぶんは置換して保存し
 終わったら全配列をファイルにどかんと書き戻す」
ということを今はしてるんですが、なんかいろいろもったいない気がします。何度も呼ぶと時間かかるし。
371デフォルトの名無しさん:2005/11/12(土) 19:40:08
>>370
可変長レコードファイルの途中のレコードだけを書き換えることは基本的に無理。
それを理解した上であえて楽したいのなら、それなりの質問の仕方をして下さい。
372デフォルトの名無しさん:2005/11/12(土) 19:49:06
>>369
悪くない。
373デフォルトの名無しさん:2005/11/12(土) 19:54:26
>>371
うんにゃ、初心者スレの分を超えるような質問はしないよ。
普通にやって方法がないならそれで充分。ありがとう。
374デフォルトの名無しさん:2005/11/12(土) 20:21:15
読み込みはruby-mmapを使って変更分だけメモリに置くとか
正直、YAMLか何かに移行することを勧めるが
375デフォルトの名無しさん:2005/11/12(土) 22:19:02
>>370
楽をしたいだけなら、俺だったらそういう機能をカプセル化してハッシュみたいなクラスを作ると思う。
あと、やるんならテンポラリファイルを作って書き戻しはそっちに行い、完了してからリネームすることをオススメする。
376363:2005/11/13(日) 02:16:36
あり?拡張ライブラリ書く人いない?
377デフォルトの名無しさん:2005/11/13(日) 11:33:08
すみません。クラスメソッドをaliasするには
どうしたらよいですか?
File.joinを別名定義したいのですが。。。
378デフォルトの名無しさん:2005/11/13(日) 11:50:27
alias join_old join とすると見つからないと出るし
alias File.join_old File.join とすると文法エラーと出ます
379デフォルトの名無しさん:2005/11/13(日) 11:57:22
class << File
alias join_old join
end
380デフォルトの名無しさん:2005/11/13(日) 12:03:15
>>376
初心者スレ逸脱
381デフォルトの名無しさん:2005/11/13(日) 14:16:01
>>380
orz

あっちできいてみます。誘導ありがとうございます。
382356:2005/11/14(月) 00:06:53
>>357-358
サンクス。変なこと聞いてすみませんでした。
383デフォルトの名無しさん:2005/11/14(月) 23:42:43
rubyでシェルの

#/bin/sh
ls

のようにコマンドを使うことは出来ないんですか?
出来る方法があったら教えてください。
384デフォルトの名無しさん:2005/11/14(月) 23:55:06
もしもしエスパーさんですか、はい、至急お願いします
385デフォルトの名無しさん:2005/11/15(火) 00:31:34
`ls`
386デフォルトの名無しさん:2005/11/15(火) 00:34:39
エスパーキター
387デフォルトの名無しさん:2005/11/15(火) 07:02:24
>>383
添付ライブラリのShellを使う手もありますよ。
388デフォルトの名無しさん:2005/11/15(火) 08:00:53
system('ls')

とかそんな話かもしれん。
まあ、たいしたことでもないんだろう。
389デフォルトの名無しさん:2005/11/15(火) 12:09:49
/var/www/hoo というディレクトリが空であること("."で始まるファイルやディレクトリもない)
ことを確認するにはどうすればできますか?
390デフォルトの名無しさん:2005/11/15(火) 13:36:35
>>389
`rm /var/www/hoo`
391デフォルトの名無しさん:2005/11/15(火) 13:37:11
def Dir.empty?(path)
files = []
open(path) do |dir|
while file = dir.read
files.push file
end
end
files == [".", ".."]
end

# "."と".."の順番が違う可能性もあるか?
392デフォルトの名無しさん:2005/11/15(火) 13:59:39
def Dir.empty?(path)
Dir.foreach(path) do |f|
return false if f != "." && f != ".."
end
true
end
393デフォルトの名無しさん:2005/11/15(火) 15:14:58
>>391-392

ありがとうございます。

つかわしてもらいます。
394390:2005/11/15(火) 16:27:24
おい、スルーかよ!!
395デフォルトの名無しさん:2005/11/15(火) 18:08:58
>>394
無理言うな。
396デフォルトの名無しさん:2005/11/15(火) 18:17:45
自分はそのディレクトリをカレントにし、
Dir.glob("*")
が[]だったら空、
というロジックをよく使う。
397デフォルトの名無しさん:2005/11/15(火) 18:44:19
Dir::chdir するのはスレッドセーフじゃないので気をつけて使わないといけないね。
398デフォルトの名無しさん:2005/11/15(火) 19:05:04
それじゃdot fileが引っ掛からない。
399デフォルトの名無しさん:2005/11/15(火) 19:14:44
結局はそのディレクトリを何に使うのか(何に使われてたのか)に依存しそうだな
400デフォルトの名無しさん:2005/11/15(火) 19:25:49
(Dir.open("/var/www/foo").map - [".", ".."]).empty?
とかはどうだろう。
401デフォルトの名無しさん:2005/11/15(火) 23:53:16
>>400
それが適切かどうかは分からないけど、そこで map はキモいので entries で。
ていうか 1.9 だとブロックなし map は Enumerator 返すし。

$ ruby -e 'p Dir.open("/").map'
#<Enumerable::Enumerator:0x101062d0>
402デフォルトの名無しさん:2005/11/18(金) 10:06:36
他のソース中でセットされているset_trace_funcの処理に
自分の処理も追加したいのですが、どのように書けばよいでしょうか?
既存のset_trace_funcの処理に加えて新しい処理も走るようにしたいのですが。。。
403デフォルトの名無しさん:2005/11/18(金) 21:01:35
すみません、魔方陣の列の和と行の和を求めたいんですが
さっぱりわかりません…orz
魔方陣は…
n=7
a=Array.new

for i in 1..n
a[i]=Array.new
end

for m in 0..n-1
for k in 0 ..n-1
i=(k+m)*2+(n+1)/2+2
j=k-m+(3*n+1)/2
a[(i-1)%n+1][(j-1)%n+1]=n*m+k+1
end
end
for i in 1..n
for j in 1..n
printf "%4d", a[i][j]
end
print "\n"
end
と書いたのですが。。。
404デフォルトの名無しさん:2005/11/18(金) 21:48:39
module Enumerable
def sum; inject(0){|result, x| result + x }; end
end
a.flatten!
a.compact!
(0..(n-1)).each{|i|
(0..(n-1)).each{|j|
printf "%4d", a[i*n + j]
}
printf ": %4d", a[i*n, n].sum
puts
}
(0..(n-1)).each{|j|
printf "%4d", a.values_at(*(
(0..(n-1)).collect{|i| i*n + j }
)).sum
}
puts
405デフォルトの名無しさん:2005/11/18(金) 23:54:45
>>404
難しいですねorz
forなどでもっと簡単に書くことは出来ますか?
injectというのが良く分かっていなくて(;´Д`)すみません。。。
406デフォルトの名無しさん:2005/11/19(土) 02:06:22
ま、どういうやり方が簡単かは、人によるからね。

class MagicSquare
def initialize(size)
@size = size
@rows = []
@cols = []
size.times{|r|
size.times{|c|
a = (c+r)*2+(size+1)/2+2
b = c-r+(3*size+1)/2
x = (a-1)%size
y = (b-1)%size
z = size*r+c+1
@rows[x] ||= []
@cols[y] ||= []
@rows[x][y] = @cols[y][x] = z
}
}
end
attr_reader :size, :rows, :cols
407デフォルトの名無しさん:2005/11/19(土) 02:06:59
def to_s
(
rows.collect{|r|
r.collect{|x| format(x) }.join + ': ' + format(sum(r))
} + [
cols.collect{|c| format(sum(c)) }.join
]
).join("\n")
end

private
def format(x)
sprintf('%4d', x)
end
def sum(arr)
arr.inject(0){|result, x| result + x }
end
end

puts MagicSquare.new(7)
408デフォルトの名無しさん:2005/11/19(土) 07:39:53
初心者スレでinjectだなんて、容赦ないな
409デフォルトの名無しさん:2005/11/19(土) 08:49:49
「たのしいRuby」の索引には載ってないね >inject
難しいのをいつどこで覚えるかってのは深い問題だけど
410デフォルトの名無しさん:2005/11/19(土) 09:04:23
inject特集なページを誰かが書いてくれれば
俺にも使えるようになるかもしれないが。。。
411デフォルトの名無しさん:2005/11/19(土) 09:27:46
つーか、そもそも使う必要がないような気もする
412デフォルトの名無しさん:2005/11/19(土) 09:39:55
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=Enumerable#inject
> 合計の計算
> p [1,2,3,4,5].inject(0) {|result, item| result + item }

> これは以下のように書くのと同じです。
> result = 0
> [1,2,3,4,5].each {|v| result += v }
> p result

injectと引数を見て今回どういう動作をさせてるか瞬時に頭の中にイメージとして浮かぶ
賢い人向けの記法っぽい
413デフォルトの名無しさん:2005/11/19(土) 09:48:08
>>412
後から追加されたくらいだから、実は物凄く便利なのかもしれないじゃないか。
普段から身近に使えそうな便利な例を思いつかないが。
414デフォルトの名無しさん:2005/11/19(土) 15:47:22
現在、Apolloを利用したGUIアプリケーションを開発しているのですが
wavファイル、midiファイル、mp3ファイルの再生機能が必要になりました。

これら全て(あるいは一部)をサポートしてくれるライブラリはないでしょうか?
機能はとくに必要なく、ただ再生できるだけで十分なのですが……
415デフォルトの名無しさん:2005/11/19(土) 17:24:41
Smalltalker は inject をしれっと使ってる気がする。
俺は inject を知ってからは一時変数使うのうぜーって思いはじめてきた。
>>412 の result とかね。
416デフォルトの名無しさん:2005/11/19(土) 18:26:17
injectは、独自の決まり事や、(知らない人が見た場合の)
コードに無い(?)けどあれこれやってくれる部分が多めだから。
417デフォルトの名無しさん:2005/11/19(土) 19:10:06
計算はいいから楽しい文字表示とかで実例出してくれると嬉しいかも
418デフォルトの名無しさん:2005/11/19(土) 19:38:30
変なのできた

require 'digest/md5'

def md5sum(path)
open(path, 'r') {|fp|
puts fp.inject(Digest::MD5.new){|digest, line| digest << line}.hexdigest
}
end

md5sum(ARGV[0])
419デフォルトの名無しさん:2005/11/19(土) 19:57:50
こうすれば変態度は下がるか

require 'digest/md5'

puts ARGF.inject(Digest::MD5.new){|digest, line| digest << line}.hexdigest
420デフォルトの名無しさん:2005/11/19(土) 20:53:55
お、おかげでなんかinject自体には慣れてきたぞ。
でも配列を対象にしてる時ならともかく、
Enumerable一般を対象としていると、まだ脳が軽く拒否反応示す。
421デフォルトの名無しさん:2005/11/19(土) 21:34:41
injectはオートマトン的だと思う

入力の並び.inject(初期状態){|現在の状態, 現在の入力| 状態遷移関数} #=> 最終状態
422デフォルトの名無しさん:2005/11/19(土) 22:03:14
それぞれの要素に対してなにかの処理をするとかでなく、
先に仕掛けを用意しておいてそれに流し込む感じ
423デフォルトの名無しさん:2005/11/20(日) 23:09:49
拡張子が.rbのものもCGIスクリプトと認識させるには、.htaccessにどうかけばいいですか?
424デフォルトの名無しさん:2005/11/21(月) 00:50:22
Options +ExecCGI
AddHandler cgi-script .rb
DirectoryIndex index.rb

※httpd.confで次のオーバーライドを許可しておくこと

AllowOverride Options FileInfo Indexes
425デフォルトの名無しさん:2005/11/21(月) 07:26:29
すみません。ruby-mode.elとかinf-ruby-mode.elの解説ってどこかないのかね?
426デフォルトの名無しさん:2005/11/21(月) 23:58:10
下がりすぎ突き上げ ツンツン
427デフォルトの名無しさん:2005/11/22(火) 10:04:14
「外部で更新されるファイルを調べ、そこに書いてある時刻に再度自分自身を実行する」
ということをてきとーな時刻精度で繰り返し行わせたいです。

loop{
  メイン処理()
  外部ファイルを解析()
  現在から予定時刻までの秒数を計算()
  sleep(秒数)
}
とか

メイン処理()
外部ファイルを解析()
system('echo ./script.rb | at 何時何分')
exit

という方法しか思いつかなかったんですが、
「次回処理時刻を指定する」一般的な方法ってありますか?
428デフォルトの名無しさん:2005/11/22(火) 10:10:51
いまさらながら、Enumrable#inject。

setup.rb(install.rb) 以外での使用例は一つだけか。
ttp://raa.ruby-lang.org/gonzui/search?q=inject&fm=ruby
429デフォルトの名無しさん:2005/11/22(火) 17:26:49
>>427
それでいーんじゃないの。
あとは http://raa.ruby-lang.org/project/crontab/ とか。
430デフォルトの名無しさん:2005/11/22(火) 19:15:07
>>428
他にもあるみたいだけど? まだインデクシングの途中なのかな。

まあ 1.6 対応とか、最近更新されてないヤツとかのことを考えると
inject 使ってるのは比較的少ないのかもね。
431デフォルトの名無しさん:2005/11/22(火) 21:59:01
405ですが>>406やっぱり判りませんorz
>>406をinjectを使わないとどうなるんでしょうか。。
432デフォルトの名無しさん:2005/11/22(火) 22:24:15
>>431
漏れもわかんねぇ(わら 気にするな
injectは合計を求めてるだけだから
def sum(arr)
result = 0
arr.each{|x| result += x }
result
end
でよくない?
433デフォルトの名無しさん:2005/11/22(火) 22:30:30
>>432
良い。

>>431
inject は気にするな。
自分の書ける方法で、自分の書きたいものが書けたら、それで良い。
434デフォルトの名無しさん:2005/11/22(火) 23:22:44
>>432
>>433
サンクスですd(⁷∀⁷d)=з
435デフォルトの名無しさん:2005/11/23(水) 13:58:38
>>424

遅レスになりますが、どうもありがとうございます。

無事、動きました。
436デフォルトの名無しさん:2005/11/24(木) 00:41:56
すみません、”?”ってどういう意味なのでしょうか?

if pagelist.size > 0

if not pagelist.empty?

unless pagelist.empty?
437デフォルトの名無しさん:2005/11/24(木) 00:50:46
>>436
> すみません、”?”ってどういう意味なのでしょうか?

「〜か?」ってこと。

ただし慣用的にそう使われているだけで、制限ではない。
(true/false 以外を返すものも作れる)


> if pagelist.size > 0

サイズが 0 より多い

> ↓
> if not pagelist.empty?

Array#empty? は、Array#size == 0 と同じなので、
サイズが 0 ではない

> ↓
> unless pagelist.empty?

同じく、サイズがゼロではない
438デフォルトの名無しさん:2005/11/24(木) 01:01:14
>>437
サンクス。
439デフォルトの名無しさん:2005/11/24(木) 01:05:32
emptypより直感的にわかりやすかろう
440デフォルトの名無しさん:2005/11/24(木) 01:43:56
インスタンス変数というのは、C++で言うクラスの属性データに相当するものでしょうか?
441デフォルトの名無しさん:2005/11/24(木) 01:56:31
良くわからないが、メンバ変数に相当するはず。

# 同時期に始めたのにもうC++喋れないorz
442デフォルトの名無しさん:2005/11/24(木) 13:48:37
っていうか、「C++で言うクラスの属性データ」って何だ?
C++自体にそんな用語あったっけ?
443デフォルトの名無しさん:2005/11/24(木) 20:24:31
クラスの属性というとprivate:とかが該当する
444デフォルトの名無しさん:2005/11/25(金) 00:10:24
容疑者変数
445デフォルトの名無しさん:2005/11/25(金) 03:10:40
表記法について教えて下さい
String#index などと クラス名#なんとかという表記が文献に
出てくるのですが、この#はどういう意味でしょうか?
英語の 's に相当するものでしょうか?
446デフォルトの名無しさん:2005/11/25(金) 03:18:47
コメント
447デフォルトの名無しさん:2005/11/25(金) 03:28:47
http.rbを見てたら、
class << HTTP
def xxxx
:

というクラス定義の記述が出てきたんですが、
この << はどういう意味でしょうか?ruby本
で調べたんですが、みつかりまへん。
448デフォルトの名無しさん:2005/11/25(金) 03:32:23
九九
449447:2005/11/25(金) 03:50:52
自己解決しますた
450デフォルトの名無しさん:2005/11/25(金) 09:27:11
>>445
とりあえずString#indexって書いてあったら
String.indexのこととおもっときゃいいんじゃね?
ピリオドだと読みづらいし。
451デフォルトの名無しさん:2005/11/25(金) 10:04:00
String#index は String クラスのインスタンスメソッド index を指す
452デフォルトの名無しさん:2005/11/25(金) 10:50:41
ここ↓の =begin と =end はどういう意味ですか?
コメントと同じように見えますが。

rb2html - Ruby, Java, C++ sources to HTML
http://www.nslabs.jp/rb2html.rhtml
453デフォルトの名無しさん:2005/11/25(金) 11:17:41
複数行コメントだよ。 =begin から =end までコメントになる。
いちおう、RD をコードに埋め込むという用途のためのものでもあるのだが、
RDoc全盛の今となってはとっくに廃れた話だな。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%BB%FA%B6%E7%B9%BD%C2%A4#a.cb.e4.a4.e1.b9.fe.a4.df.a5.c9.a5.ad.a5.e5.a5.e1.a5.f3.a5.c8
454デフォルトの名無しさん:2005/11/25(金) 11:20:52
>>452
もちろん複数行コメントとして使える。
が、いわゆるコメントと言うよりはインラインドキュメント
としての性格が強い
455デフォルトの名無しさん:2005/11/25(金) 12:00:22
>>453
>>454
ありがd
456デフォルトの名無しさん:2005/11/25(金) 12:28:10
>>450
String.index って書くと、Srtring のクラスメソッドに index があることになりまつ。
457デフォルトの名無しさん:2005/11/25(金) 19:45:01
よくわからんので一緒でいいな
458デフォルトの名無しさん:2005/11/25(金) 20:06:55
>>456
だから >>451 だってばさ。
459デフォルトの名無しさん:2005/11/25(金) 20:37:44
>>456
それは>>451的記法使用派内だけでの話であって、一般的な規則ではない。
460デフォルトの名無しさん:2005/11/25(金) 20:48:04
何をもって一般的と言うかは知らないけど、
リファレンスマニュアルや Ruby の ChangeLog などでは
String クラスのインスタンスメソッド index のことを「String#index」と表示してある。
461デフォルトの名無しさん:2005/11/25(金) 21:43:02
>>459
君は後々苦労すると思うよ。
462デフォルトの名無しさん:2005/11/25(金) 22:26:16
>>445
> String#index などと クラス名#なんとかという表記が文献に
> 出てくるのですが、この#はどういう意味でしょうか?

インスタンスメソッドを意味します。
Smalltalkで使用されていた(出力用の?)表現だったと
思いますが、昔のことなのではっきり覚えていません。

Smalltalkでは、シンボルを #indexのように表記するので
それと関係があるのかも?
463デフォルトの名無しさん:2005/11/25(金) 22:29:15
なにかRuby的に意味があるわけじゃないんだよな。表記上の趣味みたいなもんだ。
本当は実際のコード表記法との乖離という点で今の時代極めて好ましくないんだが、誰も強く言えなかった模様。
464デフォルトの名無しさん:2005/11/25(金) 23:15:13
クラスメソッドとはまた別物ですか?
465464:2005/11/25(金) 23:18:20
あっ、そうか。
クラスメソッドと区別するために用いられている表現か
466デフォルトの名無しさん:2005/11/26(土) 00:46:10
インスタンスメソッドとクラスメソッドってどう違うの?
クラスメソッドはクラス内に定義されてるメソッドの事だと思うんだけど、
インスタンスメソッドって何?
467デフォルトの名無しさん:2005/11/26(土) 00:52:24
>>466
インスタンス化しないと使えないメソッド=インスタンスメソッド
クラス名.メソッド名 の形で呼び出せるメソッド=クラスメソッド
468デフォルトの名無しさん:2005/11/26(土) 01:23:54
わかりやすく言うとクラスクラスのインスタンスの特異メソッドがクラスメソッド。
469デフォルトの名無しさん:2005/11/26(土) 02:35:07
おまいらここ嫁

ttp://i.loveruby.net/ja/rhg/book/
470デフォルトの名無しさん:2005/11/26(土) 03:06:24
嫌です
471デフォルトの名無しさん:2005/11/26(土) 03:19:04
_∠コ     __[★ ]
     < ≡>    <`д´>
     r´ ̄ハ    r´  ハ
     ∪=i∪∧ ∧∪=i∪
     丿八ゝ∩`Д´∩ヽゝ、
     と´) し' \`⌒ く し'
           (⌒)--(⌒) >>470
          \ 丶 ヽ\丶\
472デフォルトの名無しさん:2005/11/26(土) 04:03:56
>>463
では、実際のコード表記法と乖離しない表記法とは?
473デフォルトの名無しさん:2005/11/26(土) 10:46:59
String.index

に決まってるだろ
474デフォルトの名無しさん:2005/11/26(土) 11:03:49
あふぉばkっか
475デフォルトの名無しさん:2005/11/26(土) 11:05:05
String:index

にでもしとけ
476デフォルトの名無しさん:2005/11/26(土) 12:06:36
aString.index というキモい記法を提案してみる
477デフォルトの名無しさん:2005/11/26(土) 12:08:47
クラスメソッドの方の表記を変えるべきだったのでは?
478デフォルトの名無しさん:2005/11/26(土) 13:19:04
luaの方がわかりやすいし速いし小さい
479デフォルトの名無しさん:2005/11/26(土) 14:50:36
判りやすさよりも記述量を減らす事を目指した=ruby
その逆=java
480デフォルトの名無しさん:2005/11/26(土) 17:58:52
>>479
詳しく
481デフォルトの名無しさん:2005/11/27(日) 00:37:53
"#{$1}" とか "#{$2}" とかってかかないといけない場合があるけど、
これを素直に "$1", "$2" と書けない所が変態言語。
482デフォルトの名無しさん:2005/11/27(日) 00:42:47
アフォですか?
483デフォルトの名無しさん:2005/11/27(日) 01:13:00
#$1
484デフォルトの名無しさん:2005/11/27(日) 02:21:37
オブジェクトと変数について質問させて下さい。

str = "foo\n"
$_ = str
chop # => 意味 $_ = "foo", str = "foo\n"
$_ = str
chop! # => 意味  $_ = "foo", str = "foo"

となりますが、$_ も str も同一の "foo\n" オブジェクトを指しているはず
なので、どちらの例も $_とstrがともに "foo" になると思うのですが、
前者はchopされた時に $_ にcloneが呼ばれてそれの\nが削除される
のでしょうか?
485デフォルトの名無しさん:2005/11/27(日) 02:40:13
http://ruby-lang.org/ja/man/index.cgi?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%B4%D8%BF%F4#chop
> chop は $_ の値をコピーして、コピーの方を更新し、 $_ に再代入します。

ということです
486484:2005/11/27(日) 02:44:52
よく分かりました。ありがとうございました。
487デフォルトの名無しさん:2005/11/27(日) 02:45:10
chopは非破壊操作。
つまりオブジェクトを複製し、それに対して加工した結果をデフォルト変数$_に束縛する。
>$_ も str も同一の "foo\n" オブジェクトを指しているはず
つまりchopの呼び出しでこの前提が成り立たなくなる。また、
$_ = str
は変数strの参照$_を渡しているだけ。
よってchopが呼び出された後、元のオブジェクトはstrのみに束縛された状態になる。
この辺をきちんと理解したいなら意味論がしっかりした他の言語で勉強した方がいい。
Rubyは無茶苦茶。
488デフォルトの名無しさん:2005/11/27(日) 02:50:49
無茶苦茶というか、いいかげんなとこ多いよな。
マニュアルとか。
489デフォルトの名無しさん:2005/11/27(日) 04:23:07
>>462
確かに Smalltalk 界隈では String >> indexOf: か String >> #indexOf: を使います。
しかし Smalltalk システム自身による出力も含め、前者が圧倒的にメジャーなので、
Ruby の # とは関係ないような……。

ちなみに後者は、セレクタ(メソッド名)の実体がシンボルであることを受けてと、
実際にメソッドオブジェクト(メソッドの実体。バイトコード)にアクセスする
際に、メソッド名を表わすシンボルを使うことを意識しての表記です。
(426 のおっしゃるとおり、Smalltalk ではシンボルのリテラル表記に # を使います)

例: String compiledMethodAt: #indexOf:

さらに余談ですが、処理系によっては(例えば Squeak システム)#compiledMethodAt: の
エイリアスに #>> をメソッドとして定義してあるものもあるので、String >> #indexOf: が
そのまま評価できたりもします。

で、Ruby の# ですが、私は Java のローカルルールからきたものと思っていました。

http://javafaq.jp/S004.html#S004-07

ただ、このローカルルール自体の出自はわからないので、もしかしたら Smalltalk の
件の表記も一枚かんでいるかもしれません。
490デフォルトの名無しさん:2005/11/27(日) 10:53:47
俺はjavadocが吐き出したHTMLのURLからとったのかと思ってた
491デフォルトの名無しさん:2005/11/27(日) 11:51:45
[1,2,3,4,5,6,7].each do |i|
 skip_until i > 5
 p i #=> 6, 7
end

みたいな感じでさくっとかけないですか。flag使わないで。
492デフォルトの名無しさん:2005/11/27(日) 11:57:39
そういうの自力で作っちゃったほうが楽っぽい気もしなくもなく
へなちょこ自作のオーバーヘッドってそんなにもあるもんかね
493デフォルトの名無しさん:2005/11/27(日) 12:02:32
最初の i > 5 なのだけ選り分ければ?
494491:2005/11/27(日) 12:07:45
実際には100万行くらいあるファイルから読み込んで一行ずつ
処理するんですけど、処理中にブレーカーが落ちて
やり直しになってしまったのです(´・ω・`)ガッカリ・・・

読み終わった部分はやり直す必要ないので
処理が飛ばせるならラクチンかなと。

中断させた処理を、途中から再開させることってよくあるので
簡単な書き方があるなら知っておきたいなと思って質問しました。
495デフォルトの名無しさん:2005/11/27(日) 13:14:27
[1,2,3,4,5,6,7].each{|i| next if i <= 5; p i }
でいいんじゃねえの?
496デフォルトの名無しさん:2005/11/27(日) 15:35:06
例のあげ方が悪かったです。こんな感じにしたいということで。

[1,2,3,4,5,6,7,1,2,3].each do |i|
 skip_until i > 5
 p i #=> 6, 7, 1, 2, 3
end
497デフォルトの名無しさん:2005/11/27(日) 15:41:59
>>496
> 例のあげ方が悪かったです。こんな感じにしたいということで。
>
> [1,2,3,4,5,6,7,1,2,3].each do |i|
>  skip_until i > 5
>  p i #=> 6, 7, 1, 2, 3
> end

[1,2,3,4,5,6,7,1,2,3].each do |i|
next unless i > 5 .. false

p i
end

6
7
1
2
3
498デフォルトの名無しさん:2005/11/27(日) 16:56:10
>>497
( ・∀・)つ〃∩ ヘェーヘェーヘェーヘェーヘェー
条件式に範囲式使えるんだねぇ。勉強になった。

> 条件式として範囲式が用いられた場合には、式1が真になるまでは偽を返し、
> その後は式2が真を返すまでは真を返します。式2が真になれば状態は偽に
> 戻ります。..は式1が真になった時にすぐに式2を評価し(awkのように)、 ... は
> 次の評価まで式2を評価しません(sedのように)。
499デフォルトの名無しさん:2005/11/27(日) 17:05:10
これが驚き最小の実装というやつか
500デフォルトの名無しさん:2005/11/27(日) 17:18:53
IPSocket のソースはどこでつか? 
501デフォルトの名無しさん:2005/11/27(日) 17:39:27
>>500
ext/socket/socket.c
502デフォルトの名無しさん:2005/11/28(月) 00:58:01
["a", "b"]は配列を表しますが、(1, 2)はrubyでは何を表しますか?
503デフォルトの名無しさん:2005/11/28(月) 01:07:06
引数リストとか多重代入やブロック引数でのグルーピングとか
504デフォルトの名無しさん:2005/11/28(月) 22:35:10
(p - 1 .. n - 1).inject(0) do |s, i|
s + comb1(i, p - 1)

というのをeachを使うとどうなりますか??
505デフォルトの名無しさん:2005/11/28(月) 22:39:26
>>504
doに対応するendがないのでそもそも動かない。が正解。

res = 0
(p - 1 .. n - 1).each do |i|
res += comb1(i, p - 1)
end
res

宿題は宿題スレで。

506デフォルトの名無しさん:2005/11/28(月) 23:17:08
>>505
>>504です、すみませんorz
しかしお陰で出来ました。ありがとうございますm(__)m
507デフォルトの名無しさん:2005/11/28(月) 23:37:55
Rubyの宿題も出るのかな。なんとなく嬉しいことだね。

知ってる高校生の子が高校の情報の授業で
POV-RAY使ってたりとかして、意外と高度なことを
やってるのかなーとか思ったり思わなかったり。
508デフォルトの名無しさん:2005/11/29(火) 01:54:17
しかし宿題でinjectなんて使うんだね
状態遷移ネタとして、むしろ使われやすいのかな
509デフォルトの名無しさん:2005/11/29(火) 02:25:16
succは何の単語の略なの?
510デフォルトの名無しさん:2005/11/29(火) 03:13:11
>>509
successor。由来は「自然数 successor」とかでぐぐると吉。
511デフォルトの名無しさん:2005/11/29(火) 09:28:13
Rubyって何の教科で使われるんだろう
教育用ならCかJAVAの方がいいと思うんだけどな
何がどうなってどう、ってのは動いてるかRubyじゃわかりにくいと思うが
512デフォルトの名無しさん:2005/11/29(火) 10:05:07
>>511
はいはい、そうですね
513504:2005/11/29(火) 11:09:55
うち(大学)は教養の情報処理でやってます。
専門でCやJAVAなどやる予定です。
514デフォルトの名無しさん:2005/11/29(火) 11:32:49
>>511
Cは分かるがJavaが教育用に向いていると思えるのはどういうわけだ
何がどうなってどう、ってのが死ぬほどわかりにくい言語だぞアレ

>>513
あえてRubyを教養に持ってくるという選択がすごい
515デフォルトの名無しさん:2005/11/29(火) 11:54:40
教養課程なら、ちょちょいと書いてちょちょいと動く言語が向いてるのかもな。
516デフォルトの名無しさん:2005/11/29(火) 14:30:17
>>514
ヒント:実務重視
ヒント:学習性

教育用なら今更だがPascalみたいに厳格な方がいいと思うけどね。
楽な言語で始めると後で修正に苦労する。
517デフォルトの名無しさん:2005/11/29(火) 14:49:16
RubyForge surpasses 1,000 hosted projects
http://programming.newsforge.com/print.pl?sid=05/11/23/1638201
518デフォルトの名無しさん:2005/11/29(火) 14:53:35
じつむじゅうしいいいいいい?
学校で習うようなJavaのどこに実務性があるんだい?
C知ってるほうがよっぽどJava実務に役立つわい
519デフォルトの名無しさん:2005/11/29(火) 14:58:42
やっぱLispだろ。Lispしかないよな。
520デフォルトの名無しさん:2005/11/29(火) 15:08:33
将来コンピュータにいくらかでも携わる学生さん向けの教養科目としてのLisp最高。
もしかしたら1人くらいは常用するほどハマッてくれるかもしれないし。
521デフォルトの名無しさん:2005/11/29(火) 15:39:38
うちの高校の商業科はCOBOL必修だったなそういえば
522デフォルトの名無しさん:2005/11/29(火) 16:14:15
Rubyはなぜか時々、なんとなくObjective Lispに見える。
523デフォルトの名無しさん:2005/11/29(火) 16:35:56
うちはFortranだったな。
524デフォルトの名無しさん:2005/11/29(火) 16:45:17
Fortranは過去の資産流用して数値計算するのは楽だからな。
3年や4年で数値計算するような学部はとりあえずFortranやっとけという感じなんだろう。
525デフォルトの名無しさん:2005/11/29(火) 16:49:03
将来プログラマーになろうかとか人生投げてる学生の人は
Lispをさらっと学んでおくと他の言語でも変なプログラム書く確率が減るかもしれない。
526デフォルトの名無しさん:2005/11/29(火) 23:06:21
Scheme か elisp の関数一覧表みたいなリファレンスマニュアルの HP ないの?

……ってスレ違いだな。
527デフォルトの名無しさん:2005/11/30(水) 01:16:01
>>526
そのelispの関数一覧表みたいなリファレンスマニュアルのHPってどこにあるの?
同じくスレ違いだけど。
528デフォルトの名無しさん:2005/11/30(水) 03:16:42
>>527
http://www.python.jp/doc/release/lib/genindex.html
とか。いやまぁ、極端な例だけど。

多くの OOP はルートが1つなので樹系図的で、
クラス毎(≒機能毎)にメンバが揃ってるし、継承も追いやすくて分かりやすい。
lisp のマニュアルは、なんか分散しまくってて疲れまくった記憶があったんで。
ひょっとして、使いやすいオンライン・マニュアルってある?
529デフォルトの名無しさん:2005/11/30(水) 03:18:24
>>528
elispのはどこ???

Rubyなら ri とか refe とか
530デフォルトの名無しさん:2005/11/30(水) 06:21:22
>>529
いや、だから俺が訊いてたんだけど……あれ?

「elisp の関数一覧表〜」ではなくて、「elisp の、関数一覧表〜」
「elisp には他の言語にある様な関数一覧表〜」って意味だったんだけど。
ごめん、分かり難かったですね。
531デフォルトの名無しさん:2005/11/30(水) 09:43:28
>>517
凄いね、Rubyはいつの間にか世界標準になりつつある
まあそれRORのお陰なんだろうけど
532名無しさん@Linuxザウルス:2005/12/01(木) 12:48:43
iconvってどうなん?
へんなコードあるとすぐおちるんだけど
533デフォルトの名無しさん:2005/12/01(木) 15:21:27
それはlibiconvのせいじゃないか?
534デフォルトの名無しさん:2005/12/01(木) 15:56:26
iconvファミリの仕様はクソ。
535デフォルトの名無しさん:2005/12/01(木) 16:11:49
PHP の mb_* に比べればマシ
536デフォルトの名無しさん:2005/12/01(木) 16:27:59
DateTime.now で得られる日付+時刻データ↓を

   2005-12-01T16:21:43+0900

2005 ⇒ 05にして、末尾の時差”+0900”を取り除いて↓

   05-12-01T16:21:43

最後に数字以外の文字(”-” ”T” ”:”)を取り除きたいです。

   051201162143

こんな↓感じにしましたが、もっとスマートな方法はありますでしょうか?

date = DateTime.now        # 2005-12-01T16:21:43+0900

date1 = date.to_s              # 05-12-01T16:21:43+0900
date2 = date1[2..18]          # 
date3 = date2.delete('T:-')  # 051201162143
537デフォルトの名無しさん:2005/12/01(木) 16:29:01
すみません、コメントを間違えてました。
こう↓です。

date = DateTime.now        # 2005-12-01T16:21:43+0900

date1 = date.to_s              # 
date2 = date1[2..18]          # 05-12-01T16:21:43+0900
date3 = date2.delete('T:-')  # 051201162143
538デフォルトの名無しさん:2005/12/01(木) 16:32:54
strftime('%y%m%d%H%M%S')
539デフォルトの名無しさん:2005/12/01(木) 17:16:51
DateTime.now.gsub(/(^20|\+0900|-|T|:)/, '')
540デフォルトの名無しさん:2005/12/01(木) 17:17:14
>>538
サンクス。
むちゃむちゃ簡単だ。。orz
541デフォルトの名無しさん:2005/12/01(木) 17:21:37
>>539
あっ、そんなんもあるんだ。
ありがとう。
542デフォルトの名無しさん:2005/12/01(木) 23:34:26
RDTとか、RDEってhikiのプラグイン作りとかに使える?
そういう用途では駄目かね?winのapacheと連携とかは難しい???
543デフォルトの名無しさん:2005/12/02(金) 19:41:04
あるmoduleのなかに格納されているクラス名をすべて取得する手段って、なにかありますですか?
544デフォルトの名無しさん:2005/12/02(金) 20:06:39
Foo.constancts.find_all{|x| Foo.const_get(x).kind_of?(Class)}

こんなのしか思いつかなかった。(Fooはモジュール名)
545デフォルトの名無しさん:2005/12/02(金) 20:27:21
>544
ありがとう!

↓の文章で「定数」しか表せないのかと勘違いしてたっ。
http://www.ruby-lang.org/ja/man/?cmd=view;name=Module#Module.2econstants
546デフォルトの名無しさん:2005/12/02(金) 20:32:40
定数だよ。
547デフォルトの名無しさん:2005/12/02(金) 20:42:33
>>546
>定数だよ。

........。

はぁっ!

orz       ありがとうございました。。。
548デフォルトの名無しさん:2005/12/02(金) 23:08:06
REXMLってどうなん?
utf-8問題なく扱える?
549デフォルトの名無しさん:2005/12/03(土) 00:33:08
>>548
UTF-8 は問題ないっしょ。どこかでマズイという話があった?
550デフォルトの名無しさん:2005/12/03(土) 00:57:39
むしろUTF-8以外が問題無く扱えない
551デフォルトの名無しさん:2005/12/03(土) 02:32:31
メールで送る時とか氏ねるね。
552デフォルトの名無しさん:2005/12/03(土) 11:06:00
>>551
ナニをメールで送るの?
553デフォルトの名無しさん:2005/12/03(土) 15:26:04
utf8で処理した文字列。
554デフォルトの名無しさん:2005/12/03(土) 16:08:45
>553
UTF-7にすれば(ry
555デフォルトの名無しさん:2005/12/04(日) 00:08:30
PerlでHTML::Templateを使ってるやつをRubyに移植したいのですが
対応するモジュールはありますか?
556デフォルトの名無しさん:2005/12/04(日) 01:19:55
>>555
Web::Templateだったかな。
「ruby HTML::Template」で検索してみたら?
557デフォルトの名無しさん:2005/12/04(日) 02:21:30
>>554
まあ上位1ビット削ればメール自体は通るけどね。文字化けはするけど電話でもして内容訊けばいい話。
558デフォルトの名無しさん:2005/12/04(日) 19:46:00
private や protected の仕様はC++といっしょにしてほしかった
わかりにくいよ
559322:2005/12/04(日) 21:45:57
質問スレい書き込んだらここに行け、と言われたからここに来たのですが・・・
560デフォルトの名無しさん:2005/12/04(日) 23:20:31
>>559
>>322
基本的には同じ
561デフォルトの名無しさん:2005/12/04(日) 23:35:40
というか、「区別がつかない」はずがない。

 「 { } を使うべき場所なのか do - end を使うべき場所なのか区別しにくくて困ってます」

という質問だというのなら気持ちはわからなくもないけれど。
562デフォルトの名無しさん:2005/12/05(月) 00:22:52
>>559
どこの質スレに書き込んだんだ?
とりあえず、優先度が違った筈。
あと、OneLine で済ませたい時などは { ... } が好まれる場合が多い。

そんな感じ?
563555:2005/12/05(月) 01:30:05
>>556
ありがと。Web::Template調べてみます。
564デフォルトの名無しさん:2005/12/05(月) 04:27:19
do end なら使えるが
{ } が使えない場所があります
565デフォルトの名無しさん:2005/12/05(月) 07:34:11
「解釈が違う」じゃなくて、do end しか使えないってケースがあるの?

もしかして while とかの省略可能な do の話?それなら do end とは別モノだ。

566デフォルトの名無しさん:2005/12/05(月) 09:14:26
今更誤爆だったなんて言い出せない……
567デフォルトの名無しさん:2005/12/05(月) 11:56:23
>>555
ttp://2lbox.org/?group=20

--- 以下引用 ---
FrogBoard Ruby版用につくったPerl HTML::Template互換
HTMLテンプレートモジュール。

対応タグ
<TMPL_VAR>
<TMPL_IF>
<TMPL_UNLESS>
<TMPL_LOOP>
<TMPL_INCLUDE>
568デフォルトの名無しさん:2005/12/05(月) 22:39:10
変数名の前に”:”がついているのをよく見かける(特にattrの後)のですが、
これは普通の変数とは違うのでしょうか?

attr :val1, :val2
569デフォルトの名無しさん:2005/12/05(月) 23:05:01
シンボルです。変数ではありません。
570デフォルトの名無しさん:2005/12/06(火) 08:54:23
>>569
ありがとうございます。
ということは値を代入することはできないと、理解してよろしいでしょうか?
571デフォルトの名無しさん:2005/12/06(火) 09:47:26
シンボルは値なので、 1 = 10 とかいった代入ができないように、もちろん代
入もできない。というかそういうモノではない。

シンボルは一種の文字列と考えるといいと思う。
ただし、コンパイル時に数値に変換されている。だから比較はメチャ速いけど
文字列として弄ることはできない、という感じで理解すればいいんじゃないかな。
572デフォルトの名無しさん:2005/12/06(火) 11:49:49
全然使い所が思い付かんw
573名無しさん@Linuxザウルス:2005/12/06(火) 12:33:37
文字列の最初のn文字列(byteではなく)を得るにはどーしやらよかとでしか?
574デフォルトの名無しさん:2005/12/06(火) 12:43:20
>>573
例えばこんなのはいかが?

s = "あいうえおかきくけこ"
x = /^.{5}/e.match( s ).to_s
puts( x )

s = "あいうえおかきくけこ"
x = s.scan( /^.{5}/e ).first
puts( x )
575デフォルトの名無しさん:2005/12/06(火) 12:44:58
>>574
1つ書き忘れました。正規表現の直後の"e"はEUC-JPの場合です。
漢字コードに合わせてsとかuに変えてくださいね。
576デフォルトの名無しさん:2005/12/06(火) 13:08:20
KCODEが指定されていれば split(//) するのが楽かな。

$KCODE='e'
s = "あいうえおかきくけこ"
puts s.split(//)[5]
577デフォルトの名無しさん:2005/12/06(火) 13:15:04
>>572
ハッシュのキーに使うとか
578デフォルトの名無しさん:2005/12/06(火) 13:33:46
アセンブラでラベル(=シンボル)というのがありました
それを参考に作られたようなもんです

C の #define みたいなもんです

switchで使うと速いとか
579デフォルトの名無しさん:2005/12/06(火) 13:50:05
>アセンブラでラベル(=シンボル)というのがありました
>それを参考に作られたようなもんです
さすがにそれはないだろ

>C の #define みたいなもんです
むしろenumだと思う
580デフォルトの名無しさん:2005/12/06(火) 14:45:50
名前はSmalltalkやLispのシンボルからだけど、
その正体はCのenumって感じだね。>Rubyのシンボル
文字列と可換なわけでもなく、値を束縛できるわけでもなく…
581デフォルトの名無しさん:2005/12/06(火) 14:51:12
>>571
ありがとうございます。
なんとなく理解できました。
582デフォルトの名無しさん:2005/12/06(火) 14:54:22
ということはひょっとして、

val = 3;
if (val==:val) ・・・

たまたま、:valが”3”に変換されて、このif文が正になることがあるのでしょうか?
583デフォルトの名無しさん:2005/12/06(火) 15:12:02
ありえない。

「数値」という説明は便宜的なものにすぎない。もちろん Ruby 内部では数値
化されて管理されているけれど、 Ruby レベルの「3」という値も、 Ruby 内
部でそのまま利用するわけでなく、値が重ならないように適宜管理されている。
したがって 582 のような状況は絶対に起こらない。

詳しくはRHGの最初の方に書いてあるよ。
584デフォルトの名無しさん:2005/12/06(火) 15:12:07
>>582
「if( val.to_i == :val.to_i )」ならあり得るかも。
「if( val == :val )」ならクラスが違うので一致しないのでは?
整数に変換して比較すると決まってるわけでもない(はず)だし。
585デフォルトの名無しさん:2005/12/06(火) 15:23:35
>>577
ありがとうございます。
なんとなく理解できました。
586デフォルトの名無しさん:2005/12/06(火) 15:55:39
>>583
>>584
了解。
普通に使う分には問題なしね。
587デフォルトの名無しさん:2005/12/06(火) 19:08:28
588555:2005/12/06(火) 22:44:04
>>567
これいいですね。こっちに乗り換えます。
ループの中で最初と最後を判別できる機能が便利そう。
589デフォルトの名無しさん:2005/12/07(水) 10:02:53
>>574
s.slice(/\A.{5}/m)
s[/\A.{5}/m]
590デフォルトの名無しさん:2005/12/07(水) 11:13:49
ユニコード(UTF?)の文字列をシフトジスに変換するには、どのようにすればいいでしょうか?
591デフォルトの名無しさん:2005/12/07(水) 11:33:12
>>590
kcode.rb を使うのが一番オーソドックスな方法
592デフォルトの名無しさん:2005/12/07(水) 11:33:35
>>591
ありがとう。
593デフォルトの名無しさん:2005/12/07(水) 14:42:09
シフトジスってなんかジンマシン出そう
594デフォルトの名無しさん:2005/12/07(水) 14:50:08
よしさっそくこの特効薬UTF-8で
595デフォルトの名無しさん:2005/12/07(水) 15:09:17
いけね、間違えてUTF-7打っちゃった
596デフォルトの名無しさん:2005/12/08(木) 19:18:56
Array を一段階だけ平滑化する関数は
(flatten が再帰的じゃないバージョン)
はないでしょうか?
597デフォルトの名無しさん:2005/12/08(木) 19:44:53
ない。

flatten に引数つけて再帰しないバージョンを選べるように(あるいは最大深さを指定)
みたいな案が出たけどそのI/Fはどうかみたいな理由で却下されたような記憶が
598デフォルトの名無しさん:2005/12/08(木) 20:16:03
本スレが新スレ突入

Rubyについて Part 18
http://pc8.2ch.net/test/read.cgi/tech/1133988248/
599デフォルトの名無しさん:2005/12/08(木) 22:55:55
いじってるスクリプトが, 普通に起動すると文字化けして
-r debug で起動すると文字化けしないんですが,
なんでだろう...?
600デフォルトの名無しさん:2005/12/08(木) 23:19:10
おーい、エスパーの出番だよ〜
601デフォルトの名無しさん:2005/12/09(金) 00:50:53
>>596

p [1,[2,[3,[4,5]]]].inject([]) {|r,v| Array === v ? r.push(*v) : r.push(v)}

[1, 2, [3, [4, 5]]]
602デフォルトの名無しさん:2005/12/09(金) 00:53:37
可能かどうかとゆー話をしてるわけでもないような希ガス
603デフォルトの名無しさん:2005/12/09(金) 01:22:18
>>599
その現象を再現できてなるべく短かいスクリプトを作って、
ここに出してみると誰か分かるかも。
604デフォルトの名無しさん:2005/12/09(金) 06:47:37
たとえばこんな感じなんですが...orz


#!/Usr/bin/ruby -Ku

require "curses"
include Curses

init_screen
begin
crmode

setpos(1, 1)
addstr ("日本語")

refresh

getch
ensure
close_screen
end
605デフォルトの名無しさん:2005/12/09(金) 07:57:17
> require "curses"
め、面倒な
606デフォルトの名無しさん:2005/12/09(金) 09:14:28
やっぱりエスパーの出番だよー
607デフォルトの名無しさん:2005/12/09(金) 09:58:59
俺、エスパーになろうかな。
最近は引く手数多で一生食い扶持に困らんだろうて。
608デフォルトの名無しさん:2005/12/09(金) 10:09:13
エスパー伊東も今どこかで活躍してるのかな?
609デフォルトの名無しさん:2005/12/09(金) 11:46:15
>>604
そのスクリプトはUTF-8になってるとして、
実行環境はどうなってますか?
OSは?
xterm、krxvt、mlterm、その他の端末環境で?
LANGの設定は?
610デフォルトの名無しさん:2005/12/09(金) 12:47:19
伊東さんはとっくの昔にエスパー廃業宣言しちゃったよ
611デフォルトの名無しさん:2005/12/09(金) 14:40:46
>>609
バカですまん. こんな風になっとります

ruby 1.8.3
MacOS X 10.4.3
LANG=ja_JP.UTF-8
TERM=xterm-color
Terminal.app 文字セットエンコーディング UTF-8
スクリプトのエンコーディング UTF-8
612デフォルトの名無しさん:2005/12/09(金) 18:01:17
http://www.ebookoff.co.jp/ebhtml/cam_2005satei/index.html
にアクセスしようとして、以下のようなプログラムを組んだのですが
timeout.rb:42:in `rbuf_fill': execution expired (TimeOut::Error)
というエラーになってしまいます。

require 'net/http'
Net::HTTP.version_1_2

Net::HTTP.start( "www.ebookoff.co.jp", 80 ){ |http|
p http.get( "/ebhtml/cam_2005satei/index.html" )
}


ブラウザからhttp://www.ebookoff.co.jp/ebhtml/cam_2005satei/index.htmlに
アクセスした場合は正常に表示されるのですが、何が原因なのでしょうか?
ちなみにebookoff.co.jp以外だと、rubyからでもアクセスできます。

613デフォルトの名無しさん:2005/12/09(金) 18:02:31
えっ!2cnに大量殺人予告?!!
http://aa5.2ch.net/test/read.cgi/nida/1130995497/
詳細は、ここをクリック↑しる
614デフォルトの名無しさん:2005/12/09(金) 19:05:53
# 止まる
$ wget http://www.ebookoff.co.jp/

# 動く
$ wget --user-agent=Mozilla http://www.ebookoff.co.jp/

USER_AGENT 見て拒絶してるらしい

615デフォルトの名無しさん:2005/12/09(金) 22:06:02
何もわからない迷惑な素人さんお断りってとこかな
616デフォルトの名無しさん:2005/12/09(金) 22:57:44
携帯からのアクセスを振りわけるためではないか?
その上で、JavaScriptのテストができてるブラウザだけ許可とか。
617612 :2005/12/10(土) 00:48:48
なるほど、rubyの問題ではなくサーバー?側の設定ということですね。
ありがとうございまししした。
618デフォルトの名無しさん:2005/12/10(土) 02:03:03
rubyでhttpクライアントを作ろうと思っているのですが、
クライアント側からみたcookieの扱い方についてかいてあるサイトを知っていれば教えてください。
619デフォルトの名無しさん:2005/12/10(土) 02:23:15
>618
ttp://www.ietf.org/rfc/rfc2965.txt
不足ならぐぐるさんにでも聞くがよろし。
620デフォルトの名無しさん:2005/12/10(土) 14:27:40
Windowsで、見た目がExcelのようなCSVエディタを作りたいのですが
visualuRubyではどんなクラスを使えば作りやすいですか?
それとも罫線引いたりは自作しないとダメですか?

621デフォルトの名無しさん:2005/12/10(土) 15:05:34
622デフォルトの名無しさん:2005/12/10(土) 15:07:40
>>618
この講義資料がとても参考になったよ。
http://www.soi.wide.ad.jp/class/20040031/slides/10/72.html

「安全なWebアプリ開発の鉄則 2004 - 高木 浩光」:
http://www.soi.wide.ad.jp/class/20040031/slides/09/
623620:2005/12/10(土) 15:31:27
>>621
そうです。
624デフォルトの名無しさん:2005/12/10(土) 21:11:11
ああ、適当な俺でも普段から覚えられそうな inject の使い道わかったよ…

配列成分をくっつけてでっかい文字列にしたいときに配列に対して使えばできるな。
625デフォルトの名無しさん:2005/12/10(土) 23:52:11
array.map{|e| ... }.join
626デフォルトの名無しさん:2005/12/11(日) 08:13:10
log4jでパッケージ名を渡して特定パッケージ内だけログを出す
っていうような設定をlog4rでできますか?
627デフォルトの名無しさん:2005/12/14(水) 18:11:20
引数とかの区切りのカンマを省略できるようにはならないのかしら
628デフォルトの名無しさん:2005/12/14(水) 21:05:02
>>627
Hackすれば?
629デフォルトの名無しさん:2005/12/15(木) 02:02:29
>>627
Tcl使えば?
630デフォルトの名無しさん:2005/12/15(木) 18:50:12
rp, wp = IO.pipe
wp.puts "foo"
p rp.gets

この puts や gets を似たメソッドの write などに変更すると
止まってしまうのですが、どうしてでしょうか?
631デフォルトの名無しさん:2005/12/15(木) 19:13:35
変に日本語にせずに動かないものを晒しなさい
632デフォルトの名無しさん:2005/12/15(木) 19:14:15
またエスパーが必要?
gets も write に変えたわけじゃないよな?

具体的にどう変えたのかコードを出せよ。
まあ、write + gets で出力に改行文字がないとか、write + read で read に引数なしとかなんだろうけどな。
633デフォルトの名無しさん:2005/12/15(木) 20:48:08
>>632
改行の有無でした。ありがとう。
良く分からないけど、改行が何かの役割を持ってるのかな。
これはスレ違いですね。


もうひとつ質問です。
# main.rb
IO.popen('ruby ./sub.rb', 'w') do |io|
io.puts gets
end
# sub.rb
while true
puts gets
sleep 1
end

以上2つのスクリプトを用意して
$ ruby main.rb
foo
とすると、sub.rb の2ループ目以降は gets で待ち状態にならないのですが、どうしてでしょうか?
634デフォルトの名無しさん:2005/12/15(木) 21:00:59
main.rb の「io.puts gets」の行をコメントアウトした時の動作は納得できてますか?
635633:2005/12/15(木) 21:33:29
あまりできてないです。
裏方なので、標準入力を待たないで nil を受けてループが廻ってるという印象ですが。
というか、以前から gets で待ってくれること自体が不思議だなぁと。

標準入力からの入力を待つようなものとやり取りするには、どうすれば良いんだろ。
Process や Thread で待たせたり、reopen で再接続すればできるのだろうか。
ちと、暇潰しに学習してみます。誰か気が向いたら、ポインタ貰えると助かります。
636デフォルトの名無しさん:2005/12/16(金) 20:15:08
「地の文にだらだら書く」から、defでシェルスクリプトっぽくメソッドを作ることを覚えました。
が、引数リストがいちいちえっらい長くなるのが不満です。
スクリプトの最初に変数とか定数(なローカル変数)とかたくさん書いてるのも
なんか手法的に間違った方向を向いてる気もします。

#/usr/bin/ruby

val1="なんとか"
val2="かんとか"
val3="よいとか"
arr1=Array.new
   :   ←20個くらいある

hoge(val1,val2,val3,val4) ← これがなんかかっこ悪い
hage(val1,val5,mage(val2,val3),val6) ←入れ子とかやめたい


次は何を勉強すればきれいに書くようになると思われますか?
637デフォルトの名無しさん:2005/12/16(金) 20:18:13
メソッドの引数を自作クラスのインスタンスにするとかかな。
638デフォルトの名無しさん:2005/12/16(金) 20:35:08
でかいもんじゃなけりゃ、mainのインスタンス変数にするという手もある。
639デフォルトの名無しさん:2005/12/16(金) 20:51:09
コンソールアプリで、任意のキー入力でプログラム終了させたいのですが
どうすればよいのでしょう?
Enterを使わず、”[Q]で終了”って感じのことがしたいんです。
640636:2005/12/16(金) 21:00:17
>>637-638
ああ、そんな言葉は聞いたことが…インスタンスインスタンス…

 「タイ焼き(インスタンス)」

('A`)

でも、なんとなく勉強する先はわかった気がします。ありがとうです。
641デフォルトの名無しさん:2005/12/16(金) 21:04:59
オブジェクト指向を理解するにはアリストテレス的存在論から学ぶとわかりやすいですよ。
642デフォルトの名無しさん:2005/12/16(金) 21:23:04
プラトンのイデア論じゃないか?
643デフォルトの名無しさん:2005/12/16(金) 21:34:48
>>939
汎用的な方法はない。
というわけで、プラットフォームは何?
644デフォルトの名無しさん:2005/12/16(金) 23:12:18
エ、エスパ〜〜!
645デフォルトの名無しさん:2005/12/16(金) 23:14:40
伊藤??
646デフォルトの名無しさん:2005/12/16(金) 23:15:44
>>640
「次」はHashクラスとかでもいいかもよ。

オブジェクト指向なんてRuby使ってるうちにわかってくるんじゃないか?
はじめは勉強するより、コードを書いていろいろ試するほうがいいかも。
647デフォルトの名無しさん:2005/12/17(土) 07:35:39
ハッシュあたりは知ってると思うぞ(わからんがね)。

Rubyをシェルスクリプト的に書き捨て言語として使用してると虫食いのように残るのは
クラスやインスタンスの自作と活用の部分だから、きっとそこが足りないんだろう。

無理してそのへんに手を出さなくてもいいことも多いけど。コードを再利用しないなら尚更。
648デフォルトの名無しさん:2005/12/17(土) 08:02:54
>>636
自作スクリプトをるびまの添削に投稿してみるとか。
649デフォルトの名無しさん:2005/12/17(土) 11:31:30
みねのヤシが、シンプルだけど自己満足的難解な解答をだすよ
650デフォルトの名無しさん:2005/12/17(土) 13:05:06
パスワード等を入力するときに エコーしないようにしたいのですが、どのようにしたらよいでしょうか?
Perlの場合はTerm::ReadKey を使用していました。
651デフォルトの名無しさん:2005/12/17(土) 13:16:17
>>649
なるほどと思うところだけ参考にすりゃいいかと。
652639:2005/12/17(土) 16:05:05
>>643
> 汎用的な方法はない。
そっか。とりあえずそれを知りたかったのですっきりしました。

> というわけで、プラットフォームは何?
linux と cygwin で動かしたい。
653デフォルトの名無しさん:2005/12/17(土) 17:30:48
rubyの実行引数をファイル名として、そのファイルの5列目の要素をSetに入れたいんですが、
require 'set
set1 = Set::new(enum = nil)
for arg in ARGV
f = open(arg)
while line = f.gets
line2 = line.split(' ')
set1.add(line2[4])
end
f.close
end
と書くと、line2 = line.split(' ')のところでunterminated string meets end of fileになります。
ちなみに、文字コードはShift-JISです。 もしよければ、解決策を教えてください。
654デフォルトの名無しさん:2005/12/17(土) 17:59:04
>>636
クラスを定義してメソッドを覚えると、すくなくとも引数はいっこ減ります。
あとは柔軟に改行入れたり、コーディング規約にそった書き方してみると割と読みやすくなる。

http://shugo.net/ruby-codeconv/codeconv.html
655デフォルトの名無しさん:2005/12/17(土) 20:05:04
>>653
一行目の文字列が閉じてない
656デフォルトの名無しさん:2005/12/17(土) 21:15:34
色分けしてくれるエディタはあったほうがいいな。

っていうかエラーメッセージそんなにわかりにくいかしら。
657デフォルトの名無しさん:2005/12/17(土) 22:32:32
C言語のように文字列は改行をまたがない仕様ならすぐ原因がわかるんだろうけどなぁ。
まぁ色分けエディタあれば、こっちの仕様の方が便利なときが多いんだけどね。
658デフォルトの名無しさん:2005/12/18(日) 00:24:08
end class
end def
end if
end do.....
こういう文法ほしいなあ
659デフォルトの名無しさん:2005/12/18(日) 00:25:17
どれに対応するendかわかりにくいなら
end #class
end #def
end #if
end #do.....
とでも書いてろ。
660デフォルトの名無しさん:2005/12/18(日) 01:13:13
そのコメントが間違ってる罠
661デフォルトの名無しさん:2005/12/18(日) 01:21:46
>>658
ムリ。既存文法と衝突する。

i = 0
if i==0

end if

p i


↑これコンパイル通るからね。
662デフォルトの名無しさん:2005/12/18(日) 15:52:19
>>658
インデントして >>659 のように書く
インデントを自動調整してくれて色分けしてくれるエディタを使う
663デフォルトの名無しさん:2005/12/18(日) 16:03:02
ssalc
fed
fi
od
664デフォルトの名無しさん:2005/12/18(日) 17:06:09
>663
なにそのBシェル
665デフォルトの名無しさん:2005/12/18(日) 19:40:24
>>636
プログラム全体をクラスにすればよい。

# メインプログラムを表すクラス
class Main
 def initialize(val1, val2, val3)
  @val1 = val1
  @val2 = val2
  @val3 = val3
  @arr1 = Array.new
 end
 def hoge
  # @val1, @val2, @val3 を使う
  @val1 = ...
  @val2 = ...
  @val3 = ...
 end
 def execute
  hoge()
  hage()
  ....
 end
end

# メインプログラムを実行
if __FILE__ == $0
 main = Main.new("..", "..", "..")
 main.execute()
end
666デフォルトの名無しさん:2005/12/18(日) 22:21:48
大げさな感じがするのは修行が足らんからかな。
667デフォルトの名無しさん:2005/12/18(日) 22:22:18
「Rubyとして好ましいスクリプトの書き方」ってなんなんだろうね。
668デフォルトの名無しさん:2005/12/18(日) 22:29:59
mainっていう名前のオブジェクトを作るのってどうなの?無問題?
669デフォルトの名無しさん:2005/12/18(日) 23:13:50
mainっていう名前のオブジェクトってどうやって作るの?とチャチャ入れしてみる。
(変数名や定数名は、オブジェクト名じゃないから)
670デフォルトの名無しさん:2005/12/19(月) 00:04:16
>>666
クラスを作ること自体かなり大げさ(というか大ごと)だと思う。
複数人がメンテナンスするプロジェクトっぽい。

オブジェクト指向的に正しいクラス名とメソッド動作とはこの場合何ぞやとか
そういうことに悩まなくても
オブジェクト指向の便利なとこだけを利用できるのがRubyのいいとこだと思うし。
671デフォルトの名無しさん:2005/12/19(月) 00:26:56
665 のような書き方は必要性がないと思うが、クラスはそんなに大げさかな?
手続き的に書いてとっ散らかってきたら(構造の繰り返しが現れる)
トップレベルでメソッドを定義、
それでも読みにくい(共通して使う変数があるなど)ならクラスを導入してる。
経験上、コードが数十行を超えるとクラスが必要になってくるよ。
672デフォルトの名無しさん:2005/12/19(月) 00:44:18
関数的にさくっと作れるトップレベルのメソッドと違って
クラスを適当に作るのは若干の慣れが要るからなあ
673デフォルトの名無しさん:2005/12/19(月) 00:49:35
>>672
とにもかくにも作ってみないと慣れることもできませんので、
"クラスを作るとどうなるかな?"と思った時点でやってみるのが良いかと。
ぐだぐだの自己流のまま突き進んでしまうことさえなければ...。
674デフォルトの名無しさん:2005/12/19(月) 01:21:39
>>670

>>636
> 引数リストがいちいちえっらい長くなるのが不満です。
とかいてあるんだから、クラスを1つ作ってインスタンス変数を使えば
いちいち引数をいくつも渡す必要がなくなる。
それが >>665 だろ。
あとはグローバル変数をバリバリ使うか。

クラス作るのがいやなら、クラスを作らずに636の悩みを解決するようなプログラムを
670が示せ。
675デフォルトの名無しさん:2005/12/19(月) 01:52:18
>>670 の気持も分からないでもないが >>671 に圧倒的に同意だな。
クラスの生成くらいで腰が引けてちゃ問題アリだろ。OOP なんだから。
などと言いつつも、機会がなくて Ruby では Module や継承を使ったことがない俺。
676デフォルトの名無しさん:2005/12/19(月) 16:45:32
クラス定義なんてそんな大げさに考える必要ないよ。
作っておけばちょっと適用範囲の狭いグローバル変数が使える、
くらいの気持ちでとりあえずおk

慣れておけばあとから便利な道具を使って楽できるようになったりする
677デフォルトの名無しさん:2005/12/19(月) 19:03:34
越えてしまった壁は低く見えるの法則
678デフォルトの名無しさん:2005/12/19(月) 19:48:13
じゃ、はじめはこういうテンプレートに埋めてけ。
クラスが何かよくわからなくても、この程度は使えるだろ。
わからないままにこねくりまわすうちに、何か見えてくるかも。

class Hoge
 def initialize(argv)
 end
 def execute
#ここに処理を書く
 end
end

# メインプログラムを実行
if __FILE__ == $0
 hoge = Hoge.new(ARGV)
hoge.execute()
end

679デフォルトの名無しさん:2005/12/19(月) 20:58:16
それはなんかイヤーンな感じやね。
680デフォルトの名無しさん:2005/12/19(月) 22:21:20
つかまぁ、自分でどう書くのが「いや」かが分かっていれば、
いやでない方法をとにかく模索するのが大事なんじゃねーか?
少なくとも >>636 はいやなものは分かってるんだから。
周りがクラスだ大げさだ言う必要はねーだろ。
681デフォルトの名無しさん:2005/12/19(月) 22:27:25
>>636の話題引きずってる人なんてまだいたんだ。
クラスを作るかどうかの話題になってるんだと思ってたけど。
682デフォルトの名無しさん:2005/12/19(月) 23:02:05
作るかどうかなら作れ
大げさ?
思い込みだ、ばか
683デフォルトの名無しさん:2005/12/20(火) 10:34:25
はじめまして。
文字エンコードについての質問です。
ruby1.8.3,visualuruby,FormDesignerを使って勉強中です。

現在メモ帳(とりあえず、テキストファイルを開いて内容
をテキストフィールドに出力するのみ)を、他のサンプル
ソースを見ながら勉強しています。
メニューバーからFile->openを選択すると、ダイアログが
でてファイルを選択し、内容を見ることができるようには
なったのですが、そのファイルのエンコードによって文字
化けしてしまいます。エンコード形式が違っても、文字化
けせずに開くことはできないでしょうか?できるならヒン
トや方法を教えていただけませんか。

よろしくお願いします。
684デフォルトの名無しさん:2005/12/20(火) 11:16:30
>>683
メモ帳じゃなくてワードパッドで開いてみるとどうでしょう?
685デフォルトの名無しさん:2005/12/20(火) 11:18:54
>>683
メモ帳++でも萌ディタでもemacsでもxyzzyでも好きなの使って探してください。
686683:2005/12/20(火) 11:38:48
>684,685
レスありがとうございます。

すいません、”メモ帳”を作成しているという意味です。
687デフォルトの名無しさん:2005/12/20(火) 11:39:52
テラワロス
688デフォルトの名無しさん:2005/12/20(火) 11:46:22
>>686
なぁるほど。読み違えました...。
任意の文字コードのテキストファイルを文字化けせずに読みたいということなら、
nkf、iconv、uconvなど好みのライブラリで文字コードを識別・変換するような
処理を組み込めば良いかと。その"メモ帳"としてはshift JISを想定?
ファイルを保存する時は逆方向の変換を施すことになりますので、
開く時に識別した文字コードを記憶しておくことも必要でしょう。
ご健闘を!
689683:2005/12/20(火) 13:49:25
>>688
"conv"で色々調べてみたのですが、
すでに組み込まれているKconvを
使ってみることにしました。
結果として、うまく表示することが
でき、またひとつ勉強になりました。
ありがとうございました。

>>皆様へ
また質問があったときにお世話になる
ことかとおもいますが、よろしくお願
いします。
690デフォルトの名無しさん:2005/12/20(火) 14:25:05
>>689
>また質問があったときにお世話になる
>ことかとおもいますが、よろしくお願
>いします。

嫌です。
691683:2005/12/20(火) 14:41:17
では、もう致しません。ありがとうございました
692デフォルトの名無しさん:2005/12/20(火) 15:14:23
ごめん、馬鹿みたいなこと聞いてもいいか?
RDE使ってRubyいじってるんだけど、Tcl使えるようにするにはどうすればいいの?
Tcl Developer Siteから、TclとTkらしきものは落としたんだが。
693デフォルトの名無しさん:2005/12/20(火) 15:50:53
a[0]=TkButton.new
のように、配列でTkButtonを作ることはできないでしょうか?
何個もボタン作るときにfor文で作りたいし、
配列で管理したいんですが。
694デフォルトの名無しさん:2005/12/20(火) 15:58:02
短いテキスト処理関係のスクリプトが沢山公開されてるとこないでしょうか?
実例を見ながら勉強したいので。英語でもOKです。
695デフォルトの名無しさん:2005/12/20(火) 17:13:05
>>693
buttons = Array.new(10) {TkButton.new}
696デフォルトの名無しさん:2005/12/20(火) 17:38:56
eachの中で5番目、10番目、15番目…に別のことor追加のことをさせたいんですが、
中でカウンタ用変数を用意して5で割る条件分岐の他に方法があったりしますか?
回数が保存されてる組み込み変数は無いみたいなんですが。
697デフォルトの名無しさん:2005/12/20(火) 18:10:23
>>696
each_with_index
698デフォルトの名無しさん:2005/12/20(火) 19:04:30
>>697
をを
699デフォルトの名無しさん:2005/12/20(火) 20:49:54
いやん、配列のpopとshiftで1時間悩んだ。
「取り除いた値を返す」って取り除いた要素1個そのものが返るのね。
取り除いた後に残った配列がのコピーとかが直接返るわけじゃないのね。寝よ寝よ
700デフォルトの名無しさん:2005/12/20(火) 21:44:40
いい勉強したな
701デフォルトの名無しさん:2005/12/20(火) 22:25:14
正規表現で、/b/iと書いてあるところのbを変数として色々な値を入れたいのですが
どうすれば出来るのでしょうか?
702デフォルトの名無しさん:2005/12/20(火) 22:26:41
正規表現で/b/iのbを変数として色々な値を代入したいのですが、
どうやれば良いのでしょうか??
703デフォルトの名無しさん:2005/12/20(火) 22:28:49
2回すみません…
704デフォルトの名無しさん:2005/12/20(火) 22:39:19
つ式展開
705デフォルトの名無しさん:2005/12/20(火) 22:53:23
つ /#{b}/i
706デフォルトの名無しさん:2005/12/20(火) 23:19:02
>>705
サンクスです!
707デフォルトの名無しさん:2005/12/20(火) 23:25:09
require "tk"をするとtk83.dllがありませんと表示されるんですが、
DLする必要があるのですか?
DLするんだとしたらどこでDL出来るのか教えてください。。
708デフォルトの名無しさん:2005/12/20(火) 23:26:53
エスパーさん、まずは>>707の環境を教えて下さい
709デフォルトの名無しさん:2005/12/20(火) 23:28:23
俺エスパーだけど
ここはあえて放置
710デフォルトの名無しさん:2005/12/20(火) 23:29:23
>>708
失礼しましたorz
WinXP、ruby1.8.2 mswin32で、RDEを使ってます!
711エスパー:2005/12/20(火) 23:37:43
>>710
Debian SargeでRuby-1.8.3かな?
712デフォルトの名無しさん:2005/12/20(火) 23:42:13
Debian Sargeとはなんですか??orz
713デフォルトの名無しさん:2005/12/21(水) 00:53:08
Linuxとかでシェル操作してれば、popとshiftなんて直感的に分かるのになあ。

文字コードってまじめに遣ると氏ねるよ。
sjis=>utf=>sjisなんて変換して戻してみると文字化けしてたりコードが変わってる罠。
変換せずに処理する(非破壊処理)のが最強。
714デフォルトの名無しさん:2005/12/21(水) 01:29:51
linuxなんて使ってると氏ねるよ
715デフォルトの名無しさん:2005/12/21(水) 01:29:57
べつに pop も shift もそんな見ない気もするが。

あのへんはシチュエーションによっては直感的ではない。

 arr = ["test","60","75","80","100","80"]
 hash=Hash.new
 hash.store( arr[0], arr.pop )
 
 p hash["test"]

さてなんと表示されるでしょう、みたいな。
716デフォルトの名無しさん:2005/12/21(水) 01:47:46
あの辺はperlの猿真似だから
717デフォルトの名無しさん:2005/12/21(水) 02:00:32
pop や shift という名前ではなく car や cdr という名前にすれば間違えなかったのでは

と一瞬思ったが array.cdr が何を指してれば真っ当なのかよくわからなくなったのでやっぱ無し
718デフォルトの名無しさん:2005/12/21(水) 02:13:16
p [0, 1, 2].shift
もしくは、
$ ruby -e 'p [0, 1, 2].shift'
して終わりだな。一瞬で確認できる。

こういった所が、Ruby の大きな利点の一つだと思う。
719デフォルトの名無しさん:2005/12/21(水) 02:21:41
あれ、pop! やshift! でないのはなんかいわれでもあんのかね。
720デフォルトの名無しさん:2005/12/21(水) 02:24:52
つーかpopを使うのってふつーArrayをスタックとして利用する時だけじゃね?
その時はpush/pop/empty?くらいしか使わないから、先頭か末尾かなんて気にしないし。

意味的にスタックにプッシュじゃなくて配列に追加する時は<<を使う。
721デフォルトの名無しさん:2005/12/21(水) 02:26:11
>>719
pop! や shift! にする理由がわからないですぅ><
722デフォルトの名無しさん:2005/12/21(水) 02:39:09
popやshiftは昔からたいていの言語で「切り出し」の効果がある関数だから。
deleteとかと一緒で、単語自体に自明な破壊的意味がある。

という屁理屈はどうだろう

とりあえず>>715はpopの使い道間違ってたな。
リファンレンスの説明上では「使えそう」でスレ的にちと紛らわしいのは確かかも。
arr.slice(1,arr.size) が期待のものを直接返すけど、ちょっとカッコわるい?
723デフォルトの名無しさん:2005/12/21(水) 17:10:35
なるほど、確かに破壊的動作だったな。
`!' を付加する定義が良く分からないが、
非破壊的動作がある場合のみ `!' を付けて区別してるのだろうか。
他の言語はもっとグダグダだから、気にしたことなかった。
724デフォルトの名無しさん:2005/12/21(水) 18:00:57
てかpopとshiftってdelete_at(-1)とdelete_at(0)があれば要らなくね
725デフォルトの名無しさん:2005/12/21(水) 18:26:19
名前重要
726デフォルトの名無しさん:2005/12/21(水) 19:16:31
ヒューメイン・インタフェースってやつかしら。
727デフォルトの名無しさん:2005/12/21(水) 19:35:17
「1個削除したい」んじゃなくて「1個切り出して消費したい」って意図だからな。
返す値も動作で残った配列も同じだけれど、delete_atとpopやshiftは意図が違う。

だから、単に配列の最後を削除したいときにはpop使ったら駄目。紛らわしいから。
728デフォルトの名無しさん:2005/12/21(水) 21:59:03
>>694 にだれか答えてあげて。
ぐぐってみたけど、あまりよさそうなのは見つからんかった。

とりあえず、行番号をつけて表示するスクリプト:

i = 0
while line = gets()
 i += 1
 print("#{i}: #{line}")
end

#しょぼッ!
729デフォルトの名無しさん:2005/12/21(水) 22:23:08
んなスクリプト探す前に書いてしまった方が早いからな。。。
学習用なら一行野郎とかOneLinerとかでその都度ググればすむかと。
730デフォルトの名無しさん:2005/12/21(水) 22:26:34
クリップボードに、文字列 str をセットしたいんだけど、できないです。
vr/clipboard.rb が使えそうなんで見てみましたが、open( ) のカッコの中に
何を入れればいいのか分からないです。
もし、もっと簡単にやる方法があれば教えてください。
731デフォルトの名無しさん:2005/12/21(水) 22:33:18
エスパーさん、まずは>>730の環境を教えて下さい
732デフォルトの名無しさん:2005/12/21(水) 22:37:25
>>731
ActiveScriptRuby 1.8.2.5 です。
733デフォルトの名無しさん:2005/12/22(木) 00:00:16
730ですけど、できたので答えなくていいです。
734デフォルトの名無しさん:2005/12/22(木) 00:34:41
730ですけど、おなかが空きました。御飯下さい。
735デフォルトの名無しさん:2005/12/22(木) 00:40:20
>734
お前の兄貴は腹が減ったら自分でご飯を炊いたもんだぞ!!
736デフォルトの名無しさん:2005/12/22(木) 01:23:25
>>715
> さてなんと表示されるでしょう、みたいな。
この問題の意図が不明。なぜhash?何がどう直感的でないのか?
737デフォルトの名無しさん:2005/12/22(木) 01:23:37
730ですけど、兄貴より妹がいいです。
738デフォルトの名無しさん:2005/12/22(木) 08:45:18
>>715
俺の直感通り"80"が表示されたけど、お前の直感って何が表示されると思ったの?
739デフォルトの名無しさん:2005/12/22(木) 09:24:13
>>738
>>736さんおはよう
740デフォルトの名無しさん:2005/12/22(木) 09:31:15
>>723
どっかに、!をつける基準は同名のメソッドがあった場合に!がついてるほうがより破壊的って意味だと書いてあった希ガス。
!をつけるかつけないかは絶対的な基準(〜は破壊的)ではなく相対的な基準(〜の方が破壊的)だと思う。
741デフォルトの名無しさん:2005/12/22(木) 10:13:44
そうすると、pop!はどんな破壊をするのだろうか。
742デフォルトの名無しさん:2005/12/22(木) 12:09:30
pop! したら元のスタックが使えなくなっているかもしれない時。
743デフォルトの名無しさん:2005/12/22(木) 12:30:21
>>741
popしたスタックがpushされた状態に破壊される
744デフォルトの名無しさん:2005/12/22(木) 12:31:58
>>743
何をpushするんだろう...?
745デフォルトの名無しさん:2005/12/22(木) 14:42:24
なんでこのスレはネタ雑談ですらエスパーが必要なんだ?
746デフォルトの名無しさん:2005/12/22(木) 17:33:12
エスパーエスパーとうるさい阿呆が住み付いたから
まじウザい
747デフォルトの名無しさん:2005/12/22(木) 19:02:25
エスパーさんエスパーさん、>>746 はなんで機嫌悪いの?
748デフォルトの名無しさん:2005/12/22(木) 21:04:29
setname = GetTerm.get(ARGV[0])
tf2 = GetTerm.tf(name,setname)
idf2 = GetTerm.idf(setname,name,"50000")
p idf2

このプログラムでsyntax errorがおきます。このコードの中で間違ったところがあれば教えていただけませんか?
上記のクラスの定義はきっちりやっているつもりですが、もしかしたら不完全かもしれませんので、そちら側のミスということも考えられなくもないんですが、何度もチェックしているので・・・
749デフォルトの名無しさん:2005/12/22(木) 21:16:04
すみません。
p idf2
の行でエラーが起きます
750デフォルトの名無しさん:2005/12/22(木) 21:20:52
>>739
意味不明なこというなキチガイが
751デフォルトの名無しさん:2005/12/22(木) 21:21:56
>>748
これだけみれば、syntax errorはでないように見えます。
全部をさらすか、問題点を絞り込んでください。
あと、「エラーが起きます」だけでなく、実際にどのようなエラーが表示されるかを書いてください。
よろしくお願いします。
752748:2005/12/22(木) 22:43:21
>>751
そのくらい推測してくれよ
問題点を絞り込むのが面倒だから聞いてるのに、まったく・・・
753デフォルトの名無しさん:2005/12/22(木) 23:00:37
MW?
754デフォルトの名無しさん:2005/12/22(木) 23:25:27
えらい態度デカいなあ。
すくなくともエラーメッセージもわからない、コードも手元にないという状況
でエラーを絞り込めると思っている方がおかしいだろう。

p してはじめてエラーってことはとりあえず inspect が怪しいとかかねえと
いぐらいの意見しか出てこないと思う。
755748:2005/12/22(木) 23:32:13
>>754
syntax errorが起きてるっつってんだろ。おい。
シバクぞこら。
756デフォルトの名無しさん:2005/12/22(木) 23:40:27
>>755
あ、わかったぞ文法上のエラーじゃねーか?w
757デフォルトの名無しさん:2005/12/23(金) 00:07:54
わかった。
pの後が全角スペースだ。
758デフォルトの名無しさん:2005/12/23(金) 00:23:50
そもそも p idf が通るかどうかもあやしいな。
759デフォルトの名無しさん:2005/12/23(金) 00:28:17
セミコロンが抜けてるように見えるけど…
760デフォルトの名無しさん:2005/12/23(金) 00:53:09
エラーメッセージくらい書いといてくれよ
問題点を絞り込むのが面倒だから聞いてるのに、まったく・・・
761デフォルトの名無しさん:2005/12/23(金) 02:22:36
エラーは、書いた人が間違っているから起こります。

書いた人が間違っているから
書いた人が間違っているから
書いた人が間違っているから
書いた人が間違っているから
書いた人が間違っているから
書いた人が間違っているから
書いた人が間違っているから
書いた人が間違っているから
書いた人が間違っているから
書いた人が間違っているから
762デフォルトの名無しさん:2005/12/23(金) 08:01:02
>>748
TFIDFってことは、文書検索だな?そしてこのスキルから察するに学生で
講義の課題か卒研かでそういうシステムを作ってるんだろう?

大方残された時間があまり無くて切羽詰ってきて、自分で解決できないから
ここで聞いてるってところだろう。ただそれ、人にものを頼む態度じゃなから。

>idf2 = GetTerm.idf(setname,name,"50000")
まず3行目が怪しい。なぜ第3引数の50000を数値ではなく文字列で渡す
必要がある?察するに50000って数字はに(IDFを求めるための)全体の文書数だと
思うんだが、目的を考えればこれは数値で渡すのが自然だ。

数値と文字列の違いが分かっていないなら、Rubyはお前にはまだ早い。
もし言語が選べるなら、もっとメジャーでドキュメントがそろった言語にした方が
いいぞ。(JavaとかPerlとか)

「クラス定義はきっちりやっている」?ハァ?
お前が貼り付けた4行ののうち、最初の3行を見ただけでもお前のいうクラス定義の
デタラメさが想像付くのだが。特に文書検索分野をやろうとしてるなら、もう根本的な
ところから間違ってるレベル。大方、目の前にプログラムを動かそうと躍起になってるん
だろうけど、このままじゃ完成はおぼつかないな。

煽りじゃないけど、お前、もっと基本的なところからやり直したほうがいいぞ。
763748:2005/12/23(金) 09:17:16
>>759
Ruby知らんくせに出てくんなよ

>>762
>まず3行目が怪しい。なぜ第3引数の50000を数値ではなく文字列で渡す

バカかお前。syntax errorが起きてるっつってんだろ!
そんなこと今は問題じゃねーんだよww
ケチつけたいだけだろばーーーーーか

>「クラス定義はきっちりやっている」?ハァ?
>お前が貼り付けた4行ののうち、最初の3行を見ただけでもお前のいうクラス定義の
>デタラメさが想像付くのだが

ハァァァァ?お前の貼り付けた21行のうち、中間の3行見ただけでもお前の言うレスの
デタラメさが証明できるのたが。特に俺のご指導ご鞭撻をやろうとしてるなら、もう抜本的な
ところから間違ってるレベル。大方、目の前の俺様を煽って性的興奮を得ようと躍起になってるん
だろうけど、このままじゃ射精もおぼつかないな。

煽りじゃないけど、お前、幼稚園からやり直したほうがいいぞ。
764デフォルトの名無しさん:2005/12/23(金) 09:30:31
君つまんないよ
765748:2005/12/23(金) 09:35:17
だから何?

お前も面白くないけど、だから何?
766デフォルトの名無しさん:2005/12/23(金) 10:41:21
うん、まあ、なんだ、 751 にもとっくに書いてあるけど、そこには syntax error は潜んでない。
たぶんそこよりずっと前に typo とか(カッコの閉じ忘れ、クォーテーション忘れとか)
があって、そういうのが巡り巡ってそこで構文エラーになってるんだろ。
767デフォルトの名無しさん:2005/12/23(金) 10:46:01
もうほっとけよ。

はい、次の話題どうぞ↓
768デフォルトの名無しさん:2005/12/23(金) 11:01:11
>>748
syntax errorの原因はその4行以外にある可能性がきわめて高い、ということだよ。

>上記のクラスの定義はきっちりやっているつもりですが(中略)何度もチェックしているので・・・

バグが取れないのって、大抵こういう思い込みが原因なんだよな。

これは予想(コードが無いから予想するしかない)だけど、
「クラス定義はきっちりやっているつもり」
でいる限り、そのバグは取れない」よ。
だから、コードを貼り付けてお前以外の別の目でチェックしてもらった方が早いって言ってんの。

それから、Rubyインタプリタがsyntax errorでその4行のどれかを指しているからといって、
そこに原因があるとは限らないぞ。そもそもsyntax errorはエラーの中でも原因箇所を誤り無く指摘
するのが特に苦手なエラーだ。つまり実は全然関係ない箇所が原因で、インタプリタが間違って
たまたまそこをエラー箇所として指摘しただけだ。

syntax errorの直接の原因はその4行以外にある可能性が非常に高い。

endつけ忘れとか二重引用符閉じ忘れ(閉じたつもりで実は閉じられてない)とかそういうレベルの
話の可能性が高いから、その辺を疑ってみろ。
769デフォルトの名無しさん:2005/12/23(金) 11:36:35
自分で解決できずに質問するなら、全部晒せば良いのに...。
770デフォルトの名無しさん:2005/12/23(金) 11:45:03
end にしてもそうだが、>>748 のいらいらは
エラー行が特定しにくいからだろう。
771デフォルトの名無しさん:2005/12/23(金) 13:24:40
>>748
これでも詠みやがれ。
http://jp.rubyist.net/magazine/?0012
最新号発汗。
772デフォルトの名無しさん:2005/12/23(金) 17:26:24
>>771
額に汗して執筆・編集してくれたみんなに乙
773デフォルトの名無しさん:2005/12/23(金) 19:45:53
プログラミングRuby 翻訳2版まだー?
774デフォルトの名無しさん:2005/12/24(土) 02:21:16
いくらなんでも騙りだろこれは

と初めは思ったが、粘着性から考えて本人か?
775デフォルトの名無しさん:2005/12/24(土) 07:19:38
>>774
話を逸らされたくない当人の粘着乙
776デフォルトの名無しさん:2005/12/24(土) 12:03:36
そのGetTerm.idfというクラスメソッドの返り値はちゃんとpで表示できるクラスになっているかい?
777748:2005/12/24(土) 13:09:08
syntax errorだっつってんだろ。アホかお前。
778デフォルトの名無しさん:2005/12/24(土) 14:07:05
777はまじなのか。751とか768とかには反応しないの?

まじでまだ悩んでるんなら、とりあえず晒した4行を削って実行してみ。違うところにエラーが出ると思うよ。
779748:2005/12/24(土) 16:49:50
すみません、自己解決しました
780デフォルトの名無しさん:2005/12/24(土) 17:16:37
自決してください。
781デフォルトの名無しさん:2005/12/24(土) 19:20:42
>>779
えーと、本物さんですか?
であれば、質問だけじゃなく、ぜひ原因と対処も書いてくださいませ。
782748:2005/12/24(土) 19:36:20
はぁ?なんで?やだよ
783748:2005/12/24(土) 21:05:45
今日は聖夜だ。みんな靴下用意して寝な。明日になったら1.8.4が入ってるからさ。
784デフォルトの名無しさん:2005/12/24(土) 21:12:45
>>783
うーん、靴下に入ったとしても、それを各ホストにインストールしないとなぁ。
遠隔地のサーバにはいつ入れようかな...。
785デフォルトの名無しさん:2005/12/24(土) 21:14:30
ruby 1.8.4 (2005-12-24) [靴下]
786748:2005/12/25(日) 16:35:48
>>784
syntax errorだっつってんだろ。アホかお前。
787デフォルトの名無しさん:2005/12/27(火) 10:27:45
なんともいえないblogの記事を見つけたのだが
ttp://printf.jugem.jp/?eid=390
これ、なんて説明すりゃいいんだろう。

テストスクリプトがそもそもx,y,zにhoge=>[a,b,c]を代入してるから、
関数内で値を書き換えているわけではないという勘違いはある。
とは言うものの、関数に何か自作クラスのインスタンスを渡してそのインスタンス変数を変更する
というのは出来るが、Fixnumの場合*=とか+=しても関数内では値を書き換えることは出来ない。
この統一感のなさみたいなものについて、どうにかうまく説明できないだろうか。
788デフォルトの名無しさん:2005/12/27(火) 11:12:30
変数の名札モデルを教え込んで、=がついたら名札のつけかえだから元の変数
に影響がないよ、という風に説明するとか。

逆にわかりづらいかなあ。
789デフォルトの名無しさん:2005/12/27(火) 11:46:46
boolean型を返すメソッドを"foo?"と定義するみたいに
boolean型の変数も"foo?"で使いたかったんだけど
syntax errorなんだよね。

変数名に"?"が使えないようにしてる理由って何ですか?
790sage:2005/12/27(火) 16:14:32
FileUtils.cp_rのpreserveの挙動がよくわかりません。
マニュアルには更新時刻をコピーすると書いてあるのですが、
実際にやってみるとコピーされる場合もあればコピーされない場合もあります。
何か直接マニュアルには書かれてない条件みたいな事でもあるのでしょうか?
791デフォルトの名無しさん:2005/12/27(火) 20:44:12
>>787
>はたしてこれでいいのだろうか。
って言ってるんだから、違うと言ってあげればいいんじゃないの?

しかしグローバル変数は避けたいが呼び出し元で与える変数を壊したい
っつーのもよく分からないな。やってみたいだけなら分からなくも
ないけど、実際にそんな使い方するかなぁ?
792デフォルトの名無しさん:2005/12/27(火) 23:11:17
>>791
Rubyでは、こういうことはしないのが普通なのでしょうか?
クラスを作って、そのクラスのメソッドで、クラスのインスタンス変数に対して、やるべきなのでしょうか。
今まで、C/C++しかやっていないため、こういうスクリプト言語の勝手は、まだよくわかっていません。
793デフォルトの名無しさん:2005/12/28(水) 00:43:08
オブジェクト指向的ではないね。
794デフォルトの名無しさん:2005/12/28(水) 00:54:31
>>792
数値ではなくて配列とか文字列を使えば
ポインタだけを渡しているんだなってのが素直に実感できるかも。

def foo(b)
b.concat("y")
end
a = "x"
foo(a)
p a #=> "xy"
795デフォルトの名無しさん:2005/12/28(水) 01:00:31
おそらくCな人がひっかかるところはオブジェクトの参照はある(というかそればかり)だけど変数の参照はないてとこなんだろうな
796デフォルトの名無しさん:2005/12/28(水) 03:58:40
Cに限らず、今までの経験は忘れてリセットするつもりで新しい言語に取り組んだ方がいいよ。
Cっぽいrubyなプログラムしか書けないなら、Cで書いた方がいいし。

日本語っぽい英語で話すくらいなら、日本語の方が不自由無く使えるのと同じ。
797デフォルトの名無しさん:2005/12/28(水) 09:07:15
初めてActiveScriptRuby(1.8.4.1)ってのをインストールしてみたんだが…

「パワーユーザー以上の権限が必要」と書いてあるので、
試しにパワーユーザーでインストールしてみたら、
.rbをノートパッドに関連付けるところで
エラーになりますねコレ(WinXP Pro SP1で再現)


…もしかして、テストっていい加減?
798デフォルトの名無しさん:2005/12/28(水) 12:08:45
>>792
しない。
Cで呼び出し元の変数を変更したい場合というのは、戻り値だけじゃな
くて複数の値を返したい場合だろ?
そういうときはRubyでは多値を使う。
そのほうが入力と出力が明快になる。
799792:2005/12/28(水) 14:44:52
こういうことでしょうか?

hoge = 0 ;          #変数hogeは、Fixnumのあるインスタンスへの参照
hoge = "hello,world" ;   #変数hogeは、Stringのインスタンスへの参照
                #Fixnumのあるインスタンスは参照されなくなり、いずれGCによって回収される。

hoge = 1 ;          #変数hogeは、Fixnumのインスタンスへの参照
hoge *= 2 ;          #変数hogeは、一行上のインスタンスを2倍した、新しいインスタンスへの参照
                 #値が1の、Fixnumインスタンスは参照されなくなり、いずれGCによって回収される。

むりやりC++で書くとこうなのかな。

void *hoge ;
hoge = reinterpret_cast<void*>( new Fixnum(0) ) ;
hoge = reinterpret_cast<void*>( new String("hello,world") ) ;
hoge = reinterpret_cast<void*>( new Fixnum(1) ) ;
hoge = reinterpret_cast<void*>( new Fixnum( *((Fixnum *)hoge) * 2 ) ) ;

800デフォルトの名無しさん:2005/12/28(水) 14:56:38
もはや完全にどうでもいいことだが、pyてょnは関数型言語ではねえっす。
801デフォルトの名無しさん:2005/12/28(水) 15:05:37
>>799
だいたい合ってる。
RubyではFixnumは割と特別扱いなのでGCの対象にはならないけどね。
802デフォルトの名無しさん:2005/12/28(水) 16:59:52
>>801
即値(7.4)
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=FAQ%3A%3A%C1%C8%A4%DF%B9%FE%A4%DF%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA

>>799
むしろ自己代入を見るべきか。
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=%B1%E9%BB%BB%BB%D2%BC%B0#a.bc.ab.b8.ca.c2.e5.c6.fe
つまりa*=2はa=a*2のシンタックスシュガー。そういうリテラルであって*=というメソッドではない。

あと混乱させるかも知れないが以下。

2.equal?(2) => true(同一インスタンス)
10000000000000000000000000.equal?(10000000000000000000000000) => false(別インスタンス)(@cygwin-i386)

でも
$ ruby -e 'a=2;b=a;a*=2;p a,b'
4
2
$ ruby -e 'a=10000000000000000000000000;b=a;a*=2;p a,b'
20000000000000000000000000
10000000000000000000000000
803792:2005/12/28(水) 17:48:12
>>802
10000000000000000000000000というのは、
Fixnumの範囲に収まらず、Bignumになるためですね。
804デフォルトの名無しさん:2005/12/29(木) 14:55:00
cygwinのsetup.exeでインストールされたのを使ってみたんだけど、
riコマンドで標準エラー出力にそんなディレクトリないよって言われる。
検索してくれてはいて、その後にはきちんと解説が出てくる。
エラー出力をなくすためにはどうすればいいのかな?
805デフォルトの名無しさん:2005/12/29(木) 18:27:18
また、エスパー出動ですね。

「そんなディレクトリ」ってどんなディレクトリだ?
806804:2005/12/29(木) 18:59:53
すみません、こんな感じです。

> ri StringIO#string
/cygdrive/c/Documents: No such file or directory
and: No such file or directory
Settings/my-name/ri_1608.0: No such file or directory
sh: /cygdrive/c/Documents: No such file or directory
-------------------------------------------------------- StringIO#string
strio.string -> string
------------------------------------------------------------------------
Returns underlying String object, the subject of IO.
807デフォルトの名無しさん:2005/12/29(木) 19:24:40
エスパー エスパー と、いい加減寒すぎ
808デフォルトの名無しさん:2005/12/29(木) 19:59:13
TMPとかHOMEあたりの環境変数をちゃんと設定してないんじゃないかという電波を受信しました
809804:2005/12/29(木) 23:38:09
>808
それかも!と思って設定、再起動もしてみましたが変化なしです…。
まぁ、使う分には困らないのでいいと言えばいいんですが。
cygwin版使ってるほかの人は、同じようにエラー出てないのかな。
ともあれ、808さんありがと。
810デフォルトの名無しさん:2005/12/30(金) 00:27:13
>>806
riコマンドの存在すら知らない初心者だが
Documents and Settingsフォルダを
Documentsと認識してしまってることはわかる

スペースのない所に入れなおしなさい
811804:2005/12/30(金) 01:34:24
>>810
いや、自分でコンパイル&インストールするならばそうなんだけど、
cygwinのsetup.exeでインストールされたものに対して、
何らかの設定(個人の環境変数なりruby固有の環境変数だったり)で
うまくやる方法ってあるのかな?って話で。
812デフォルトの名無しさん:2005/12/30(金) 02:41:13
HOMEかTMPかcygwinのrootが空白の入ったパスになってるんだと読んだが違ったか。
まだエスパーへの道は長いな。
813デフォルトの名無しさん:2005/12/30(金) 10:11:52
RUBYLIB読んでないか
814デフォルトの名無しさん:2005/12/30(金) 11:41:55
>>812が当たりだろう。
TempfileがTEMPかUSERPROFILEを使ってるものと思われ。
TMPDIRかTMPを空白を含まないディレクトリに指定汁。

ちなみに、1.9だとTempfileを使わずに直接popenで食わしてるから関係なくなってるはず。
815804:2005/12/30(金) 12:16:34
うーん。空白を含まないディレクトリを指定してるんですが…。
また年明けにいじってみます。
とりあえずお付き合いしてもらった人、ありがと。
816デフォルトの名無しさん:2006/01/02(月) 03:49:22
Rubyをアプリのスクリプトとして組み込もうかと思っているんですけど…

派生クラスから基底クラスのインスタンス変数を参照できるとか、
クラスがクローズされないから後から関数追加してインスタンス変数を参照できてしまうとかの、
この辺の仕様が無茶苦茶怖いんですが、こんなもんなんでしょうか?
817デフォルトの名無しさん:2006/01/02(月) 04:29:54
>この辺の仕様が無茶苦茶怖い
どんなデメリットがあると想像してるのかを言ってもらえると
もうちょい詳しいアドバイスをできるかもしれない(オレ以外の誰かが)

$SAFE=4でサンドボックス作れば(一応)大丈夫、とかだと思う。
818デフォルトの名無しさん:2006/01/02(月) 05:09:00
>>817
あるクラスを拡張しようと思って派生クラスを作り、インスタンス変数を使用した。
ところが、そのインスタンス変数名が「たまたま」基底クラスのものと一致すると、
派生クラス側で書き換えたせいで基底クラスの動作がおかしくなる。

ってことはありませんか?
要はC++とかで言えばインスタンス変数は全てprotectedで宣言されているわけですよね。
これはカプセル化の概念的にどうなんだ、というのが率直な感想です。

$SAFEは知りませんでした。
さっきRubyを触り始めたばかりで分からないことだらけなんで…勉強します。
819デフォルトの名無しさん:2006/01/02(月) 05:16:38
あ、すいません。
816のスクリプトとして組み込むというのと、継承の話はあんまり関係ないですね。
アプリにスクリプトを組み込もうと思って適当なものを探していたら
Rubyが面白そうだから読み始めてる、ってことです

CとRubyの橋渡しは物凄く簡単で便利そうですねぇ。
820789:2006/01/02(月) 21:40:01
>>789
誰か反応ぐらいしてよ…。
821デフォルトの名無しさん:2006/01/02(月) 23:13:28
>820
……そんなもん
「Matzに聞け」
以外にどー反応しろと。あとML漁れ、くらいか(そういう議論があるかどうかは知らんが)
822デフォルトの名無しさん:2006/01/02(月) 23:29:29
>>821
たしかMLで見た気がする。探すのめんどくさいが。
823789:2006/01/03(火) 11:16:34
>>821-822
言い出しっぺの法則で漁って来ました
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/9754
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/9758
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/9759

>@foo? という形の変数名は、実はよく使ってたりしましたが、
>これからは許されないの?

>許さないつもりです.原さんが涙を流してお願いしない限り.:-)
>もともとの仕様では「! ? はメソッド名につく」と明示されている
>はずですから.

>そうかあ。では @foo? は禁止に賛成。(^^;

・゚・(´Д⊂ヽ・゚・
824デフォルトの名無しさん:2006/01/03(火) 17:56:33
>>819
アプリに組み込んだら、些細なことですぐ変なところをアクセスして死ぬは、
GCされないようにマークしたかどうかで不安にかられたりで、
結構、大変だったよ、俺は。

でも、Perlを組み込むのよりは遥かに簡単だった。
825デフォルトの名無しさん:2006/01/03(火) 18:20:21
>>824
なんか意外と面倒そうですね。既成言語なら楽かなと思ってたのですが…
機能はRubyほど必要ないし、いっそのことbison/flexで俺言語作ろうかな。
重要なのはスクリプトの途中で処理権を本体に返せるかどうかなんで。
RubyだとcallccとかThread.stopがあるから使えそうと思ったのですが。
826デフォルトの名無しさん:2006/01/03(火) 18:38:07
>>825
マジレスすると Python にしとき。
827デフォルトの名無しさん:2006/01/03(火) 19:22:28
Luaも結構楽
828824:2006/01/03(火) 19:52:27
>>825
まあ俺の場合、組み込んだあと、本来スクリプト側でやるような処理を、
Cの関数(rb_xxx)だけで下手にごちゃごちゃやりすぎてハマった部分が大きい。
組み込み自体は楽だった。
829デフォルトの名無しさん:2006/01/03(火) 20:27:06
>>826-827
どうもありがとうございます。
とりあえずLua見てみたら、まさにコルーチンがサポートされてますね。。
うまくいきそうなんで、試してみます。ありがとうございました。
830デフォルトの名無しさん:2006/01/04(水) 16:31:56
こうしてRubyのユーザはいっこうに増えないのであった。
831デフォルトの名無しさん:2006/01/05(木) 10:33:24
まあ、LuaでよければLuaがいいんじゃないかな。
適材適所ですよ。
832デフォルトの名無しさん:2006/01/05(木) 10:49:26
Rubyではパンは焼けないからな。
833デフォルトの名無しさん:2006/01/05(木) 18:07:07
目玉焼きくらいなら焼けるよ
834デフォルトの名無しさん:2006/01/05(木) 18:20:06
今は亡きEYECOMライター乙
835デフォルトの名無しさん:2006/01/05(木) 23:39:48
>>833
え?どうやって?
836デフォルトの名無しさん:2006/01/06(金) 09:18:36
今までに出たRuby本を全部燃料に使えばいけそうではあるな。
837デフォルトの名無しさん:2006/01/06(金) 10:32:15
256倍本は焚付けに
838デフォルトの名無しさん:2006/01/06(金) 11:52:45
CPU のファンとシンクを外して卵をかけて
ウェイト無しで適当な無限ループを走らせる
839デフォルトの名無しさん:2006/01/06(金) 12:00:05
目玉焼きができる前に、ショートして壊れますた (´・ω・`)ショボーン
840デフォルトの名無しさん:2006/01/06(金) 12:36:01
卵はそれほど電気を通しません。
841デフォルトの名無しさん:2006/01/06(金) 12:51:06
ほう、M/B上に垂れ流しても平気なくらい絶縁性が高いのか。
842デフォルトの名無しさん:2006/01/06(金) 13:03:03
つーかRuby要らないじゃん
843デフォルトの名無しさん:2006/01/06(金) 14:25:20
無限ループするプログラムを作る必要があるだろうに。
他の言語なら書いてる最中に「俺なんでこんなことしてるんだろう」と冷める可能性があるが
楽しくプログラミングがモットーのRubyならその点ばっちりだ。
844デフォルトの名無しさん:2006/01/06(金) 15:14:43
>>843
その文を書いてる途中で冷めなかった?
845デフォルトの名無しさん:2006/01/06(金) 15:59:01
>>790
cp_rのバグ。ディレクトリ下にファイルが存在している場合は
preserveオプションをtrueにしてもディレクトリのタイムスタンプを保存できない。

2003年6月に
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/74611
で報告されているけど、
windows特有のバグと勘違いしたバグ報告なので未だにほったらかし。
846デフォルトの名無しさん:2006/01/08(日) 18:14:49
RDEでメニューやソースが日本語表示されない理由を教えてください。
847デフォルトの名無しさん:2006/01/09(月) 09:10:38
日本語表示しないようになっているから。
848デフォルトの名無しさん:2006/01/09(月) 10:03:32
>>846
⊃フォント
849デフォルトの名無しさん:2006/01/09(月) 14:33:39
マニュアルの「初期設定」を読め。
850デフォルトの名無しさん:2006/01/09(月) 16:00:26
フォントなどを設定してもソース内で日本語の表示ができないのですが。
851デフォルトの名無しさん:2006/01/09(月) 17:50:31
IO#foreachが遅い遅い遅い
852デフォルトの名無しさん:2006/01/09(月) 23:31:52
>>850
エディタのフォント設定でフォント選択ダイアログを表示したら
文字セットを日本語にしる。
853デフォルトの名無しさん:2006/01/11(水) 22:23:24
Ruby/Tkて良くわからないのですが、Rubyでテキストがザーっと表示される
プログラムをどうしたらGUIで1つ1つ表示できるんでしょうか…
854デフォルトの名無しさん:2006/01/11(水) 22:32:43
>>853
全く話は違うけど、RubyでCGIやTCPサーバなんかも書けるのも知ってる?
855デフォルトの名無しさん:2006/01/11(水) 22:55:34
>>853
ん?CUIというか、コマンドラインで動作するRubyスクリプトを
どうすればGUI化できるか?という疑問ですか?
856デフォルトの名無しさん:2006/01/11(水) 23:12:34
>>854
oui
>>855
そうです!orz
857デフォルトの名無しさん:2006/01/11(水) 23:39:12
>>856
うーん、GUI化を全く想定してないスクリプトなら作り直しが吉かも。
ある程度でも入出力と処理を分離できるなら、改造で対応できるかな?
858デフォルトの名無しさん:2006/01/12(木) 00:41:24
>>857
N = 39; M = 79
row = Array.new;(M + 2).times { row.push(0) }
a = Array.new;(N + 2).times { a.push(row.dup) }
b = Array.new;(N + 2).times { b.push(row.dup) }
a[N/2][M/2] = a[N/2-1][M/2] = a[N/2+1][M/2] = a[N/2][M/2-1] = a[N/2-1][M/2+1] = 1
for g in 1..1000;printf("Generation %4d\n", g);for i in 1..N;for j in 1..M
if (a[i][j] > 0); print("*");b[i-1][j-1] += 1;b[i-1][j] += 1;b[i-1][j+1] += 1
b[i][j-1] += 1; b[i][j+1] += 1
b[i+1][j-1] += 1;b[i+1][j] += 1;b[i+1][j+1] += 1
else;print(".");end;end;print("\n");end
for i in 0..N;for j in 0..M;if (b[i][j] != 2);a[i][j] = ((b[i][j] == 3) ? 1 : 0)
end;b[i][j] = 0; end;endend
exit 0
こんなんなんですけど…
859デフォルトの名無しさん:2006/01/12(木) 01:14:52
これ、例の「あけましておめでとう」に触発されてつくったやつ?

「N = 39; M = 79」 は、 「コンソールが、縦40文字、横80文字」を想定してるみたいだね。
なので、
・「1文字=>1pixel」もしくは「1文字=>1block(8x8pixel)」と考えて
・「for g in 1..1000;」のループごとにスクリーン切り替え
・printf()による文字出力を同等数のピクセル描画に置き換え
みたいな方針でやればよいのでは。
860デフォルトの名無しさん:2006/01/12(木) 12:16:04
ライフゲームだね。
まず、GUIで何をどうやって表現したいのかから考えるといいのでは?
昔、MacのCで書いたときはWindow上に白と黒の長方形を描画したけど。
861デフォルトの名無しさん:2006/01/12(木) 12:32:44
階乗を求めるプログラムがわかりません
862デフォルトの名無しさん:2006/01/12(木) 12:47:16
>>861
n=10; puts (1..n).inject(1){|s,x| s*=x}
863デフォルトの名無しさん:2006/01/12(木) 13:03:49
訂正:n=10; puts (1..n).inject(1){|s,x| s*x} でよかった。
864デフォルトの名無しさん:2006/01/12(木) 13:05:55
inject禁止
865862:2006/01/12(木) 13:48:09
ふんじゃ n=10; puts eval((1..10).to_a.join(' * '))
866862:2006/01/12(木) 13:51:19
ケアレスミスの多いやつだな < 俺 orz
n=10; puts eval((1..).to_a.join(' * '))
867862:2006/01/12(木) 13:52:14
ケアレスミスの多いやつだな < 俺 orz
n=10; puts eval((1..n).to_a.join(' * '))
868デフォルトの名無しさん:2006/01/12(木) 14:56:44
わざわざ eval なんか使わんでも……
869デフォルトの名無しさん:2006/01/12(木) 15:01:09
ケアレスミスが多いという自覚があるくせに eval を使うこの恐怖
870デフォルトの名無しさん:2006/01/12(木) 15:34:05
「プログラムの作り方がよくわかりません」だと思われる質問に対する回答としてはちと不適切だな
871862:2006/01/12(木) 16:50:47
しょうがないなぁ。じゃぁ、少し長くなるがこんなので。
n=10; x='.'; (1..n).each{|n| x.gsub!(/./, '.'*n)}; puts x.size
872デフォルトの名無しさん:2006/01/12(木) 17:10:37
RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/146

146 名前:デフォルトの名無しさん[] 投稿日:2006/01/12(木) 12:22:33
階乗を求めるプログラムを教えてください
873デフォルトの名無しさん:2006/01/12(木) 20:16:02
1line で書かんで良いだろw
何でそこまで、置換したり join したり変な手段に拘るんだ?
874デフォルトの名無しさん:2006/01/12(木) 20:35:15
そりゃあんた、似非中級者だからだ
875デフォルトの名無しさん:2006/01/12(木) 22:03:50
マルチに対する嫌がらせだろう
876デフォルトの名無しさん:2006/01/14(土) 16:04:48
injectの引数は省略可。
(1..10).inject{|x,y|x*y}
((n=1)..10).each{x|n*=x}
877デフォルトの名無しさん:2006/01/14(土) 17:56:23
ただでさえややこしいのに、初期値省略可なんてしたら
ますます。。。
878デフォルトの名無しさん:2006/01/14(土) 18:02:50
自分で調べる前に聞いておく。

数KBの4つほどの文字列を、繰り返し(数万回)連結するんだけど、

str1 + str2 + str3 + str4
str1 << str2 << str3 << str4
[str1, str2, str3, str4].join

で、どれが一番早い? もしくは、他の方法でも、連結されていれば可。

もっと細かく言うと、

* str1, str3 は破壊されても良い。str2, str4 は使いまわしているので、破壊されては駄目。
* 連結結果は、すぐにファイルに書き出した後は必要ない。
* バージョンは、ruby 1.8.1 (2003-12-25) もしくは ruby 1.8.4 (2005-12-17) で、出来れば前者。

ということです。よろしく。
879デフォルトの名無しさん:2006/01/14(土) 18:17:36
str1 << str2 << str3 << str4
但し予想
880デフォルトの名無しさん:2006/01/14(土) 18:46:31
おれの予想も 879 と同じだったが、下記のようなテストで実行したら join
が一番速かった。
before = Time.now
10000.times do
a = 'a' * 1000
b = 'b' * 1000
c = 'c' * 1000
d = 'd' * 1000
a += b + c + d
# a << b << c << d
# a = [a, b, c, d].join
end
puts Time.now - before

% ruby -v
ruby 1.8.2 (2004-12-25) [i386-freebsd4]

実行結果は順に
3.177574
3.109941
3.093683

何回かやったが、この順番は変わらずじまい。

こっから推測だが、 << だと3回の連結でそれぞれ文字列の長さを延長する処
理が必要になる可能性があり、そのたびにメモリ上に割当て直すことになるの
に対し、 join だと全ての文字列を連結した長さの文字列を最初に用意すれば
いいのでその差じゃないかなと。

まあほとんど差はないです。
881デフォルトの名無しさん:2006/01/14(土) 20:17:37
>>878 その条件だったら,単に順番に出力するのが一番速いんじゃないかと予想する.
連結結果を使い回さないなら,オンメモリで連結する必要無かろ.
882デフォルトの名無しさん:2006/01/14(土) 20:19:19
それは無い。IOは遅いから。
883デフォルトの名無しさん:2006/01/14(土) 20:52:53
>>882
そうかな?IOといってもバッファリングが働くでしょうから、
メモリ上で結合してから書き出すのと大差ないような気が...。
検証してませんが。
884デフォルトの名無しさん:2006/01/14(土) 22:03:17
やってみた.上は f.write([a, b, c, d].join) したので,
下は f.write(a); f.write(b); f.write(c); f.write(d) したやつ.
on NetBSD 3.0 / TM5800 @ 933 MHz.

user system total real
3.060000 0.080000 3.140000 ( 3.214640)
2.740000 0.020000 2.760000 ( 2.812343)

ま,IO のメソッドが相当遅いんでなければ,実 I/O が増えるわけでなし,そんなもん?
885デフォルトの名無しさん:2006/01/15(日) 00:25:00
12345678を12,345,678見たいに表示させたいのですが何かお手軽な方法ってありますか?
886デフォルトの名無しさん:2006/01/15(日) 00:25:53
>>885
ある
887デフォルトの名無しさん:2006/01/15(日) 00:26:01
つるはし本のDuckTypingの章にArrayで実装してjoinにするのがパフォーマンス上良いと
書かれていたような気が。(実装はArrayで + でなく << 使ってね。)
本は会社に置いてきてるので、いまは確認できないけど。
888デフォルトの名無しさん:2006/01/15(日) 00:27:13
>>885
公式ドキュメントの正規表現の章に書かれていたような気が。
めんどくさいので、いまは確認しないけど。
889デフォルトの名無しさん:2006/01/15(日) 00:31:15
>>888
ありがとう。正規表現と所にサンプルがありました
890デフォルトの名無しさん:2006/01/15(日) 00:55:40
うは、こんな便利なサンプルあったのか。
事ある毎に、なんか適当に書いてたよ orz
891デフォルトの名無しさん:2006/01/15(日) 20:28:57
コマンドラインの引数に正規表現を指定して
標準入力にマッチした部分を表示するコマンドを作りたいのですが
文字列を正規表現に変化?させることはできますか?
while gets
 if $_ =~ /ARGV[1]/ then puts $1
end
こんな感じです。

ところでLinuxには同じ機能のコマンドがあったりしますか?
892デフォルトの名無しさん:2006/01/15(日) 20:36:08
grep のことですか
893デフォルトの名無しさん:2006/01/15(日) 20:42:07
例えば(\d+\.\d+\.\d+\.\d+)を指定すると
IPアドレスだけがずらずら出てくるようなことがしたいのです。
grepだと行ごと出てきてしまいます。
894デフォルトの名無しさん:2006/01/15(日) 20:50:39
grepの使い方間違ってるだけだろ
895デフォルトの名無しさん:2006/01/15(日) 20:53:51

$pat = ARGV.shift
while gets
print if /#{$pat}/
end

896デフォルトの名無しさん:2006/01/15(日) 20:56:25
$pat = /#{ARGV.shift}/
while gets
print if $_ =~ $pat
end
897デフォルトの名無しさん:2006/01/15(日) 21:06:27
>>891
正規表現に一致した部分だけを出すんですよね?
こんな感じでどうでしょう?

#!/usr/bin/ruby
while $stdin.gets
if $_ =~ /#{ARGV[0]}/ then puts $& end
end
898デフォルトの名無しさん:2006/01/15(日) 21:08:01
それは sed のことですか
899デフォルトの名無しさん:2006/01/15(日) 21:11:39
次はawkかな
900デフォルトの名無しさん:2006/01/15(日) 21:22:01
こんな感じで望みどおりのスクリプトが作れました。
ありがとうございます。

$pat = /#{ARGV.shift}/
while gets
 puts $& if $_ =~ $pat
end
901デフォルトの名無しさん:2006/01/15(日) 21:29:34
とりあえず後方参照できない言語は今時認めないのでよろしこ
902デフォルトの名無しさん:2006/01/15(日) 21:31:00
sedとawkとbashがあれば何でもできると聞いたけど
じゃあ何でRubyとかPythonがあるんだろ
903デフォルトの名無しさん:2006/01/15(日) 21:40:02
>>902
Cがあるのにsedやawkやbashがあるのと似たような理屈です
904デフォルトの名無しさん:2006/01/15(日) 21:40:54
Cがあれば何でもできるよ
905デフォルトの名無しさん:2006/01/15(日) 21:41:29
かぶったなw
906デフォルトの名無しさん:2006/01/15(日) 21:43:43
sedとawkを本腰入れて勉強してみると何かわかるかもしれない。特にsed
907デフォルトの名無しさん:2006/01/15(日) 21:43:59
grep -o $pat
908878:2006/01/15(日) 23:02:43
>>879-884
>>887

みなさん、ありがとう。優しい人たちばかりですね。

「ファイルに書き出すんだったら、連結させずに書き出せば?」というのは、
考えてみたら当たり前のことなのに、目からウロコです。

自分のスクリプトでも、そういうう風に出来ることがわかったので、そうします。
メモリ量が気になってもいたので、そういう意味でもぴったりでした。

感謝します。
909デフォルトの名無しさん:2006/01/15(日) 23:49:43
>>859-860
全然わかりません…orz
どんな感じになるんですか??
910デフォルトの名無しさん:2006/01/15(日) 23:55:16
>>909
じゃあ無理だ。
911デフォルトの名無しさん:2006/01/16(月) 01:37:31
>>859-860
ありがとうございます…
しかし 全然わかりませんでした…orz
どんな感じになるんですか??(>_<)
912デフォルトの名無しさん:2006/01/16(月) 01:38:18
ああー
もっかい書き込んでしまったーorz
すみません
913デフォルトの名無しさん:2006/01/16(月) 02:23:11
>>912
じゃあ無理だ。
914デフォルトの名無しさん:2006/01/16(月) 09:32:26
ああー
もっかいレスしてしまったーorz
すみません
915デフォルトの名無しさん:2006/01/16(月) 12:03:27
ファイル読み込みをしてテキスト処理したいのですが
マッチさせたいものが複数行の場合はどうしたらいいんでしょうか?

一行だったらgetsとscanを使い処理しつづけられたのですが、
改行があるとgetsではそこまでしか読まれないのでマッチさせられません。
かといってファイル全体を一括読み込みするというのも
巨大なファイルになるとどうかと思うのですが、どんな方法がありますか?

while line = gets
line.scan($pat) { printf("%s %s\n", $1, $2) }
end
916デフォルトの名無しさん:2006/01/16(月) 12:44:01
>>915
いろいろ方法はあると思うが、一番は頭を使うことだな。
はじめは無理して一文で書こうと思わない方がいい。
917デフォルトの名無しさん:2006/01/16(月) 13:49:43
ああ、これ悩んだなあ。

本当の最初の最初、EPSON BASIC on HC-20からPerlに移行した頃に考えたのは
 「マッチ1行目がヒットしたらチェック用変数にマッチ内容を一時収納、
 次のループの初めには「一時収納変数に何か入ってたらマッチ2行目とのチェックをする」ような処理を入れとく」
ってやつ。
動いたけどなんか気持ち悪くて気持ち悪くて。

今は面倒なので改行なしでファイル全部読み込んでマッチさせてる。マシンパワー万歳
918デフォルトの名無しさん:2006/01/16(月) 15:19:27
最近はもう、イッキに読み込むのでかまわないと思うね。

あとは ruby-mmap を使ってみるとか。
http://moulon.inra.fr/ruby/mmap.html
919デフォルトの名無しさん:2006/01/16(月) 15:35:19
>>918
実際に使った上で言ってるの?
920デフォルトの名無しさん:2006/01/16(月) 16:40:09
>919
いいえ。まともに使えるかどうかは知らん。自分なら全部読みこんじゃって処理させるし。
921デフォルトの名無しさん:2006/01/16(月) 18:03:12
>>915
そのファイルのパターンをよーく考える
例えばこのパターンからこのパターンの間をひとまとまりとして
扱うというルールがあるならそれを利用してかたまりごとに処理する
922915:2006/01/16(月) 19:23:53
皆さんレスありがとうございます
とりあえずreadlinesを使って全部読み
正規表現リテラルmで複数行にして処理できました
もう少し考えてみます
923デフォルトの名無しさん:2006/01/16(月) 19:36:41
webで配布されているフリーのrubyのCGIをダウンロードしてきて
ローカルでブラウザで開いても、CGIが実行されずソースが表示されます
OSはWinXP、ブラウザはIE、rubyはhttp://www.garbagecollect.jp/ruby/mswin32/ja/の
ruby-1.8.3です
rubyにパスは通っています
CGIにネットからアクセスするつもりはなくて、ローカルでのみ使用したいので
Apacheとかは入っておらず、上のrubyのみ導入した状態なのですが、
どうすれば実行できるようになるのでしょうか?
924デフォルトの名無しさん:2006/01/16(月) 19:50:54
>>923
Ruby以前の問題なのでWebとCGIの仕組みについて勉強汁
925919:2006/01/16(月) 21:08:56
>>920
そうだと思った。それは(ruby-)mmapの使い方ではないからな。
926デフォルトの名無しさん:2006/01/16(月) 22:47:29
>>923
とりあえずApacheとかを入れよう。
927デフォルトの名無しさん:2006/01/16(月) 23:27:18
XPProならIISでもいいけどとにかくWebサーバ立ててそいつにブラウザ経由で表示させないとCGIは動かない
928デフォルトの名無しさん:2006/01/17(火) 00:42:50
Webrickとか、といっても高度すぎるかもな。
929デフォルトの名無しさん:2006/01/17(火) 01:08:56
930デフォルトの名無しさん:2006/01/17(火) 02:05:38
ローカルの開発用のコマンドラインから起動する簡易cgiサーバってないのかな
931デフォルトの名無しさん:2006/01/17(火) 02:08:42
932デフォルトの名無しさん:2006/01/17(火) 02:21:05
むー、ローカルで実行するのにもwebサーバがいるのですか
何か入れてみます
ありがとうございました
933デフォルトの名無しさん:2006/01/17(火) 02:37:36
>>932
w3mならそれ自身でCGIを実行できますが、IEじゃないと駄目かな...?
ttp://www.mnet.ne.jp/~tnomura/w3m2.html
934デフォルトの名無しさん:2006/01/17(火) 02:41:27
鯖くらいとっとと立てたらいいがな
935デフォルトの名無しさん:2006/01/17(火) 03:06:54
何その牧歌的時代の遺物の老害
936デフォルトの名無しさん:2006/01/17(火) 03:08:35
>>935
何に対してのレス?
937デフォルトの名無しさん:2006/01/17(火) 03:10:23
w3mが牧歌的時代の遺物の老害といわれるのかぁ…

へ〜
938デフォルトの名無しさん:2006/01/17(火) 04:53:14
牧歌的時代というからには、
穴の多いIEの事ではないのかい
939デフォルトの名無しさん:2006/01/17(火) 04:54:57
つか、ものに依ると思うが、
普通に ruby スクリプトとして動かして、
吐き出された結果をリダイレクトでファイルに保存して、
ブラウザに放り込めば良いんじゃね?

知識が既にあるのなら、鯖立てた方が圧倒的に楽だが
940デフォルトの名無しさん:2006/01/17(火) 09:51:39
おお、年代の差が如実に現れるな。

インターネットで牧歌的時代といえばWindows95普及以前の、
まあ、いいとこ普及後で一般化するころまでだろう(少なくとも20世紀)。
ネットが性善説の影を引きずっていた、「安全」だった時代の話。
「インターネット」「牧歌的」でぐぐるとわかる。

>>934
ということでおそらく君宛て。
このご時世に、サーバーの動作すらわかってないと思われる人に
無責任にサーバー管理者任せるなとか、きっとそのへん。
941デフォルトの名無しさん:2006/01/17(火) 09:53:47
お題はローカルの開発用だろ。つーかスレタイ嫁
942デフォルトの名無しさん:2006/01/17(火) 10:02:59
>>923を読む限りでは、この人に
「Apacheをインストールしてネット側から悪用されないよう自分専用に的確に安全に設定してください」
って頼むのは敷居高杉だと思うなあ
943デフォルトの名無しさん:2006/01/17(火) 14:18:38
八割方「XPのファイアウォールが効いて問題なし」というオチになると思うが
残り二割に責任は持てない
944デフォルトの名無しさん:2006/01/17(火) 21:26:42
鬼車で named group を MatchData から参照できないですかね?

/(?<foo>o)/.match("hoge")["foo"] # => "o"

みたいな。
945デフォルトの名無しさん:2006/01/17(火) 22:53:35
特異クラス定義中に、インスタンス変数へ
値を代入出来ませんでしょうか。

class << obj = Object.new
 @v = 'hoge'
 def pvar
  p @v
 end
end
obj.pvar # => nil ('hoge'にならない)



↓は何か気持ち悪いし不便な感じが…

class << obj = Object.new
 def init
  @v = 'hoge'
 end
 def pvar
  p @v
 end
end
obj.init
obj.pvar
946デフォルトの名無しさん:2006/01/17(火) 23:01:30
そもそも定義中での代入にこだわるのが気持ち悪い気が。目的は?
947デフォルトの名無しさん:2006/01/17(火) 23:09:51
>>946
変数の初期化です。
特異クラス定義内に
initialize を定義しても呼ばれなかったので…
948デフォルトの名無しさん:2006/01/17(火) 23:25:50
特異クラスなんだからクラス変数にするとか?
949デフォルトの名無しさん:2006/01/18(水) 00:14:03
>>945
普通はこうだな。

obj = Object.new
obj.instance_eval {@v = 'hoge'}
class << obj
 def pvar
  p @v
 end
end
950デフォルトの名無しさん:2006/01/18(水) 00:29:42
全角ひらがな or カタカナを半角カタカナに変換したいんですが、
どうすれば出来ますか?
951947:2006/01/18(水) 00:45:02
成る程…皆様ありがとうございます。
>>949さんの instance_eval を調べてみます。
952デフォルトの名無しさん:2006/01/18(水) 01:50:21
こういう文法の「普通」の「定石」を集めたサイトってないもんかね。
Rubyスクリプトは同じことを結構いろいろな方法で書けるけど、あんま変な方法で覚えてたら損じゃん。

添付ライブラリのスクリプトは勉強の参考にしていいほどきちんと洗練されてる?
953デフォルトの名無しさん:2006/01/18(水) 02:00:49
>>952
つ【レシピブック】

あと現在どんだけ保守されてんのか知らないけど
つ【逆引きRuby <ttp://www.namaraii.com/rubytips/>】
954デフォルトの名無しさん:2006/01/18(水) 02:40:25
>>952
洗練されてるかと人に聞くまえに見てみたらどうだい?
たぶん君よりは洗練されているものが多いだろう。
(たとえ「変」だとしても、それに気がつかないんならね。)
目先の損得は考えず、たくさんのソースコードを見るのが一番。
955デフォルトの名無しさん:2006/01/18(水) 02:47:33
癖つけは最初が肝心だと思うぞ。
それこそ初心者で修正の効くうちによい方向に修正しておかないと。
956デフォルトの名無しさん:2006/01/18(水) 03:08:14
この定石に関して、よい方向(またはよくない方向)って具体的にどんなの?
957デフォルトの名無しさん:2006/01/18(水) 03:14:12
>>955
なぜこう書かずそう書くのかってのはそれなりに合理的な理解に基づくものでは?
合理的な理解が背景にあるならば、初心者じゃなくても容易に修正できるだろう。
むしろ「癖」のように単に覚えればいい、というのは悪い癖つけだと思うな。
ソフトウェア作法に書かれてるような癖つけとは違う話だし。
958デフォルトの名無しさん:2006/01/18(水) 08:11:45
るびまの「あなたの Ruby コードを添削します」とかもあったな
959デフォルトの名無しさん:2006/01/18(水) 09:17:58
enctypeがmultipartだとCookieの取得ができないのですが
どのように取得すればいいのですか?

それとRDEでCookie周りを扱う良い方法ありますか?

#よいで「良い」に変換できないの初めて知った

require "cgi"
cgi = CGI.new
cookie1 = CGI::Cookie::new({ 'name' => "name", 'value' => ["name"], 'expires' => Time.now + 1000 })
cgi.out({"cookie" => [cookie1]}){""}

print "Content-type: text/html\n\n"
p cgi.cookies['name']
print <<EOF
<html>
<body>
<form action=cookie.cgi method=post enctype=multipart/form-data>
[enctype=multipart/form-data]がなければ動く
<input type=submit>
</form>
</body>
</html>
EOF
960デフォルトの名無しさん:2006/01/18(水) 09:41:07
>>958
あの添削の方向が実はおかしいんじゃないかと思うこともあったりする
961デフォルトの名無しさん:2006/01/18(水) 18:28:48
>>949
おれは可能な限りeval使いたくないからinstance_variable_set使うかな

obj = Object.new
obj.instance_variable_set(:@v,'hoge')
class << obj
 def pvar
  p @v
 end
end


ところでclass〜endの特異クラス定義中に@vに値入れる方法ってある?
962959:2006/01/18(水) 22:45:54
環境書き忘れ
Windows 2000
ruby 1.8.2 (2004-12-25) [i386-cygwin]
AN HTTP Daemon Version 1.42n
963デフォルトの名無しさん:2006/01/18(水) 23:53:33
>>961
> ところでclass〜endの特異クラス定義中に@vに値入れる方法ってある?
もちろん>>945で代入できるよ。
objじゃなくてobjの特異クラスのインスタンス変数になるけど。
964デフォルトの名無しさん:2006/01/19(木) 01:53:25
>>963
>945は出来ないと書いてあるわけだが
965デフォルトの名無しさん:2006/01/19(木) 10:29:05
>>964
だから、「何の」インスタンス変数に入れたいか、による。
966デフォルトの名無しさん:2006/01/19(木) 15:51:49
>>963, 965
この場合、[objのインスタンス変数]と[objの特異クラスのインスタンス変数]ってどう違うの?
967デフォルトの名無しさん:2006/01/19(木) 16:22:12
>>966
持ってるインスタンスが別物。
持ち主同士は相互に結合されてるけど、@v同士はまったく関係ない。
968966:2006/01/19(木) 17:32:44
>>967
すみません、まださっぱりわかりません。

「持ってるインスタンス」ってそれぞれの場合、何を指してるのでしょうか?
[objのインスタンス変数] -> obj
[objの特異クラスのインスタンス変数] -> objの特異クラスのインスタンス
という意味ではないですよね?

「相互に結合されている」というのもよくわかりません。
特異クラスを定義した後では、obj が objの特異クラスのインスタンス
と同じと理解してるのですが。。。
969デフォルトの名無しさん:2006/01/19(木) 18:01:51
インスタンス変数を所有しているインスタンスが別物。

[objのインスタンス変数] -> objの@v
[objの特異クラスのインスタンス変数] -> [objの特異クラス]の@v

そのまんま。
970デフォルトの名無しさん:2006/01/19(木) 18:33:15
説明になってないよ。分からないと言われてくり返しても。
971966:2006/01/19(木) 18:35:06
なるほど、ようやくわかりました。
で、>>961は objの@v を定義したいといってるのでは?
972デフォルトの名無しさん:2006/01/19(木) 18:38:14
わかったんかい
973961:2006/01/19(木) 18:54:14
>>971
obj.pvar で参照できればなんでもよかったです

というか私自身[objのインスタンス変数]と[objの特異クラスのインスタンス変数]を
明確に区別しておりませんでした。すいませんです

まとめると

>>945

 def init
  @v = 'hoge'
 end

obj.init

のような
1.@vのための初期化のための特異メソッド定義をして、そのメソッドを呼ぶ

>>949>>961のような
2.instance_eval、instance_variable_setのようなobjに対するメソッドで@vを定義し値を入れる


以外の方法でclass〜endの特異クラス定義文中に
objがメソッドpvarで参照できる@vに値を入れる方法はあるのでしょうか
974デフォルトの名無しさん:2006/01/19(木) 19:08:06
問「特異クラスの定義文中に、そのクラスのインスタンスに触る方法がありますか」
答「ない」

問「どうしてないのでしょうか?」
答「特異クラスだからって特別扱いされてるわけじゃない。
  (特異クラスでない)普通のクラスの定義文中に、
  そのクラスのインスタンスに触れないっしょ? それと同じ」

問「特異クラスの場合だけ特別扱いして欲しいのですが」
答「その方法があると便利かもしれない。ruby-dev などで提案してみては」
975デフォルトの名無しさん:2006/01/19(木) 19:15:40
リファレンスには
> クラス定義と同じ構文で特定のオブジェクトに
> メソッドやインスタンス変数を定義/追加します。

ってあるんだからインスタンス変数の追加方法もあるんじゃ?
…でも書いてないよなぁ。
976デフォルトの名無しさん:2006/01/19(木) 20:05:44
rubyって定義文と実行文が入り乱れるから
できなさそうができたりする良い面と、そこから推測される
できてよさそうなことができなかったりするよね

define_methodがあるのだから
define_variableがありゃいいんじゃないのか
977デフォルトの名無しさん:2006/01/19(木) 20:47:47
>>976
instance_variable_set とどう違うの?
978デフォルトの名無しさん:2006/01/19(木) 21:01:41
こんなので、どうでしょう。

class << obj = Object.new
 def singleton_method_added(name); instance_variable_set(:@var, 'hoge') end
 remove_method(:singleton_method_added)
 def p_var; p @var end
end

obj.p_var #=> "hoge"
979デフォルトの名無しさん:2006/01/19(木) 21:33:19
これのどこが初心者スレなの?
980デフォルトの名無しさん:2006/01/19(木) 22:01:48
>>977
instance_variable_setはObject#のメソッドで
(特異)class定義文中ではinstance_variable_setのレシーバはここでのself、つまりobjの特異クラスになる

obj = Object.new
obj.instance_variable_set(:@v,'hoge') # instance_variable_setのレシーバはobj。これはobj.pvarで参照できる
class << obj
 instance_variable_set(:@v,'not hoge') # instance_variable_setのレシーバはobjの特異クラス。obj.pvarでは参照できない
 def pvar
  p @v
 end
end
981デフォルトの名無しさん:2006/01/19(木) 22:29:26
>>858でlifegameのプログラムについて質問したものです!
ruby/tkなんですが、自分でやってみたのですが、座標をどのように指定
すれば良いのか分りません…
どなたかお願いしますorz
982デフォルトの名無しさん:2006/01/20(金) 00:34:39
>>981
がんばって。

ここの 「マウスで矩形を描く」 が参考になるかも
http://www.mnet.ne.jp/~tnomura/tksample.html
983デフォルトの名無しさん:2006/01/20(金) 00:38:46
「乙 と 巳」のRuby/Tk移植版
http://jp.rubyist.net/magazine/?0003-RubyTkMovement#l29
984デフォルトの名無しさん:2006/01/20(金) 01:08:40
ありがとうございます…
しかし
(c, x, y, x, y, 'width'=>2)
の最初のx,yとあとのx,yは何の値なんですか??
985デフォルトの名無しさん:2006/01/20(金) 01:34:34
そのくらい自分で調べなよ
986デフォルトの名無しさん:2006/01/20(金) 01:55:03
すみません、サイトが見つからなくてテンパってましたorz
現在進行形ですが。。
987デフォルトの名無しさん:2006/01/20(金) 12:10:17
>>984
漏様のESPによる鑑定では、左上と右下の座標だ。
988デフォルトの名無しさん:2006/01/20(金) 21:15:56
256倍くらい買えるだろ。
989デフォルトの名無しさん:2006/01/20(金) 21:43:56
tk覚えても得しない気もしなくもなく
990959:2006/01/21(土) 07:37:09
>>959>>962
誰かヒントだけでもいいので、ください…。
991デフォルトの名無しさん:2006/01/21(土) 22:32:39
せんせいしつもん。

irb> arr=["A","B","C"]
=> ["A", "B", "C"]
irb> arr.each { |elem| puts elem << "!" }
A!
B!
C!
=> ["A!", "B!", "C!"]
irb> arr
=> ["A!", "B!", "C!"]

arr が ["A","B","C"] のままになってくれないリクツはなんですか?
concat や << を使うとなんか変わるっぽいということはわかったけど、
なんでこういう動作なのかよくわかんねす。
992デフォルトの名無しさん:2006/01/21(土) 22:37:10
elem + "!"
を使えよ
993デフォルトの名無しさん:2006/01/21(土) 22:41:35
ログ圧縮されたな。
ここが一番レス数多い模様。
994デフォルトの名無しさん:2006/01/21(土) 23:13:29
>>992
いまいち答えになってないと思われ
995デフォルトの名無しさん:2006/01/22(日) 03:04:24
>>991
> concat や << を使うとなんか変わるっぽい
まさにその通り。

変えたい時に使うのが concat や << 。
変えたくない時(くっつけた新しい文字列を作りたい時)は + を使いましょう。
996デフォルトの名無しさん:2006/01/22(日) 08:30:26
elemが参照渡しになってるのが気になるって言う意味ではないの?
997デフォルトの名無しさん:2006/01/22(日) 10:16:16
まあ、影響範囲がブロック内から不用意に飛び出してるようには感じられなくもない。
eachメソッドなのにブロック内の処理に引きずられて変なもん返してんじゃねーよ、みたいな。
違和感ってのはきっとそこだろう。

答えとしては「そういうもんだ」で、そういうふうに作られてるからということで特に明快な理由はなさそうだ。
「期待に外れた」動作をするconcatみたいなメソッドを暗記しておいて注意して使うしかないんでないかい。
998デフォルトの名無しさん:2006/01/22(日) 11:22:52
arrのそれぞれの要素が参照してるのと同じオブジェクトをelemも参照してるんだから、破壊的メソッドであるconcatと<<の挙動に特に違和感ないと思うけど。
999デフォルトの名無しさん:2006/01/22(日) 11:41:11
値渡しになると考える方がおかしいということか。
1000デフォルトの名無しさん:2006/01/22(日) 12:44:33
@@age
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。