Ruby初心者スレッド Part 10

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
マニュアル
http://www.ruby-lang.org/ja/man/
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
逆引きRuby
http://www.namaraii.com/rubytips/
Ruby リファレンスマニュアルの Windows HTML Help版
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
Rubyリファレンスマニュアル刷新計画
http://doc.loveruby.net/


前スレ
Ruby初學者スレッド Part 9
http://pc10.2ch.net/test/read.cgi/tech/1164065622/

>>2-10
2デフォルトの名無しさん:2007/01/23(火) 18:00:16
Rubyについて Part 25 (気にしてますか?GPL混入
http://pc10.2ch.net/test/read.cgi/tech/1164885714/
【Agile】Ruby on rails相談所 part2【DRY】
http://pc8.2ch.net/test/read.cgi/php/1151254378/
RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/
【最高言語】 Rubyist Magazine創刊 【ルビま!】
http://pc8.2ch.net/test/read.cgi/tech/1094825807/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc8.2ch.net/test/read.cgi/tech/1155031689/
3デフォルトの名無しさん:2007/01/23(火) 18:00:51
4デフォルトの名無しさん:2007/01/23(火) 18:01:43
Ruby Home Page
http://www.ruby-lang.org/ja/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
日本Rubyの会 公式Wiki - 日本Rubyの会Wiki
http://jp.rubyist.net/

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

Matzにっき … Ruby作者の日記
http://www.rubyist.net/~matz/
Ruby hotlinks 五月雨版 … Ruby関連の日記やblog
http://www.rubyist.net/~kazu/samidare/

Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2
<rubyXML/>
http://www.rubyxml.com/
Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/
5デフォルトの名無しさん:2007/01/23(火) 18:09:12
これがRuby内部イテレータ。

def f
  10.times do |i|
    yield i * 10
  end
end

f do |i|
  p i
end

これがPython外部イテレータ+構文糖。

def f():
    for i in xrange(10):
        yield i * 10

for i in f():
    print i

ほとんど変わらない希ガス。
6デフォルトの名無しさん:2007/01/23(火) 18:30:32
g = f()
for i in range(3): print i, ": ", g.next()
切り出せないって話だろう
俺は困ったことないけど
7デフォルトの名無しさん:2007/01/23(火) 18:57:12
>切り出せないって話だろう
切り出せれば、また別のジェネレータで yield g.next() とか合わせ技ができるじゃん。
8デフォルトの名無しさん:2007/01/23(火) 19:09:36
今まではRubyの内部イテレータにこんなアドバンテージがあった。

def f
  begin
    10.times do |i|
      yield i * 10
    end
  ensure
    p "final" # イテレータが中断しても「必ず」実行される
  end
end

f do |i|
  p i
  break # 中断♪
end

Python2.4までは上みたいなのはSyntax Errorだったんだけど、2.5からはできるようになった。

def f():
    try:
        for i in xrange(10):
            yield i * 10
    finally:
        print "finally"

for i in f():
    print i
    break

いよいよ、内部イテレータの「切り出せない」という弱点が残った感じ。(何か見落としてる?)
9デフォルトの名無しさん:2007/01/23(火) 19:16:46
>require "generator.rb"
call/ccは癌。重いしメモリリークするらしい。
10デフォルトの名無しさん:2007/01/23(火) 19:45:31
Matzが内部イテレータがいいと言ったら絶対内部イテレータがいいんだ!
11デフォルトの名無しさん:2007/01/23(火) 20:14:37
>>8
イテレータとして捉える分には、そういう結論でいいんじゃね?
つまり、じゅうぶんなsyntax sugarを用意すれば外部イテレータはそのメリットを生かしたまま内部イテレータ的に定義・利用できる、ということをPythonは証明したわけだな。
ただ、Rubyのイテレータ呼び出しは、それがブロック引数構文として文法に組み込まれてイテレータ以外にも使われてるから、そこをどう評価するか、という話はあるかもしれない。

>>9
前スレの993は、だから組み込みにしろ、って話なんじゃね?
12デフォルトの名無しさん:2007/01/23(火) 20:40:50
>>10
一回転してプッ
13デフォルトの名無しさん:2007/01/23(火) 21:03:46
外部イテレータかあ・・・。
外部イテレータって、自分で実装するのが面倒なんだよな。
Ruby が内部イテレータを採用してるのも、そこら辺を優先したからなんだろうな。

めっちゃ無駄は多いけど、スレッドうまく使えば
内部イテレータから外部イテレータを作れるね。
単方向のみだけど。
14デフォルトの名無しさん:2007/01/23(火) 21:15:04
>外部イテレータかあ・・・。
>外部イテレータって、自分で実装するのが面倒なんだよな。
>Ruby が内部イテレータを採用してるのも、そこら辺を優先したからなんだろうな。

だからジェネレータを使えばRubyとほとんど同じ面倒さで組めると(ry

>めっちゃ無駄は多いけど、スレッドうまく使えば
>内部イテレータから外部イテレータを作れるね。
>単方向のみだけど。

それが1.9のgenerator.rbの実装。それでも重い。
15デフォルトの名無しさん:2007/01/23(火) 21:16:49
ああ、数年前まではみんなが
  Rubyのイテレータはすごいぞ!
  Rubyのイテレータはすごいぞ!
ってお題目のように唱えていたのに...
16デフォルトの名無しさん:2007/01/23(火) 21:26:38
>>14
前半は >>9 を踏まえての事。
後半は重いのは当たり前やね。

>>11
> つまり、じゅうぶんなsyntax sugarを用意すれば外部イテレータはそのメリットを生かしたまま
> 内部イテレータ的に定義・利用できる、ということをPythonは証明したわけだな。
外部イテレータ使って内部イテレータを実装するのも無駄が多いし、
自分で新しい外部イテレータ作るのも面倒い。
基本的に内部イテレータを提供して、
必要に応じて外部イテレータを内部イテレータとは別個に提供可能にし、
そしてやっつけの時用に相互変換可能な仕組みを用意する、
という流れがベストな気がする。
17デフォルトの名無しさん:2007/01/23(火) 21:31:16
ルビーの在家信者と出家信者はどう違いますか?
18デフォルトの名無しさん:2007/01/23(火) 21:49:07
>前半は >>9 を踏まえての事。
call/ccはPythonのコルーチンより野心的っつうか、前の時点に「逆戻り」できる。
重かったりリークしたりがそのせいかわからないが、いずれにしても利用者からは
内部実装は見えないので「面倒」なのはインタプリタ実装者だけのはず。
19デフォルトの名無しさん:2007/01/23(火) 21:49:30
>>16
>外部イテレータ使って内部イテレータを実装するのも無駄が多いし、
本当に無駄が多いかどうか実証してみないとわかんないよ。
書くときの労力に関しては構文糖でどうにでもなりそうなのはPythonの例の通りだし。
実行効率については、意外と大差ない可能性もある。
処理系側の実装に関しては、元ネタのO氏の日記参照。そんな単純とも思わんが。

>必要に応じて外部イテレータを内部イテレータとは別個に提供可能にし、
>そしてやっつけの時用に相互変換可能な仕組みを用意する、
>という流れがベストな気がする。
これは同意。
というわけで、組み込みgeneratorと相互変換の仕組み希望。
20デフォルトの名無しさん:2007/01/23(火) 21:51:21
>「面倒」なのはインタプリタ実装者だけのはず
というわけでMatz乙☆
21デフォルトの名無しさん:2007/01/23(火) 21:59:47
>本当に無駄が多いかどうか実証してみないとわかんないよ。

Python2.5(0.83秒)

import time
def f():
    for i in xrange(1000000):
        yield i
t1 = time.time()
for i in f():
    pass
t2 = time.time()
print t2 - t1

Ruby(3.34秒)

def f
  1000000.times do |i|
    yield i
  end
end
t1 = Time.now
f{|i|}
t2 = Time.now
p t2 - t1

現状ではPythonのほうが早いね。YARVだとどうなのかな?
22デフォルトの名無しさん:2007/01/23(火) 22:04:15
>>21
rubyとpythonを比べてもしゃーないだろ。

で、手元だと、python 2.4.3が0.70秒、ruby 1.9.0が0.38秒。
YARVはええ。
2322:2007/01/23(火) 22:05:00
あ、ruby 1.8.5 p12は1.23秒ね。
24デフォルトの名無しさん:2007/01/23(火) 22:10:05
Python2.5 VS YARVキボン。
2522:2007/01/23(火) 22:19:29
2.5は入れてないんだよ。めんどくせえなあ・・・

同一環境で、python 2.5は0.36秒。
はええ。
26デフォルトの名無しさん:2007/01/23(火) 22:23:10
乙。漏れも後で試してみよう。
#外部イテレータが無駄ってことはどうやらなさそうだね。
27デフォルトの名無しさん:2007/01/23(火) 22:25:07
誰だよ、YARV 使えばすぐに Python に追いつけるって言った奴。
Python がこれ以上早くならないって前提じゃないのか?
だいたい YARV ベースの Ruby が正式リリースされ
安定するのは一体いつになるやら。
28デフォルトの名無しさん:2007/01/23(火) 22:28:34
JASRACから音楽を守れ!JASRACの悪行の数々
JASRACが73歳おじいちゃんに音楽を演奏したんだから840万払えと告訴
判決懲役10月、執行猶予3年(求刑・懲役10月)
日本音楽著作権協会(JASRAC)が、名古屋の飲食店経営のおばちゃんに、
音楽を演奏したんだから1,600万円払え、と告訴し、おばちゃんは逮捕。
プログラマ板などみんなの協力plz
http://ex17.2ch.net/test/read.cgi/news4vip/1169551677/

1.新型山田つくっる
2.ジャスラック登録曲のカバーした映像を見せるサイトを作る
3.サイトには1の山田を張り付ける
4.じゃすらっくがサイトに来る
5.感染
6.流出確認
7.ネトラン等に通報
8.マスコミ反応
9.内部文書が放送され一般に悪行がばれる

一般人に被害が出ないようにjasrac.or.jpのみを振り分けるPerlCGI
#!/usr/bin/perl
print "Content-type: text/html\n";
if ($ENV{'REMOTE_HOST'}=~/jasrac\.or\.jp/){
print "Location:download.html\n\n"
}else{
print "Location:index.html\n\n"
}
ここではlocationで別のページに飛ばしてるだけだが、やろうと思えば不正なcookieをいrうわなにをするやめあせdrftgyふじこlp
29デフォルトの名無しさん:2007/01/23(火) 22:35:17
ホワイの(感動的)Rubyガイド
http://www.aoky.net/articles/why_poignant_guide_to_ruby/

なんだこれww
3026:2007/01/23(火) 22:39:03
試してみた。Python2.5(0.89秒)に対してYARV(1.262秒)。
Python2.5はコンパイラに手が入ったって聞いてたけど、なかなか良いね。
31デフォルトの名無しさん:2007/01/23(火) 22:44:24
>>29
それ暇つぶしにいいけどキの人が書いたとしか思えんw
訳すの大変だったろうなぁ
キツネは可愛かった
3222:2007/01/23(火) 22:48:45
繰り返し回数を一桁増やして試してみた。
それぞれ5回ずつやった平均値。
ただし極端に外れた値が出た場合は外部要因とみなして捨てている。

Python 2.4.3   5.01秒
Python 2.5    3.56秒
Ruby 1.8.5 p12 12.12秒
Ruby 1.9.0     3.70秒
matzruby     31.55秒

なんかmatzrubyだけ冗談かと思うくらい遅いな。なんだこりゃ?
3322:2007/01/23(火) 22:50:58
結論:
Python 2.5はえー。YARVもけっこうはえー。

外部イテレータが遅いかどうかはPythonに内部イテレータを組み込むか、
Rubyに外部イテレータを組み込むかして、Python同士、Ruby同士で見ないと意味ない。
34デフォルトの名無しさん:2007/01/23(火) 22:51:23
>>30
Pythonはインタプリタの起動がRubyより遅いけど、どうやって計測してる?
35デフォルトの名無しさん:2007/01/23(火) 23:01:45
time.time()やTime.nowで計ってるから「起動時間は計測してない」が答えかな。
36デフォルトの名無しさん:2007/01/23(火) 23:07:56
それ反則じゃね?
shell?かしらんが、time で計ろうよ
37デフォルトの名無しさん:2007/01/23(火) 23:12:05
時間計測関数の実行時間も計測して差し引く必要がある、ということか?
38デフォルトの名無しさん:2007/01/23(火) 23:45:16
何で反則なんだ?イテレータの比較という話だったと思うが。
39デフォルトの名無しさん:2007/01/23(火) 23:46:15
>>36
反則も何も、イテレータの速度を計るのが目的なわけで。

>>37
厳密にはそうだね。
しかし、そこまで厳密である必要もないだろ。
4021:2007/01/23(火) 23:53:13
インタプリタ起動時間も含めて計測しました。念のため、内部・外部イテレータを
使っていることを明確にするためコードを変えて。

Ruby1.8.5(0:03.418)
YARV (0:01.363)
Python2.5(0:01.014)

若干YARVとPython2.5の差が縮まったが、順位は変わらず。

def f():
    a = range(1000)
    for i in iter(a):
        for j in iter(a):
            yield 0
for i in f():
    pass

def f
  a = Array.new(1000)
  a.each do |i|
    a.each do |j|
      yield 0
    end
  end
end
f{|i|}
41デフォルトの名無しさん:2007/01/23(火) 23:54:11
で、おまいら、外部イテレータが欲しいと思った事ってあるのか?
42デフォルトの名無しさん:2007/01/23(火) 23:59:46
ある。
43デフォルトの名無しさん:2007/01/24(水) 00:10:29
たまにある。例えばGUIでキャンバスに図形を書く場合、OneStepずつ確認したい
とする。

def draw():
    for x in xrange(100):
        for y in xrange(100):
            # draw with x,y

こういう場合、draw with x,y の行の後ろにyieldを入れればdraw()はジェネレータに
なるので

it = draw()
Tk.Button(command=it.next)

のようにすればボタンを押すごとに描画する機能が安直に実現できる。
4443:2007/01/24(水) 00:13:41
他にも巨大なテキストファイルがふたつあったとする。内容を比較したい場合、
内部イテレータでは、どちらかを全部読み込まないと比較できないが、
外部イテレータでは並列に読み込みながら比較できる。
4543:2007/01/24(水) 00:19:13
まあ、RubyにもIO#readlineはあるから、全部読み込まなくても比較できるか。
でもこれも外部イテレータみたいなものだね。
46デフォルトの名無しさん:2007/01/24(水) 00:28:25
http://icpc.baylor.edu/Past/icpc91/finals/Problems.html
の問題Fに0,00,01,10,000,001,010,011,100のような無限に続く数列を
必要とする部分があるんだけど、こういうのもジェネレータを使うとすっきり
書ける。

import itertools

def keys():
    for length in itertools.count(1):
        for i in xrange((1 << length) - 1):
            s = ""
            while len(s) < length:
                s = str(i & 1) + s
                i >>= 1
            yield s

もちろん配列を使っても書けなくはないが、外部イテレータがあると便利というのは
得てしてこういう場面。(たくさんあるものから、ひとつずつ小出しにしたい)
47デフォルトの名無しさん:2007/01/24(水) 01:14:26
えっと、assertしたいときはruby的にはどうすればいいんでしょ。

raise "assert" unless moge == "moge"

こんな感じ?
48デフォルトの名無しさん:2007/01/24(水) 01:14:51
>>43
なるほど。確かに便利だな。
49デフォルトの名無しさん:2007/01/24(水) 01:26:52
>>47
そんな感じ。

標準ライブラリのrunitも、本来はテストプログラム用のフレームワークだが
require 'runit'
include RUNIT::Assert
して
assert_equal("moge", moge)
みたく普通のプログラムで使うこともできるっちゃできる。
50デフォルトの名無しさん:2007/01/24(水) 11:45:20
パズルで速度比較してみた。結論から言うと、クラス定義するとPythonより
YARVはええ!だった。

http://upload.isitex.net/download.php?file=b36d5d1158f177ba3ef8f2b03aeed058

実行時間(秒)クラスあり クラスなし
Ruby1.8.5 1.725 1.215
YARV 1.177 0.909
Python2.5 1.585 0.618

ICPC98のアジア予選の最初の問題。self. VS @ っていうのが書きやすさだけでなく、
最適化にも効いてるんだろうか。
(毎回selfをローカル変数として探すから遅い?yokuwakaran)
5150:2007/01/24(水) 11:53:49
あ、goldbach.{rb,py]がクラスありで、goldbach-notoop.{rb,py}がクラスなしね。
52デフォルトの名無しさん:2007/01/24(水) 13:33:31
というか、クラス定義した時のPythonのオーバーヘッドでかすぎねえ?
53デフォルトの名無しさん:2007/01/24(水) 13:48:37
YARV 1.177 0.909
殆ど変わんないんだ。凄いな。
54デフォルトの名無しさん:2007/01/24(水) 13:54:30
そんな希ガス。もうひとつやってみた。

http://upload.isitex.net/download.php?file=3829109c002395e13bb6d77ead4768cb

Python2.5 7.110
YARV 8.664
Ruby1.8.5 15.010

クラス使ってるにもかかわらず、今度はPythonが逆転している。
ま、大きめのスクリプトだから最適化しだいで変わってくるかもだけど、
以外に差がなくて驚いた。
55デフォルトの名無しさん:2007/01/24(水) 14:14:44
メソッドの呼び出しはメモリ効率犠牲にしてそうな気がする。
56デフォルトの名無しさん:2007/01/24(水) 15:43:17
YARV版RubyとPython 3000はどちらが先に正式リリースされるんですか?
57デフォルトの名無しさん:2007/01/24(水) 16:00:00
Python3000の正式リリース予定は3000年。
YARV版Rubyである1.9.1のリリース予定は今年のクリスマス。
58デフォルトの名無しさん:2007/01/24(水) 16:22:25
YARVはええ!
59デフォルトの名無しさん:2007/01/24(水) 19:41:25
というか、外部イテレータって結構コスト高いよね?
処理の実行状態を保存したまま処理を返す必要があるんだから。
60デフォルトの名無しさん:2007/01/24(水) 19:56:39
そうでもないという結論に達したはずだが。現に外部イテレータを採用している
Pythonの方が速いしね。
61デフォルトの名無しさん:2007/01/24(水) 19:58:42
>57
嘘つき、早ければ今年の6月にアルファ版リリースって書いてある。
ttp://lwn.net/Articles/214931/
また早くなるんじゃないの?
62デフォルトの名無しさん:2007/01/24(水) 20:19:57
>>60
いや、「そうでもないかもしれない」だけだって。
同じ処理系内で内部イテレータと外部イテレータをそれぞれ真面目に実装した上で比較しないと、実際の差はわからん、としか言いようがないってば。
Python 2.5の速度から言えることは、「外部イテレータもそれほど遅くはないのではないだろうか」という示唆が得られたというくらい。

>>61
嘘じゃないよ。聞かれたのは「Python 3000の正式リリース」なんだから。
Python 3.0に関しては、来年リリースの予定だね。
63デフォルトの名無しさん:2007/01/24(水) 20:37:53
メモリ容量的にはどうなんだ?
64デフォルトの名無しさん:2007/01/24(水) 20:42:04
メモリ容量より、実行速度
65デフォルトの名無しさん:2007/01/24(水) 21:00:09
外部イテレータは状態を保存するから遅いという言質はRubyの内部イテレータが
フレームを保存したり色々重い処理を行っているという事実を無視しているな。
66デフォルトの名無しさん:2007/01/24(水) 21:06:11
Pythonでスマソ。

import time
n = 1000000
def f():
    for i in xrange(n):
        yield i
def g(f):
    for i in xrange(n):
        f(i)

t1 = time.time()
for i in f():
    pass
t2 = time.time()
print t2 - t1 # 0.861999988556

t1 = time.time()
g(lambda i: None)
t2 = time.time()
print t2 - t1 # 1.04099988937
67デフォルトの名無しさん:2007/01/24(水) 21:08:56
ひそかに、Python使える人も多いんですかね。
68デフォルトの名無しさん:2007/01/24(水) 23:05:20
まあ、たしなむ程度だけどな。
69デフォルトの名無しさん:2007/01/24(水) 23:31:32
PerlやPythonもろくに使えないでRuby最強とか言ってるのは一部のおかしい人だけだよ。
普通は、あの言語のああいうところはRubyにも欲しいとか、Rubyのこういうところはイケてないな、とか思いながらも、それでもRubyのどこかに魅力を感じてRubyを使ってるわけだ。
70デフォルトの名無しさん:2007/01/24(水) 23:51:06
Matzの魅力、オトコの魅力。
71デフォルトの名無しさん:2007/01/25(木) 00:20:01
もるもんハァハァ
72デフォルトの名無しさん:2007/01/25(木) 01:41:32
もるもんに萌えるのはマ板のスレでやってくれ
73デフォルトの名無しさん:2007/01/25(木) 17:02:54
クラスに定義されているインスタンス変数名のリストを、インスタンスからではなくクラス名から取得する方法はありますか?

Hoge.new.instance_variables
ではなく
Hoge::instance_variables
みたいに
74デフォルトの名無しさん:2007/01/25(木) 17:23:55
>>73
無理。

インスタンス変数は文字通りインスタンスに定義されるから。
クラスを定義しただけでは、どんなインスタンス変数が出来るか知りようがない。
75デフォルトの名無しさん:2007/01/25(木) 17:28:08
@hogeとかがそうなのでは?
76デフォルトの名無しさん:2007/01/25(木) 17:40:30
Hogeクラスのインスタンスが皆同じインスタンス変数を持ってるわけじゃないから
77デフォルトの名無しさん:2007/01/25(木) 18:06:31
同じ不二家の工場で作られた同じ製品でもモノによって細菌数が違うだろ。
78デフォルトの名無しさん:2007/01/25(木) 18:20:18
class Hoge
def initialize
@foo = nil
end

def piyo
@bar = nil
end
end

hoge = Hoge.new
p hoge.instance_variables
=>["@foo"]
hoge.piyo
p hoge.instance_variables
=>["@foo", "@bar"]
79デフォルトの名無しさん:2007/01/25(木) 23:13:40
暗号化をするには、どのモジュール。どのメソッドを使えばいいんですか?
md5ですか?
80デフォルトの名無しさん:2007/01/25(木) 23:56:08
>>79
したいことによる、としか言いようがない。
「md5ですか?」とか言ってるようでは、たぶん自分がしたいことがわかってないっぽいので、暗号化について勉強してくること。
81デフォルトの名無しさん:2007/01/26(金) 00:15:54
ユーザ認証なんです。。
82デフォルトの名無しさん:2007/01/26(金) 00:39:49
パスワードをハッシュ化して保存したいのか、
ハッシュ化されたパスワードと入力を比較したいのか、
認証の通信経路を暗号化したいのか、
それ以外か?


83デフォルトの名無しさん:2007/01/26(金) 05:58:33
>81
まずユーザ認証そのものを学んだ方が良いな
84デフォルトの名無しさん:2007/01/26(金) 11:59:56
ここは初心者スレじゃないんですか?
85デフォルトの名無しさん:2007/01/26(金) 12:00:38
hello='hello'
world='world'
hw="#{hello} #{world}"←ダブルクォート
print hw #hello world  @

を実行すると@のような結果になりますが

hello='hello'
world='world'
hw='#{hello} #{world}'←シングルクォート

print hw #hello world  A

上のコードで※でhwに何らかの処理をしてAの結果にする方法ってありますか?
86デフォルトの名無しさん:2007/01/26(金) 12:20:09
$ ruby -ve 'eval "str=\"a\"";p str'
ruby 1.8.4 (2005-12-24) [i386-linux]
-e:1: undefined local variable or method `str' for main:Object (NameError)

evalで定義した後は直ぐ使えないんでしょうか?
87デフォルトの名無しさん:2007/01/26(金) 12:38:32
str=をevalの前に出してみ。
88デフォルトの名無しさん:2007/01/26(金) 13:02:45
>>84
初心者スレとしては「認証を学べ」
本スレであの質問なら俺はスルーかな
89デフォルトの名無しさん:2007/01/26(金) 13:30:18
>>87
うーんどういう意味ですか?
$ ruby -e 'rb="str=\"a\"";eval rb;p str'
でも変わらずです
$ ruby -e '"str=\"a\"" eval;p str'
-e:1: warning: useless use of a literal in void context
-e:1: syntax error, unexpected tIDENTIFIER, expecting $end
90デフォルトの名無しさん:2007/01/26(金) 13:50:22
evalの中で初めて宣言された変数は
evalで実行されてるブロックスコープの
ローカル変数になってるってことじゃないかね
91デフォルトの名無しさん:2007/01/26(金) 14:34:40
>>84
質問自体が、rubyに限ったことじゃないし
ここで一から説明するには長すぎる。
92デフォルトの名無しさん:2007/01/26(金) 14:55:04
>>84
ここはRubyの初心者のスレであって、認証の初心者のスレじゃない。
どうしても答えがほしけりゃ、コテハン付けたうえでとりあえず>>82の確認事項に答えてみ?
93デフォルトの名無しさん:2007/01/26(金) 16:58:43
>>89
「str=」*だけ*をevalの前に出してみ。
$ ruby -e 'str = eval "\"a\"";p str'
94デフォルトの名無しさん:2007/01/26(金) 17:04:12
初心者は血祭り
95デフォルトの名無しさん:2007/01/26(金) 17:27:49
知識の劣るものを見つけたら罵倒せよ、それがRuby道なり
96デフォルトの名無しさん:2007/01/26(金) 17:33:01
Rubyの赤は血の赤だからな。
97デフォルトの名無しさん:2007/01/26(金) 18:31:02
何が得意げに「どうしても答えがほしけりゃ」だよw
んなレスいちいち書くなよ反吐が出るわ
98デフォルトの名無しさん:2007/01/26(金) 19:58:51
お前のレスにも反吐が出るがなー
99デフォルトの名無しさん:2007/01/26(金) 20:04:20
ていうか97だけ反吐が出る
100デフォルトの名無しさん:2007/01/26(金) 20:26:12
さすがRubyユーザ満ち足りた生活を送っているだけあって、気持に余裕がある。
101デフォルトの名無しさん:2007/01/26(金) 20:46:34
>>93
おおお、なるほど。出来ました。
ありがとうございました。

>>90
irb(main):001:0> eval "str1 = \"a\"" ;p str1
NameError: undefined local variable or method `str1' for main:Object
from (irb):1
from :0
irb(main):002:0> eval "str2 = \"a\""
=> "a"
irb(main):003:0> p str2
"a"
=> nil
となるんで、不思議なんですよ。
102デフォルトの名無しさん:2007/01/26(金) 21:57:35
>>101
確かにそうなった
これはどうしてだろう俺も知りたい
103デフォルトの名無しさん:2007/01/26(金) 22:06:58
>>101
それが起きるのはirbだけ。
104デフォルトの名無しさん:2007/01/26(金) 22:20:10
eval 'foo = 1'
p foo # => NameError

eval 'bar = 2'
eval 'p bar' # => 2

baz = nil
eval 'baz = 3'
p baz # => 3
ローカル変数が定義されるのはコンパイル時だからだと。
105デフォルトの名無しさん:2007/01/26(金) 23:05:30
irbのバグ?
106デフォルトの名無しさん:2007/01/26(金) 23:05:44
webアプリを作るのにrubyって有用ですか?
107デフォルトの名無しさん:2007/01/26(金) 23:08:36
Perlへの醜い敵愾心がRubyの原動力なので
その辺は勿論おさえてあります。
108デフォルトの名無しさん:2007/01/26(金) 23:14:05
rorとかいうやつみたいですね。
ありがとうございました。
109デフォルトの名無しさん:2007/01/27(土) 01:57:52
>>106
Railsが使える環境なら、有用。
そうでないなら、まともな軽量フレームワークがないので、ちょっと残念な状態。
110デフォルトの名無しさん:2007/01/27(土) 02:45:30
PHPとか見てると、フレームワークが多くていいな・・・。

【PHP】フレームワークについて語るスレ5【総合】
http://pc10.2ch.net/test/read.cgi/php/1159579507/
111デフォルトの名無しさん:2007/01/27(土) 13:17:08
>>110
どれ使ったらいいかわからんJavaと同じ状況とも言える。
その点ほらRubyならRails以外は世間的になかったことになってるので安心。
112デフォルトの名無しさん:2007/01/27(土) 23:37:03
以下のようなスクリプトで入力待ちの状態で Ctrl-C を押しても何も起こらず、
エンターで確定したあと Interrupt が発生します。
これを Ctrl-C を押したらすぐに終了するようにはどうすればいいでしょうか?

require "curses"
begin
Curses::init_screen
Curses::stdscr.addstr("% ")
Curses::stdscr.refresh()
s = Curses::stdscr.getstr()
Curses::stdscr.addstr(">>> %s \n" % s)
Curses::stdscr.refresh()
rescue
Curses::close_screen
end
113デフォルトの名無しさん:2007/01/28(日) 06:22:10
>>78 見て、思ったのですが

class X
attr_accessor :v
end

x = X.new
p x.instance_variables
y = x.v
p x.instance_variables
x.v = 1
p x.instance_variables

というスクリプトを実行すると結果は

[]
[]
["@v"]

となるのですが(ruby 1.8.5)、インスタンス変数は読み出しただけではまだ存在しないの?

114デフォルトの名無しさん:2007/01/28(日) 10:27:11
そのクラスには、初めはv()、v=()というメソッドしかない。だからv=()を呼ぶまで@vはない。
attr系のメソッドのことをよく調べてみれ。
115デフォルトの名無しさん:2007/01/28(日) 10:28:59
情報科教育法の資料とリンクのページ
http://www.is.osaka-kyoiku.ac.jp/~fujii/jkyoiku/index.html

ひそかにapollo入門記事
116デフォルトの名無しさん:2007/01/28(日) 10:46:50
ソートするキーの配列
keys=['key1', 'key3', ・・・]
ソート対象の配列
array=[{'key1'=>3, 'key2'=>1, 'key3'=>2, ・・・}, \
     {'key1'=>10, 'key2'=>2, 'key3'=>8, ・・・}, \
     {'key1'=>3, 'key2'=>5, 'key3'=>1, ・・・}]
があって、
array.sort{|x,y|
 key=keys.shift
 if((x[key]<=>y[key])==0) then
  key=keys.shift
  if((x[key]<=>y[key])==0) then
   key=keys.shift
   ・・・
  else
   x[key]<=>y[key]
  end
 else
  x[key]<=>y[key]
 end
}
結果
[{'key1'=>3, 'key2'=>5, 'key3'=>1, ・・・},
 {'key1'=>3, 'key2'=>1, 'key3'=>2, ・・・},
 {'key1'=>10, 'key2'=>2, 'key3'=>8, ・・・},
みたいなことをしたいんですけど、うまく書く方法はありますか?
117デフォルトの名無しさん:2007/01/28(日) 10:59:35
keysの要素にあるキーで順番に比較していって、
違いがあったらそこで確定。
等しければ次のキーで比較、なのかな。

array.sort_by {|e| keys.map {|key| e[key]} } だろうか。


118デフォルトの名無しさん:2007/01/28(日) 16:15:02
keys.map {|key| e[key]}

e.values_at(*keys)
と書ける。
119デフォルトの名無しさん:2007/01/28(日) 16:16:22
>>112
即座にInterruptで終了したがな。linuxだと。
120デフォルトの名無しさん:2007/01/28(日) 18:00:58
>>119
環境を書いてなくてすません。
普段は Cygwin/ck/screen/zsh で使っているのですが
ck でなく cmd 上の bash でやっても同じでした。
ruby は 1.8.5 (2006-08-25) [i386-cygwin] です。

生の Linux 環境はもってないのですが、
Cygwin/ssh や putty で coLinux に ssh しても、
やはり Ctrl-C で終了しませんでした。
Windows の問題なんでしょうか?
121113:2007/01/28(日) 18:25:56
>>114 さん、レスありがとう。attr_accessor使わないで

class X
def v()
@v
end
def v=(val)
@v = val
end
end

x = X.new
p x.instance_variables => []
z = x.v
p x.instance_variables => []
x.v = 1
p x.instance_variables => ["@v"]

と書くのと同義だということだというのはわかるのですが、メソッドv()を実
行してインスタンス変数@vを参照している(このときに変数が存在しないとい
うエラーは発生しない)のに、その後でも@vはまだ存在しないのかなあ?とい
うのがちょっと疑問だったのです。

プログラミングRuby第2版言語編p288に、「初期化されていないインスタンス
変数を参照するとnilが返されます」とあるので、未定義なインスタンス変数
を参照してもエラーは発生しない「仕様」だけれども、なにかの値が代入され
るまではインスタンス変数は存在しない、という「仕様」だという理解でよい
のかな?
122デフォルトの名無しさん:2007/01/28(日) 19:31:14
Rubyに仕様なし!
123デフォルトの名無しさん:2007/01/28(日) 20:00:16
それはしようがないな
124デフォルトの名無しさん:2007/01/28(日) 21:04:18
>>121
初期化 ∈ 代入。
まあ動的言語だし。
はじめっから持ってなきゃダメなら、initializeで
適当に初期化しる。
125デフォルトの名無しさん:2007/01/28(日) 21:51:36
ruby-lang.org繋がりにくいんですけど
なんかあるんスカ?
126デフォルトの名無しさん:2007/01/28(日) 23:08:53
動的言語の名のもと、すべてを正当化します!!
127デフォルトの名無しさん:2007/01/29(月) 05:46:18
>>117-118
こんなにスマートに書けるのか
ありがとう
128デフォルトの名無しさん:2007/01/29(月) 13:49:23
>>121
そういうこと。
それをruby -vで実行すれば警告が出る。

129デフォルトの名無しさん:2007/01/29(月) 16:11:56
すみませんが、質問です。
Rubyのトップレベルは、いったいどういう仕組みなのでしょうか?

selfが"main"という名のObjectクラスのインスタンスだが、どうもklassポイ
ンタはObjectクラスそのものを指しているらしいところまでは分かりました。
だから関数宣言すると、Objectクラスにメソッドが追加されますし、トップレ
ベルでpublicを実行すると、トップレベルで定義した関数をメソッド風にも呼
べます。
public
def hoge; "hoge"; end
Object.new.hoge => "hoge"

分からないのは、インスタンス変数の振る舞いです。
まず、トップレベルでインスタンス変数が使えます。
しかも、クラス定義内での挙動と違い、関数の中からも参照できてしまう。
@hoge = 1
def get_hoge; @hoge; end
get_hoge() => 1

しかも、インスタンス変数を宣言すると、selfが代わってしまうのです。
self ==> main
@hoge = 1
self => #<Object:0x402ae9c0 @hoge=1>

これはいったい何が起こっているのでしょうか?よろしければ参考になるペー
ジ等もお教えいただけたらと思います。
130デフォルトの名無しさん:2007/01/29(月) 19:02:07
1 == (0 || 1 || 2)
こういう式でtrueを得たいのですが
(1 == 0) || (1 == 1) || (1== 2)
としないと期待した評価が来ないのです。
こういうもんなんですかね。
131デフォルトの名無しさん:2007/01/29(月) 19:14:19
p (0 || 1 || 2) => 0
だもの。
132デフォルトの名無しさん:2007/01/29(月) 19:26:39
Rubyでは偽はfalseとnilのみ。
Rubyの0は真。ついでながら、""も[]も真。
133130:2007/01/29(月) 20:19:48
>>131
そういう事ですよね。ありがとうございました。
134デフォルトの名無しさん:2007/01/29(月) 20:31:28
こんな関数を作ればいいのかな。もっと簡潔に書けそうな気もするが。

irb(main):001:0> def multi_equal(x, list0)
irb(main):002:1>   list0.each {|i| return true if x == i}
irb(main):003:1>   false
irb(main):004:1> end
=> nil
irb(main):005:0> multi_equal(1, [0, 1, 2])
=> true
irb(main):006:0> multi_equal(3, [0, 1, 2])
=> false
135デフォルトの名無しさん:2007/01/29(月) 20:34:34
スレ違いだが、Pythonだとこんな書き方があるなあ。

>>> 1 in [0, 1, 2]
True
>>> 3 in [0, 1, 2]
False
136デフォルトの名無しさん:2007/01/29(月) 20:46:38
ならこれでいいじゃん。nilとfalse以外はtrueなんだから。

irb(main):001:0> [0, 1, 2].index(1)
=> 1
irb(main):002:0> [0, 1, 2].index(3)
=> nil
137デフォルトの名無しさん:2007/01/29(月) 20:54:30
>>136
>>135が言いたいのは、「Pythonの方が美しい。自然だ。」ということなんじゃねえ?
138デフォルトの名無しさん:2007/01/29(月) 20:56:14
いや、これでいいだろ。

irb(main):001:0> [0, 1, 2].include?(1)
=> true
irb(main):002:0> [0, 1, 2].include?(3)
=> false
139デフォルトの名無しさん:2007/01/29(月) 21:07:07
>135と>138に同意。
140135:2007/01/29(月) 21:25:52
>>137
いや、比較する意図はなかった。自分はRuby初心者なんで、Rubyでの書き方を
知りたかっただけ。しかし、実際に見ると、比較したくなるなあ。

>>138
これはきれいだ。専用の構文を必要としない点では、Rubyに軍配が上がると思う。

しかしPythonの x in y だと、y にイテレータを取ることができる。
だから例えば、ファイル上やネットワーク越しの巨大集合との逐次比較もできる。
メモリ上に巨大なリストを置く必要がない。
そういうのはRubyだとどうなるのかな?
141デフォルトの名無しさん:2007/01/29(月) 21:35:54
include?はeachを持つオブジェクトに対してなら呼べる。
たとえばIOクラスのインスタンス(File.openの返値とか)なら
open('hoge').include?("#¥n")
とか。(#のみの行があれば真を返す)

include?は同値比較なのでこの例だと普通は
open('hoge').find {|line| /^#$/ =~ line }
みたく正規表現でfindするけどね。
142デフォルトの名無しさん:2007/01/29(月) 21:38:41
なんかデジャブを見ているよな気が。。。
錯覚か
143デフォルトの名無しさん:2007/01/29(月) 21:41:55
part7の219以降の流れだな。
144135:2007/01/29(月) 21:45:36
>>141
なるほど、EnumerableモジュールのMix-inか。
Rubyも上手くできているなあ。
勉強になりました。ありがとう。

>>142-143
既出だったようですまん。その該当箇所も読んでみる。
145113:2007/01/29(月) 22:59:37
ありがとう >>128 さん
なるほど ruby -v で warning が表示されますね(1.8.5 使用)。
同義なはずの attr_accessor 使ったコードだと warning が出ないのは意図的なのかな?
146129:2007/01/30(火) 01:34:56
すみません、どなたか心当たりのある方はおられませんか?
もしかして、これは高度で難解な答えしかない問いなのでしょうか?
147デフォルトの名無しさん:2007/01/30(火) 01:43:55
$ cat test.rb
p [ self, self.object_id, self.class ]
@x = 100
p [ self, self.object_id, self.class ]
$ ruby test.rb
[main, 107770, Object]
[#<Object:0x349f4 @x=100>, 107770, Object]

とりあえず、同じオブジェクトのままではあるようだ。
あとはちとソース見てみるわ。
148デフォルトの名無しさん:2007/01/30(火) 01:52:23
これかな。

object.cの
static VALUE
rb_obj_inspect(VALUE obj)

ROBJECT(obj)->iv_tbl->num_entries > 0 ってことは
つまり1つでもインスタンス変数があったら、
<%s:%p, インスタンス変数を再帰的に>
という出力に、そうでなければ、to_sの結果となる。

ただし、トップレベルのselfである main には特異メソッドとして
to_sが"main"を返すように定義されているので、最初は "main" と出る。

149デフォルトの名無しさん:2007/01/30(火) 02:16:19
>>148
乙。

mainにもinspectを定義してあった方が親切かもねえ。
150129:2007/01/30(火) 02:50:15
ありがとうございます。mainと同じものだったのですね。
もっとよく調べるべきでした。すみません。


もう一つの疑問
「トップレベルで定義したインスタンス変数は、なぜトップレベルの関数から
 アクセスできるのか?」
についてはいかがでしょうか?

クラス定義内のインスタンス変数の場合、特異クラスからのアクセスしかできないの
ですが、(http://www.amazon.co.jp/dp/4274066428 のP336)
トップレベルに限って、そうではないのです。

これは、selfとklassが別のオブジェクトを指しているのが原因なのでしょうか?
また、トップレベルのインスタンス変数は、どのようなスコープを持つと考えら
れるでしょうか?
151デフォルトの名無しさん:2007/01/30(火) 02:54:02
>>129
>まず、トップレベルでインスタンス変数が使ゑます。
これって、要は、

class Object
 def xxx
  @zzz = "ここと同じ挙動なんじゃないの?"
  def yyy
   p @zzz
  end
 end
end

xxx; yyy

クラス定義中と同じってのは、何処に書いてあるン?
152129:2007/01/30(火) 04:02:52
>>151
申し訳ありません。ちょっと取り込み中で、ご返事が遅れました。
なるほど、クラスではなく、メソッドの内部ですか!
考えてみたら、メソッドの中でもメソッドは定義できますね。盲点でした。
153129:2007/01/30(火) 12:18:09
すみません、また疑問が出てきました。

知人から言われたのですが、
「トップレベルがもしメソッド定義の内部だとしたら、そこではクラスを定義
 できないじゃないか」
ということなのです。

def hoge; class Hoge; end; end
確かにこれはエラーになります。

またしてもトップレベルの正体が分からなくなりました。
154デフォルトの名無しさん:2007/01/30(火) 21:32:31
MacOS XのTerminal.appでscreenを使っているときにirbを起動して終了すると、C-aではじまるscreenのホットキーが使えなくなります。
同様の症状になった人いませんか。

155デフォルトの名無しさん:2007/01/31(水) 00:30:04
Terminal.appとscreenとirb使ってるけど問題起きたことないな
ホットキーは^tにしてる
156129:2007/01/31(水) 01:06:18
どうもご回答がいただけないようです。

トップレベルについては、
・RHGを読み込んでソースに通暁する
・こういうものだと諦める
この二択しかないということなのかもしれません。

トップレベルのすべてを理解しなくても
・関数の正体はObjectクラスのprivateメソッド
・インスタンス変数の正体は mainオブジェクトのインスタンス変数
・定数はObjectクラスに属するので、すべてのスコープから見える。
http://i.loveruby.net/ja/rhg/book/minimum.html
http://i.loveruby.net/ja/rhg/book/images/ch_minimum_constref.jpg

このぐらいを押さえておけば、コードの挙動は予想できるのかもしれません。
157デフォルトの名無しさん:2007/01/31(水) 01:46:11
>>150
> 「トップレベルで定義したインスタンス変数は、なぜトップレベルの関数から
>  アクセスできるのか?」
selfがmainのままだからmainのインスタンス変数はアクセスできる。というだけ。
158デフォルトの名無しさん:2007/01/31(水) 02:09:38
>>149
Object#inspectが#to_sを元にするようにしてみた。
けど、適当なuploaderってどっかある?
159129:2007/01/31(水) 02:43:39
>>157 ありがとうございます。
今、以前読んでわからなかった記事を読み返しています。

Rubyの呼び出し可能オブジェクトの比較 (3) - なんかklassの話
http://idm.s9.xrea.com/ratio/2006/11/29/000558.html

今回は分かったような分からないようなです。もう少し考えてみます。
160デフォルトの名無しさん:2007/01/31(水) 10:01:38
______ここまで読んだ_______
161デフォルトの名無しさん:2007/01/31(水) 12:49:08
PHPで言うところの

header("Location: 〜");

をrubyでやるには、どのようにすればいいんでしょうか?
162デフォルトの名無しさん:2007/01/31(水) 12:52:42
すみませんが、質問です。
Rubyで文字列テンプレートを作るにはどうすればよいのでしょうか?

標準で式展開がありますが、
http://www.ruby-lang.org/ja/man/?cmd=view;name=%A5%EA%A5%C6%A5%E9%A5%EB#a.bc.b0.c5.b8.b3.ab
これは1回限りのもので、テンプレート的使い回しには向いていないようです。

self % args
http://www.ruby-lang.org/ja/man/?cmd=view;name=String#self.20.25.20args
こちらはテンプレートとして使えますが、変数名を埋め込めないので、テンプ
レートが分かりづらいのが欠点だと思います。

Pythonの文字列テンプレートみたいなものがあれば、ありがたいのですが。
http://www.python.jp/doc/2.4/tut/node13.html#SECTION0013200000000000000000
163デフォルトの名無しさん:2007/01/31(水) 12:55:56
個人的にはruby-gettextによるString#%の拡張がおすすめ。

"Name: %{name}, Age=%{age}" % { :name => 'AAA', :age => 25 }
164162:2007/01/31(水) 13:22:02
>>163
ありがとうございます。標準には存在しないということでしょうか。
意外でした。
165154:2007/01/31(水) 13:31:24
>>155
そうですか。ほかに同様の症状になった人いませんか。

>>161
require 'cgi'
cgi = CGI.new
print cgi.header('type'=>'text/html',
'charset'=>'utf-8',
'Location'=>'http://www.example.com')
166161:2007/01/31(水) 13:36:16
>>165
ありがとうございます。
愛してる。
167デフォルトの名無しさん:2007/01/31(水) 13:37:11
標準だとerbで
Hello, <%= name %>!
とか書くというのもあるけど、この程度じゃ#{}と大差ないな。
168デフォルトの名無しさん:2007/01/31(水) 13:38:36
>>164
eRubyではだめでしょうか。

s = "name: #{name}, age: #{age}"
require 'erb'
erb = ERB.new(s)
name = 'foo'; age = 20
print eval.result(binding())

string.Templateと違って、式だけでなくfor文やif文を埋め込むことができます。
169デフォルトの名無しさん:2007/01/31(水) 13:40:51
>>168
うそ、間違えた。
s = "name: <%=name%>, age:<%=age%>"
name = 'foo'; age = 20
require 'erb'
print ERB.new(s).result(binding())
170162:2007/01/31(水) 15:00:26
>>167-169
ありがとうございます。
eRubyは埋め込み用の変数に値を代入する必要があるので、即値を与えられる
Ruby-GetText の方が、自分の用途には使いやすそうな気がします。
171デフォルトの名無しさん:2007/02/01(木) 12:50:06
継承元のnewをオーバーロードすることは可能でしょうか?
引数の数を変えても駄目だったのです。
172デフォルトの名無しさん:2007/02/01(木) 13:12:19
newじゃなくinitializeのほうだと思うのだけど?
でもって、オーバーロード(多重定義)じゃなくてオーバーライド(上書き・再定義)。
173デフォルトの名無しさん:2007/02/01(木) 13:54:54
もし本当にnewを再定義したいのなら、うっかりインスタンスメソッドとして
定義しないでね。
174デフォルトの名無しさん:2007/02/01(木) 14:31:31
初心者ばりばりな質問ですいません^^;
そうです。new ではなく intialize を定義したいんです。
継承元クラスの intialize に色々プラスしたものを返したいんです。

具体的にコードを書きますのでよければご教授宜しくお願いします。
引数の文字列で指定されたブラウザを立ち上げたいのです。

class Ole < WIN32OLE
def initialize(browser = 'ie',visible = true)
case browser
when 'ie'
oie = super('InternetExplorer.Application')
oie.Visible = visible
when 'Sleipnir'
sleipnir = super('Sleipnir.API')
nIndex = sleipnir.NewWindow('',visible)
oie = sleipnir.GetWebBrowserObject(nIndex)
end

@oie = oie
return oie
end
end

オーバーライドの方法や、「こうすればもっとスマートに書ける」
等の意見も貰えたらうれしいです。


175デフォルトの名無しさん:2007/02/01(木) 14:45:23
>>158
ruby-dev
176デフォルトの名無しさん:2007/02/01(木) 14:57:21
>>174
することだけ考えると関数のほうが適当かも
def open_browser(browser = 'ie', visible = true) とか
これから色々機能つけるのなら、継承よりは内部に持った方が安全
177174:2007/02/01(木) 18:57:32
>>176
なるほど。ついつい判り始めた継承を使ってしまうのが、
すでに間違いだったんですね。;

また色々組み立てなおしてみます。
ご意見ありがとうございます。
178デフォルトの名無しさん:2007/02/01(木) 21:15:09
Ruby だとほとんど継承を使わないオレがいる
179デフォルトの名無しさん:2007/02/02(金) 02:34:24
判り始めた my revolution
180デフォルトの名無しさん:2007/02/02(金) 08:45:40
GUIプログラミングだと継承いっぱい使う
181デフォルトの名無しさん:2007/02/04(日) 16:49:39
10個の任意の数字を昇順(小さい数から大きい数)に並び替えるプログラムを作成しなさい

注意事項及びヒント:

sortメソッドは使用しないこと
配列を使用した方が並び替え易いと思います
182デフォルトの名無しさん:2007/02/04(日) 16:53:49
>>181
来年度は単位が取れるように講義を受けなさいね。
183デフォルトの名無しさん:2007/02/04(日) 17:20:49
>>181
array = array.sort_by {|i| i}
184デフォルトの名無しさん:2007/02/04(日) 20:15:46
>>181
class Array
alias :narabi_soroeru :sort
end

p array.narabi_soroeru
185デフォルトの名無しさん:2007/02/04(日) 20:24:27
>>183
問題良く嫁
186デフォルトの名無しさん:2007/02/04(日) 20:27:03
>185
ちゃんとsortメソッドは使ってないじゃん。
187デフォルトの名無しさん:2007/02/04(日) 21:52:36
>>181
バブルソートくらい自分で書け
188デフォルトの名無しさん:2007/02/04(日) 22:18:49
>>181
こちらへどうぞ

RUBYの宿題教えてください。
http://pc10.2ch.net/test/read.cgi/tech/1106572657/
189184:2007/02/04(日) 22:20:01
漏れだって:sortはシンボルだから、
sortメソッドは使ってないぜ。
190デフォルトの名無しさん:2007/02/04(日) 22:29:56
ruby_1_8 ブランチの最新版を VC8 でビルドすると以下のエラーメッセージが出て失敗しますが
どうしたらエラーを回避できるでしょうか? VC7.1 ではエラーが出ませんでした。

C:/tmp/ruby/win32/mkexports.rb:8: [BUG] Segmentation fault
ruby 1.8.5 (2007-01-31) [i386-mswin32_80]
191デフォルトの名無しさん:2007/02/05(月) 01:16:20
今試したけど、再現できんなぁ。
192デフォルトの名無しさん:2007/02/05(月) 18:41:33
木構造を描画したいのですが、Rubyではどんな方法が簡単でしょうか。
下のようなイメージで描画したいです。
    C
   /\
  A  B
 ・・・・・・
193デフォルトの名無しさん:2007/02/05(月) 19:01:08
何に書く/描くの?
テキスト(AA)として?
何かのGUI部品に?
画像に直接?
194192:2007/02/05(月) 19:05:10
>>193
GUI部品に描画できればベストですが、
難易度によってはAAでやりたいです。
195デフォルトの名無しさん:2007/02/05(月) 19:21:01
GUI部品でも基本的には絵を描いて、描いた絵を貼る感じになるんじゃ
ないだろうか。それだったらRMagickとかで絵を描けばいいんじゃない?

http://rmagick.rubyforge.org/portfolio3.html
196デフォルトの名無しさん:2007/02/05(月) 22:41:42
レシピブックを見たけど、
Rubyを使えばあまりに簡単すぎる題が多すぎないか?
たま〜にしかコード書いてない俺でさえ、
「おっ」と思うようなのがチラホラとしか無くて
ふざけてんのかと思った。
197デフォルトの名無しさん:2007/02/05(月) 23:12:52
>>192
cairo とかどうよ?
linux 向けかもしれないけどさ。
198デフォルトの名無しさん:2007/02/05(月) 23:33:09
>196
たしかに私もレシピブック(旧版)は買ったけど一回も参照したことがない。

でもレシピブックってそもそもそういうものじゃないかなぁ。小さな部品単位
で示す。あんまり特定的・具体的になりすぎず、いろんな局面で使えるコード
例を示す、っていう。
perl cookbook とかもそうじゃない?

で、やり方が微妙に違う場合にそれがどう違うのか、どう使いわけるか、って
いうのがどれだけうまく書いてあるか、ってのがあのテの本のポイントな気が
する。
199デフォルトの名無しさん:2007/02/05(月) 23:44:24
じゃあ、Ruby tricky code 集なんてあるといいかもね。
200デフォルトの名無しさん:2007/02/06(火) 00:08:55
ruby 1.6.8でtouch使えないので、cvsweb見て、
File.open("/home/hoge/test", 'a') {
;
}
をヲレスクリプトにパクって来たが、空ファイルが作られないのはなぜ?
201デフォルトの名無しさん:2007/02/06(火) 00:39:59
touchが動かないってことは?
そもそも権限がないんじゃないのか?
202デフォルトの名無しさん:2007/02/06(火) 01:00:25
>>200
system("touch /home/hoge/test")
じゃ駄目なん?
203デフォルトの名無しさん:2007/02/06(火) 01:36:29
おいおい、1.6.8にはFileUtilがないってことじゃないの?

rubyって自前で空ファイル作れない仕様だっけ?
204デフォルトの名無しさん:2007/02/06(火) 01:42:27
>>200
1.6.8で問題なく空ファイルできたよ
>>201の言うとおりではないかと
205デフォルトの名無しさん:2007/02/06(火) 02:44:38
>>198
perl cookbook もあんな程度なんかな
206デフォルトの名無しさん:2007/02/06(火) 03:01:13
そーいえば実際のコードでは
do〜endとかのブロック使う人が大半な中、
レシピブックでは {〜} が使われてるんだな。
紙の上だから対応関係がパッと分かるようにだろうけど。
自分自身そっちのスタイルなのに何故か違和感覚えてしまった。
207デフォルトの名無しさん:2007/02/06(火) 07:36:47
レシピブックはレシピというよりサンプル程度
あんな本絶対に買っちゃだめだよ
208デフォルトの名無しさん:2007/02/06(火) 10:26:02
見直してみた。
File.open(filename, 'a') {
の前のif文の条件(filenameが無ければ真)が間違ってた。orz
209デフォルトの名無しさん:2007/02/06(火) 12:48:27
ズコー
210デフォルトの名無しさん:2007/02/06(火) 14:19:30
なんか聞くからにレースコンディションなコードだな。
211デフォルトの名無しさん:2007/02/06(火) 18:36:49
いやー、Ruby や Perl みたいに
There's More Than One Way to Do It. な言語にこそ、
定石集であるレシピブックの価値があると思うがなぁ。
実際、忘れっぽい俺はすごく助かってるし。

(レシピブックを参照してばっかだから、いつまで立っても定石を覚えないのか?)
212192:2007/02/06(火) 18:41:37
RMgickで困っています。どうやらインストールには成功したようなのですが、
>C:\workshp>gem install rmagick-1.13.0-win32.gem
>Successfully installed rmagick, version 1.13.0

require RMgickすると
>`require': no such file to load -- RMagick (LoadError)
このエラーメッセージが出てきます。

http://mpl.s59.xrea.com/comp/rmagick.html
このサイトでは、postinstall.rbを実行すれば良いと書いてあるのですが、
postinstall.rbを探してもありません。
また、適当にPathを通してみたのですがどうにも上手くいきません。
どうすればいいでしょうか。
ruby 1.8.5 (2006-08-25) [i386-mswin32]です。
213デフォルトの名無しさん:2007/02/06(火) 18:51:10
gemで入れたのならrequire 'rubygems'が必要じゃない?
214192:2007/02/06(火) 22:41:24
>>213
貴方はエスパーですか・・・。
本当にありがとうございました。
215デフォルトの名無しさん:2007/02/07(水) 11:50:29
aaaa 53 353525252
aaa aaaa at3352352

例えばこのような各行があるとき
splitで、aaaaと53と35...をそれぞれ別の変数に格納したいと思います。次の行も同様にaaaとaaaaとat33...と別々に格納したいです。

最初から、タブで区切られてるようではありません。
ff, gg, hh = gyou.split(/\t/).values_at(0,1,2)
ですと、ffに全て格納されてしまいます。ggとhhの中は何もないです。
タブで区切られてないのでできないと思い、(/\s\)でスペースで区切ったのをそれぞれに格納するようにしたところ
ffに最初の列しか格納されていませんでした。

ffにaaaa
ggに53
hhに3535.. を格納するにはどうすればよいのでしょうか?
よろしくお願いします。
216デフォルトの名無しさん:2007/02/07(水) 11:57:45
まずやらなければならないのは
p gyou
217デフォルトの名無しさん:2007/02/07(水) 15:31:47
ff, gg, hh = gyou.split

いらんことすんな、としか言いようがない。
218デフォルトの名無しさん:2007/02/07(水) 16:48:11
ちょっと質問であります。
PHPをずっと使ってるんですが、PHPが使えない案件がありましてかわりにRubyどうだろうって話になったんですが。
HTMLの自動生成や動的コンテンツなんかにRubyってどうなんでしょう?
Javaみたいに高度な知識が必要だったりすると手に負えないんですが、本職デザなもので…。
219デフォルトの名無しさん:2007/02/07(水) 17:05:23
phpが使えなくて、rubyが使える案件って???
普通はperlとかのほうが使えないか?

デザは無理せずに、ウェブプログラマに外注したら?
ウェブプログラマもデザインは外注するし、相互補完したほうが良い。お互いに餌場漁ったら絶滅するよ(w
220デフォルトの名無しさん:2007/02/07(水) 21:09:17
RUBYで動画ファイルを扱うクラスなんてないでしょうか?

sフレからeフレまでの切り出しや、cフレ目のキャプチャを作成。
みたいなことをしたいのですが。

宜しくお願いします。
221デフォルトの名無しさん:2007/02/07(水) 22:04:34
http://rubyforge.org/projects/rmovie/

rmovie is Ruby extension for accessing information in media files. rmovie can access many media formats (mov, avi, mpg, wmv...) and can output movie frames to RMagick. Use http://groups.google.com/group/rmovie for feedback.

Rubyforgeにこんなのがあったが使えるかね?
222デフォルトの名無しさん:2007/02/08(木) 01:03:19
最近Javaを始めたらメソッドのアクセス制御が
ずいぶんRubyと違ってて困惑気味。
どちらの方式が実用的 or 使い易いもんでしょうか。
223デフォルトの名無しさん:2007/02/08(木) 02:08:52
>>222
どちらか片方しか使えないようなプログラマは実用的でない、とは言える。
224デフォルトの名無しさん:2007/02/08(木) 04:40:00
>>215
split(/¥s/)だと区切り文字が空白1文字になるので、spaceが連続しているときに困る。
split(/¥s+/)とするか、>>217のようにする。

>>218
PHPがつかえなくてRubyが使えるというのも珍しいけど、Rubyで大丈夫。

>>222
どっちがいいかは慣れまたは好みの問題。どっちにも利点と欠点があるので一概にはいえない。
225デフォルトの名無しさん:2007/02/08(木) 11:00:15
Rubyのは仕様がないので欠点だらけ
226デフォルトの名無しさん:2007/02/08(木) 12:35:14
>>222
この辺りまとめたのは、ないかね?
rubyのprivateが、javaのprotected相当というのは、知ってるが
227デフォルトの名無しさん:2007/02/08(木) 13:03:14
>>221
ありがとうございます!
かなり目的に合ったライブラリーのようですね。

しかし、gemインストールの時点で躓いてしまいました。
gem install rmovie --remote
を実行するとエラーが出ます。
gemファイルを落として --local でも失敗してしまいます。

rubyにパスは通しており、バージョンは1.8.5です。

どなたか宜しくお願いします。


C:\>gem install rmovie --remote
Building native extensions. This could take a while...
can't find header files for ruby.

ERROR: While executing gem ... (RuntimeError)
ERROR: Failed to build gem native extension.
Gem files will remain installed in C:/ruby-1.8/lib/ruby/gems/1.8/gems/rmovie-0.5
.1 for inspection.
228デフォルトの名無しさん:2007/02/08(木) 13:16:14
>>227
gemの失敗した記録が最後のディレクトリの下のどっかに
あるはずなので見てみては?

Windowsだと、cygwinとかないと作れないのかもしれんね。
229デフォルトの名無しさん:2007/02/08(木) 18:35:40
コンパイラがないだけだろ。
230デフォルトの名無しさん:2007/02/08(木) 18:49:37
Ruby/DBIでMySQLに接続しているのですが、フィールドタイプが日付型(DATETIME等)だと
SELECTした時にsyntax errorと怒られます。対処の仕方ってあるのでしょうか?('A')
MySQL、Ruby、DBIともにUbuntuのパッケージでインスコしました。

MYSQL:mysql Ver 14.7 Distrib 4.1.15, for pc-linux-gnu (i486) using readline 5.1
Ruby:ruby 1.8.4 (2005-12-24) [i486-linux]

231230:2007/02/08(木) 19:19:33
自己レス

SELECT last_mod, hoge, hoge FROM (ry
から
SELECT * FROM (ry
にしたら読み込めた。直接フィールド名指定すると駄目なんだっけorz
232デフォルトの名無しさん:2007/02/08(木) 21:28:12
hpricotとscrapiってなんて発音するのが普通なん?
今はハプリコットとスクラッピって読んでるんだが。
233デフォルトの名無しさん:2007/02/09(金) 00:29:56
スクラッピ スクラパ スクラピ プーーウーー

234デフォルトの名無しさん:2007/02/09(金) 01:02:10
>>233
JASRACの方から来ました^^
235デフォルトの名無しさん:2007/02/09(金) 05:41:52
>>231
そんなはずはないのでもっと調べてみて。
236デフォルトの名無しさん:2007/02/09(金) 11:51:37
みんなはRuby書くときエディタは何使ってんの?
237デフォルトの名無しさん:2007/02/09(金) 11:52:53
vim, EmEditor, TextMate, Muleなど。
238デフォルトの名無しさん:2007/02/09(金) 15:23:12
xyzzy
239デフォルトの名無しさん:2007/02/09(金) 15:34:54
メモ帳
240デフォルトの名無しさん:2007/02/09(金) 15:42:00
edlin
241デフォルトの名無しさん:2007/02/09(金) 17:35:44
サクラエディタ
242デフォルトの名無しさん:2007/02/09(金) 18:23:11
more > test.rb
243デフォルトの名無しさん:2007/02/10(土) 07:34:23
cat >> test.rb
244デフォルトの名無しさん:2007/02/10(土) 08:00:41
ruby -e'print while gets' >> test.rb
245デフォルトの名無しさん:2007/02/10(土) 08:51:07
秀丸
246デフォルトの名無しさん:2007/02/10(土) 09:38:24
zed
247デフォルトの名無しさん:2007/02/10(土) 10:24:46
ちなみにzshで書かれたエディタだ > zed
248デフォルトの名無しさん:2007/02/10(土) 11:48:59
JmEditor2もいい
249デフォルトの名無しさん:2007/02/10(土) 15:41:48
>>244
それを言うならこれだろ
ruby -pe'' >> test.rb
250デフォルトの名無しさん:2007/02/10(土) 15:50:41
ruby -pe''
だとうまくいかなくて
ruby -pe ''
ruby -pe0
だとうまくいった。
251デフォルトの名無しさん:2007/02/10(土) 17:02:08
Class.new.is_a?( Module ) は true を返すのに
include( Module.new ) ができて include( Class.new )
ができないのはなぜですか?
252デフォルトの名無しさん:2007/02/10(土) 17:18:40
Classだから
253デフォルトの名無しさん:2007/02/10(土) 17:20:46
include(m)
m.class == Module じゃなきゃダメだろ。
254デフォルトの名無しさん:2007/02/10(土) 17:28:20
>251
マニュアルに書いてある通り、そういう仕様。
> ・inclule による Mix-in ができない

それ許すとクラスとモジュールを分けた意味が無くないか?
だったら始めから多重継承にすればええやん。

仕組みとしては、単に include 内で
Class のインスタンスを弾いているだけだと思われる。
255デフォルトの名無しさん:2007/02/10(土) 17:34:08
>>253
実はこんな変態コードが通ったり。
class Moduleson < Module
end
include Moduleson.new
256デフォルトの名無しさん:2007/02/10(土) 17:50:36
難しいアルね
257デフォルトの名無しさん:2007/02/10(土) 19:10:31
Class のスーパークラスは Module なのに Class のインスタンスは Module のインスタンスように振舞わないの?
258デフォルトの名無しさん:2007/02/10(土) 20:44:46
継承してるからといっていつでもis-a関係になるわけではないよ。
259デフォルトの名無しさん:2007/02/10(土) 20:55:50
One-Click Ruby InstallerでRubyをインストールしたのですが、
riが英語なので日本語にしたいです。
どのような方法があるでしょうか?
260227:2007/02/10(土) 21:20:14
>>221の方が紹介してくれた rmovie を
ウィンドウズ環境から利用できる方法はないでしょうか?

cygwin辺りから調べてますがいまだに解決できません。

どなたかヒントだけでもお願いします!
261ちんこ ◆HEfxsk5e3k :2007/02/10(土) 23:38:28
なんかtimeとwhileとeachだけ使えばいいって「たのしいRuby」に書いてあるけどみんなそう?
新しくRubyはじめました。こんばんわ
262デフォルトの名無しさん:2007/02/11(日) 06:47:03
んなこたぁない
263デフォルトの名無しさん:2007/02/11(日) 15:17:35
なぜエラー?

@h=Array.new(9){Array.new(9) {Array.new(2) {0}}}
#p @h


def jouyo()

for i in 1..9
for j in 1..9
@h[i*j%10][j][0]=i*j%10;
@h[i*j%10][j][1]=(i*j-i*j%10)/10;
end
end
end
264デフォルトの名無しさん:2007/02/11(日) 15:33:56
0..8
%9
265デフォルトの名無しさん:2007/02/11(日) 22:10:05
a << cout
のようなことをするにはどうすればいい?
266電電厨 ◆DdcQHNOL5U :2007/02/11(日) 22:10:50
しまwwwwwwww
C++しばらくやってないからボケた。
a << cin
の間違いでwwwwwwwwwwww
267デフォルトの名無しさん:2007/02/11(日) 22:13:21
a = gets.chomp
268ちんこ ◆HEfxsk5e3k :2007/02/11(日) 22:15:25
getsがあればいいことわかった、神様ありがとう
269デフォルトの名無しさん:2007/02/11(日) 22:27:13
>>266
二段ボケとはやるな、お主。
270ちんこ ◆HEfxsk5e3k :2007/02/11(日) 23:29:50
あれ、なんか間違ったか。
まぁいいやおれはRuby Newbieだ!

erubyについて簡単に教えてくだしあ^^
271デフォルトの名無しさん:2007/02/12(月) 18:31:12
RAAにあるものはgemで取得できないんですか?
272デフォルトの名無しさん:2007/02/12(月) 19:01:11
gemを作成・配布しているのはあくまでそのライブラリの作者など
なので、当人次第。

273デフォルトの名無しさん:2007/02/13(火) 00:16:15
Rjbをインストールしたいのですが以下のようなエラーが出ます.助けてください.
1.0.3のgemパッケージでうまくいかなかったので
zip晩の1.0.2を上書きしてsetup.rbを動かしてもうまくいきません.
環境はWinXP SP2
ruby 1.8.4
rjbは1.0.2?です

ruby setup.rb config
---> bin
<--- bin
---> lib
<--- lib
---> ext
D:/ruby/bin/ruby "D:/ruby/lib/ruby/gems/1.8/gems/rjb-1.0.3-mswin32/ext/extconf.r
b"
checking for jni.h... no
*** D:/ruby/lib/ruby/gems/1.8/gems/rjb-1.0.3-mswin32/ext/extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
274273:2007/02/13(火) 00:16:51

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--srcdir=D:/ruby/lib/ruby/gems/1.8/gems/rjb-1.0.3-mswin32/ext
--curdir
--ruby=D:/ruby/bin/ruby
setup.rb:535:in `command': 'system D:/ruby/bin/ruby "D:/ruby/lib/ruby/gems/1.8/g
ems/rjb-1.0.3-mswin32/ext/extconf.rb" ' failed (RuntimeError)
from setup.rb:1112:in `extconf'
from setup.rb:1107:in `config_dir_ext'
from setup.rb:1321:in `traverse'
from setup.rb:1338:in `dive_into'
from setup.rb:1319:in `traverse'
from setup.rb:1313:in `exec_task_traverse'
from setup.rb:1308:in `exec_task_traverse'
from setup.rb:1097:in `exec_config'
from setup.rb:878:in `exec_config'
from setup.rb:710:in `invoke'
from setup.rb:674:in `invoke'
from setup.rb:1352
275デフォルトの名無しさん:2007/02/13(火) 00:53:15
>>273
JDK は?
276273:2007/02/13(火) 01:23:52
>>275
1.4.2です
277デフォルトの名無しさん:2007/02/13(火) 11:06:23
>>273
エラー自体は、Cのヘッダの検索パス上に%JAVA_HOME%\include(だっけ?)がないからjni.hが見付からないというもの。
最近のRjbではJDKのツールの関係上JDK1.5以降しかソースからのコンパイルはサポートされてない(手動で作ればいけるはずだけど)。
Cコンパイラが無いとrjb.soが作れないけどそれはOK?
環境変数JAVA_HOMEは設定してある?

Windowsならgemでリモートインストールしようとした時点でmswin32が選択できて
それにバイナリが入っている(なのでJDK1.4でも動作はするかも)んだけど、それでインストールできなかったってこと?
278273:2007/02/13(火) 12:39:25
>>277
JDKを1.6にUPDATEしてgemでもう一度やってみてmswin32版を選択しましたら無事インストールできたような感じだったんですけど
同梱のtest.rbを試した結果以下のように表示されました
これってインストールできてないですよね

start RJB(1.0.3) test
Loaded suite test
Started
EEEEEEEEEEEEEEEEEEEEEEEEEEE
Finished in 0.156 seconds.

1) Error:
test_CallByNullForArraies(TestRjb):
RuntimeError: unknown error
test.rb:11:in `initialize'
test.rb:11:in `setup'

2) Error:
test_CastObjectArray(TestRjb):
RuntimeError: unknown error
test.rb:11:in `initialize'
test.rb:11:in `setup'

中略

27) Error:
test_underscored_constant(TestRjb):
RuntimeError: unknown error
test.rb:11:in `initialize'
test.rb:11:in `setup'

27 tests, 0 assertions, 0 failures, 27 errors
279デフォルトの名無しさん:2007/02/13(火) 12:54:44
「無事インストールできたような感じ」のあたりを詳しく。
280デフォルトの名無しさん:2007/02/13(火) 13:37:35
>>278
テストが実行できるんだからファイル自体は展開されたと思う。
で「test.rb:5:in `require': no such file to load -- rjb (LoadError)」と言われてないので-rubygemsでもないとすると
Javaのランタイムライブラリが見付からないので実行できていないのではないかと。
Windowsの場合「%JAVA_HOME%/jre/bin/i386/{classic,hotspot,server}/jvm.dll」を見に行くらしいのでJAVA_HOMEは常に設定されていないといけない。
281ちんこ ◆HEfxsk5e3k :2007/02/13(火) 13:47:52
ary = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
prime = [2]

while (ary) do
prime.each do |p|
ary.delete_if do|i|
i%p == 0
end
prime << ary.first
end
end

p prime

何が違うんでしょうか・・・処理が止まりません。
282デフォルトの名無しさん:2007/02/13(火) 13:50:49
ファイルの書き換えについて教えて下さい。
ファイルをオープンして文字列を置換したあと,
元のファイルより小さくなった場合、後ろの方にゴミが残ってしまいます。
flushの事をよく理解していないためだと思いますが宜しくお願いします。

File.open(document,'r+'){|txt|
data = txt.read
txt.rewind
txt.puts data.gsub('nil', '')
}
283ちんこ ◆HEfxsk5e3k :2007/02/13(火) 13:58:49
さっきのはおかしかった

ary.delete_if do |i|
i%prime.last == 0
end
prime << ary.first

p prime

ary.delete_if do |i|
i%prime.last == 0
end
prime << ary.first

p prime

これなら成功します。aryが尽きるまで繰り返させたいのですがどうすれば?
284273:2007/02/13(火) 14:00:42
>>279
gemがエラーをはきませんでした

>>280
JAVA_HOMEは設定してるんですけど
「%JAVA_HOME%/jre/bin/i386/{classic,hotspot,server}/jvm.dll」にjvm.dllが
ないのが問題ですかね?
これって変更できないのですか?
285ちんこ ◆HEfxsk5e3k :2007/02/13(火) 14:02:44
while (ary) do
ary.delete_if do |i|
i%prime.last == 0
end
prime << ary.first
p prime
end

なんでだろう。
エラトステネスのふるいってやつをやりたいんだぜ?
286デフォルトの名無しさん:2007/02/13(火) 14:04:20
Rubyの偽はfalseとnilのみ。
0、0.0、""、[]、{}は真。

287デフォルトの名無しさん:2007/02/13(火) 14:06:59
>>282
方法1: 別のファイルに書いてリネームする
方法2: 縮んだ分をtruncateする。
288ちんこ ◆HEfxsk5e3k :2007/02/13(火) 14:10:02
(ary.length!=0)
にしたらなんとかなったぜ\(^o^)/
289ちんこ ◆HEfxsk5e3k :2007/02/13(火) 14:15:04
while (ary.length!=0) do
ary.delete_if do |i|
i%prime.last == 0
end
prime << ary.first
p prime
end

[2, 3]
[2, 3, 5]
[2, 3, 5, 7]
[2, 3, 5, 7, 11]
[2, 3, 5, 7, 11, 13]
[2, 3, 5, 7, 11, 13, 17]
[2, 3, 5, 7, 11, 13, 17, 19]
[2, 3, 5, 7, 11, 13, 17, 19, nil]

最後のいらないんだけど、なんでだぜ?
290デフォルトの名無しさん:2007/02/13(火) 14:18:48
class A
def initialize
@@last = self
end
def A.inspect
p @@last
end
end

class B < A
end

とした時、B.new をすると A の @@last まで変更されてしまうのですが、
A, B それぞれのクラス変数を独立した内容にするために
別の変数名にする以外の解法としてはどのようなものがあるでしょうか。
291デフォルトの名無しさん:2007/02/13(火) 14:25:12
ary.empty? というのもある。
あと、while ! に相当するuntil というのもあるぜ。
292デフォルトの名無しさん:2007/02/13(火) 14:26:41
>>289
最後にループを回るときは、
delete_ifで空になったaryからfirstを取り出してきてるね。

repeat

until 式
のループにしてみたら?
293デフォルトの名無しさん:2007/02/13(火) 14:33:19
>>284
あれ、ごめん間違い。Windowsならi386なんか入らないわ。
DLLの場所を変えたければ、いまのところソース変更してコンパイルし直すしかないなあ。
ttp://java.sun.com/javase/ja/6/webnotes/install/jdk/install-windows.html
を見る限りはRjbはJava Hotspot VM(clientのほう)を見に行ってて、ディレクトリ構造も問題ないと思うんだけど。
まとめて聞くけど
1. Rubyはどこからダウンロードなんていうファイル?
2. JDKはどこにインストールした?
3. JAVA_HOMEには何と書いてある?
4. cmd.exeとかアプリケーションを起動し直さないと環境変数が反映されないけどそれはおk?
5. 実際んとこjvm.dllというファイルはどこにある様子?複数あると思うけど見付かる限り書いてほしい。
294ちんこ ◆HEfxsk5e3k :2007/02/13(火) 15:20:26
ary.firstをary.shiftにしたら直りました。
食堂でカレー食いながら考えたらfirstだと最後にaryに残ってしまって重複してしまうことが分かった。
あとはメモリをどうするかです。
一気にary = [2...............2**10000]のはたぶんメモリが足りないので小分けにしたいのですが
素数は数が進むほど少なくなるのでどういう感覚でやっていけばいいか迷っています。
無駄な悩みなのかな?
295ちんこ ◆HEfxsk5e3k :2007/02/13(火) 16:05:48
Narrayの入れ方が分かりません。

requireとincludeの違いはなんですか?

あとMathとか標準ライブラリはどこに入ってるんですか?
296デフォルトの名無しさん:2007/02/13(火) 17:07:14
>>294
>無駄な悩みなのかな?
まずは
自然数nが√nを越えない最大の整数以下の全ての素数で割り切れなければ,nは素数である。
を考慮に入れろ。
297デフォルトの名無しさん:2007/02/13(火) 17:12:42
>295
まず、Rubyにおいては
モジュールとは外部ファイルを指すのではなく
module文で宣言したものであることをお忘れなく。

Rubyの include は外部ファイルの取り込みではなく
モジュールの取り込みだから全然別物。

Math は組み込みモジュールなので
実行された時点で読み込まれている。

モジュールなので include しても良いし
各関数は Math.メソッド名() でも呼べるよう
設計されているので、そう呼んでも良い。
298ちんこ ◆HEfxsk5e3k :2007/02/13(火) 19:57:47
http://www.uploda.org/uporg692427.txt.html

バグぽい・・・しかも小さい数だとアウト
修正出来ますか?
299デフォルトの名無しさん:2007/02/13(火) 20:18:08
2*3*5*7*11*13+1 = 30031 = 59*509
300ちんこ ◆HEfxsk5e3k :2007/02/13(火) 20:24:51
おおwwww計算してないけど鮮やかな回答wwwww
あれ、素数かけてって+1は素数じゃなかったか?
301デフォルトの名無しさん:2007/02/13(火) 20:56:01
>>300
2*13+1=27=3*9
302デフォルトの名無しさん:2007/02/13(火) 20:59:00
>>300
「素数が無限にあることの証明」にも出てくる、最大と仮定した素数Pn
までの素数の積に+1した数は、P1..Pnまでのいずれで割っても1余るが、
Pnより大きい数で割る場合については何も語ってないと思う。
303デフォルトの名無しさん:2007/02/13(火) 21:24:27
どなたか>>290にヒントを。。。
スーパークラスとサブクラスで同名で同様の役割だけど
データは独立した変数ってのは無理なのでしょうか。
304デフォルトの名無しさん:2007/02/13(火) 21:27:30
ファイルを送信するにはどうすればいいですか?
net/httpのpostメソッドは,文字列しか送れない?

HTMLでいうと
<form enctype="multipart/form-data" action="upload.php" method="post">
<input name="upFile" type="file">
<input type="submit" value="送る">
</form>
のpostをrubyでできる?
305デフォルトの名無しさん:2007/02/13(火) 21:56:47
>>303

class A
def initialize
an_a = self
self.class.module_eval do
@last = an_a
end
end
def A.inspect
@last
end
end


B.new
p A
A.new
p A
306デフォルトの名無しさん:2007/02/13(火) 21:58:50
>>304
multipart/form-dataのボディを自力で組み立てる必要があったと思う。
307デフォルトの名無しさん:2007/02/13(火) 22:13:15
>>305
ありがとうございます。
しかしクラス変数でなくインスタンス変数ってのが
ビミョーにひっかかるような。
ちょっと勉強してきます。
308デフォルトの名無しさん:2007/02/13(火) 22:14:12
>>307
ClassクラスのインスタンスであるAやBのインスタンス変数だけど、
不満?
309デフォルトの名無しさん:2007/02/14(水) 00:15:26
>>306
としたら,サンプルを知ってますか?
ruby の webクライアント用の情報少なくって
310デフォルトの名無しさん:2007/02/14(水) 00:43:21
>>307
1.9 ではクラス変数はサブクラスで共有されず、クラスごとに独立になったよ。
311ちんこ ◆HEfxsk5e3k :2007/02/14(水) 00:50:23
>>302
そうだった。勘違いしてたよ。
312デフォルトの名無しさん:2007/02/14(水) 02:30:52
>>308
えと、まぁ、ちょっと

>>310
わーお
313デフォルトの名無しさん:2007/02/14(水) 03:02:58
>>310
それはまた大胆な変更を…。
使う機会はほとんどないけど、ここぞと言うときに使っているんだよなおれ。
困ったな。
314デフォルトの名無しさん:2007/02/14(水) 10:01:35
315デフォルトの名無しさん:2007/02/14(水) 17:24:59
>>304
> ファイルを送信するにはどうすればいいですか?
以前に、画像掲示板にファイルを投稿するスクリプトを作ってみたことがあるけど
>multipart/form-dataのボディを自力で組み立てる必要があったと思う。
でした
やはり、multipart/form-dataの形式を理解して、自力で作成するしかないような気が

でも、ググればサンプルはありますよ
http://www.namikilab.tuat.ac.jp/~sasada/diary/200503.html#d22
とか
316デフォルトの名無しさん:2007/02/15(木) 18:54:56
>>315
thanks
参考にNet::HTTPクラスを拡張してみたけど`syswrite': Broken pipe (Errno::EPIPE)のエラーが出てしまって,お手上げ。
upload( path, query, files, header = nil)メソッドを追加したつもり。通常のFORMエレメントをHashでqueryに与えて,アップロードするファイルをname => ファイルパスのHashで与えてみました。以下スクリプト。
317デフォルトの名無しさん:2007/02/15(木) 18:58:16
class Multipart < Net::HTTP
  require 'uri'
  def upload path, query, files, header = nil
    boundary = "-" * 30 + "RUBYMULTIPARTPOST#{Time.now.to_i.to_s}"
    data = Array.new
    query.each{|key, val|
      data << "--#{boundary}"
      data << %Q!Content-Disposition: form-data; name="#{URI.encode(key)}"!
      data << '' << "#{URI.encode(val)}" << '' }
     files.each{|key, file|
      data << "--#{boundary}"
      data << %!Content-Disposition: form-data; name="#{key}"; filename="#{File.basename(file)}"!
      data << 'Content-Type: application/octet-stream'
      data << '' << open(file, 'rb').read << '' }
      data << "--#{boundary}-- << "\r\n"
    header['Content-Type'] = "multipart/form-data; boundary=#{boundary}"
    post(path, data.join("\r\n"), header)
  end
end
318デフォルトの名無しさん:2007/02/15(木) 19:09:10
できた。
昨日はダメだったが今日はできた。理由わからず。
319デフォルトの名無しさん:2007/02/15(木) 19:40:27
括弧よくない人だ
320デフォルトの名無しさん:2007/02/16(金) 11:04:38
<hoge>
 <id>1</id>
 <name>ほげたろう</name>
</hoge>
というXMLをパースしてオブジェクトに入れようとしてます。

案1)配列に入れる
hoge[:id]
hoge[:name]

案2)Hogeクラスを定義してattr_accessorでid,hogeを定義
hoge.id
hoge.name

案1のがクラス定義する手間が省けて良さげなんですが
パフォーマンスは案2の方が上ですかね?
スクリプト言語なんでメンバへ入れてアクセスしても大差ないのかな??
321デフォルトの名無しさん:2007/02/16(金) 11:34:46
この後どんな処理をしたいかによる
322320:2007/02/16(金) 11:38:30
参照だけですね。代入はなし。
323デフォルトの名無しさん:2007/02/16(金) 11:49:48
単なる値のホルダーならStructもあるな。

Hoge = Struct.new(:id, :name)
hoge = Hoge.new
hoge.id = 1
hoge[:name] = 'ほげたろう'
324デフォルトの名無しさん:2007/02/16(金) 19:49:42
$ time ruby1.8.5 -e 'class C;attr_accessor :a;end;h=C.new;h.a=1; 10_000_000.times{h.a}'
6.59s user 0.11s system 6.71s total

$ time ruby1.8.5 -e 'h={:a=>1}; 10_000_000.times{h[:a]}'
7.73s user 0.11s system 7.83s total
325デフォルトの名無しさん:2007/02/16(金) 20:57:03
>>324
なるほど、参考になるよ。
つまり Python を使えということだね。
326デフォルトの名無しさん:2007/02/16(金) 21:30:52
>324
Structの方が速い。
% time ruby -e 'class C; attr_accessor :a; end; h=C.new;h.a=1; 10_000_000.times{h.a}'
6.12s user 0.00s system 66% cpu 9.217 total
% time ruby -e 'h={:a=>1}; 10_000_000.times{h[:a]}'
7.02s user 0.01s system 80% cpu 8.763 total
% time ruby -e 'C=Struct.new("C",:a); h=C.new; h.a=1; 10_000_000.times{h.a}'
5.48s user 0.00s system 95% cpu 5.739 total

ちなみに、
% ruby -v
ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-freebsd6]
327デフォルトの名無しさん:2007/02/16(金) 21:36:08
ちなみに、なぜ Struct の方が速いかというと、 Struct ではアクセサは自分
が何番目の要素か、というのを知っているから。

Structは内部的にはデータは配列として蓄えられていて、たとえば326の定義
ならaメソッドは1番目の要素を参照するだけでよく、実際そのような内容のメ
ソッドが定義される。ハッシュ値を考えない分、速い。

もっとも、ふつうのクラス定義より速い理由はよくわからん。
328320:2007/02/16(金) 23:13:39
うお、実行時間計測しようと思ってた矢先に・・・
Structはえーし、クラス定義の手間も省けるし文句なしっすね。
Structでいきます。ありがとう!
329ちんこ ◆HEfxsk5e3k :2007/02/16(金) 23:30:27
XMLっていいんですか?
HTMLとCSSでホームページは作れますが、XMLにすると何が有利ですか?
330デフォルトの名無しさん:2007/02/16(金) 23:44:59
ここで聞くことじゃないと思うが?
331デフォルトの名無しさん:2007/02/16(金) 23:49:09
>329
とりあえず構造付きのデータを記述できる
出来合いのパーサがあれこれあるので自力でファイル読んでトークンにぶっかいて……という手間が省ける

どっちかっつーと設定ファイル向けだなあ >XML
# ちなみにYAMLってのもあるでよ、と混乱の種をまいてみるテストw
332デフォルトの名無しさん:2007/02/17(土) 00:16:18
標準ライブラリについてるto_yamlなんであんなに遅いんだろう
333デフォルトの名無しさん:2007/02/17(土) 10:32:15
Object#idって1.8でobsoleteになったけど、
自分でidという名前のメンバ変数を定義するのはよいのかな。
てかrailsのActiveRecordはidメンバ必須だから大丈夫だと思うんだけど・・・
334デフォルトの名無しさん:2007/02/17(土) 11:07:12
将来的には遠慮なく使え。
現状は注意しながら使え。
ActiveRecordなら問答無用。

というところで。
335デフォルトの名無しさん:2007/02/18(日) 00:03:07
>>320
パフォーマンスはあまり違わない。
案2は拡張しやすいけど手間がかかるので、最初は案1でやって、行き詰まったら案2に乗り換えればいいと思う。
336デフォルトの名無しさん:2007/02/19(月) 00:02:21
hpricotを使って
ttp://www.taiyosha.co.jp/comic/comic0703_han1.html
の発売表の各td内の値を配列に格納したいと思っています。

効率のよい書き方を教えてください。

お願いします。

ruby 1.8.5 (2006-08-25) [powerpc-darwin8.8.0]
337デフォルトの名無しさん:2007/02/19(月) 00:19:24
>>335
OpenStruct
倍くらい遅いけどな。

しかし、yarv使うとHashのアクセス速いな。
Structに迫るというか微妙に抜いてるかも。
全体に5〜6倍くらい速くなる。
338デフォルトの名無しさん:2007/02/19(月) 15:19:32
質問はRuby/TkのTkListboxのフォント指定についてです。
Osaka等幅フォントを指定したいのですが,下記三通り試しましたがうまくいきません。
listbox.configure('font' => 'Osakaレギュラー-等幅')
listbox.configure('font' => 'Osaka等幅')
listbox.configure('font' => 'Osaka-等幅')
日本語の等幅フォントの指定はどのようにしたらよいでしょうか?

環境はMac OS X 10.4 ruby 1.8.2。デフォルトでインストールされたままのrubyです。
よろしく
339デフォルトの名無しさん:2007/02/19(月) 15:44:40
p TkFont.families.select{|fn| /Osaka/ =~ fn}
とやると出てくるうちの等幅のほうをコピペで指定してやると出来た。

マイナスなのか全角ダッシュなのかよくわからんがそこらの違いぽい。
ダンプしたら
e2 88 92 e7 ad 89 e5 b9 85
というコードの文字列のようだ。
340デフォルトの名無しさん:2007/02/19(月) 18:28:51
うわ、何てキッタナイ言語なんだ
341デフォルトの名無しさん:2007/02/19(月) 19:59:22
>>340
確かに、お前の使っているチョウセンニホンゴモドキは汚い言語だな。
342デフォルトの名無しさん:2007/02/19(月) 20:01:46
>> 339
Thanks.
ちょっとしたTIPS参考になりました。

ところで,Osaka等幅の半角スペース(コード\20)なんだけど,TkListbox上ではビミョーに等幅にならないです。空白が連続すると1ピクセルづつぐらいずれていきます。
Aqua/Tkに問題があるのかな?
(TkEntryではことえりで入力できない欠陥があるのでこれが限界かな?)
343デフォルトの名無しさん:2007/02/19(月) 23:49:33
ruby + sqlite3 で create table test する時に
tableが既にある場合に例外でちゃうんですが
これを回避する際の定型コード教えてください
344デフォルトの名無しさん:2007/02/19(月) 23:59:26
require 'rubygems'
require 'sqlite3'
require 'pp'

db = SQLite3::Database.new( 'db/test.db' )

begin
db.execute( 'select * from test' )
rescue
db.execute( 'create table test( id integer primary key, name text, job text );' )
end

pp db.execute( 'select * from test' )

db.close

これか?これでいいのか?
345デフォルトの名無しさん:2007/02/20(火) 00:02:43
問答無用で事前にdrop table発行するのはカコワルイ?
346デフォルトの名無しさん:2007/02/20(火) 00:30:14
sqlite特化でいいのなら
CREATE TABLE文にIF NOT EXISTS指定ができるわけだが。
ttp://www.sqlite.org/lang_createtable.html
347デフォルトの名無しさん:2007/02/20(火) 00:31:52
348デフォルトの名無しさん:2007/02/20(火) 00:53:39
>>346
サンクスコ
349デフォルトの名無しさん:2007/02/20(火) 01:53:14
>>344
> begin
> db.execute( 'select * from test' )
> rescue
> db.execute( 'create table test( id integer primary key, name text, job text );' )
> end

存在チェックのためだけに全件検索するのもあまりにもアレだが、
そもそもチェックしてから作成ってのは典型的なrace conditionだろ。
rescueするなら、普通は作成してみてすでにあった場合はエラーを無視。
350デフォルトの名無しさん:2007/02/20(火) 02:22:02
>>347
参考になるサイト情報ありがとうございます。
勉強してみます。
351デフォルトの名無しさん:2007/02/20(火) 08:29:04
どこで質問するか迷いましたが、Rubyのソースを出すので、ここで質問させてください。
RubyとMySQLでデータベースアプリを作っています。
下のように、CGI(1)でレコードをUPDATE後、CGI(2)でレコードを
表示しようとするとUPDATE前のレコードが表示されてしまいます。
ここでブラウザの更新ボタンを押して更新すると、UPDATE後のレコードが
表示されるようになります。
どうすれば最新のレコードを表示できるでしょうか?

CGI(1)------------------------------------------
require 'mysql'
my = Mysql.new('localhost',user,pass,database)
my.set_server_option(Mysql::OPTION_MULTI_STATEMENTS_ON)
my.query( <<-EOD
start transaction;
update hoge_table set hoge=hoge where hoge=hoge;
commit;
EOD
)
my.close
cgi(2)へリダイレクト

CGI(2)------------------------------------------
require 'mysql'
my = Mysql.new('localhost',user,pass,database)
my.query("select * from hoge") do |res|
結果をリスト表示
end
my.close
352デフォルトの名無しさん:2007/02/20(火) 09:27:58
>>351
Cacheじゃないの?
Cacheしないようにするtipsはググればわんさか見付かるから試してみなよ。
353デフォルトの名無しさん:2007/02/20(火) 11:35:01
注意:クエリキャッシュから古いデータが返されることはありません。
データが変更されると、クエリキャッシュの関連するエントリがすべてフラッシュされます。

by
http://dev.mysql.com/doc/refman/4.1/ja/query-cache.html

なんでだろ
354デフォルトの名無しさん:2007/02/20(火) 11:46:11
evalについて質問です。
混乱ループしてしまいどつぼにはまっています。

このようなIF文を書きたいんです。

1|mc = MyClass.new
2|value = 'value'
3|
4|if a.value = /{#value}/
5| puts 'true'
6|end

4行目のどこをエスケープして、どこをevalで囲めば良いのかで困っています。
どうぞよろしくお願いします。

355デフォルトの名無しさん:2007/02/20(火) 11:55:07
ワラタ
356デフォルトの名無しさん:2007/02/20(火) 12:02:19
>>353
ブラウザのキャッシュ
357354:2007/02/20(火) 13:09:45
補足なんですが、要するにIF部分をevalで動的にしたいのですが、
メソッド名と変数名がかぶって混乱したという話です。

変数名は変えたくないんです。これだけは譲れなくて。
ちなみに '=' は '=~' です。
358デフォルトの名無しさん:2007/02/20(火) 13:22:39
だから何を動的にしたいんだよ
359354:2007/02/20(火) 14:23:37
ほんと例文になってませんでした。すいません。

また例文を書き直そうと思ったら、またしてもわからなくなってきたので
質問を替えます。

a = MyClass.new
value = 'loop'

if a.value =~ /{#value}/
puts 'true'
end

があったとして、IFの行だけを後に動的にしたいんです。
上の例文の場合ではどのようにIF行をevalで表現すればいのでしょうか?
グダグダですいません。
360デフォルトの名無しさん:2007/02/20(火) 14:44:34
#{value}だろ

何をしたいのかわかんねーよ
361354:2007/02/20(火) 14:50:12
if行をevalで表現したいんです。
362デフォルトの名無しさん:2007/02/20(火) 14:54:33
eval %Q!
if a.value =~ /{#value}/
puts 'true'
end
!
363デフォルトの名無しさん:2007/02/20(火) 16:51:29
「ifの行だけ」はif文(endまで)全体なのか、正規表現マッチングのことなのか。

364デフォルトの名無しさん:2007/02/20(火) 17:02:04
a.value == 'loop'だったらput trueしたいんでしょ?
で、'loop'は固定でなくいろいろな文字列にしたいと。
365デフォルトの名無しさん:2007/02/20(火) 17:06:25
おしえてください
任意長の全角の数字の文字列を半角にする方法はありますか?
a = "0123"
b = a.hoge #=> "0123"
366354:2007/02/20(火) 17:19:53
色々と中途半端な質問失礼しました。
あらゆるパターンをひたすら試して解決しました。

if eval("a.#{value} =~ /#{value}/")
puts 'loop'
end

マッチング部のみをevalで生成すると通ることがわかりました。
367デフォルトの名無しさん:2007/02/20(火) 17:42:11
valueの値(文字列)が意味するaのメソッドの返値なら、evalしなくても

a.__send__(value.to_sym)

で取れるぞ。
368デフォルトの名無しさん:2007/02/20(火) 17:43:17
文字列も解釈するから.to_symなしでもいけるな。
369デフォルトの名無しさん:2007/02/20(火) 18:45:21
>>351
CGI(1)のcommitのあとで、select文を発行してデータを確かめてみてはどうだろう。
あるいはCGI(2)へリダイレクトせずにselect文を実行。
370デフォルトの名無しさん:2007/02/20(火) 19:14:47
>>351
本当にupdateが成功しているの?
371ちんこ ◆HEfxsk5e3k :2007/02/20(火) 20:16:46
あの、質問です。
よく偶数か奇数かを調べるには%2を使って0か1で判断しますね。
でも計算機工学で習ったんですけど割り算って超大変

なんで整数型で浮動小数点で表されていなければ最下位ビットが0か1かで判断出来ると思うんです。
そういうメソッドってないですかね?w
372デフォルトの名無しさん:2007/02/20(火) 20:19:31
>>371
Ingeter#&
373デフォルトの名無しさん:2007/02/20(火) 20:20:42
def even?(number)
(number & 1) == 0
end
def odd?(number)
(number & 1) == 1
end


374デフォルトの名無しさん:2007/02/20(火) 20:20:54
ひどいtypoをしてしまった(汗
375デフォルトの名無しさん:2007/02/20(火) 20:26:02
ActiveSupportにもあるけど、

class Integer
def even?
self & 1 == 0
end
:
end
とかのほうがRubyぽいな。
376ちんこ ◆HEfxsk5e3k :2007/02/20(火) 20:38:54
結果発表

if (i&1)==0 >= if i%2==0 >>>> defでeven?を使った場合

速度が大事ならC++でやれとでもいいたそうな顔ですね。
どういうコードが早いか研究するのは悪いことですか?
377デフォルトの名無しさん:2007/02/20(火) 20:41:46
誰もそんなこと言ってませんけど。
378365:2007/02/20(火) 20:51:46
どなたか教えてください
それとも不可能ですか?
379デフォルトの名無しさん:2007/02/20(火) 20:55:49
>>378
nkfを使え。
380365:2007/02/20(火) 21:03:37
>>379
nkfをどうやって使うのでしょうか?
381デフォルトの名無しさん:2007/02/20(火) 21:06:27
ファイルに「ヘブン.txt」「ヘブン.html]「ヘル.txt」「ヘル.txt」があるとき,
次のスクリプトだと「ヘブン〜」を適切にリストアップできません。
環境はMac OS X Tiger ruby 1.8です。
Mac 特有の問題らしいですが,きちんと「ヘブン〜」をリストアップする方法はありますか。スクリプト自体はShift-JISでもUTF8でも同じでした。

#!/usr/bin/ruby -Ks
require 'iconv'

d = "ヘル"
doc = Iconv.iconv('utf8','sjis', d)
Dir.glob("#{doc}*"){|fh|  puts fh  }

d = "ヘブン"
doc = Iconv.iconv('utf8','sjis', d)
Dir.glob("#{doc}*"){|fh|  puts fh  }
382デフォルトの名無しさん:2007/02/20(火) 21:10:12
>>380
NKF.nkf("-Z","01234") # => "01234"
383365:2007/02/20(火) 21:14:24
>>382
ありがとうございました!
できました。
384デフォルトの名無しさん:2007/02/20(火) 21:41:11
>>381
濁点の使用をやめる
385デフォルトの名無しさん:2007/02/20(火) 21:59:15
>>381
MacOSXのファイルシステムはかなの濁点をUnicode的に分離して保存して
いるので未対応の変換ライブラリで使うためには正規化する必要がある。

Rails(というかActiveSupport)のMultibyteを使って

handler = ActiveSupport::Multibyte::Handlers::UTF8Handler
file_name = handler.normalize(file_name)

とかするといいと思う。
386デフォルトの名無しさん:2007/02/20(火) 22:04:42
ああ、濁点を分離した状態にする場合はnormalizeに第二引数がいるわ。
分解のほうだから、:dか:kdかな。
387デフォルトの名無しさん:2007/02/20(火) 22:19:24
>>371
>でも計算機工学で習ったんですけど割り算って超大変
計算機工学でならったんですけど2の割り算って超簡単

それはいいんだけど、スクリプトを起動したときのrubyのパスって調べることできますか。

$ cat hoge.rb
p RUBY_PATH
$ ruby hoge.rb
"/usr/local/bin"

みたいな感じで。
388デフォルトの名無しさん:2007/02/20(火) 22:28:26
>>384
アタマワルッ
389デフォルトの名無しさん:2007/02/20(火) 22:30:49
>>370
UPDATEは成功していると思います。
CGI(1)はアップデート専用で、CGI(2)は表示専用なので、
ブラウザの更新ボタンでUPDATE後のレコードが表示されるし、
リダイレクト時にはcgi2.cgiだけでリダイレクトしています。?hoge=xxxはありません。

今、何度も繰り返し再現実験?をしていたら、
UPDATE後のレコードが表示される時と、されない時がありました。
なんだかブラウザのキャッシュのような気がします。
もう少し踏ん張ってみることにします。
390デフォルトの名無しさん:2007/02/20(火) 22:31:44
>>387
OSにもよると思ったけど大抵の環境では$0でとれるよ。
391デフォルトの名無しさん:2007/02/20(火) 22:39:43
>>389
CGI(2)で、ヘッダに

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

とか出して、ブラウザにキャッシュさせないようにしてみるといいかもよ。
392ちんこ ◆HEfxsk5e3k :2007/02/20(火) 22:59:11
>>387
2の割り算は簡単なのか。なんか掛け算と割り算はやべえって習ったから。
ブースの乗算アルゴとか習った。うぇwwwうぇwwwってカンジ

おれはRDEでF5ノシなので、パスとかは全く分からない。
そんなの気にしなーい、windowsだから気にしなくてもおk
393デフォルトの名無しさん:2007/02/20(火) 23:02:25
>>385
サンクス

Tiger標準はRubyのみだから,ってことはRailsをインストールしなきゃダメってことか。

それか,自分でテーブルを作って変換するか?
ひらかな,カタカナだけの正規化だけなら50パターンだから,インストールより楽かも。
394デフォルトの名無しさん:2007/02/20(火) 23:12:15
>390
$0で出てくるのはスクリプトの名前なのでは。
やりたいのは処理系のパスでしょ。

こんな感じかなー
p `cat /proc/#{$$}/cmdline`.split("\0")[0]

ただ、コマンド行がフルパスでないときにはだめだな。
そういうときはサーチパス(ENV['PATH'])から探索しないといけないのかも。
395デフォルトの名無しさん:2007/02/20(火) 23:22:38
>>393
そういえば、LeopardにはRailsも載るらしいな。
396デフォルトの名無しさん:2007/02/20(火) 23:50:24
>>394
>$0で出てくるのはスクリプトの名前なのでは。
>やりたいのは処理系のパスでしょ。

その通りです。
ENV['PATH'] を検索する方法だと、絶対パスで指定されたときにアウトだし。
397デフォルトの名無しさん:2007/02/20(火) 23:55:46
>>387
"/usr/local/bin"じゃなくて "/usr/local/bin/ruby" だったorz

$ cat hoge.rb
p RUBY_PATH
$ ruby hoge.rb
"/usr/local/bin/ruby"
$ ruby1.9 hoge.rb
"/usr/local/bin/ruby1.9"
$ /usr/local/ruby1.9/bin/ruby hoge.rb
"/usr/local/ruby1.9/bin/ruby"

みたいなことがしたいです。
よろしくお願いします。

398デフォルトの名無しさん:2007/02/21(水) 00:39:57
OSにもよるが、procfsがサポートされてるなら
File.readlink('/proc/self/exe')

Win32ならWin32APIかdl使ってGetModuleFileNameでごにょごにょ。
399デフォルトの名無しさん:2007/02/21(水) 02:36:37
>>387
Cプログラム中では rb_argv0 で保持されている。が、それをRubyスクリプトから取り出す手段がない。
大昔に [ruby-list:15843] あたりで話題になったが結局実装されていない。
400399:2007/02/21(水) 03:54:26
拡張ライブラリ使ってもいいんなら、
=== hoge.c ===
#include <ruby.h>
void Init_hoge()
{
rb_define_global_const("HOGE", rb_argv0);
}
=== extconf.rb ===
require 'mkmf'
create_makefile("hoge")

…の2つのファイルを作っておいて、
ruby ./extconf.rb
make
ruby -r./hoge -e 'p HOGE'
401デフォルトの名無しさん:2007/02/21(水) 07:49:50
>>391
そういうことか!
「ブラウザ キャッシュ」で検索したらIEの設定とかがたくさんあったから、
一生懸命ブラウザの設定項目を確認してました。
でもブラウザの設定じゃいけない気がして、悩ましく思っていました。
今日はもう出動する時間なので、今夜試してみます。
ありがとうございます。
402デフォルトの名無しさん:2007/02/21(水) 09:20:47
>>399
そもそもargv[0]に正しいパスを渡されているという保証はない。
403デフォルトの名無しさん:2007/02/21(水) 09:27:04
>>398-400
ありがとうございます。あまり簡単にはいかないということですね。
404デフォルトの名無しさん:2007/02/21(水) 10:46:01
>>393
こんなんでどう?一度作っちゃえばコピペで何とかなる。
ひらがなだけ
def nfd(str)
     require 'jcode'
     result = String.new
     table = {"が" => "か" + "\xe3\x82\x99","ぎ" => "き" + "\xe3\x82\x99","ぐ" => "く" + "\xe3\x82\x99",...
...中略...
     "ば" => "は" + "\xe3\x82\x99","び" => "ひ" + "\xe3\x82\x99","ぶ" => "ふ" + "\xe3\x82\x99"...
     ...,"ぷ" => "ふ" + "\xe3\x82\x9a","ぺ" => "へ" + "\xe3\x82\x9a","ぽ" => "ほ" + "\xe3\x82\x9a"}
        str.each_char{|char|
                result.concat(table[char] ? table[char] : char)
        }
        return result
end
d = "へぶん"
doc = nfd(d)
Dir.glob("#{doc}*"){|fh|
        puts fh
}
405デフォルトの名無しさん:2007/02/21(水) 13:55:37
Pragger 使ってみたくて
http://pragger.ikejisoft.com/wiki/GetPragger
http://pragger.ikejisoft.com/wiki/UsingPragger

これ通りやってみた所、こんなエラーが出ました

pragger.rb:26:in `inject': no block given (LocalJumpError)
nil from pragger.rb:12:in `load_plugins'
pragger.from pragger.rb:43 no block given (LocalJumpError)

それで pragger.rb の中を見てみたんですが
Dir.glob(File.join(folder, "**/*.rb")).sort.inject({}).each do |plugins,file|
plugins[ file[b.size..-1].to_s.gsub("/","::")[0..-4] ] = Plugin.new(file)
end
この部分がわかりません。
inject(0) {|r,i| r+i} がなんとかわかるレベルなんですが

indjecct({}).each do が何をしてるのか
b.size の b はどこから来たのか の2点が 理解不能で困っています

誰か解説お願いできませんか?
406デフォルトの名無しさん:2007/02/21(水) 14:11:55
ソース見てないけど、そのDir.glob〜injectがやってることは

# プラグインとして使うファイルの一覧を得る
plugin_files = Dir.glob(File.joinFile.join(folder, "**/*.rb")).sort

# 名前→プラグインの実体のハッシュを生成
plugins = {}
plugin_files.each do |file|
key = fileをいじって生成
plugins[key] = Plugin.new(file)
end
だな。

この部分だけじゃbの出所わからんね。
407デフォルトの名無しさん:2007/02/22(木) 00:23:56
底がnの対数をとりたいのですが、どうすればいいのですか?
自然対数と常用対数しか組み込みモジュールにないのですが
408ちんこ ◆HEfxsk5e3k :2007/02/22(木) 00:27:26
分かった
409399:2007/02/22(木) 00:40:01
>>402
ん?どゆこと?
410デフォルトの名無しさん:2007/02/22(木) 00:40:04
>>407
えーと、学校で対数を習うときに一緒に習うはずなんだが、

任意の1でない実数a,bに対して、
log a (x) = log b (x) / log b (a)
が成り立つ。

ので、log(x)/log(n) か log10(x)/log10(n) でOK。
411デフォルトの名無しさん:2007/02/22(木) 00:40:49
log_a(x) = log_b(x) / log_b(a)
412デフォルトの名無しさん:2007/02/22(木) 02:52:08
フォルダ以下のテキストファイルを読み込み、
「何行目:単語」という形のプログラムを
作ろうとしたのですが、巧く動きません。

hoge.txtに保存してある

aaaa
bbbb
cccc
.
.
.
afff

を読み込んで

001: aaaa
002: bbbb
003: cccc

としたいです。
ですが行数の表示を整えることができないようで

1: aaaa
2: bbbb
3: cccc

となってしまいます。
413デフォルトの名無しさん:2007/02/22(木) 02:52:52
class ShowLine
 def initialize(line, number)
  @line = line
  @number = number
 end
 def show
  @line.chomp!

  case @number
  when /^\d$/ #1桁のときは"00"を加える
   print "00#{@number}: #{@line}\n\n"
  when /^\d{2}$/ #2桁のときは"0"を加える
   print "0#{@number}: #{@line}\n\n"
  else  #3桁以上のときはそのまま
   print "#{@number}: #{@line}\n"
  end
 end
end

textfile = Dir.glob("**/*.txt") #フォルダ以下のテキストファイルを探し出す
num = 1 #通し番号

textfile.each { |txt|
 print "<#{txt}>\n"
 infile = open("#{txt}").each { |line|
  number = num
  line = ShowLine.new(line, number)
  line.show
  num += 1
 }
}
ご教示御願いします。
414デフォルトの名無しさん:2007/02/22(木) 02:56:05
なんかツッコミどころ満載だが、
printf "%03d: %s\n", @number, @line
でいいかい?
415デフォルトの名無しさん:2007/02/22(木) 02:56:18
puts '%03d: %s' % [ 行番号, 内容 ]
とか
printf "%03d: %s¥n", 行番号, 内容
とか

何行あるかわからないなら何桁必要になるか分からないからもう
一工夫必要になるのだけど、大丈夫?
416デフォルトの名無しさん:2007/02/22(木) 02:58:19
動詞から始まるクラスを作るのはクラスを理解していないときにありがち。
417デフォルトの名無しさん:2007/02/22(木) 03:02:45
>>414
ありがとうございました。
printfを使えばすんなり行くことを忘れていました。

よろしければ、ツッコミを御願いします。

>>415
想定していたのは100,000行が上限ぐらいの
テキストデータでした。
418デフォルトの名無しさん:2007/02/22(木) 03:10:05
行数って結局最後まで一度は読まないとわからんというのが問題よな。

一度読んで行数を知り、rewindして改めて出力するか、最初に読んだとき
に全部配列に入れておく。行数が0でないなら、桁数は
Math.log10(行数).to_i + 1
で求められる。(0だとlog10の定義域エラーになる)


419デフォルトの名無しさん:2007/02/22(木) 03:12:09
というか、何回10で割れるかで求められるし、
上限わかってるんだからifで分岐処理してもいいわな。
420デフォルトの名無しさん:2007/02/22(木) 03:12:46
>>418
なるほど、勉強になりました。
ありがとうございます。
421デフォルトの名無しさん:2007/02/22(木) 03:17:35
行長がほぼ固定なら楽なんだけどね
422デフォルトの名無しさん:2007/02/22(木) 04:19:33
>>405
> Dir.glob(File.join(folder, "**/*.rb")).sort.inject({}).each do |plugins,file|

inject({}) と each の間の . を消せ。
423デフォルトの名無しさん:2007/02/22(木) 04:23:46
>>409
argv[0]は呼び出し側のプログラムで好きなように指定できる。
たとえば、loginは先頭に"-"をつけて渡す。
多くのshではそれを見てログインシェルとして動作する。
また、コマンド名を渡してくる場合でもフルパスかどうかはわからない。
424デフォルトの名無しさん:2007/02/22(木) 04:47:39
>>422
.だけじゃなく、.eachをけすんじゃね?
425351:2007/02/22(木) 06:22:22
>>391
ブラウザにキャッシュさせないようにしてもダメでした。

>>369 >>370
レコードUPDATE後、すぐにSELECTして表示するスクリプトを作成して、
本当にUPDATEに成功しているのか確認したところ、失敗しているときがありました。
でも1分くらい?待っていれば、アップデート後のレコードが表示されるようになります。
とても奇妙。

で結果的に、一行毎にクエリを実行すると、古いレコードは表示されなくなりました。

my.query( <<-EOD
start transaction;
update hoge_table set hoge=hoge where hoge=hoge;
commit;
EOD
)

↑これではダメで

my.query("start transaction;")
my.query("update hoge_table set hoge=hoge where hoge=hoge;")
my.query("commit;")

↑こうすると問題なく表示されるようになりました。
ちょっと納得できないのですが、こういうモンと自分に言い聞かせることにします。

ありがとうございました。
426デフォルトの名無しさん:2007/02/22(木) 06:46:10
>>425
こうなるともうMySQLの問題だね。そっちのスレで聞いてみれば詳しいこと分かるかも。
427デフォルトの名無しさん:2007/02/22(木) 12:01:11
RubyのMySQLドライバの問題だろ
428デフォルトの名無しさん:2007/02/22(木) 17:05:38
正規表現ムズイ
プログラム自体初心者のおれにはデラキツイ
429デフォルトの名無しさん:2007/02/22(木) 17:18:50
>>428
メタ文字は.[](|){}*だけ覚えればいい。他はこれらで実現できることを短く表記するためのものだ(例外あり、ただし使う機会はかなり少ない)。
それに加えて最左最長マッチの原則さえ覚えていれば大体事足りるはずだ。

正規表現はもう一つの別の言語だととらえておいた方がいいよ。
比喩ではなく実際にその通りなんだし。
430デフォルトの名無しさん:2007/02/22(木) 17:55:27
正規表現は、場数を踏めば誰でも使いこなせるようになると思う。
431デフォルトの名無しさん:2007/02/22(木) 18:59:55
今作りたいものは

ラグナロクオンラインのBOT
メールソフト(outlook expressがゴミなので)
2ちゃんビューア

ですがよく考えたらwindowsプログラミングって超むずいんじゃないかっていう
432デフォルトの名無しさん:2007/02/22(木) 19:20:07
Windows環境でのRubyは不遇なので要らぬ苦労をするぞ。
433デフォルトの名無しさん:2007/02/22(木) 19:32:39
そうなんですか;;
じゃあみなさんは何の為にRubyしてるんですか?
計算速度は遅いし・・・もしやLINUXユーザですか!?
434デフォルトの名無しさん:2007/02/22(木) 19:38:04
WindowsはゲームとMS Officeにしか使ってないな。
435デフォルトの名無しさん:2007/02/22(木) 21:09:03
>>406
おおっ、わかりやすい!
ありがとうございます。

でもPraggerは動きませんでした…。 orz

injectの直前まではちゃんとディレクトリの一覧が
配列で渡されてますが、injectでやっぱりエラーになってしまいます

bの出所もやっぱりさっぱりわかりません。

ひょっとして1.8.4では動かないんでしょうかこれ
436デフォルトの名無しさん:2007/02/22(木) 23:28:36
>>435
今見たらすでに直っている。
とりあえずsvn upしろ。
437デフォルトの名無しさん:2007/02/22(木) 23:29:51
正規表現は .+? の動きを覚えたらたいていのことはできると思う…
小難しいのはRuby自体の制御構造だの一時的変数だのでフォローだ

data=text.scan(/超複雑な正規表現/) #=> data=[ ['a','b,','c'],['d','e','f'] ...]



tmp = text.scan(/大雑把なでかい塊に区切る正規表現/)
tmp.each do |part|
 data.push part.scan(/塊を配列に崩す正規表現/).flatten
end

で対応だ
メモリはたくさん積んでくれ
438デフォルトの名無しさん:2007/02/22(木) 23:33:44
俺はエディタのキーワード登録で正規表現覚えたなー
あとはgrepとsedか
覚えちゃえば便利だよー

…今はpack/unpackに苦戦中
439デフォルトの名無しさん:2007/02/22(木) 23:37:46
pack/unpackは俺も苦戦したけど
Cのunionみたいなもんって気づいたらあとは楽だった。
440デフォルトの名無しさん:2007/02/23(金) 06:00:42
>>436
dです
441デフォルトの名無しさん:2007/02/23(金) 06:09:27
> pack/unpack
概念自体は超簡単だな。
任意の大きさにカステラ切り分けたり、切ったカステラ並べるとこでも想像すればいいのでは。
442デフォルトの名無しさん:2007/02/23(金) 08:12:02
>>432
趣味で使うんなら大したことないんじゃない?
Windows専用のHSPの方がよっぽど苦労すると思う。

>433
自分はWindowsユーザだけど、よっぽどOS依存の機能
使いたい場合でなければ、お気楽に使えるオブジェクト
指向のスクリプト言語ってかなり楽しい。
443デフォルトの名無しさん:2007/02/23(金) 08:16:37
perl++
444ちんこ ◆HEfxsk5e3k :2007/02/23(金) 16:41:52
少しだけ正規表現分かってきた。
しかしどうすれば四角いウィンドウが出てきてボタンを押すと動いたりするアプリが作れるのかわからない。
445デフォルトの名無しさん:2007/02/23(金) 16:51:29
ここ10年くらいはプログラムっつーとウィンドウが出て云々が
当たり前になっちゃってるから、そこに至るためには助走が必
要だってのを知らずに始めるとゴールの遠さが堪えそうだな。

446デフォルトの名無しさん:2007/02/23(金) 17:36:37
emacs の fill-paragraph のように、日本語と英語が混ざっているような文章 でも指定したカラム幅に抑えるよう整形してくれるようなライブラリありませ んか?
447デフォルトの名無しさん:2007/02/23(金) 17:57:26
# $KCODE='UTF8'
require 'nkf'

folded = NKF.nkf("-f#{columns} -W -m0", original)

columnsは桁数。
-Wのとこは出力コードをUTF8に。
-m0はMIMEデコードを抑止。

Unicodeでない場合は$KCODEの値を変え、-Wを他のフラグに。
448446:2007/02/23(金) 18:25:51
大変ありがとうございます!! ちょっと感動しました。
死んだばあちゃんも天国で喜んでいると思います。
449デフォルトの名無しさん:2007/02/23(金) 18:31:21
>>437
一般的には

前者はメモリ使用量少ないが遅い
後者は遅くないがメモリたくさん使う

という認識でいいか
450デフォルトの名無しさん:2007/02/23(金) 21:28:24
ttp://www.ganaware.jp/archives/2007/02/mouseoverdictionary.html

このサイトのrubyスクリプトを利用したら、
このようなエラーメッセージが表示されました。

30:in `to_a': failed to allocate memory (NoMemoryError)

ですので、このスクリプトの30行目の

words.to_a.sort{|a, b| a[0] <=> b[0]}.each{|k, v|

をスマートに書き換えたいのですが
どのように書けばメモリの使用を効率よくできるのでしょうか。
451デフォルトの名無しさん:2007/02/23(金) 21:42:53
>>444
Tk無いなら Tcl/tk 環境入れて
RubyTk 使えば良いんじゃね?
452ちんこ ◆HEfxsk5e3k :2007/02/23(金) 21:47:23
>>451
tkとかよく分からない。
tkで思いつくのは小室哲哉くらい
453デフォルトの名無しさん:2007/02/23(金) 21:51:29
454デフォルトの名無しさん:2007/02/23(金) 21:54:30
>>450

 1.本質的にナニをナニに変換する処理をしてるスクリプトなのかよく考える
 2.wordsには何が入ってるのかよく考える
 3.ここでのソートが何をしてるのかを考える

wordsをファイルに書き出してみるとなんとなくわかるかも
455デフォルトの名無しさん:2007/02/23(金) 21:56:52
素直にsort_by使えって書けよw
456デフォルトの名無しさん:2007/02/23(金) 22:30:41
>>454-455
ども。分かりました。
sort_byって強力なのですね。
457ちんこ ◆HEfxsk5e3k :2007/02/23(金) 23:07:31
>>453
よくわからないんですけど、rubyでプログラム書いて人に配布する時は
どうやって配布するんですか?C++ならコンパイルして渡すんでしょうけど
インタプリタの場合どうすればいいのか・・・

試しにどなたか自作のテキストエディタを配布してくれませんか?
超単純なのでいいので。
458ちんこ ◆HEfxsk5e3k :2007/02/23(金) 23:08:31
あ、テキストエディタは難しいので時計でいいです。
時間を取得して表示する時計をwindowsのアプリ的なカンジで作ってください。
あ、windowsAPIってなんだ?w
459デフォルトの名無しさん:2007/02/23(金) 23:24:52
お前にRubyは向いてない
460デフォルトの名無しさん:2007/02/23(金) 23:41:35
exerb辺り使えばそこそこ行けるんじゃね
461デフォルトの名無しさん:2007/02/24(土) 00:11:46
>>458 配布してやるよ
ruby -e "p Time.now"
462ちんこ ◆HEfxsk5e3k :2007/02/24(土) 00:17:51
え?
ようするにソースのまま配布するのがインタプリタ型の配布の仕方と考えてよろしいんですね?
463デフォルトの名無しさん:2007/02/24(土) 00:18:47
だからexerbってヒントが出てるんだからぐぐってみればいいじゃんよ
464デフォルトの名無しさん:2007/02/24(土) 00:27:24
ExerbとVisualurubyならexeに出来る。
UPXしないと単純なものでも800kbくらいになるけどな^^;

ttp://koneko.cn/freesoft/example.zip
465デフォルトの名無しさん:2007/02/24(土) 06:32:15
466ちんこ ◆HEfxsk5e3k :2007/02/24(土) 09:21:01
>>464
おおおおおおおおおおおおおおおおおおおおおおおおおおおおおお
これぞプログラミングwwwwwwwwwwwwwwwww
めっちゃ感動しました
ようするにRuby入ってる人なら.rbで起動出来るってことでつか?
467ちんこ ◆HEfxsk5e3k :2007/02/24(土) 09:22:25
でも理解出来ないw
468ちんこ ◆HEfxsk5e3k :2007/02/24(土) 09:27:12
やべええ感動が止まらないwwwwwww
これがプログラミングwwwwwwww
感動したよ、おっさん!!!!!!!
469ちんこ ◆HEfxsk5e3k :2007/02/24(土) 09:32:28
いろいろいじったらなんとなく理解出来た。
VRすっげwww
470デフォルトの名無しさん:2007/02/24(土) 09:48:27
>>466
.exe単体で起動するよ。
.rbはFormDesignerの吐いたソースほぼそのままを付けておいただけ。
471ちんこ ◆HEfxsk5e3k :2007/02/24(土) 10:19:26
FormDesigner!!!!!!!!!!
何それwwwwwwwwwwwww
すげえかこよすwwwwwww
ぐぐろw
472デフォルトの名無しさん:2007/02/24(土) 10:20:25
うざい
473ちんこ ◆HEfxsk5e3k :2007/02/24(土) 10:20:55
おおおおおおおおおおお!!!!!!!!
これでwindowsプログラミングが出来るぽい!!!!!!!!!
さんくる、さんくるですよぉ!!!

ttp://homepage3.nifty.com/Yukimi_Sake/ruby/formdesigner/readme.txt
474デフォルトの名無しさん:2007/02/24(土) 10:26:08
コテつきは馬鹿ばかりだからな
475ちんこ ◆HEfxsk5e3k :2007/02/24(土) 10:30:07
京大生だぞおおおおおおおおおおおおおおおおおwwwwwwwwwwwwww
rubyやべえwwwwwwwwwwwwwwwwwwwwwww
476デフォルトの名無しさん:2007/02/24(土) 11:37:57
このスレはどうなん?

【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc10.2ch.net/test/read.cgi/tech/1155031689/
477デフォルトの名無しさん:2007/02/24(土) 11:55:28
ちんこ自重しろ
478デフォルトの名無しさん:2007/02/24(土) 12:38:02
あぼーん指定しる
479デフォルトの名無しさん:2007/02/24(土) 14:43:36
他の人もいる場でこのスレ開けないorz
480ちんこ ◆HEfxsk5e3k :2007/02/24(土) 17:40:09
include Math

def max
return 100000
end

t1 = Time.new

prime = [2]
array = Array.new(max) {|i| i+1}
array.shift

sqt = sqrt(max).floor

while prime.last<=sqt
array.delete_if {|i|
i%prime.last == 0
}
prime << array.shift
end

prime << array
prime.flatten!

#p prime

t2 = Time.new

p t2-t1

これをNarrayを使ってさらに高速にしたいのですが、出来ますか?
1秒の壁を超えたいw
481デフォルトの名無しさん:2007/02/24(土) 18:01:54
t1 = Time.new
MAX=100000
primes = []
table = Array.new(MAX+1).fill(true, 2)
mid = Math.sqrt(MAX).floor
2.upto(mid) do |i|
if table[i]
primes << i
(i+i).step(MAX, i) { |j| table[j] = false if table[j] }
end
end
(mid+1).upto(MAX) do |i|
primes << i if table[i]
end
#p primes.length
t2 = Time.new
p t2-t1
482ちんこ ◆HEfxsk5e3k :2007/02/24(土) 18:16:58
悔しいけど認めざるを得ないw
でも理解出来ないから説明おねw
10^6で5秒切ることが夢だったのにふつうに5秒切られて焦るw
483ちんこ ◆HEfxsk5e3k :2007/02/24(土) 18:18:30
おれのも結構早いと思うのにおれより6倍近くはええ
まさか・・・ね、しかも配列見てもあってる、インチキじゃない
エラトステネスよええwwwwwwww
484ちんこ ◆HEfxsk5e3k :2007/02/24(土) 18:21:17
しかも数が多くなるほど差が開く。
エラトステネスこそ、数が増えるほど早くなるんじゃないのか
なんでだ・・・情報学科じゃないから分からないw
485ちんこ ◆HEfxsk5e3k :2007/02/24(土) 18:24:44
分からないじゃなくてちょっと考えてみようかな。
考えればおれに分からんことなどないのだからw
しかしふつうのrubyでアルゴリズムだけで抜かれたとなると、ますます情報系に対する憧れが強くなってしまう。
情報系にいったら就職はないと分かっているのに、何をいまさら迷っているんだおれ・・・


あぁ彼女欲しい
486ちんこ ◆HEfxsk5e3k :2007/02/24(土) 18:33:26
理解した。割るよりtrueとfalseを判定した方が早いってことか。
なかなかやるな・・・その発想はなかった。
487デフォルトの名無しさん:2007/02/24(土) 18:33:28
488ちんこ ◆HEfxsk5e3k :2007/02/24(土) 18:35:58
な、なにーーーーーーーーーーー!!!!!!!!!!!!!!!!!111111111
\(^o^)/
あとで全部読むか、こいつは面白いことになってきたぜ。
めざせ10^7で5秒
489デフォルトの名無しさん:2007/02/24(土) 20:17:31
gem updateしたら2日とか応答帰ってこないって普通?
たしかにCeleron 600Mhzで64MBの非力マシンなんだけど・・・
なんかまちがってんのかな。
debianで、apt-get updateとかはそれなりに我慢できるスピードなんだけど。
490デフォルトの名無しさん:2007/02/25(日) 00:02:56
DBとか使わないで何も考えずにオンメモリで処理しようとすると
メモリ不足で結構きついんじゃないか?
491デフォルトの名無しさん:2007/02/25(日) 09:39:08
mkexyでexerbのレシピファイルを作るとき、gemをrequireしていると
当座の目的には必要でないライブラリまで取り込まれるようなんですが、
不要なファイルを簡単に判別する方法ってありますか?
492デフォルトの名無しさん:2007/02/25(日) 21:37:27
>>491
rubygemsをrequireするだけのスクリプトをmkexyしてやれば
不要なファイルがレシピに書き出されるんじゃない?
493デフォルトの名無しさん:2007/02/25(日) 21:48:16
教えてください。
モジュールを二つインクルードするとして、それぞれのモジュールでインスタンスを
初期化する必要があるためinitializeを定義しているのですが、インクルードした
側のクラスのinitializeで両方のモジュールのinitializeを呼び出すことはできるの
でしょうか。
ふつうにsuperを呼ぶと、後からインクルードした方しか呼べないのですが。
irb(main):001:0> module A
irb(main):002:1>   def initialize
irb(main):003:2>     puts "A"
irb(main):004:2>   end
irb(main):005:1> end
=> nil
irb(main):006:0> module B
irb(main):007:1>   def initialize
irb(main):008:2>     puts "B"
irb(main):009:2>   end
irb(main):010:1> end
=> nil
irb(main):011:0> class C
irb(main):012:1>   def initialize
irb(main):013:2>     super
irb(main):014:2>     puts "C"
irb(main):015:2>   end
irb(main):016:1> end
=> nil
irb(main):017:0> c = C.new
B
C
=> #<C:0x29c9828>
494デフォルトの名無しさん:2007/02/25(日) 22:24:31
>>493
AとBで、initialize()の名前を変えるのはどうだろう。

module A
  def init_A
    puts "A"
  end
  alias initialize init_A
end

module B
  def init_B
    puts "B"
  end
  alias initialize init_B
end

class C
  include A
  include B
  def initialize
    init_A
    init_B
    puts "C"
  end
end
495493:2007/02/25(日) 22:35:50
>>494
そのモジュール専用の初期化メソッドを名前を変えて定義するということですね。
C++だとA::initialize、B::initialize、みたいに同名のメソッドでもクラス指定で
呼び分けることができたのですが、Rubyではできないのですね。
ありがとうございました。
496デフォルトの名無しさん:2007/02/25(日) 23:31:11
Rubyのモジュール・クラスは開いているから、
module A,Bが直接手が出せないファイルでも、
自分のclass Cのソースの中で
module A...;end
module B...;end
すればいいね。
497デフォルトの名無しさん:2007/02/25(日) 23:34:55
AもBもinitializeでsuper呼べばいいんじゃないの?
そうすればCで両方インクルードして、両方とも呼ばれるでしょ。
498デフォルトの名無しさん:2007/02/25(日) 23:36:25
これ多重継承じゃね?
499デフォルトの名無しさん:2007/02/26(月) 04:53:48
>498
mix-in 。
簡単に言えば多重継承の代わりにある機能だわな
多重継承ほどの自由度はないよ。
500デフォルトの名無しさん:2007/02/26(月) 10:31:32
ここで「mixin」だという説明はどーかなー。「そう。多重継承だよ」でいいんじゃ?

もともと mixin は多重継承のことを指していたんだが、Matzが自分勝手に
Rubyの「モジュール」という(しかもRubyが特に最初ってわけでない)機能の別名に
頻繁に使って世の中を混乱させているだけ。好んでその混乱に拍車をかけるこたーない。

http://www.rubyist.net/~matz/20040128.html#p01
501デフォルトの名無しさん:2007/02/26(月) 13:04:46
>>447
$KCODE の値は何のために変える必要があるの?
502デフォルトの名無しさん:2007/02/26(月) 14:42:55
>>501
変換対象の文字列が生でソースコードに出てくるなら必要だけど、
そうでなければいらないんじゃない?
503デフォルトの名無しさん:2007/02/26(月) 14:58:05
なるほど。そういう話ね。
504デフォルトの名無しさん:2007/02/26(月) 15:16:54
先生!throw〜catchとraise〜rescueの使い分けがわかりません。
505デフォルトの名無しさん:2007/02/26(月) 15:22:48
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/2149

10年前か……

ラベル付きbreakみたいなのもthrow〜catchがいいだろうね。
506デフォルトの名無しさん:2007/02/26(月) 16:04:55
>>505
なるほど。
しかし末尾のendが増えるな。
507デフォルトの名無しさん:2007/02/26(月) 18:13:26
結局、どっちが大域脱出で、どっちが例外処理なん?
508デフォルトの名無しさん:2007/02/26(月) 18:36:30
>>507
前者が前者で、後者が後者。
509デフォルトの名無しさん:2007/02/26(月) 19:24:06
ややこしい仕様だのう。
他の言語はthrow、catchは大域脱出の手段で使うことは推奨してないのでは?
510デフォルトの名無しさん:2007/02/26(月) 19:27:15
キーワードが違うだけですから。まずは入門書でも読んでみなされ
511デフォルトの名無しさん:2007/02/26(月) 19:43:01
>>509
そもそも他の言語のthrow&catchとは違って、投げるのは例外ではないし、
例外処理ではない。単なるラベル付きbreaak。
512デフォルトの名無しさん:2007/02/26(月) 20:50:40
ラベル付きbreakでなく、throw、catchにした利点は何?
513デフォルトの名無しさん:2007/02/26(月) 20:55:44
しらんけど、いまのcatch〜throwの構文だとラベル付きbreakと違って
文法追加しないで済むのかも。
call/ccでライブラリレベルの実装も出来そうな気がする。


514デフォルトの名無しさん:2007/02/26(月) 22:09:42
rubyのブロックとイテレータ、配列、制御構造、正規表現、クラスあたりまで勉強してます
研究室の輪講で、上記を使った問題を披露する必要があるのですが、何か面白い問題あるでしょうか?
無難に、文字カウントとか考えていたのですが、あまりにもひねりが無いと怖い先輩に馬鹿にされそうです
よろしくおねがいいたします

ついでに、質問ですが、イテレータが役に立つ場面って具体的にどんなところですかね
Java C verilogプログラマの自分にはいまいち、応用例がでてこないです
役に立ちそうだとは思うのですが、パッと出てこないでふ
515デフォルトの名無しさん:2007/02/26(月) 22:22:54
例えば順列を生成して1つずつ処理したい時に使うとか。
516514:2007/02/26(月) 22:30:26
>>515
関数じゃだめなのでしょうか?
それとも、1個1個に対して異なるブロックを指定して処理内容を変えるってことですか?

なんか、トンチンカンなこと言っていたらすみません
517デフォルトの名無しさん:2007/02/26(月) 22:33:09
Cで関数ポインタを使うようなケースはブロック付きメソッド(イテレータ)の出番。
それだけじゃないけど。

518514:2007/02/26(月) 22:37:23
>>517
関数ポインタか
ほとんど使ったことないです
コマンドラインから文字読み取って処理を切り替えるときに使った記憶がわずかに

でも、確かにそれをコードブロックでかければ、関数ポインタで処理するよりずっとわかりやすそうですね
519ちんこ ◆HEfxsk5e3k :2007/02/26(月) 22:47:04
if $stdin.getc == "\n"
p "tinko"
end

どうしてだろ?
520デフォルトの名無しさん:2007/02/26(月) 22:49:30
Javaのイベントリスナでメソッドが1つしかないようなのもRubyだと
ブロックとして渡したりする。

あとは、「リソースを得て、それを使って、リソースを解放する」という
パターンの場合、

def syori
resourceを得る。
begin
yield(resource)
ensure
resourceを解放
end
end

でsyori { |resource| ... } のように使ったり。IO::openなんかがそうだな。
521デフォルトの名無しさん:2007/02/26(月) 22:50:54
>>519
getcはStringではなくFixnum(文字コード)を返すから、?¥n と比較。
522ちんこ ◆HEfxsk5e3k :2007/02/26(月) 22:57:15
>>521
そうしてもpが発動しないのですが・・・
523514:2007/02/26(月) 22:59:16
>>520
ふむふむ、少し理解できてきました
仮にイテレータの無い言語で記述すると、処理の数だけ別な関数を生成する必要が発生しますね
それに大して、イテレータを使えば、そのつど必要な処理をかけるという解釈でOKですかね
524ちんこ ◆HEfxsk5e3k :2007/02/26(月) 23:10:04
分かったwwwwwwwwwww
数字を出すっていってるのにまだ""つけてたwwwwww
そりゃ比較できねーってwwwwwwwおれバカスwwwwwwwww
525デフォルトの名無しさん:2007/02/26(月) 23:14:48
sryoriの中身は
begin
resourceを得る。
yield(resource)
ensure
resourceを解放 if resource
end
だた。
526514:2007/02/26(月) 23:45:25
>>525
>resourceを解放 if resource
rubyっぽくていいですね
つい
if resource != nil
resourceを開放
end
とか書いちゃいそうです

ところで、>>514に書いた問題で適切なもの思い浮かぶかたいませんかね
できれば、イテレータとハッシュか配列は絡ませたいものです
527デフォルトの名無しさん:2007/02/26(月) 23:53:22
nilとfalseはきちんと使い分けとかないと、値としてのfalseが扱えないみたいな
あほなプログラムが出来る。
528デフォルトの名無しさん:2007/02/27(火) 00:09:14
すみません

test = Test.new("test")

class Test
def initialize(name)
@name = name
end
end

と記述したところuninitialized constant Test (NameError)とか出るのですが、なんなんでしょこれ?
意味が良くわかりません
最初のclassでつまずくとは、先が思いやられる、、、
529デフォルトの名無しさん:2007/02/27(火) 00:17:40
class Test
def initialize(name)
@name = name
end
end

test = Test.new("test")
530デフォルトの名無しさん:2007/02/27(火) 00:20:33
class〜endも実行文。頭から実行される。

531デフォルトの名無しさん:2007/02/27(火) 00:21:44
文つーか、式な。

532デフォルトの名無しさん:2007/02/27(火) 00:30:01
classは複数回定義可能ね。

class Test
def foo
end
end
class Test
def bar
end
end

別ファイルにわけてrequireしてもいい。
ただし、継承でハマると思うので最初の定義だけは厳密に最初に実行するように。
533デフォルトの名無しさん:2007/02/27(火) 00:38:09
レスさんくす
納得しました
基本的に上から順番に実行されていくわけですね
534デフォルトの名無しさん:2007/02/27(火) 00:40:57
>>526

既存のやつの使い道じゃなくて、
ブロック付きメソッドの定義例が欲しいってことかねぇ。
535ちんこ ◆HEfxsk5e3k :2007/02/27(火) 08:50:52
words = Array.new
io = File.open("1.txt", "r")
io.each{|line|
line.scan(/^(.+)\s(.+)$/){|eng, jap|
words << [eng, jap]
}
}
io.close

# print words[1][1]
# p count



a = rand(words.length)
print words[a][0]

if $stdin.getc == ?v
print words[a][1]
end

英検1級の為に単語帳を製作しています。
最初に$stdin,getcが発動してしまうのはなぜでしょうか?
536514:2007/02/27(火) 08:54:55
>>534
えっと、最初に書いたのですが、研究室での輪講用の問題を作成しなくてはならないのです
で、ブロックとイテレータ、配列、制御構造、正規表現、クラスあたりまでが私の担当なので、それらを使用した面白い問題を作っていかなければならないのです
そこで、皆さんのお知恵を拝借させていただきたく思い、書き込みさせていただきました
537デフォルトの名無しさん:2007/02/27(火) 10:00:22
それについてはレスがそもそもないからな
後者の疑問に対してのレスが今までだらだら続いてる感じだ

面白くない問題なら作れるだろうしそれでお茶濁せ
仮に面白い問題思いついたって2chには書かん(w
538デフォルトの名無しさん:2007/02/27(火) 10:02:46
簡単なゲーム作るのが王道ではあるんだけどね

あるいは研究室の研究を絡めた身近な処理を書くとか
輪講で話すってことはRubyを普段使いして欲しいんだろ?
539ちんこ ◆HEfxsk5e3k :2007/02/27(火) 10:20:56
あの、おりの質問に答えてもらえないでしょうか。
PCの前でハルヒ見ながら待ってるのですが;;
540デフォルトの名無しさん:2007/02/27(火) 11:13:06
>>539
朝っぱらからハルヒなんぞ見てないで改行してから出直せ。
541デフォルトの名無しさん:2007/02/27(火) 11:38:30
>>538
> 研究室の研究を絡めた身近な処理を書く
に一票
「で、だから何なんだ?」という感想を抱かれるより100倍マシ
542ちんこ ◆HEfxsk5e3k :2007/02/27(火) 13:29:26
>>540
助けてくだしあ

みくるちゃん(;゚∀゚)=3ハァハァ
543ちんこ ◆HEfxsk5e3k :2007/02/27(火) 13:32:01
a = rand(words.length)
print words[a][0]

if $stdin.getc == "?\n"
print words[a][1]
end
でも無理です。
おかしい・・・何かがおかしい
544ちんこ ◆HEfxsk5e3k :2007/02/27(火) 13:37:31
ここは初心者を助けるスレじゃないのかよ。
助けてくれよ、全然分からないんだ・・・どうすりゃいいんだよおれ・・・
545デフォルトの名無しさん:2007/02/27(火) 13:47:30
まず、
A:本来どう動くべきものなのか
B:実際にはどうなるのか
を書け。
546ちんこ ◆HEfxsk5e3k :2007/02/27(火) 14:04:39
Arrayクラスwordsに単語(英語、日本語)を突っ込みます



まず英語を出します
次に$stdinからとりあえず改行でもなんでも押すと
日本語をだします


最初に$stdin.getcが発動します
改行を押すと
英語が出ます、日本語はでません

Bの方は作動してもらえれば分かると思います。

words = Array.new
io = File.open("1.txt", "r")
io.each{|line|
line.scan(/^(.+)\s(.+)$/){|eng, jap|
words << [eng, jap]
}
}
io.close

#print words[1][1]

a = rand(words.length)
print words[a][0]

if STDIN.getc == "?\n"
print words[a][1]
end
547デフォルトの名無しさん:2007/02/27(火) 14:04:57
面白い例題といわれてもなあ。こんなのはどう?Hashのような感じでインスタンス変数にアクセスできるようにする。

module Hashable
  def [](key)
    self.instance_variable_get("@#{key}")
  end
  def []=(key, val)
    self.instance_variable_set("@#{key}", val)
  end
  def each
    self.instance_variables.each do |varname|
      key = varname[1..-1]   # '@foo' => 'foo'
      val = self[key]
      yield(key, val)
    end
  end
end

548デフォルトの名無しさん:2007/02/27(火) 14:06:05
使い方

class Foo
  include Hashable
  def initialize(x, y)
    @x = x
    @y = y
  end
end

foo = Foo.new(10, 20)
foo[:x]   #=> 10
foo[:y]   #=> 20
foo[:x] = 30
foo[:x]   #=> 30
foo.each { |k, v| puts "#{k}=#{v}" } #=> "y=30", "x=20"
549ちんこ ◆HEfxsk5e3k :2007/02/27(火) 14:06:57
本当は
英語出る
→やべわかんね→「→」押す→右に日本語でる→改行押す→次の英語でる
→知ってるw→改行押す→次の単語へ

がいいんだけど、とりあえずテストしてるので
550デフォルトの名無しさん:2007/02/27(火) 14:10:51
>>546
>>540に答えでてるじゃんか。

日本語出したあと、改行は?

551デフォルトの名無しさん:2007/02/27(火) 14:13:30
英語のほうが改行ないのに表示されるのは、
STDIN.getcを使ったタイミングでflushされてるのかな。
552ちんこ ◆HEfxsk5e3k :2007/02/27(火) 14:19:51
>>550
え?何言ってるんですか?
putsにしたところで変わるわけないじゃないですか・・・
1)入力後に英語がでてくる
2)日本語が出てこない
んだから・・・
553デフォルトの名無しさん:2007/02/27(火) 14:21:02
態度悪いから相手するの止めるわ。
554ちんこ ◆HEfxsk5e3k :2007/02/27(火) 14:22:38
あの、実際に実行してもらえますか?
改行とか何が関係あるのか分からない。
文字が出ないと言ってるのにどう改行が関係するのか。
それか、正しく動くプログラムを示しから話してください。

あなたには分かるかも知れないが、おれに分からない。
だから聞いてるんだ、なのにさらに惑わすようなことを言って愉快犯も甚だしいっすよ

タメ口サーセンwwwwwwwwwwwwwwwwwww
555ちんこ ◆HEfxsk5e3k :2007/02/27(火) 14:24:27
a = rand(words.length)
print words[a][0]+"\n"

if STDIN.getc == "?\n"
print words[a][1]
end

あなた方がいうようにこうしたところで何も変わらない。
妄想で話すのはやめて欲しい。
556デフォルトの名無しさん:2007/02/27(火) 14:28:45
うちでは最初に英単語が出てきて、キーを押すとプロンプトだけが出る。
これは使ってるzshが最後の改行なし出力をくってしまうためなので、
改行をつければちゃんと出る。

あなたの環境は何なのか?

というか p wordsするとちゃんと出るのか。
うちじゃ読み込み部分自体がまともに動かなかったので、
words = [
[ 'hello', 'こんにちは']
]
とわざわざ作って試してるんだが。
557デフォルトの名無しさん:2007/02/27(火) 14:32:58
む、また "?¥n" にしてるのかよお前。


558ちんこ ◆HEfxsk5e3k :2007/02/27(火) 14:33:45
p words =>
[["apple", "\202\350\202\361\202\262"], ["elephant", "\202\274\202\244"], ["touch", "\220G\202\351"], ["love", "\210\244"], ["lip", "\220O"]]

日本語なのでpではうまく表示されないけど。
ちゃんと
print words[1][1]とかやると表示されます。

環境はruby1.8.5

a = rand(words.length)
print words[a][0]+"\n"

if STDIN.getc == "?\n"
print words[a][1] + "\n"
end

こうしても入力要求の前に英語が出ることはありません。
559ちんこ ◆HEfxsk5e3k :2007/02/27(火) 14:35:02
>>557
なる。""は外してみたが
やはりしょっぱなにgetcが発動するのは変わりない
560ちんこ ◆HEfxsk5e3k :2007/02/27(火) 14:36:07
が、改行を押したらきちんと日本語が表示されるようにはなった。
しかしやはり英語が先に出ない。
順番がこんがらがってるとプログラムが書けない。
ここさえパスすれば英検1級がとれるんだ
561ちんこ ◆HEfxsk5e3k :2007/02/27(火) 14:37:33
あれ!!!!!!!!!!!!!!
ちょwwwwwwww
今までRDEのコンソール使ってたけど
プロンプトで起動させたらちゃんと出来たwwwwwwwww


WHY???????????????????????WWWWWWWWWWWWWWWWWWWWWWWW
562デフォルトの名無しさん:2007/02/27(火) 14:38:30
バッファリングのOSによる挙動差かね。
getcする前にSTDOUT.flushしてみてはどうか。
563ちんこ ◆HEfxsk5e3k :2007/02/27(火) 14:39:59
a = rand(words.length)
print words[a][0]

if STDIN.getc == ?\n
print "=>" + words[a][1]
end

しかし
lip→改行押す

lip
=>唇

になってしまう。無駄に改行w
おれの望みは「lip => 唇」

what a hell is going on?
564ちんこ ◆HEfxsk5e3k :2007/02/27(火) 14:42:43
>>562
ブラボー!!!!!!!!!!

そしたらRDEでも出来たw
なぜ?

教えてガリレオ
565デフォルトの名無しさん:2007/02/27(火) 14:52:47
文字出力は、効率化のために、ある程度ため込んでからまとめて行う
ようになっている(=出力バッファリング)

環境によっては、ため込んだ量にかかわらず、改行文字の出力を指示されたら
問答無用で出力するようなのもあるが、そうでない環境もある。

flushは、ため込んだ量にかかわらず強制的に出力を行わせる。

566ちんこ ◆HEfxsk5e3k :2007/02/27(火) 14:58:57
>>565
おれはめんどうな環境なのかな。
そうそう、これにこりてコマンドプロンプトで使えるようにパス通しておきましたよ。
あとデフォの作業フォルダも変えてF1で呼び出せるように

快適ーwRDEとかカス?w
567デフォルトの名無しさん:2007/02/27(火) 18:31:54
馬鹿に構うからスレが荒れる
568デフォルトの名無しさん:2007/02/27(火) 19:43:34
ここは初心者が質問したりわかる人がそれに答えたりするスレです。
基地外を飼って遊ぶところではありません。
569デフォルトの名無しさん:2007/02/27(火) 20:10:28
Vista で Ruby の動作は問題ないでしょうか?
検証したHPなどを紹介して頂けると有り難いです
570ちんこ ◆HEfxsk5e3k :2007/02/27(火) 20:21:22
はじめてバカって呼ばれた。
女の子に「バカ・・・・」って言われたことはあるけどwwwwwwwwwww
571514:2007/02/27(火) 21:02:23
>>all
レスありがとうございます

>>537
つか、何にも問題が思いつきません

>>538
輪講1~2時間の間に説明と問題演習をやるので、ゲームを作るのは時間がないかと
それとも、rubyで簡単に作られるゲームなにかありますか?

>>541
研究と絡めたいのですが、研究を理解できているのは、博士と教授のみなのです
それ以外の人間はコード1万行書いたら学部卒業、5万行書いたら院卒業ってノリの研究室です

>>547-548
ありがとうございます
しかし、ruby勉強中なのでいまいち理解できません
勉強させていただきます



572デフォルトの名無しさん:2007/02/27(火) 21:07:54
あれー、難しかった?どこらへん?
573ちんこ ◆HEfxsk5e3k :2007/02/27(火) 21:55:26
どうして
英語 => 日本語
にならないか教えて欲しいです。

おれが学ぶ為に多大な額の税金が使われていることを知り、何か社会の為に出来ないかと考えたのです。
日本人は英語が出来ません、自身が英検1級をとる為に、そして学生が単語を学ぶ為に
役立つソフトを作りたいのです。

お願いです、教えてください。
とりあえずコンソール版を作り終えたら、次はふつうのGUIアプリで作るつもりです。
574デフォルトの名無しさん:2007/02/27(火) 22:09:10
>573
日本語プログラミングスレへどうぞ。
575デフォルトの名無しさん:2007/02/27(火) 23:12:19
>>573
タイプした改行文字がローカルエコー(画面にも表示)されちゃうから。

英語 =>
日本語

になってしまう。

押したキーをプログラムに通知するだけで表示しないというモードがあれば
いいのだが(実際ある)、そう設定するのはピュアRubyコードだけでは難しい。

readlineライブラリやtermios拡張モジュールにそういう機能があるかもしれ
ないが、いずれにせよ環境依存。
576デフォルトの名無しさん:2007/02/27(火) 23:14:52
UNIX系(linuxやmacosx)だと組み込みの IO#ioctl で制御できるかもしれな
いけど、Windowsで使えるかは知らない。
577ちんこ ◆HEfxsk5e3k :2007/02/27(火) 23:33:09
なるほど。
では違う仕様を考えます。
ソフトを作る事を考えるといろいろ勉強になりますね。
知ってたようで知らないことが多すぎます。

作ってるうちにいろいろ機能を実装したくなりますし。

ところでソフトはクラスを使って作るのがデフォですか?
ファイルはどうやって分けるのがいいですかね?
ひとつのファイルに書くと長くなっちゃう場合とか。
あとでいろいろ追加実装するにはクラスを使った方が便利ですか?

っていってもクラスを使ったらどう便利になるのかサパーリなわけですが。
578ちんこ ◆HEfxsk5e3k :2007/02/28(水) 10:06:50
Visual Ruby
Form Designer
Ruby on Rails

これらの違いはなんですか?
579デフォルトの名無しさん:2007/02/28(水) 10:32:34
Visual RubyじゃなくてVisualuRuby
RubyでVisual Basicっぽく楽にGUIを書けることをめざすもの。

Form Designer
Visualu Rubyで使うフォームを作成するツールらしい。

Ruby on Rails
RubyでWebアプリケーションを書くための枠組みの一つ。
580ちんこ ◆HEfxsk5e3k :2007/02/28(水) 13:20:21
Ruby on Railってwebアプリ専用なのか。
じゃあおれが使うべきはForm DesignerとVisualuRubyだな。
この"u"は何のこだわり?
Visual Studioとの違いを見せようと思って?
というかVisual Studioってなんだっけ。なんかC++用のソフトだっけか。
Ruby>>>>>>>>>C++

だよねw

ところでみなさんどんなエディタを使っていますか?
秀丸?terapad?
それとも統合環境?
terapad&コマンドプロンプトか
RDE
かで迷ってます。プロンプトをF1で呼べるようにしてそのままでROすると
バッシュやろうとした瞬間にプロンプトが開いてうけるwwwww

道のりはなげえなぁ、なんかパソコン調子悪くて死にそうだし。
581ちんこ ◆HEfxsk5e3k :2007/02/28(水) 13:21:12
うはwwww
Visual Basicだった、これをVisual Studioの違いもわからねえwwww
DQNですよね、すまそ
582514:2007/02/28(水) 22:22:59
ぐふ、何も問題が思いつきません
とりあえず、1問は正規表現でなにかやって、強引にお茶を濁すつもりです
それ以外に、クラスとかコードブロックとか使用した問題を作りたいが、わけわかめ
583デフォルトの名無しさん:2007/02/28(水) 23:29:36
class Test
def value(value)
@value = value
end
end

test = Test.new()
test.value(10)#ここが、ダメらしい

これ、何がおかしいのでしょうか?
584デフォルトの名無しさん:2007/02/28(水) 23:33:06
すみません、自己解決しました
正確にはソースは
class Test
def value(value)
@value = value
end
attr_reader :value
end
でした、関数名がかぶっているのが良くなかったとの解釈でOKでつか?
585デフォルトの名無しさん:2007/03/01(木) 00:02:46
実行するとエラーが出るでしょ。
in `value': wrong number of arguments (1 for 0) (ArgumentError)
「引数の数の誤り、0個のはずなのに1個渡されている」という意味。

つまり、valueというメソッドは引数がないものであるとRubyには認識され
ている。def value(value)〜endで定義したほうのメソッドが、
attr_readerで定義される引数なしのvalueメソッドによって上書きされている
わけだな。

def valueの定義は取り除いて、
attr_accessor :value
したほうがいいと思う。
586デフォルトの名無しさん:2007/03/01(木) 00:45:28
>>585
レスさんくす
実行時エラーの画面もその通りです
もともとは、attr_readerとattr_writerを定義していました
これは、うまくいきました
しかし、
def value(value)
@value = value
end
にすると関数名が重なるためか、うまくいきません
javaだと大丈夫なのに、、、
値を入れるときにエラーチェックなりなんだかの処理を入れたりすることが可能か確認するため上記の関数を作りました。
けっか、うまくいかなかったのですが、それだと、attr_writerとattr_readerも関数名が被っている気がするのですが、気のせいでしょうか
587デフォルトの名無しさん:2007/03/01(木) 01:11:06
Javaは言語仕様でメソッドのオーバーライドが認められている。
Rubyにはメソッドオーバーライドはない。

defもattr_xxxも実行時に上から順に評価される式だから、
後から書いたやつで定義されるものが勝って残るだけ。
588デフォルトの名無しさん:2007/03/01(木) 01:13:28
attr_readerはvalue、attr_writerはvalue=を定義する。
589デフォルトの名無しさん:2007/03/01(木) 11:15:07
pstoreとかnet/httpとかのブロックの書き方を覚えてない
オンラインマニュアルからのコピペだ

   ↓この部分が覚えにくい
なんとかかんとか { |db|
      〜
}
590デフォルトの名無しさん:2007/03/01(木) 14:19:33
web上から画像(jpgとかgifとか)とってきてローカルにキャッシュするのってどうすればいいの?
Net::HTTPでresponse bodyをそのままprintでファイルに書き込んでみたけど
画像のサイズだけあってて画像はぐちゃぐちゃな感じになった
591デフォルトの名無しさん:2007/03/01(木) 14:42:21
>>590
サイズは 1バイトの差も無くぴったり合ってる?
gzip 圧縮がかかってるとか、
Windows で print するときにバイナリモードになってなかったとかはありそうだけど、
サイズが合ってるとしたら違うよなあ。
592590:2007/03/01(木) 15:08:57
>>591
それでした。
バイナリモードにしわすれてて、3バイトぐらいずれてました。
(画像のサイズが合ってると言ったのは、ピクセルサイズのことです。)

無事に保存できました。
ありがとうございました。
593デフォルトの名無しさん:2007/03/01(木) 15:21:03
>>589

そーゆークラスがあるな、ということはともかく、
APIの細かいとこは覚えてない。

必要なときに
ri PStore
ri Net::HTTP
のようにしている。
594デフォルトの名無しさん:2007/03/01(木) 15:33:59
>>589
 { と } で囲むとブロックになるお
かんたんだお
595デフォルトの名無しさん:2007/03/01(木) 16:51:14
コマンドラインでパスワードを入力させるときにエコーバックさせないようにしたいんですが、どうしたらいいですか。
596デフォルトの名無しさん:2007/03/01(木) 17:09:29
また端末制御か…
597デフォルトの名無しさん:2007/03/01(木) 18:56:22
だから Kernel::getpass() を標準にしるとあれほど。
598デフォルトの名無しさん:2007/03/01(木) 19:14:04
io/consoleてのにそんなのがあったはず。
599デフォルトの名無しさん:2007/03/01(木) 19:26:33
>>595
短い答え
ぐぐれ

長い答え
highline でも使っとけ。

irb(main):001:0> require "rubygems"
=> true
irb(main):002:0> require "highline"
=> true
irb(main):003:0> hl = HighLine.new
=> #<HighLine:0x30a5ea8 @answer=nil, @gather=nil, @wrap_at=nil, @question=nil, @
input=#<IO:0x2946bd0>, @header=nil, @key=nil, @prompt=nil, @menu=nil, @answers=n
il, @page_at=nil, @output=#<IO:0x2946bbc>>
irb(main):004:0> hl.ask("Password: "){|q| q.echo = "*" }
Password: *******
=> "himitsu"

または自分で実装しろ。
http://wiki.ruby-portal.de/CodeShellPasswortEingabe
600デフォルトの名無しさん:2007/03/01(木) 22:15:24
すみませんクラスについて教えてください
class Suuji
def initialize(n)
@i = n
end
def kake(n)
@i = @i * n
end
def to_s
"#{@i}"
end
end
というクラスを作った時に,
s = Suuji.new(2)
s.kake(3)
s.kake(3)
puts s.to_s
とすると2*3*3の18という出力が出るのですが,
puts Suuji.new(2).kake(3).kake(3).to_s
とした場合は「undefined method `kake' for 6:Fixnum (NoMethodError)」とエラーが出てしまいます.
後者の様に一行で扱うようにするにはどうしたらいいのでしょうか?
601デフォルトの名無しさん:2007/03/01(木) 22:19:41
def kake(n)
 @i = @i * n
 self
end
602デフォルトの名無しさん:2007/03/01(木) 22:36:52
>>600
メソッドにreturnがない場合、最後に評価した式の値を持つ。
ので>>601のように自身を返すことでメソッドをチェーン出来る。
603デフォルトの名無しさん:2007/03/01(木) 22:46:31
>>601-602 さんありがとうございました.
お恥ずかしながらこれのやり方で朝から悩んでました.
メソッドチェーンって言うんですね
604デフォルトの名無しさん:2007/03/01(木) 22:57:53
def *(n)
@i=@i*n
self
end
という定義も出来たりする。
605デフォルトの名無しさん:2007/03/01(木) 23:10:53
>>604
a*b と b*a みたく左右入れ替えると不自然な結果に。。。
606デフォルトの名無しさん:2007/03/01(木) 23:15:06
>>605
つ coerce
607デフォルトの名無しさん:2007/03/01(木) 23:26:51
irb(main):001:0> "a"*2
=> "aa"
irb(main):002:0> 2*"a"
TypeError: String can't be coerced into Fixnum
from (irb):2:in `*'
from (irb):2

標準組み込みクラスでもうまくいってない気がする。
608デフォルトの名無しさん:2007/03/01(木) 23:29:34
2*"a"はどうなっているとうまくいっていることになるの?
609デフォルトの名無しさん:2007/03/01(木) 23:42:47
coerceで何でも解決できるんですか?
610デフォルトの名無しさん:2007/03/02(金) 01:11:50
CGIを作ったんですが重いです。
どこの処理に時間がかかるかとかを知りたいんですが、
簡単にチェックする方法ってあります?
611デフォルトの名無しさん:2007/03/02(金) 03:22:07
-rpofile
612デフォルトの名無しさん:2007/03/02(金) 04:12:46
-rprofile だよ。
そういうシンプルな回答で誤字脱字があると哀しいものがあるね。
613デフォルトの名無しさん:2007/03/03(土) 14:15:23
URI.encodeができません。
irb(main):001:0> require 'uri'
=> true
irb(main):002:0> p URI::UNSAFE
/[^-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]]/n
=> nil
irb(main):007:0> s = "('1','2','3')"
=> "('1','2','3')"
irb(main):008:0> p s
"('1','2','3')"
=> nil
irb(main):009:0> p URI.encode(s)
"('1','2','3')"
=> nil

こんなかんじです。
結果は%28%271%27%2C%272%27%2C%273%27%29を期待しているのですが。
rubyはruby 1.8.2 (2004-12-25) [powerpc-darwin8.0]です。
614デフォルトの名無しさん:2007/03/03(土) 14:21:12
(も)も'も,も1も2も3もUNSAFEの正規表現で除外されている([^....])
エスケープする必要のない文字のようだが。

問答無用で%表記にしたいなら
URI.escape(s, /./)
615デフォルトの名無しさん:2007/03/03(土) 14:31:14
>>641
thanks
UNSAFEとあったのでよく見もしないで,エンコードされると思ってました。
デフォルトのままだとブラウザと違って除外されるのね。
616ちんこ ◆HEfxsk5e3k :2007/03/03(土) 15:08:49
class Unko
@@ary = Array.new

def Unko.ary
return @@ary
end

def length
return @@ary.length
end

def Unko.add(value)
if length < 3
@@ary << value
elsif length >= 3
@@ary.shift
@@ary << value
end
end
end

u = Unko.new
Unko.add(1)
Unko.add(2)
Unko.add(3)
Unko.add(4)
Unko.add(5)
Unko.add(6)

p Unko.ary

なぜエラー?
617デフォルトの名無しさん:2007/03/03(土) 15:39:29
・def length を def Unko.length にすれば解決
・エラーメッセージをよく読め
・u = Unko.new は不要
・length メソッドを設ける意味がわからん
・態度が気に入らない
618デフォルトの名無しさん:2007/03/03(土) 16:31:32
プログラミング未経験向けのRubyプログラミング解説サイトってありますか?
ざっと検索したけど、どうも無いような気がします。
無い場合は、自分でつくろうと思っています。
619デフォルトの名無しさん:2007/03/03(土) 16:55:00
620デフォルトの名無しさん:2007/03/03(土) 16:59:30
確かに他の言語でよくあるリファレンスに掲示板がついたようなページってないな。
621ちんこ ◆HEfxsk5e3k :2007/03/03(土) 18:19:21
def Unko.add(value)
if @@ary.length < 3
@@ary << value
elsif Unko.ary.length >= 3
@@ary.shift
@@ary << value
end
end

これでもいけるからして、@@aryを出すためだけのクラスメソッドを作る意味が良く分からない。
外部参照用ってだけ?
622ちんこ ◆HEfxsk5e3k :2007/03/03(土) 18:27:55
ようするに何がしたいかっていうと
コマンドプロンプトみたいに、前の入力をいくつか覚えててくれて↑↓で呼び出せる
クラスを作りたいな
って話なわけで。

今、Form Designerがなんとなく分かったので
GUIの勉強をするのと同時に、オブジェクト指向というものを
きちんと理解しようかと

なぜオブジェクト指向が優れているのか

こういうクラスって作る意味ある?オブジェクト指向をするに当たって、どこからどこまでをクラスにすればよいやら分からないw
623デフォルトの名無しさん:2007/03/03(土) 19:39:31
>>ち○こ
class << unko = []
def add(value)
return push(value) if size < 3
shift
push value
end
end
624ちんこ ◆HEfxsk5e3k :2007/03/03(土) 19:50:35
class << unko = []
の意味が分からない。

さっきシャワー浴びながら考えたけどインスタントメソッド作る意味ないかも。
全部
Unko.xxxxにした方がやりやすい。
こんなクラスのインスタンス作っても作るだけ無駄な気がしてきた。

テキストエディタ→英単語勉強ツール→某掲示板(2ちゃんではなく)ビューア
の予定

FormDesignerのセーブマークやファイル開くマークの使い方がよう分からないんだけど?
625デフォルトの名無しさん:2007/03/03(土) 20:49:22
マニュアル嫁
626デフォルトの名無しさん:2007/03/03(土) 21:23:41
>ちんこ
>>29は読んだか?面白いぞ。

あと、この本は完全に初心者向けで楽しい。オススメ。
http://www.amazon.co.jp/dp/4873112923
627ちんこ ◆HEfxsk5e3k :2007/03/03(土) 21:49:37
>>626
d
テキストはまつもと氏の「楽しいRubyプログラミング」を読んでいます。

ホワイの方はヒマな時読んでみます
628デフォルトの名無しさん:2007/03/03(土) 21:57:41
楽しいRubyはまつもと氏が書いたんじゃないよ。監修しただけ。
でも、それでおk。一番最初のまつもと本を買わなくて正解、あれは初心者向きじゃないよ(でも面白いけどね)。

class << unko = []
def add; ... ; end
end
ってのは特異メソッドな。

unko = []
def unko.add; ... ; end
と等しい。インスタンスっての自分でデータ型を作りたいときに役立つよ。
629ちんこ ◆HEfxsk5e3k :2007/03/03(土) 22:12:51
classはどこいきました・・・?
630デフォルトの名無しさん:2007/03/03(土) 23:11:58
一つしか保持しないならクラス変数とクラスメソッド使う理由もないんじゃねーのって話
631ちんこ ◆HEfxsk5e3k :2007/03/04(日) 00:31:44
どうやってVisualuRuby勉強すればよいでしょう?
イイ本ありますか?ネットのマニュアルは英語でよく分からないw
早急に勉強する必要があるのですが、クラスやモジュール大杉で・・・
632デフォルトの名無しさん:2007/03/04(日) 01:04:56
WEBrickのBASIC認証で質問します。
/himituディレクトリにBASIC認証を設定して、
認証が成立したら/himitu/index.cgiを開こうとしています。

server.mount_proc('/himitu') {|req, res|
WEBrick::HTTPAuth.basic_auth(req, res, "WEBrick's realm") {|user, pass|
user == 'aaa' && pass == 'aaa'
}
res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.request_uri)
}

上のように書いたら、認証→リダイレクト→認証→リダイレクト(以下繰り返し)
になってしまい、/himitu/index.cgiを表示できません。

良く考えたら当り前ですが、/himituディレクトリにはindex.cgi以外にもcgiを
置きたいので、リダイレクト先をreq.request_uriで指定するしかありません。

こういう場合、どういう風に書くと良いのでしょうか?
633デフォルトの名無しさん:2007/03/04(日) 02:48:52
>>619
これは丁寧で良いですね。
でも、完全に初心者って人にはちょっと躓くところがあるかも。
これを参照しつつ、さらに丁寧な解説を付け加えれば、初心者向けのものができますね。
どうもありがとうございました。
634デフォルトの名無しさん:2007/03/04(日) 03:40:32
ちょっと見ただけですが、これも丁寧でわかりやすいです。
ttp://d.hatena.ne.jp/mailishmaid/20061019
635610:2007/03/04(日) 22:00:15
>>611
えーっとですね、CGIなので、コマンドラインから呼んでも
通常の動作をしないです。だから、ブラウザから呼んだ時の
動作を調査したいのですが、何か簡単な方法ないでしょうか?
636デフォルトの名無しさん:2007/03/04(日) 22:44:10
えーとですね、CGIでも、コマンドラインから呼んでも通常の動作をするのです。
だからブラウザから呼んだ時の動作を調査できるのです。

echo VALUE1=hoge&VALUE2=123|ruby hoge.cgi
637デフォルトの名無しさん:2007/03/04(日) 23:42:43
cgi.rbだとコマンドラインから起動した場合は対話形式になったと思う。
標準入力が端末だとそうなるんだっけかかな。
-r profileか ttp://raa.ruby-lang.org/project/ruby-prof/ とか。
あとは基本としてruby本体の起動に時間が掛ってることが多い。
mod_rubyとかFastCGIみたいな環境でないと、やっぱ負荷大きめ。
638デフォルトの名無しさん:2007/03/05(月) 01:35:46
WEBページからスクレイプした情報を配列に入れて
Amritaを使ってHTMLを生成したいのですが
配列の展開がうまくいっていません。

pp $origin_title_Array #=>["ショー☆バン 32", "天の神話 地の永遠", "こいこい7 9(完)"]
pp $author_Array #=>["松島 幸太朗", "赤石 路代", "もりしげ"]

boo = File.open("template_test10Beta.html",'w')
tmpl = TemplateFile.new ("MyTemplate_testSimple.html")

data = {
:table1=>[
{ :newTitle=>$origin_title_Array, :Author=>$author_Array},
]
}
tmpl.prettyprint = true
tmpl.expand(boo, data)
639638:2007/03/05(月) 01:38:55
テンプレート

<table border="1">
<tr><th>name</th><th>author</th></tr>
<tr id=table1>
<td id="newTitle"><td id="Author">
</tr>
</table>



実行結果HTMLのソース

<table border="1">
 <tr>
  <th>name</th>
  <th>author</th>
 </tr>
 <tr>
  <td>ショー☆バン 32</td>
  <td>天の神話 地の永遠</td>
  <td>こいこい7 9(完)</td>
 <td>松島 幸太朗</td>
 <td>赤石 路代</td>
 <td>もりしげ</td>
</tr>
</table>


横一列に展開されてしまいます。
これをAmritaのサンプルソースみたいな感じに出力するにはどうすればいいでしょうか?
640デフォルトの名無しさん:2007/03/05(月) 01:44:36
>>638
列ごとにもつのではなく行単位でデータを持つようにしてみよう。
rows = {
:table1=> [
{ :title=>"apple", :author=>"foo" }.
{ :title=>"banana", :author=>"bar" }.
]
641638:2007/03/05(月) 03:12:19
>>640
何となくわかったような気がします。

試してみます。
642デフォルトの名無しさん:2007/03/05(月) 08:15:23
Hpricotについて分かり易く書かれた
日本語サイトありますか?
643デフォルトの名無しさん:2007/03/05(月) 15:48:09
>>642
ググレ。ぐぐったあとで聞いているなら、「ない」が答えだ。
644デフォルトの名無しさん:2007/03/05(月) 19:49:01
preview を試してみたいのですが、
1.8 系の複数バージョンの共存ってどうするのがスマートでしょうか?

1.8 と 1.9 なら --program-suffix=19 とかで共存できると思いますが、
1.8 同士だとこれでは /usr/local/lib/ruby/1.8 のディレクトリが競合しそうです。
645デフォルトの名無しさん:2007/03/05(月) 19:55:32
/usr/localでない所にインストールすれば良いのでは?
--prefix=hoge
646デフォルトの名無しさん:2007/03/05(月) 21:28:46
647デフォルトの名無しさん:2007/03/05(月) 22:57:54
>644
WindowsならcoLinux入れて……というのもありかも
648デフォルトの名無しさん:2007/03/06(火) 09:17:00
昔Cygwinに入っているstowで複数のバージョンを切替えたりしてたことはあったが
シンボリックリンクが偽物なので変な時があった気がする。
Linuxなり*BSDなら別に問題ないかも知れぬ。
yastとかaptとかで入れちゃうから最近考えたことないな。
649644:2007/03/06(火) 09:48:19
申し送れましたが *BSD を使っております。
>>645 さんのは --prefix=/usr/local/ruby_1_8_6 とかにしておけば
飽きたら rm -rf /usr/local/ruby_1_8_6 するだけで済むので良さそうですね。
というわけでこれでいってみます。みなさん回答ありがとうございました。
650ちんこ ◆HEfxsk5e3k :2007/03/06(火) 14:52:16
VisualuRuby

さいこう
651ちんこ ◆HEfxsk5e3k :2007/03/07(水) 11:21:37
すいません、テキストエディタのように
プリントアウトの画面を出すにはどうすればいいですか?
SWin::CommonDialog::setPrinter(self)
はprinterを選択してくれるみたいですが、
実際に印刷はどうすればいいのか分かりません。
また、メインの印刷ボタンを押した時にまた新しいウインドウが出てくるやり方がわかりません。
教えてくだしあ^^
652デフォルトの名無しさん:2007/03/07(水) 15:40:49
Ruby版のPlaggerってできたんだね・・・
スレもあるし

【それ】Pragger入門【Pra】
http://pc9.2ch.net/test/read.cgi/software/1172087070/
653ちんこ ◆HEfxsk5e3k :2007/03/07(水) 15:59:55
メインウインドウからもうひとつ新しいウインドウをだすのに
なぜ
VRLocalScreen.start From2
じゃダメなんですか?
messageloopのせいですか?

frm=VRLocalScreen.newform
frm.extend Form2
frm.create.show

こう書いたらいけたんですけど、3行も書かないといけないのは理不尽
なのでもっと短いコマンドがあるはずなんですけど・・・・?
654デフォルトの名無しさん:2007/03/07(水) 16:21:32
>>653
>>こう書いたらいけたんですけど、3行も書かないといけないのは理不尽
>>なのでもっと短いコマンドがあるはずなんですけど・・・・?

あるはずって何で分かるの?
655ちんこ ◆HEfxsk5e3k :2007/03/07(水) 16:26:28
ないと理不尽だから
656デフォルトの名無しさん:2007/03/07(水) 16:41:24
重い古味・・・・( ^∀^)
657デフォルトの名無しさん:2007/03/07(水) 16:46:05
>>655
「理不尽」って言葉の意味知ってる?
658デフォルトの名無しさん:2007/03/07(水) 17:14:14
>>657
だって、他にはメソッドとかやたら発達してるのにこんなところで
3行もかかないと新しいウインドウ作れないようじゃ理不尽
659デフォルトの名無しさん:2007/03/07(水) 18:24:54
>>658
の文章は理解できる
>>653
の文章は理解しがたい

つまり「理不尽」の意味は「ゆとり」ということである。
660ちんこ ◆HEfxsk5e3k :2007/03/07(水) 19:31:38
とにかくなんでか教えろよ、分からないのかカスが
661デフォルトの名無しさん:2007/03/07(水) 20:15:12
オープンソースなんだからおまえが一行で書けるようにしろよ、できないのかカスが
662デフォルトの名無しさん:2007/03/07(水) 20:21:15
(frm=VRLocalScreen.newform).extend(Form2);frm.create.show
663ちんこ ◆HEfxsk5e3k :2007/03/07(水) 20:50:00
VRLocalScreenってどこのクラス?
メソッドで定義すりゃいいんだよな、例えば
VRLocalScreen.newWindow(Form2)
とかで出したいんだけどねーw
664ちんこ ◆HEfxsk5e3k :2007/03/07(水) 21:26:38
ちょwwwwwwwwwwwwwwwwwwwwww
やっぱりshowFormってメソッドが存在するじゃねーかwwwwww
Rubyにしては理不尽だと思ったんだよな、3行も書いてちゃちっともEnjoy出来ないwwwwwwwwwwwww
結局お前ら分からなかったんだろ、カスどもめwwwwwwwwwwwwwww
665デフォルトの名無しさん:2007/03/07(水) 22:00:36
自分でちょっと作ったのはForm.openで済むように改造した
666デフォルトの名無しさん:2007/03/07(水) 23:41:12
Math.sqrt(3)
=> 1.73205080756888
となりますが、自分の好きな桁数だけsqrt(3)を得たい場合、
どうすればよいですか?
お教えください。
667デフォルトの名無しさん:2007/03/08(木) 00:04:54
http://www.tinyforest.gr.jp/ruby/ruby.html
こんなのがあるな。計算方法はニュートン法なんかで出せばいいんじゃね
668デフォルトの名無しさん:2007/03/08(木) 00:10:54
RubyのFloatの実装はdoubleで、Math.sqrtは単なるsqrt(3m)のラッパなので、
IEEE754の倍精度以上のものにはならない。

望むだけの桁数を求めたければ自分で開平法を実装するか、
標準のBigDecimalライブラリを使用する。

require 'bigdecimal'
require 'bigdecimal/math'

sqrt3_100 = BigDecimal.new('3').sqrt(100)

開平にはニュートン法を使っているもよう。
669ちんこ ◆HEfxsk5e3k :2007/03/08(木) 00:41:03
>>668
ありw
670デフォルトの名無しさん:2007/03/08(木) 01:39:27
いい加減消えていただきたい
671デフォルトの名無しさん:2007/03/08(木) 01:51:44
windowsでruby使う意味ってあるの?って実際に使っている人っているの?
672デフォルトの名無しさん:2007/03/08(木) 01:55:51
いるいる。
net/http使って一定時間置きにルーターの設定変えたりとか
ファイルの一括リネームとか
HTMLの一括加工とか。

RUBY-MSWIN32はインストール不要でPATH通すだけで良いから
USBメモリーに入れて持ち歩いてる。
673デフォルトの名無しさん:2007/03/08(木) 02:07:12
>>671
ダウンローダの代わりに使ってる。
スクリプトでヘッダから何からいじり放題、HTML解析もし放題なので、
IRIAもまっつぁお。
674デフォルトの名無しさん:2007/03/08(木) 04:18:39
俺は論文書くのにTeXの機能を覚えきれないので、補助的にERBで生成してる。
あと、winのエロゲからスクリプトとか画像とか抜き出したり加工するのにもRubyは大活躍でした。
675デフォルトの名無しさん:2007/03/08(木) 08:24:09
Cygwin 通して Ruby 使ってる。
研究用のプログラムの計算結果を整理するのに使ってる。
676ちんこ ◆HEfxsk5e3k :2007/03/08(木) 09:05:16
Ruby大活躍ですね
677デフォルトの名無しさん:2007/03/08(木) 09:05:40
> Windowsで
主に小さいスクリプト物だな。
ファイルのリネームとか

あとは、プロジェクトで、Makefileの代わりに、Rakefile使ってる
678デフォルトの名無しさん:2007/03/08(木) 09:27:35
perl++の話はもういいから
679デフォルトの名無しさん:2007/03/08(木) 10:59:04
>>677
makeに対するrakeのメリットって何ですか?
680デフォルトの名無しさん:2007/03/08(木) 11:01:41
1行ごとに別シェルになるとか、TABとかの狂った仕様に悩まされなくなるかもね。
681デフォルトの名無しさん:2007/03/08(木) 11:13:19
>>679
使い慣れたrubyを使える点
makeは、不自由すぎる
関数もまともに使えないし(できるけど、すげー使いにくい)
682ちんこ ◆HEfxsk5e3k :2007/03/09(金) 16:40:08
メインがForm1でそこにあるtext1
そこからひらくForm2でtext1.text
を操作することは出来ますか?

"tinko".f @text1.textでやったらエラーが出ました。
683デフォルトの名無しさん:2007/03/09(金) 17:02:32
rubyでお勧めのXMLパーサーを教えてください。
理由もお願いします。


684デフォルトの名無しさん:2007/03/09(金) 18:11:57
>>683
rexml
べつに勧めたくはないが、とりあえず標準添付。
685デフォルトの名無しさん:2007/03/09(金) 18:12:08
>>682
他のインスタンスの持つインスタンス変数へのアクセスはできない。

Form1で
attr_rader :text1 と書いておくと、text1というメソッドで参照できる。
attr_writer :text1 と書くと text1 = ... 書くことで代入が出来る。

あるいは、
f.instance_eval { @text1 } という技もあるが、常用するものではない。
686ちんこ ◆HEfxsk5e3k :2007/03/09(金) 21:01:23
>>685
なるw

しかしVisualuRubyともお別れっぽいです。
Linuxに移行するかも知れないのでtkかgtk+というのに乗り換えねばです。
VisualuRubyで得た知識は使えると思うけど
gtk+の方がオブジェクト指向っぽいって書いてあって、やっぱそっちかなと思っています。

どうしたいいですか?
687デフォルトの名無しさん:2007/03/09(金) 21:09:53
>>686
FXRubyかWXRubyを試してみるといいよ。
Windows、Linuxどちらでも動くプログラムが作れる。
688ちんこ ◆HEfxsk5e3k :2007/03/09(金) 22:30:43
tk gtk+はいらない子ですか?

また
ttp://www.gesource.jp/programming/ruby/gui/wxruby/wxruby.html
をみると明らかにwxRuby>>>>>FXRubyという記述がされていますが・・・
wxRubyもBuilderがあるんですね、ちょっと見てみますわ

マイクロソフトまじむかつくわー
689デフォルトの名無しさん:2007/03/09(金) 22:54:33
tkはメンテナさんが頑張ってるんだけど、どうしてもOSのUIと見た目が違いすぎるというか。
Gtk+はWindowsで使うときにどうも不安定。

wxRubyはRubygems使えば一発で入るし、おすすめ。
690ちんこ ◆HEfxsk5e3k :2007/03/09(金) 22:59:03
ttp://jp.rubyist.net/magazine/?0001-RubyGUI#l1

なんかここだと評判悪いなぁ、なんでだぜ?
691デフォルトの名無しさん:2007/03/09(金) 23:24:19
日本で使ってる人口が少ないからかなぁ。
日本語のドキュメントは皆無だし。
ただ、安定度については「るびま」で紹介されてから大分改善されてきているね。
692デフォルトの名無しさん:2007/03/09(金) 23:26:57
ふむ。
Ruby Wayとかいう、うさんくさい本を買って来た。
たのしいRubyよりはレベルが高いだろう
693デフォルトの名無しさん:2007/03/10(土) 03:06:42
『Ruby Way』 p161 のハッシュから配列への抽出の頁で,
ハッシュに to_a メソッドを使うと,キーと値が交互に並んだ配列が戻る
って書いてあるんだけど,これはRubyのバージョンの違い?それとも間違い?
自分の環境だと配列の配列が戻るし,リファレンスマニュアルでも配列の配列になってる.

環境
ruby 1.8.4 (2005-12-24) [i386-mswin32]
ruby 1.8.2 (2004-12-25) [universal-darwin8.0]

こんな風に書いてある
> h = {"a"=>1, "b"=>2}
> p h.to_a # ["a",1,"b",2]←コレ
694デフォルトの名無しさん:2007/03/10(土) 03:41:35

簡単にお金稼ぎ!!!

以下の手順でやれば、無料でお金稼ぎができます。
企業も広告の宣伝になるから、お金をくれるわけです。

(1) http://otakara.shichihuku.com/
   ↑このアドレスからサイトに行く。
(2) ゲットマネー登録サイトに移動するので、
 そこで無料会員登録をする。
 ※フリーメールアドレスでもOK。
(3)懸賞の応募や無料会員登録をすればするほど、
 ポイントが貰え、それを現金に換えられます。
 
これで現金を稼ぐといいですよ!!!

無料会員登録はこちらから↓
http://otakara.shichihuku.com/
695デフォルトの名無しさん:2007/03/10(土) 07:44:47
ふむ、wxRubyか。
覚えておこう。
696デフォルトの名無しさん:2007/03/10(土) 10:43:54
>>693
Ruby WayはRuby1.6時代の本だったな、確か。

古い挙動は覚えていないが、リファレンスマニュアル(wiki)の
1.6.8から1.8.0への変更点(まとめ) (URL長くて怒られたので省略)
にも、巻末の1.8での変更点にもto_aが変更されたとは書いてないな。

http://www.seshop.com/book/qa/Default.asp?mode=list&pid=3585
ここで問い合わせてみるとか。

697ちんこ ◆HEfxsk5e3k :2007/03/10(土) 10:52:51
>>696
2002年と書いてあるから古いんだろうとは思ったがなんとなく攻略本的なその大きさと
ちょっとした専門書なみの4500円というプライスに惹かれてついつい

でもなかなか面白い。本はやはり外人が書いたものがいいですね。
日本人の書いたものは言葉の無駄が多すぎる、日本語がそういう言語だからなんですけど。

ちょうど学校のパソコンが1.67だったかなんだったかなんで、学校のパソコン室で勉強出来るっ!
家にいるとどしてもちんこをいじってしまう傾向がありまして^^;

タイトルも"Ruby Way"ですからね。
アルティメットなカンジがしました。
698デフォルトの名無しさん:2007/03/10(土) 11:44:01
女性は働きたければ働いて、働きたくなきゃ働かない、辛くなったらやめていい。
そもそも女性に辛い仕事を押し付けないこと。かといって雑用やらせるのもダメ。
それで給与も昇進も平等にね。ただし残業、転勤、深夜当直させたら女性差別だよ。
間接差別禁止規定って知ってるでしょ。なんでも平等にね。髪形と服装は女性の自由だけど。
それからアファーマティブアクションと管理職30%目標もね。産休育休もね。当然給与40%保障で。
主婦と言っても、家事を強制される言われはないし、出産するかどうかは女が決めること。
でも産まれたら育児を女性に押し付けないでね。二人の子供なんだから当然でしょ。
ただし離婚したら親権は母親のものだよ。育児は女性のほうが向いてるんだし。

それから働く夫を妻が支えるなんて時代遅れの女性差別。
これからは働く妻を夫が支えなきゃ。
あ、もちろん収入は夫の方が多くて当然だけどね。妻には扶養請求権だってあるんだから。
それと夫は妻に優しくね。妻が望まないセックスは家庭内レイプだよ。
夫が妻のセックスの求めに応じないと離婚事由になるけどね。
離婚したら慰謝料とか財産分与とかまあ当然だけど。
女性はか弱いから母子手当ても生活保護も税金控除も当然だよね。足りないぐらい。

それと女性に女らしさを押し付けないでよ。
そんなの窮屈で面倒だし、いまさら男尊女卑ですかって感じ。
でも男はやっぱ男らしくないとね。
いつになったらレディーファースト覚えるの?ワリカンなんてありえないし。
少子化だって男のせいでしょ。男がだらしないから女性が結婚できないんだよ。
え?レディースデー?あれはいいの。
別に私たちが頼んだ訳じゃないし。店が勝手にやってるんでしょ。
699デフォルトの名無しさん:2007/03/10(土) 13:58:37
rexmlでxmlファイルをweb上から読む場合、
どのように記述すればよいのでしょうか?
どこを見ても file = File.new(...) で困っています。

700デフォルトの名無しさん:2007/03/10(土) 14:15:31
open-uri
701デフォルトの名無しさん:2007/03/10(土) 15:35:47
spreadsheet-excel の使用方法をご存知の方いらっしゃいますか?

Excel形式でファイルを出力させたいのですが、Windows以外での動作を期待しているので
Win32OLEを使いたくありません。

なにか適当なサンプルが掲載されているサイト等等、あるのかな。。。。たすけて。。
702デフォルトの名無しさん:2007/03/10(土) 16:15:07
The Ruby Wayは2006年10月に2版が出てて、そのまえがきで
著者が「ver1.6.4でも十分coolだと思ったけど、(今使ってる)
ver1.8.5は超coolだぜ!」みたいなこと書いてるので、2版書いた
時に使ってたのは少なくとも1.8以上なのではと推測。

で2版のHash#to_aのところがどうなってるかというと、初版日本
語版と同じだった。やはり著者の勘違い?
703デフォルトの名無しさん:2007/03/10(土) 18:36:28
>>701
spreadsheet-excel の examples ディレクトリにサンプルコードが
少しあるけどこれは見た?
704デフォルトの名無しさん:2007/03/10(土) 18:38:00
以下のコードの最初のp.callで、ローカル変数の場合と比較して、何故クラス変数を問題なく
参照できているのか分からないのですが、どなたか解説してください。

class A
def initialize
p = proc {
@a[1] = 0
}
@a = [1, 2, 3]
p.call
end
end
A.new

p = proc {
puts a[1] = 0
}
a = [1, 2, 3]
p.call
705ちんこ ◆HEfxsk5e3k :2007/03/10(土) 18:57:01
Ruby Way難易度高すぎワロタwwwwwwwwwww
706デフォルトの名無しさん:2007/03/10(土) 19:41:58
>>704
暮らす変数じゃなくてインスタンス変数のことかな。
最初のprocはインスタンスメソッドの中で定義されているから、インスタンス変数を参照できる、ぐらいしか説明できん。
2番目のほうは実行すると
undefined local variable or method `a' for main:Object (NameError)
というエラー。これは、procが定義された時点ではaというローカル変数が定義されていないから。
procの中で参照できるローカル変数は、procが定義されるまでに定義されたローカル変数のみ。
あとからaを定義しても、それはprocの動作に何の影響も与えない。

ローカル変数とインスタンス変数はスコープが違う、といえばいいのかな。
707704:2007/03/10(土) 19:58:54
>>706
> 暮らす変数じゃなくてインスタンス変数のことかな。
そうですね。間違えました。
あと、2つ目のproc{}の中のputsは消し忘れです。

Procオブジェクトは生成された時点で定義されている変数を記録していると理解して
います。initializeの中でProcオブジェクトが生成された時点では@aは定義されていないはず
なのに、どうしてローカル変数と同じようなエラーが出ないのかと言う事が疑問です。
708デフォルトの名無しさん:2007/03/10(土) 20:13:40
そりゃスコープが違うからじゃないの。
インスタンス変数はそのインスタンス内でグローバル変数になるわけだから。

p = Proc.new do $a[1] = 0 end
$a = [1, 2, 3]
p.call
puts $a
709デフォルトの名無しさん:2007/03/10(土) 21:53:56
>>707
インスタンス変数とローカル変数は違うから、としか答えられないなあ。
『Procオブジェクトは生成された時点で定義されている変数を記録している』はちょっと違って、
『Procオブジェクトは生成された時点で定義されているローカル変数だけを記録している』といえばいいのかな。
あと、Procオブジェクトが生成された時点でselfも記録されるから、それ経由で@aは問題なく参照できる。

そうか、@aを直接参照しているのではなく、self経由で参照している、そしてselfはProc生成時にローカル変数と同様に保存される、と説明すればいいのか。
どう?
710704:2007/03/10(土) 22:22:09
>>709
そうか、ローカル変数とselfが記録されるんですね。その説明で納得できました。
711デフォルトの名無しさん:2007/03/10(土) 22:44:49
すみません。2chのID付きのスレから指定したIDの人が書き込んだレスを抽出したいのですが
プログラムを実行したところ最後のte.close行が文法エラーとして出力されます。openしてcloseしているので合ってると思ったのですがエラーが出てるので間違ってるようなのですが
どの部分がおかしいのかわかりません。

# ruby program name.txt
file = open(ARGV[0], "r")
rescue Errno::ENOENT, Errno::EACCES
print("エラー\n")
exit 1
end
print("出力ファイル名:")
output = $stdin.gets.chomp
print("ID名を入力:")
id = $stdin.gets.chomp
te = File.open(output,"w")
chke = "0"
while line = file.gets
if chke == 1
if /ID:#.+\Z/ =~ line && if /\d+/ =~ line
chke = "0"
else
te.print "#{line}\n"
chke = "1"
end
elsif /ID:#{id}\Z/ =~ line && if /\d+/ =~ line
line.chomp!
te.print "#{line}\n"
chke = "1"
end
end
file.close
te.close
712デフォルトの名無しさん:2007/03/10(土) 22:46:48
1レスにつめたところわかりにくくなってしまったのですが、どうかよろしくお願いします。
713デフォルトの名無しさん:2007/03/10(土) 23:32:24
rescueの使い方を再確認
それとブロック使ったほうがファイルの閉じ忘れが無くていい
file = open(...) ... end → open(...) {|file| ... }
714デフォルトの名無しさん:2007/03/10(土) 23:37:34
>>713
rescue文は、前につくって成功した別のプログラムからコピペしたやつだから
うまくいってるのかと思ってましたが、後で確認してみます。

ブロック使う方法についての確認ですが、
open(output,"w") {|file|output,"w"} になるのでしょうか?
何かoutput,"w"を2度指定するのは違和感があるのですが・・・
715デフォルトの名無しさん:2007/03/10(土) 23:44:39
いや、やっぱり確認しましたがrescue文は間違いではないと思うのですが・
たびたび申し訳ない。
716デフォルトの名無しさん:2007/03/10(土) 23:47:33
>>714
begin
 (例外投げそうな処理)
rescue (例外の種類)
 (例外が投げられたときの処理)
end
こうね。
ブロックの方は、単に
file = open(...)
(処理)
file.close

open(...) {|file|
 (処理)
}
とするだけ。ブロックの中ではfileという変数が使えて、}が後始末をしてくれる。
717716:2007/03/10(土) 23:49:51
すまん。具体的に言うとbeginが抜けてる。
718デフォルトの名無しさん:2007/03/10(土) 23:52:13
>>716
大変勉強になりました。ありがとうございます。
>>717
すみません。こちらのミスでした。申し訳ありません。
コピペして貼る際に入りきらなかったのでいろいろと改行削除してたら
beginまで削除していました。実際のプログラムでは削除してありませんが文法エラーであります。
719デフォルトの名無しさん:2007/03/10(土) 23:55:57
>>714
&& if => && で書ける
このロジックなら elsif => if で書ける

レスの中に他からのレスをコピペしたものがあったら、このロジックはバグル
=> dat_file を入力しないとうまくレスは抽出できない
720デフォルトの名無しさん:2007/03/11(日) 00:01:35
>>719
他人のIDをコピペすると
718 :デフォルトの名無しさん :2007/03/10(土) 23:52:13
  719 :デフォルトの名無しさん :2007/03/10(土) 23:55:57
>>714
のようにスペースかタブで区切られると思い
先頭がスペースかタブではなく数字ならいけると思ったのですが無理でしたか・・・
プログラムのエラーがなおれば試してみようかと思います。
721デフォルトの名無しさん:2007/03/11(日) 00:09:09
>>719
すみません、今考えてたのですが
&& if => && で書ける
このロジックなら elsif => if で書ける

見慣れない文だったので手持ちの本で調べてみたのですが。
これは rescue => のことでしょうか?

722デフォルトの名無しさん:2007/03/11(日) 00:23:12
>>721
if /ID:#.+\Z/ =~ line && if /\d+/ =~ line は
if /ID:#.+\Z/ =~ line && /\d+/ =~ line になるという意味。
もう少し書くと
if (/ID:#.+\Z/ =~ line && /\d+/ =~ line) と同じという意味。

自分は if のネストが嫌いなので、こういう書き方になる
723デフォルトの名無しさん:2007/03/11(日) 00:32:07
rubyのifは式だから && if と書けてしまうが、ちと気持ち悪いな。
724デフォルトの名無しさん:2007/03/11(日) 00:51:35
/ID:#.+\Z/ てなんだよ
そもそも何を入力するのかよくわからん
725デフォルトの名無しさん:2007/03/11(日) 04:47:59
あるサイトでRubyはPerl,Pythonより若干スピードが劣ると
かいてあったけど実際はどうなの?同じスクリプトなんだから
体感できるほどスピード違うとですか?
726デフォルトの名無しさん:2007/03/11(日) 08:24:05
2ちゃんのdatファイルなら

dat_file.each do |line|
name, mail, date, text, title = line.split(/<>/)
day, time, id = date.split(/ /)
end

これで全部取れるんじゃね?
正規表現なんていらぬわガハハ
727デフォルトの名無しさん:2007/03/11(日) 09:28:40
>>726
指定したIDの人のレスを抽出だから正規表現いるんじゃね?
728ちんこ ◆HEfxsk5e3k :2007/03/11(日) 10:25:41
さようwwwwwwwwwwww
729デフォルトの名無しさん:2007/03/11(日) 11:07:46
>>726
それじゃ無理だな
730デフォルトの名無しさん:2007/03/11(日) 11:26:38
>>725
ttp://www.shido.info/py/python1.html
ここの事じゃないかと思うけど、プログラムの書き方にも拠るだろうし
具体的な秒数を書いてないのが気になるな。

まあ本人が「初心者の私見なので気軽に聞き流して」と書いてあるから
聞き流せばいいんじゃないかな。

ttp://www.yoshidam.net/PythonPerlRuby.html
にも速度の比較があるが、やや具体的。
731デフォルトの名無しさん:2007/03/11(日) 13:23:07
>>725
http://shootout.alioth.debian.org/
遅いね。それをわかった上で使えばいいよ。
作者も速度が必要なところは拡張を書けと言っているのだから。
732デフォルトの名無しさん:2007/03/11(日) 14:44:52
requireに相対パスを与えた場合、$LOADED_FEATURESには相対パスが追加
されるけど、なぜ絶対パスを追加しないのか、その背景となる理由はありますか?

青木峰郎氏のRHGにもその理由が見られませんでした。
733デフォルトの名無しさん:2007/03/11(日) 15:07:10
Rails と eclipse についての質問です。
コマンドライン上からrailsプロジェクトを作成したのですが、
そのプロジェクトをeclipse上から編集したいのですがインポートすることができません。

既存プロジェクトのインポートというものはあるのですが、Railsフォルダを指定しても
プロジェクト一覧に表示されないのです。

どうぞ宜しくお願い致します。
734デフォルトの名無しさん:2007/03/11(日) 18:19:52
質問
「PStore(1万個くらい登録)にIDが登録されてなかったら新規にデータを登録」ということを頻繁にやります

パターンその1

00001 -> { キー1=>値1, キー2=>値2, キー3=>値3, ID => 00001 }
00002 -> { キー1=>値1, キー2=>値2, キー3=>値3, ID => 00002 }
00003 -> { キー1=>値1, キー2=>値2, キー3=>値3, ID => 00003 }
00004 -> { キー1=>値1, キー2=>値2, キー3=>値3, ID => 00004 }
                :
def has_id?(id)
PStore.new(path).transaction do |db|
return true if db.roots.has_key(id)
}
end

パターンその2

IDs -> [00001, 00002, 00003, 00004, …]
00001 -> { キー1=>値1, キー2=>値2, キー3=>値3, ID => 00001 }
00002 -> { キー1=>値1, キー2=>値2, キー3=>値3, ID => 00002 }
00003 -> { キー1=>値1, キー2=>値2, キー3=>値3, ID => 00003 }
00004 -> { キー1=>値1, キー2=>値2, キー3=>値3, ID => 00004 }
                 :
def has_id?(id)
PStore.new(path).transaction do |db|
return true if db[IDs].include?(id)
}
end

後者のほうが好ましい?
735デフォルトの名無しさん:2007/03/11(日) 18:23:48
rails って何で読むんですか?
736デフォルトの名無しさん:2007/03/11(日) 18:37:12
裸居留守
737デフォルトの名無しさん:2007/03/11(日) 19:42:46
永留守
738デフォルトの名無しさん:2007/03/11(日) 20:43:58
>>737
それエロゲ
739デフォルトの名無しさん:2007/03/11(日) 22:31:55
>>734
/usr/lib/ruby/1.8/pstore.rb:

content = file.read()
@table = load(content)

def []=(name, value)
  @table[name] = value
end

def roots
 @table.keys
end

def root?(name)
 @table.key? name
end

ということで
 「pstoreファイルを全部readし巨大ハッシュを作った上で動くのでどっちもたいして変わらない」
が答かと思われ
740デフォルトの名無しさん:2007/03/11(日) 22:43:17
自宅鯖以外では嫌がられそうな仕様だな
代替案とかないの
741デフォルトの名無しさん:2007/03/11(日) 23:38:04
dbmとかお好きなのをどうぞ
742デフォルトの名無しさん:2007/03/12(月) 05:53:31
>>711
#!ruby -Ks
raise "引数が足りん" if ARGV.size < 1
open( ARGV.shift ) do |file|
print "出力ファイル名:"
output = $stdin.gets.chomp
print "ID名を入力:"
id = Regexp.escape $stdin.gets.chomp
open(output,"w") do |te|
file.each_line do |line|
if /^.*?<>.*?<>.+ID:#{id}<>/o =~ line
te.print line
end
end
end
end

こんなんでどう?
743デフォルトの名無しさん:2007/03/12(月) 06:03:46
もし自分で同じことするならワンライナーで済ますけど
ruby -ne "BEGIN{ID=Regexp.escape ARGV.shift};print if /^.*?<>.*?<>.+ID:#{ID}<>/o" ID名 ログファイル名 > 出力ファイル名
744デフォルトの名無しさん:2007/03/12(月) 09:53:29
おはようございます。
Ruby ではじめるプログラミング 【第 1 回】を見て、
RubyForge: Project Info- One-Click Ruby Installer のページにある
最新版をインストールしました。

しかし、こちらのページを見たところ、
Ruby の歩き方
http://jp.rubyist.net/magazine/?FirstStepRuby

ActiveScriptRubyをインストールして下さいと書かれていました。
こちらもインストールしておいたほうがいいのでしょうか?
745744:2007/03/12(月) 10:00:48
すみません。公式のチュートリアルを見たら、
どちらでも良いと書かれていました。失礼しました。
746デフォルトの名無しさん:2007/03/12(月) 10:26:54
>>742
それでは、
742 :デフォルトの名無しさん :2007/03/12(月) 05:53:31  の行しか抽出できないのでは?
本文行が抽出できてない?
747デフォルトの名無しさん:2007/03/12(月) 11:43:10
仕様を固めないからそういう変なことになる
対象となるインプットと期待されるアウトプットは何よ
748デフォルトの名無しさん:2007/03/12(月) 12:26:43
FlexでXMLファイルを渡すプログラムを書いたのですが
どうやって受け取っていいのかわかりません。

ENV["QUERY_STRING"]等をつかって受け取るのでしょうか?
openuriも使えそうにないしどなたかご教授いただけませんでしょうか?
749デフォルトの名無しさん:2007/03/12(月) 13:14:46
flexってlexerのflexかと思ったら他にもあるのね。
750デフォルトの名無しさん:2007/03/12(月) 13:20:52
すいません。
FLASHのflexです。

rubyで作成したCGIにたとえばtest.rb?lmage=test1.jpg&image=test2.jpg
みたいすれば値を受け取ることはできるのですが

rubyに直接XMLを渡した場合の受け取りかたをご存知ないでしょうか?
751デフォルトの名無しさん:2007/03/12(月) 13:24:36
FLEXか否かを問わず、CGIで受けとるという話なら、GETならQUERY_STRING、POSTなら標準入力に入ってくるし、cgi.rb使えばその辺の際は吸収してくれる
んじゃないの?
752デフォルトの名無しさん:2007/03/12(月) 16:56:56
ruby でユーザからの入力を受け付けるには gets を使いますが、
改行を入れなくても、1 文字入力しただけで入力決定されるようにするには
どうすればいいでしょうか?
例えば、何かの処理中に A キーを押下したらなにがしの処理をする
という具合のことをやりたいと思ってます。
753デフォルトの名無しさん:2007/03/12(月) 17:13:36
端末制御は環境に依存する。
curses…はやめたほうがいいか。
他には、ioctl(2)システムコール、やまださんのtermios拡張などがある。
754デフォルトの名無しさん:2007/03/12(月) 17:49:32
>>741
素直にコンバートしたらネストしてたハッシュが全部文字列になったぞ責任取れバカもう嫌い
755732:2007/03/12(月) 19:00:12
自己解決。
MLにのっかってました。

    [ruby-dev:26079] absolute path in $LOADED_FEATURES
    ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/26079

自分なりに解釈してみると、
・1.8系以前は相対パスのまま。
・現在のtrunkは絶対パスに変更されている。
・結局それまで誰も手を付けなかっただけ。

以上、スレ汚しスマソ
756デフォルトの名無しさん:2007/03/12(月) 20:20:46
>>750
「直接XMLを渡す」ってどういうこと?
Flexのことは知らんけど、きっと普通のCGIと同じでmultipartで送信されるというオチのような気が。
とりあえずこれ読んどけ。
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=cgi#a.a5.de.a5.eb.a5.c1.a5.d1.a1.bc.a5.c8.a5.d5.a5.a3.a1.bc.a5.eb.a5.c9.a4.ce.c3.cd.a4.f2.bc.e8.c6.c0.a4.b9.a4.eb.a1.ca.a5.d5.a5.a1.a5.a4.a5.eb.c1.f7.bf.ae.a1.cb
757デフォルトの名無しさん:2007/03/12(月) 21:41:07
750のものです。
コメントありがとうございます。

>756さん
呼んだのですが
c = CGI.new;
if c.multipart?
print "malti";
else
print "no malti";
end

を実行した結果no maltiが帰ってきました。
Formで送ってるわけではないのでnameがわかりません。
post でデータを送っているので、ENV['CONTENT_LENGTH']
でのデータの取得法がわかればなんとかなると思います。

758514:2007/03/12(月) 23:11:22
お久しぶりです。
ruby輪講やってきました。
グローバル変数のスコープは?とか、rubyに本当に関数あるの?とか、本当にクラスやメソッドは事前に全部宣言しなきゃダメなの?
など、突っ込まれまくりでした
練習問題として、Cやjavaにコメント抜きを出題したら、rubyの良さわかってる?と突っ込まれました
来週までに改めて問題作成を命じられました。
rubyって難しいですね
759デフォルトの名無しさん:2007/03/12(月) 23:21:44
まじめにCやJavaのコメント抜き(抜き出しか削除かわからんけど)プログラム
を作ると字句解析機を作らなきゃならないから、1文字ごとにみていく必要が
あって、あんまりRubyぽいものにはならないかもしれないな。
760デフォルトの名無しさん:2007/03/13(火) 01:53:19
>>746

>>726
> 2ちゃんのdatファイルなら
と、ごっちゃにして
勝手にdatファイルが入力されると勘違いしてた

>>711 をよく見れば、入力してるのはプレーンテキストっぽいな
ブラウザの表示をコピーしたテキストなのかな?
761デフォルトの名無しさん:2007/03/13(火) 02:05:01
>>757
Etherealや横取り丸でパケットの中身を表示した方がいい。
もしXMLファイルがHTTPボディに指定されて送信されているだけ、かつPOSTメソッドなら $stdin から読み込めるはず。
cgi.rb を使わずに $stdin を読み込んでみたらどうだろう。

#/usr/bin/env ruby
data = $stdin.read() # or $stdin.read(ENV['CONTENT_LENGTH'].to_i)
print data

そもそもRubyの話題じゃないな。Flexスレで聞いてみてくれ。
762デフォルトの名無しさん:2007/03/13(火) 02:06:37
はじめまして。元々Perl使いですが、最近Rubyを触りはじめました。

Perlでは、

@example = (1, 2)
($foo, $bar) = @example

のように、変数のリストに対して値を代入できましたが、Rubyで同じ事をやろうとして

hoge = [1, 2]
[foo, bar] = hoge

と書くとエラーになってしまいます。このように、複数の変数に配列の一つ一つの要素を
一気に代入したい場合、Rubyではどのように書けばよいのでしょうか。
763デフォルトの名無しさん:2007/03/13(火) 02:07:59
hoge = [1, 2]
foo, bar = hoge
764762:2007/03/13(火) 02:08:56
代入先にリストを作る必要はないのですね。ありがとうございました。
765デフォルトの名無しさん:2007/03/13(火) 07:05:10
>>758

> rubyに本当に関数あるの?

なんだ、お前よりそいつの方が Ruby を解ってるんじゃん。
766デフォルトの名無しさん:2007/03/13(火) 08:27:33
>>765
輪講なんてそんなもん。
* Rubyに関数はなく、すべてメソッド。あるのは関数のように見えるメソッド。See Kernel Module.
* クラスやメソッドは使われるまでに定義されればよい。
767デフォルトの名無しさん:2007/03/13(火) 11:05:00
クラス宣言の中でインスタンスメソッドの中からクラスメソッドを使いたい場合のふつーの書き方って

self.class.class_method

でいいのかな?
768デフォルトの名無しさん:2007/03/13(火) 11:36:55
クラス名を直に書く方法もあるけど、
そのへんは、継承されたときにどうしたいかによる。

class Hoge
def add_child1
(@children ||= []) << self.class.new
end
def add_child2
(@children ||= []) << Hoge.new
end
end
class Fuga < Hoge; end

@fuga = Fuga.new
@fuga.add_child1 と @fuga.add_child2の挙動は異なる。
769デフォルトの名無しさん:2007/03/13(火) 11:58:29
class MySuperClass
def self.class_method
p 'hogehoge'
end

def instance_method
self.class.class_method
end
end

class MyClass1 < MySuperClass
end

class MyClass2 < MySuperClass
def self.class_method
p 'fgyafgya'
end
end

MyClass1.new.instance_method #=> "hogehoge"
MyClass2.new.instance_method #=> "fgyafgya"

なるなる、普通はオーバーライドしたほうを呼んで欲しいような気がするなぁ
770デフォルトの名無しさん:2007/03/13(火) 13:36:47
>>759 つーか、perlやawkでも似たようなものを似たような方法で実現できるからでは?
771デフォルトの名無しさん:2007/03/13(火) 14:38:47
>>769
オーバーライドされてるのはMySuperClassの方なんじゃないの?
772デフォルトの名無しさん:2007/03/13(火) 15:51:37
>>770
"Ruby的"な解法ができる課題ではないな

>>754
DBMとかあのへんは

"キー1" => "文字列1"
"キー2" => "文字列2"
"キー3" => "文字列3"

の素直な形をしていてなおかつ検索はキーの完全一致でしかやらない
というデータ構造以外を格納するのはお勧めしない
valueに配列が入ってるとか
ハッシュが入ってるとか
Timeオブジェクトが入ってるとか
正規表現が入ってるとか
そういう場合はPStoreで冷凍しろ
773デフォルトの名無しさん:2007/03/13(火) 15:58:51
正規表現はオブジェクトに戻すときにえらい負荷かからないか?
774デフォルトの名無しさん:2007/03/13(火) 19:06:18
Windows環境でスクリプトから他のアプリを起動したいと思ってます。
system()はアプリが終了するまで返って来ないので目的に合いません。
起動したアプリの終了を一切待たない起動方法はあるでしょうか?
775デフォルトの名無しさん:2007/03/13(火) 19:31:30
fork
776デフォルトの名無しさん:2007/03/13(火) 19:51:18
>>774
自分が使っている方法 WSHを利用する
その1 子プロセスを発生させる
ws= WIN32OLE.new('Wscript.Shell')
wwThred = ws.exec("hoge.exe")
その2 RUNメソッドの bWaitOnReturn を FALSE で
ws= WIN32OLE.new('Wscript.Shell')
ws.run("hoge.exe",1,FALSE)

>>775
fork は Windows では使えないはずだが…
777デフォルトの名無しさん:2007/03/13(火) 19:52:42
あら、forkないのか。
778デフォルトの名無しさん:2007/03/13(火) 20:01:28
Process.spawn と言いたいところだが、1.9にしかないな。
一番単純なのは、
 Thread.new{system(nanika)}
だと思うが、
 IO.popen(nanika)
とかもありかな。
779774:2007/03/13(火) 20:29:53
色々な方法があるようですね。試して考えてみます。
皆さんありがとうございます。
780774:2007/03/13(火) 20:40:36
CreateProcessってAPIを添付ライブラリのWin32APIクラス経由で
呼び出しても良さそうですね
781デフォルトの名無しさん:2007/03/13(火) 21:08:51
>772
value がいろいろあるだけだったら、 value を Marshal した文字列を使って dbm にする方がいいよ。
もちろん、 value で値を共有する2つの hash が2つのキーに結びつけられて
いるような複雑な構造は保持できないけど。

Marshal は、ファイルをぜんぶ読んでメモリに格納するので、巨大すぎるデータだと読込も書き出しも大変。
782デフォルトの名無しさん:2007/03/13(火) 21:53:38
>>754
Marshalするとか工夫しなよ…。
マニュアル読んだんだろ?
そのまま格納しようとするバカがどこにいる(そこにいる)。
783514:2007/03/13(火) 21:54:09
>>759
自分もかなりそう思いました
なんか、題材によい問題はないものか…

>>765
輪講はいつも私のサンドバック状態です

>>766
ですよね
元気が出ました

>* Rubyに関数はなく、すべてメソッド。あるのは関数のように見えるメソッド。See Kernel Module.
>* クラスやメソッドは使われるまでに定義されればよい。
なるほど
Rubyはメソッドやクラスを再定義した場合、最後のものが採用されるんですよね
だから、C見たいに二重定義にならないよう気をつける必要はないんですよね
784デフォルトの名無しさん:2007/03/13(火) 22:32:09
>>783
勉強しに行ってるんだから、今現在何かを知らなかったり間違ったりするのは問題ない。
周囲に叩かれつつでも学んでいけばよろし。

Rubyのいいところを生かした問題というと、比較的シンプルなテキスト処理で、かつ、他の類似した言語にない機能を生かしたあたりか。
じゃあ、Array#uniqを使ってテキストファイルから重複行を削除する、とかどう?
785デフォルトの名無しさん:2007/03/13(火) 23:05:43
rubyで文字列を扱おうと最近rubyをはじめました。

文字列を主に扱うときに、処理速度が遅くなるような要因はどんなことがありますか?

またfileの読み出しはreadlinesを使うのはどうなんですか?
786デフォルトの名無しさん:2007/03/14(水) 03:38:48
>>785
> 文字列を主に扱うときに、処理速度が遅くなるような要因はどんなことがありますか?

非破壊メソッドを使ったとき。てかそういうのを意識するのは後回しでいい。

> またfileの読み出しはreadlinesを使うのはどうなんですか?

どうって…。ダウンタウンの昔の持ちネタみたいな曖昧な質問だなw
使いたいときには使うよ、くらいしか答えられないよこの質問だと。
787デフォルトの名無しさん:2007/03/14(水) 08:26:50
readlinesつかうと配列になるんだぜ

としか言えんな

ファイルから1行ずつ読み込んでいるわけではないので注意
ファイル末までreadしてsplit("\n")するのと似たような負荷

本当に1行ずつ読み込みたいならIO.getsを使うこと
788デフォルトの名無しさん:2007/03/14(水) 09:30:17
>>774
system('start calc')
などとやったりWin32APIのCreateProcess使ったりてのもある。
789デフォルトの名無しさん:2007/03/14(水) 09:31:29
CreateProcessはガイシュツだったね。
790デフォルトの名無しさん:2007/03/14(水) 21:29:52
RubyのLoggerってグローバル変数に入れて使っていいの?クラス変数にするべき?

$logger = Logger.new(STDOUT)

@@logger = Logger.new(STDOUT)
791デフォルトの名無しさん:2007/03/14(水) 23:01:26
Railsだとnewの時に渡すみたいだね
def initialize(..., logger, ...)
  @logger = logger
792デフォルトの名無しさん:2007/03/15(木) 10:41:44
Rubyでグラフ書きたいのですが、何かよいライブラリはないですか?
クールなのが一発でかけるとらくなんだけど
793デフォルトの名無しさん:2007/03/15(木) 10:52:22
Ruby でデータ加工して GNUPlot で出力
794デフォルトの名無しさん:2007/03/15(木) 10:58:00
gnuplotのgnuはGNUとは関係ないから全部大文字にするこたない。
795デフォルトの名無しさん:2007/03/15(木) 11:16:58
796デフォルトの名無しさん:2007/03/15(木) 11:26:47
RMagickも結構楽
797デフォルトの名無しさん:2007/03/15(木) 11:43:22
探したら結構ありますね

・mingplot
mingplot: Flash 形式のグラフを生成するツール
http://0xcc.net/mingplot/

・pylori*style wiki - Gruffでグラフ
http://tam.qmix.org/wiki/RubyGruff.html
・Railsで簡単グラフ - masuidrive.jp
http://rails.masuidrive.jp/gruff/

GDGraph:Ruby/GD を使ったグラフライブラリ
http://www2s.biglobe.ne.jp/~Nori/ruby/ja/GDGraph/


Gruffがクールでよいなあ。
798デフォルトの名無しさん:2007/03/15(木) 13:37:02
つうか別にRuby関係ないような
ライブラリあるったって中身はsystem発行してるだけだろ?
799デフォルトの名無しさん:2007/03/15(木) 13:42:03
gnuplotはともかくGDはライブラリだからsystemでは呼べないだろ。
800デフォルトの名無しさん:2007/03/15(木) 19:35:14
class K;end

def K.init
 def foo
  p :foo
  self
 end
end

K.init
k=K.new
k.foo
#=> :foo

キモイです!なんとかしてください
801デフォルトの名無しさん:2007/03/15(木) 19:58:08
ふつーじゃん。
802デフォルトの名無しさん:2007/03/15(木) 22:09:05
HTMLからRSSのリンクを取り出そうとHpricotを使ってみました。
(以下docはHpricot(...)で取ってきたHpricot::Docインスタンス)

# type="application/rss+xml" なlink要素を取り出す。
doc / '//link[@type="application/rss+xml"]'
=> #<Hpricot::Elements[{emptyelem <link href="..." title="RSS" rel="alternate" type="application/rss+xml">}]>

# rel="alternate"なlink要素を取り出す。
doc / '//link[@rel="alternate"]'
=> #<Hpricot::Elements[{emptyelem <link href="..." title="RSS" rel="alternate" type="application/rss+xml">}]>

と同じものが返ってくるのですが、両方の条件をandで結ぶと

# doc / '//link[@type="application/rss+xml" and @rel="alternate"]'
=> #<Hpricot::Elements[
{emptyelem <link href="..." title="RSS" rel="alternate" type="application/rss+xml">},
{emptyelem <link href="..." rel="stylesheet" type="text/css" media="all">}, {emptyelem <link href="..." rel="shortcut icon">},
{emptyelem <link href="..." rel="stylesheet" type="text/css" media="screen,print">}]>
と全部のlink要素が返ってきてしまいます。

XPathの書き方が間違っているのでしょうか。
803デフォルトの名無しさん:2007/03/16(金) 03:42:41
オプション解析の optparse について質問させてください。

opt.on で、オプションを指定しておくと、--help で自動的にオプションがでますが、
デフォルトでは、

Usage: moge [options]
(以下オプション)

と表示されます。

これを
Usage: moge [options] source_file dest_file
などと表示したいのですが、よい方法はないでしょうか?


804デフォルトの名無しさん:2007/03/16(金) 03:56:01
banner使うのですね。

opts.banner = "Usage: #{$0} [options] source_file dest_file"

で行けました。
805デフォルトの名無しさん:2007/03/16(金) 05:43:23
>>802
Hpricotはand に対応してないみたい (hpricot/elements.rb の ATTR_RE とか参照)。
今回のケースなら以下のように書き換えればいいと思うよ。

doc / '//link[@type="application/rss+xml"][@rel="alternate"]'
806デフォルトの名無しさん:2007/03/16(金) 06:52:26
先生、クラス変数とクラスのインスタンス変数の違いがよくわかりません。
誰か優しく教えてください(はーと)
807デフォルトの名無しさん:2007/03/16(金) 07:57:35
>>805
なるほど。ソース読んでみるべきでしたね。ありがとうございました。
808デフォルトの名無しさん:2007/03/16(金) 09:01:36
PerlEzはあるのにRubyEzがないのは何でだぜ?
809デフォルトの名無しさん:2007/03/16(金) 10:15:05
str.split(/〜/) {|s| 〜}
みたいに、正規表現で分割するごとに何とかしてくれるみたいなのってないですか?
strの文字列が巨大なときに、splitの配列を作らずに処理できたらいいなぁっていう発想なんですが・・・。
810デフォルトの名無しさん:2007/03/16(金) 11:00:10
>>809
str.scan(pattern) {|match,...| block }

811デフォルトの名無しさん:2007/03/16(金) 11:26:14
>>802のおかげで、RubyのXML対応を調べる機会を得られたのだが、どうも他に例がないほど特殊だな。さすがにこの独走ぶりは非道過ぎるだろ。
812デフォルトの名無しさん:2007/03/16(金) 14:40:39
str.split(/〜/).each {|s| 〜}
じゃ駄目なの?
813デフォルトの名無しさん:2007/03/16(金) 14:43:53
>>812
「配列を作らずに」
814809:2007/03/16(金) 15:09:40
>>810
すいません、scanでやった場合、matchにはマッチした部分が入るみたいなんですが、splitで取り出したいのはマッチした部分以外の部分なんですが、どう取得したらいいでしょうか?
815デフォルトの名無しさん:2007/03/16(金) 15:20:07
メソッドの働きにあわせて正規表現を書き直すのが真っ当だと思われ
scanで使う正規表現は平均して長ったらしいので頑張って書け
816809:2007/03/16(金) 16:15:51
>>815
なるほどそうですか。どうもです。
817デフォルトの名無しさん:2007/03/16(金) 16:16:56
"abcde,fghijk,lmno,pq".scan(/([^,]*)/) {|x|
next if ""==x[0]
p x
}

,で区切る程度の簡単なやつではないんだろうけども

818デフォルトの名無しさん:2007/03/16(金) 18:12:17
>>813
これって配列つくるの?
パイプみたいな感じで動くのかと思ってた。
819デフォルトの名無しさん:2007/03/16(金) 20:12:36
どんな遅延評価だよ…。かっこ良すぎだろ。
820デフォルトの名無しさん:2007/03/16(金) 22:54:18
scanでもsplitでもパフォーマンスに差はないと思うのは俺だけ?
821デフォルトの名無しさん:2007/03/16(金) 22:58:30
windowsであるフォルダに100個のファイルが入っていて、
さらにサブフォルダが入っていてそこにもファイルがいくつか存在する。
それらサブフォルダの中にあるファイル全て含めて適当に文字列を追加したいと
思っています。

ファイル名がわかっているんだったら、そのファイルを開いて文字を付け加えて
閉じるでいいと思いますが、名前のわからない、このフォルダの下にある
全てのファイルに同じ処理をするという処理はどのように書けばいいんでしょうか?
822デフォルトの名無しさん:2007/03/16(金) 22:59:13
名前がわからないなら調べればいいじゃない
823デフォルトの名無しさん:2007/03/16(金) 23:16:57
ライブラリを使うならfind.rbかな。

824デフォルトの名無しさん:2007/03/16(金) 23:21:10
Dir[File.join(root, '**/*')].select {|path| FileTest.file? path }.each do |path|
#...
end

↑物凄く深い階層だとメモリやパフォーマンスの問題が発生するかも。

find.rbを使うなら
require 'find'
Find.find(root) do |path|
if FileTest.file?(path)
# 処理
end
end

825デフォルトの名無しさん:2007/03/16(金) 23:25:12
>>821
Dir::foreach("./") do |item|
puts item
end

とかやると「,/」下の枚挙を叩ける
826デフォルトの名無しさん:2007/03/16(金) 23:53:05
>>823-825

それだけのプログラム量で実現できてしまうのですか!
勉強になります、ありがとうございます!
827デフォルトの名無しさん:2007/03/16(金) 23:53:22
globで、**すればいいんじゃね?
828デフォルトの名無しさん:2007/03/17(土) 13:32:19
["7", "24", "-1", "26", "17"]

この配列を

["-1","7","17", "24", "26"]

このように並び替えるにはどうしたらいいですか?
829デフォルトの名無しさん:2007/03/17(土) 13:37:33
p ["7", "24", "-1", "26", "17"].sort {|a, b| a.to_i <=> b.to_i}
830デフォルトの名無しさん:2007/03/17(土) 13:51:47
p ["7", "24", "-1", "26", "17"].sort_by {|a| a.to_i}
831デフォルトの名無しさん:2007/03/17(土) 14:11:00
["7", "24", "-1", "26", "17"].sort_by{|x| ["-1","7","17", "24", "26"].index(x)}
832デフォルトの名無しさん:2007/03/17(土) 15:22:01
処理が一番速いのは 830 でOK?
833デフォルトの名無しさん:2007/03/17(土) 16:00:52
string = "(6)[(5)[(4)[(3)[(2)[(1)[[h,5],[h,6]],[h,7]],[h,8]],[h,9]],[h,10]],[h,11]]"

"[h,5]"の"5"と"[h,11]"の"11"をマッチする正規表現を教えてください。
834デフォルトの名無しさん:2007/03/17(土) 16:07:33
>>833
なんか意図が全然わからんが、/\[h,(5|11)\]/で$1とりゃいいんじゃないかい?
835デフォルトの名無しさん:2007/03/17(土) 16:15:57
>>833
/\(6\)\[\(5\)\[\(4\)\[\(3\)\[\(2\)\[\(1\)\[\[h,(5)\],\[h,6\]\],\[h,7\]\],\[h,8\]\],\[h,9\]\],\[h,10\]\],\[h,(11)\]\]/
836デフォルトの名無しさん:2007/03/17(土) 17:05:45
>>835
こういうのは完全にNGだね。
837デフォルトの名無しさん:2007/03/17(土) 17:13:03
でもおそらく「一番正しい」ぞ
>>831>>835もな

適切な質問にのみ適切な答が返る
まずは頭にあることを言葉にする練習からだな
838デフォルトの名無しさん:2007/03/17(土) 20:59:31
初心者スレでオナニーしてんじゃねーんだよ
839デフォルトの名無しさん:2007/03/17(土) 21:17:51
一番正しいって(笑)いやいや笑っちゃいけないか。でも正しくはないよ。
840デフォルトの名無しさん:2007/03/17(土) 21:21:49
ということにしたい初心者でしたとさ。
841デフォルトの名無しさん:2007/03/17(土) 21:45:25
ワロス
842デフォルトの名無しさん:2007/03/17(土) 22:28:31
>>829-830は昇順に並べるだけだからな

特定の配列をリファレンスにして同じように並べるには>>831みたいなのが妥当
質問者が昇順に並べるなんて言ってない以上、機械的に同じように並べるしかないわけで…
843デフォルトの名無しさん:2007/03/17(土) 22:39:12
そうですね。君が正しいですね。って言われないと頑張って理屈をこねちゃう年頃なんですね。
844デフォルトの名無しさん:2007/03/17(土) 22:57:32
休みだからか粘着がいるな
何の得があるんだか
845デフォルトの名無しさん:2007/03/17(土) 23:09:35
「自己満足」という得が
846デフォルトの名無しさん:2007/03/17(土) 23:13:36
ム板全体がオカシイ方向に向かってる気がする。
847デフォルトの名無しさん:2007/03/17(土) 23:31:11
wwwwちょwwwwもともと過疎ってたんかいっwwwww
848デフォルトの名無しさん:2007/03/18(日) 01:43:05
>>846
一瞬、オイシイ方向に見えたw
849デフォルトの名無しさん:2007/03/18(日) 10:06:34
>>846
最近、なんか変だよね。なんか流れが読めないw
>>848
どういう方向だよw
850デフォルトの名無しさん:2007/03/18(日) 12:31:33
Rubyist Magazine(るびま)出張版 正しいRubyコードの書き方講座
ttp://www.cbook24.com/bm_detail.asp?sku=9784839923204

あの連載がわざわざ本になります
30日発売
851デフォルトの名無しさん:2007/03/18(日) 12:57:16
いらねーな
852デフォルトの名無しさん:2007/03/18(日) 13:37:27
>>849
> なんか流れが読めない

それ、もしかしてジサクジエンに慣れちゃってて、
誰かに話しかけられてもちゃんと会話できない人が居る
って件じゃない?
853デフォルトの名無しさん:2007/03/18(日) 15:10:16
>>833
=~ /(((\(\d+\)\[)+)((\[h,(\d+)\],)|(\[h,(\d+)\]\]\Z))+)/

$6で5だけど、11ができん。
854デフォルトの名無しさん:2007/03/18(日) 15:38:45
>>853
/((\(\d+\)\[)+(\[h,(\d+)\])(,\[h,(\d+)\]\])+)/
p $4,$6
855デフォルトの名無しさん:2007/03/18(日) 16:16:54
>>850
わざわざケチつける意味がわからない
856デフォルトの名無しさん:2007/03/18(日) 16:48:21
わからないならわかるまで勉強しよう。
プログラマの大切な資質。
857デフォルトの名無しさん:2007/03/18(日) 20:09:39
作ったソフト公開したいけど「しょぼいコードだな( ´,_ゝ`)プッ」
とか思われそうでなかなか踏み切れない
858デフォルトの名無しさん:2007/03/18(日) 20:29:49
>>855-856
A >>850はツンデレ。
B 普通に宣伝すると叩かれるのでちょっいワルぶってみた。
859デフォルトの名無しさん:2007/03/18(日) 21:02:49
>>857
つまらないこと気にするな。

指摘されて自分の悪いところを治せるんなら、むしろいい事じゃないか!
…と割り切ってしまえ。
860デフォルトの名無しさん:2007/03/18(日) 21:20:51
>>857
コードに関して言えば、淡々とバグを指摘されるくらいだよ。
861デフォルトの名無しさん:2007/03/18(日) 22:12:10
>>857
GoogleとYahooのクローラーしか来ないから安心しろ
862デフォルトの名無しさん:2007/03/18(日) 22:31:22
Win32でGPLで無いならExerb+UPX等のパッカーでいいんじゃね?
いちいちRubyインストールしろとかREADMEに書くのが面倒だから
最近はexe配布だな。
863デフォルトの名無しさん:2007/03/19(月) 14:51:00
Rubyで画像掲示板CGIを作っていて
画像ファイルをアップロードするところまではできたのですが、
サムネイルを作成する方法で行き詰りました。
どなたか方法を教えてください、後生です。
864デフォルトの名無しさん:2007/03/19(月) 15:37:01
>>863
A: ruby/gdやrmagickあたりの拡張を入れる。
B: サーバ上でnetpbmやImageMagickのコマンドを駆使する。
お好きな方で。
865デフォルトの名無しさん:2007/03/19(月) 23:48:17
質問スレがないようなのでここでいいのかな?
$: << File.expand_path("./")
require "./../Lib.rb"
$:はloadやrequireのPATHだとわかりましたが、
この<<って何ですか?
ruby-lang.orgのリファレンスに<<演算子の解説がないです。
p 1 << 2 を試したら4が表示されたのでビットシフト演算子なんでしょう。
で、この場合の<<はオーバーライドされてるんでしょうけど
その解説はどこにありますか?
ってか、なんで<<ですか?+=とかpush,addあたりなら直感的にわかるんですけど。。。
866デフォルトの名無しさん:2007/03/19(月) 23:52:21
>>865
C++のstream辺りをリスペクトしてみたんじゃないかなぁ
867デフォルトの名無しさん:2007/03/20(火) 00:05:18
Array#<<
868デフォルトの名無しさん:2007/03/20(火) 00:33:12
flock(File::LOCK_EX)の代わりにfcntlで排他ロックかける方法教えてちょ。
open(LOCKFILE, 'w').fcntl(Fcntl::F_SETLKW)だと「Bad address」とか言われる。
869デフォルトの名無しさん:2007/03/20(火) 01:01:46
>>864
ありがとうございます
870デフォルトの名無しさん:2007/03/20(火) 01:11:53
>>866
あれは失敗作ですよね。
Cで、a=0x00004321; printf("%08x\n", a); をC++のcoutで書こうと思うと気を失います。

>>867 thx!
「Array#push と同じ効果です」って書いてあった。
file:///D:/work/ruby/ruby-man-ja-html-20051029/Array.html
$:の説明に「loadや require がファイルをロードする時に検索するディレクトリのリストを含む配列です。」
って書いてあるんですけど、そこから配列=Arrayに飛ぼうという発想に至りませんでした。

$LOAD_PATH.push(File.expand_path("./")) って書けよ。
Perlの二の舞じゃん・・・読めん
871デフォルトの名無しさん:2007/03/20(火) 01:15:37
>>870
やべ、ローカルのリファレンス指してた・・・かなりやばかった(汗
こっちです。
http://www.ruby-lang.org/ja/man/?cmd=view;name=Array
872デフォルトの名無しさん:2007/03/20(火) 01:58:18
>>870
そういうときはObject#classを使って、まず何のオブジェクトなのか特定しましょう。
あとはリファレンスマニュアルにgo
873デフォルトの名無しさん:2007/03/20(火) 02:40:43
>>868
F_SETLKWにはstruct flockが必要。
それをpackしたStringを渡せばいい…んだが、
構造体の中身はシステム依存なんだよな。
dl/ptrあたりを使えばできるかもだが、素直に拡張ライブラリを使った方が楽かも。
ext/fcntlを拡張してほしいって話はruby-devかruby-listへ。
874デフォルトの名無しさん:2007/03/20(火) 02:46:40
>>872
なるほど。そういう方法もあるのですね。
irbで>$:.classやってみました。
 $:.class
 Array
これは継承元がArrayって意味ですかね?
でもそんな調べ方はリファレンスに書いてなかったと思います。
JAVAのJavaDocもそうなんですけどマニュアル不親切すぎます。
難解な言葉(翻訳してるからかな?)で使い方がわからない。
その点、皆さんが嫌ってるであろう、MSのVisualCとかは素敵過ぎますよ。
ほぼSampleが書いてある。STLでさえ。
Rubyコミュニティのみなさん、がんばってくださいね!
875デフォルトの名無しさん:2007/03/20(火) 02:51:25
>>874
というかそのオブジェクトが何どのクラスに属しているか知らないで
メソッドの機能を調べようがないでしょう。

> $:.class
> Array
>これは継承元がArrayって意味ですかね?

違います。オブジェクト指向をかじっているようですけど、
そういうのは継承といいません。Arrayのインスタンスです。

> でもそんな調べ方はリファレンスに書いてなかったと思います。

書いてありますよ。Object#classのところにばっちりと。
それと$:のところにも

> loadや require がファイルをロードする時に検索するディレクトリのリストを含む 配 列 。

と「配列」と書いてあります。別にこれだとObject#classを使わずとも調べがつきます。
876デフォルトの名無しさん:2007/03/20(火) 04:15:25
>>870
a=0x00004321; std::cout<<std::setfill('0')<<std::setw(8)<<std::hex<<a<<std::endl;
気を失うほどではないぞ
877デフォルトの名無しさん:2007/03/20(火) 05:54:06
コーディングはむしろ気を失ってからが勝負
878デフォルトの名無しさん:2007/03/20(火) 07:26:08
メソッドがどこかで再定義されているらしいんだけど、
正直スパゲッティでどれが正解かわからない。

ランタイムで、メソッドが再定義された時にイベントを拾うか、
あるいは、使われた所でメソッドの定義をずばり表示させるかしたいんだけど
なんかいい方法ありますか?
全部の候補に print 突っ込んだ方がもしかしたら早いのか…
オリジナルのライブラリはあんまり触りたくないんだけどなぁ。

>>875
>> でもそんな調べ方はリファレンスに書いてなかったと思います。
>
>書いてありますよ。Object#classのところにばっちりと。
>それと$:のところにも

「どんな素敵なことが書いてあっても、書いてある場所が見つからない」
という問題だと思う。
逆引き作らないと多分無理。
879878:2007/03/20(火) 07:33:24
あ、RadRuby 使ってデバッガでトレースできないか試したんだけど、
到達タイミングがわからなくて、いまだに捕まえられない。
つか、デバッガがスタックオーバーフローで死ぬ。困った。
880デフォルトの名無しさん:2007/03/20(火) 08:56:13
Railsのみたいに class メソッドを偽るようなコードはかなり難解だが、
大抵のことはリフレクションで追っていけると思う。

メソッド定義はmethod_addedで拾えるんじゃないでしょうかね。
881デフォルトの名無しさん:2007/03/20(火) 08:57:10
Ruby でのドキュメントのヘルプについて御教授ください。

python 使いですが、Ruby も使い始めようとしています。python では
pydoc モジュールがヘルプ目的で便利に使えます。下のようにコンソールか
ら打ち込むだけで、組み込みオブジェクト list についての機能を表示して
くれます。

python -m pydoc list
Help on class list in module __builtin__:

class list(object)
| list() -> new list
| list(sequence) -> new list initialized from sequence's items


numarray モジュールの zeros 関数については下のようにします。
python -m pydoc numarray.zeros
Help on function zeros in numarray:

numarray.zeros = zeros(shape, type=None, typecode=None, dtype=None)
Constructs a zero filled array of the specified shape and type.

同様なことを Ruby で 出来るとありがたいのですが、何か方法があるでしょ
うか。RDoc がありますが、大げさすぎると感じています。コンソールの一行
で済ますのは無理だと思っています。
882デフォルトの名無しさん:2007/03/20(火) 09:20:22
riじゃだめ?

883デフォルトの名無しさん:2007/03/20(火) 12:01:23
しつもん。

何か色々やって結果としてHTMLを吐き出すCGIを作ってます。
HTMLの一部を作るメソッドを書きました。

その1:
def table
 html = String.new
 html << <<EOB
<table>
 〜いろいろ〜
</table>
EOB
 return html
end

その2:
def table
 return <<EOB
<table>
 〜いろいろ〜
</table>
EOB
end

どっちの癖をつけたほうが好ましいですか?
884デフォルトの名無しさん:2007/03/20(火) 12:07:45
前者を選ぶメリットはあまりないと思う
CGIならhtmlに割り当てられるメモリももったいないし
885デフォルトの名無しさん:2007/03/20(火) 12:08:52
よく見るのは後者。もっと言うとreturnもないことが多い。
886デフォルトの名無しさん:2007/03/20(火) 12:16:31
後者(のreturnなし)はソース中に出てきてもイディオム的に理解できるよね
「あーこれは文字列作って返すだけなのね」みたいな

値を返すときにしか使われないオブジェクトを明示的に作ることはしなくていいと思う
他人が見てもすんなり理解できる書き方の範疇、かつ、動作上大きな無駄も起きない書き方だと思うよ
887デフォルトの名無しさん:2007/03/20(火) 12:27:33
おー。ありがとうです。後者メインでいきます。


もういっこ。
「値というかデータを返すのに使えるもの」ってありますよね。

 ・ めんどいのでローカル変数に直に書く
 ・ initializeのときにインスタンス変数を定義しておいて入れる
 ・ よく考えたらクラス変数でもいい気がする
 ・ そういう値を返すメソッドを作って随時呼ぶ

お勧めの使い分けの考えかたってありますか?
888デフォルトの名無しさん:2007/03/20(火) 15:34:10
どちらであろうが「大きな」無駄なんか生じねえよ。しかもどちらであろうがすんなり読める。違いは無いに等しい。
889デフォルトの名無しさん:2007/03/20(火) 16:02:39
>>881
残念ながらRubyには同等の機能はありません。
組み込みライプラリや標準添付ライブラリならriやrefeといった外部コマンドで参照できますが、
それ以外ならRDocに頼るしかないでしょう。
890デフォルトの名無しさん:2007/03/20(火) 16:04:07
>>887
定数でいいと思う。
891MoonWolf ◆6yuAhgU.jM :2007/03/20(火) 17:14:56
>>883
def table
 html = "<table>"
〜いろいろ〜
html << "</table>"
html
end # table

892デフォルトの名無しさん:2007/03/20(火) 17:22:33
>>891
おかえり
893 ◆6yuAhgU.jM :2007/03/20(火) 17:48:34
トリップキーがじじむさい
894デフォルトの名無しさん:2007/03/20(火) 18:14:06
a=Array.newはできるけど、
a=IO.newやFile.newとやると
エラーになります。なぜですか?
895デフォルトの名無しさん:2007/03/20(火) 18:17:56
>>894
エラーが出たときにメッセージがあるでしょ?
896デフォルトの名無しさん:2007/03/20(火) 18:26:26
>>894
IO の場合は a ではなく io
File の場合は a ではなく fp
897デフォルトの名無しさん:2007/03/20(火) 18:53:40
FILE pointerじゃないのにfpだなんてとんでもない!
898デフォルトの名無しさん:2007/03/20(火) 19:53:57
変数は参照なのだからポイントしていると言えなくもない。

結論: でもpointerじゃない
899MoonWolf ◆MoonWdLnkQ :2007/03/20(火) 20:01:20
ary = Arrai.new
h = Hash.new
str = ""
io = IO.new(0)
db = DBI.connect(...
doc = REXML.Document

トリップ探すのめんどくせー
900デフォルトの名無しさん:2007/03/20(火) 20:05:39
ここで再びハンガリアンの登場です。
901デフォルトの名無しさん:2007/03/20(火) 20:14:39
>>899
なぜ
> str = ""
なんてやってるのに
ary = []
h = {}
とやらんのだ?
902デフォルトの名無しさん:2007/03/20(火) 20:17:15
string = String.new
array = Array.new
hash = Hash.new

string = ""
array = []
hash = {}

どっちが良い?
俺は前者の方が好きなんだけども…
903デフォルトの名無しさん:2007/03/20(火) 20:21:44
後者だなあ。前者はコードに埋もれる。
904MoonWolf ◆MoonWdLnkQ :2007/03/20(火) 20:22:25
そういや名前しか気にしてなかったな。
ary = []

でもハッシュは空だと見た目がブロックと紛らわしいから
h = Hash.new
空じゃなければ
h = {:key => value}
905デフォルトの名無しさん:2007/03/20(火) 21:52:50
ttp://www.taiyosha.co.jp/comic/comic0704_han1.html

ここから「発売予定一覧」のテーブルの
各セルをハッシュに、各行を配列にいれたものをつくろうとして
hpricotを使って
index_page = Hpricot.parse(
NKF.nkf('-w',
open("http://www.taiyosha.co.jp/comic/comic0704_han1.html").read
  )
); nil

ta = index_page.search("//table")
table = ta[2]

$row = table.search(:tr).map {|e|
{"Pub" => e.search('td[1]').inner_text,
"Date" => e.search('td[2]').inner_text,
"Title" => e.search('td[3]').inner_text,
"Author" => e.search('td[4]').inner_text,
"Price" => e.search('td[5]').inner_text,
"Book" => e.search('td[6]').inner_text}
}

としてうまくいった気になっていたんですが"秋田書店”のセルを
除いて以降の出版社名のある行が取得できていませんでした。
ソースを見てみると該当行に<tr>タグが抜けているために取得できないようです。
これを回避するにはどうすればよいでしょうか?
ご教授お願いします。
906デフォルトの名無しさん:2007/03/20(火) 22:04:27
うーん、TRがなくてもそれっぽく表示してしまうWebブラウザが優秀と
いうべきなんだろうか。

tdの数は列ごとに幸い一定(出版社のカラムでROWSPANしてないし)のよう
なので、数えていくとか、あるいは、¥d{2}/¥d{2} というパターンに合致
するカラムを日付であると仮定してみるとか。
907デフォルトの名無しさん:2007/03/20(火) 22:26:39
>>882 riじゃだめ?

ありがとうございました。ri で help が出るようになりました。

ActiveRuby パッケージをインストールし、コンソール上で
>rdoc --ri-site

の後

>ri --help

が動くようになりました。
908デフォルトの名無しさん:2007/03/20(火) 22:31:37
http://www.uploda.org/uporg739930.txt.html

wxrubyでソフトを作っています。
本番の為のテストのソフトを製作していて
行き詰まりました。

get_valueや
set_valueがundefined methodだと言われ

メモ帳のサンプルプログラムを見ながら
「ここに書いてあるやんけ!」
と格闘すること小一時間

もうなにがなんやら分からなくなったので助けを求めます。

rbがうpできないのでtxtに変えてあります。

loadするファイルのpathはテスト的に直行させてありますが、本来なら@fliePathと書きたいです。
添削して欲しい場所にコメントをつけておきました、どこがエラーに繋がっているのか添削お願いします。
909デフォルトの名無しさん:2007/03/20(火) 22:40:24
wxRubyがないから確認できないけど、
initializeでengTxtやjapTxtというローカル変数には代入しているが、
on_startで参照している@engTxtや@japTxtといったインスタンス変数
はどこにもないような?
910MoonWolf ◆MoonWdLnkQ :2007/03/20(火) 22:40:28
911デフォルトの名無しさん:2007/03/20(火) 22:41:24
なんでinitialize中では@が付いてないわけ?
912MoonWolf ◆MoonWdLnkQ :2007/03/20(火) 22:43:35
>>908
initializeで作っているButtonとかTextCtrlをインスタンス変数に
代入しておかないと駄目。
913デフォルトの名無しさん:2007/03/20(火) 22:50:19
「get_valueがundefinedだから使えない」だけでなく、同時に
エラーメッセージは「@pathTxtがnil」であることも示していたはずだと思うのだが。
914デフォルトの名無しさん:2007/03/20(火) 22:59:44
http://www.infsys.cne.okayama-u.ac.jp/~kagotani/memo/wxruby.html
ここの温度変換プログラムでは
fahrDegree = TextCtrl.new(self, -1, "", Point.new(10,70), Size.new(50,20))
のように書いてますが、ふつうに動きます。
とりあえず
http://www.uploda.org/uporg739982.txt.html
改変したらきちんと動きましたが、上のサンプルプログラムにあるように
ローカル変数で書くのが定石なのではないのですか?
それとも
txt = TextCtrl...
@txt = txt
と2回書けという意味ですか?

何しろリファレンスのようなものが存在しないようなので
(本にもネットにも)
コードを読んで自分なりに分析してみようみまねで作っているという状態でして^^;
915デフォルトの名無しさん:2007/03/20(火) 23:04:11
rubyではじめてプログラミングぽいことした・・・しかも憧れのGUI
あとはexerbでexe化してインプット作業役の友達に送らないと
916デフォルトの名無しさん:2007/03/20(火) 23:08:24
そのサンプルでは、ローカル変数をブロックで束縛してるから、
インスタンス変数にしなくても動く。チミのはブロック内にメソッド呼び出ししか
ないから、インスタンス変数に格納しないと触れない。
917デフォルトの名無しさん:2007/03/20(火) 23:09:07
>>906
ありがとうございます。

私もTDの数が一定だったので

$td = table.search(:td).map{|e|
e.inner_text
}

TDをいったん配列にいれてそれから
>>905 の$rowのようにしたいのですが、
どのようにすればできますでしょうか?
918デフォルトの名無しさん:2007/03/20(火) 23:15:56
>>880
あ、イベントあったのね。thx
919デフォルトの名無しさん:2007/03/20(火) 23:19:12
exerb proto.rb
としても動かないプログラムが生まれました。
何かコマンドが必要のようですがわかりません
920デフォルトの名無しさん:2007/03/20(火) 23:25:37
exerbのサイトに全部書いてある
921デフォルトの名無しさん:2007/03/20(火) 23:35:36
exerb -c gui proto.rb
でもダメでした
922MoonWolf ◆MoonWdLnkQ :2007/03/20(火) 23:53:35
>>917
require 'hpricot'
require 'open-uri'
require 'kconv'
require 'tidy'

Tidy.path = "c:/WINDOWS/system32/tidy.dll"

html = open('comic_list.html').read.toutf8
clean_html = Tidy.open do |tidy|
 tidy.options.char_encoding = 'utf8'
 tidy.options.newline = 'LF'
 tidy.clean(html)
end

index_page = Hpricot.parse(clean_html)

ta = index_page.search("//table")
table = ta[2]

Record = Struct.new(:pub, :date, :title, :author, :price, :book)
records = table.search(:tr).map {|e|
 Record.new(
  e.search('td[1]').inner_text.strip,
  e.search('td[2]').inner_text.strip,
  e.search('td[3]').inner_text.strip,
  e.search('td[4]').inner_text.strip,
  e.search('td[5]').inner_text.strip,
  e.search('td[6]').inner_text.strip
 )
}
923デフォルトの名無しさん:2007/03/20(火) 23:55:09
きたこれえええええええええええええええええええええええ!!!!!!!!!!
924MoonWolf ◆MoonWdLnkQ :2007/03/20(火) 23:57:21
>>919
mkexy proto.rb
とやってレシピファイル(.exy)というのを作ってやる。

あとは
exerb -c gui proto.exy

requireとかは実行されないとレシピに反映されないので
必要なライブラリが全部ロードされるようにしておかないと駄目。
open-uriとかrequireしてもnet/httpが無いとか言われたよ^^;
925デフォルトの名無しさん:2007/03/21(水) 00:06:31
>>924
あんまり頑張るなよ
926MoonWolf ◆MoonWdLnkQ :2007/03/21(水) 00:17:00
hpricotとか流行ってるみたいなんでちょっといじってみたんだけど
tidyでXHTMLにしてからREXMLで処理した方が確実ぽい気が。
XPathじゃなくてCSSセレクタが使いたい場合は駄目かもしれんが。

>>925
win32/registryのパッチ書いたら寝るよ
927デフォルトの名無しさん:2007/03/21(水) 03:32:39
>>922
私の環境(mac osx 10.4.9 powerPC)で動きませんでした。
どうすればいいのかわかりません。
928デフォルトの名無しさん:2007/03/21(水) 07:33:20
HTMLからの抽出は正規表現でsplitしてscanしたほうが確実高速

ツリー構造をメモリ内に再構成することは目的のために本当に必要なのか?
929デフォルトの名無しさん:2007/03/21(水) 07:42:57
でっかい正規表現考えるのめんどくさい人がライブラリ使うんじゃないの
もし定型処理たりえるならそのように処理してもらったほうが間違いもないだろう
930デフォルトの名無しさん:2007/03/21(水) 08:01:50
> 正規表現

931878:2007/03/21(水) 08:04:54
特異メソッドの追加は method_added ではわからないのか。
よく考えたら、スコープが違うもんな。
とりあえず何とか見つけ出せたけど。

普通のメソッドと特異メソッドに同じ名前付けるのは
ややこしいからやめてほしいわ。完全に勘違いしてた。

Python が1ファイル1名前空間がいいという気持ちも良くわかったわ。
まぁ、ふつうに作ったらそうなるよね。
後付けで外から色々くっつけるのはスパゲッティになりやすいのは確か。
932デフォルトの名無しさん:2007/03/21(水) 08:10:06
ruby/tkのサンプルは色々と見つかるんだけど
実際にruby/tkで書かれたツールとかあります?
ちょっとどんなソースを書いてるのかリスペクトしたいんです

Ruby/gtkは時々みかけるんですけど…
933デフォルトの名無しさん:2007/03/21(水) 10:27:37
>>931
>普通のメソッドと特異メソッドに同じ名前付けるのは
>ややこしいからやめてほしいわ。完全に勘違いしてた。
なんで?普通のメソッドと同じように使えるのは特異メソッドの利点じゃん。

>特異メソッドの追加は method_added ではわからないのか。
grep -n メソッド名 file.rb | grep def
で見つからないか?

>後付けで外から色々くっつけるのはスパゲッティになりやすいのは確か。
うそ〜ん。
それはコーディングやファイル命名方法がアホなだけで、Open Classのせいにするのは筋違いでは?
Ruby on Railsでは既存クラスをアホみたいに拡張しているけど、ファイルもコードもきちんと整理されているよ。
934デフォルトの名無しさん:2007/03/21(水) 10:32:10
RoRが整理されていると世の中のあと付けで付け足すコードは混沌としえないのか?
935デフォルトの名無しさん:2007/03/21(水) 10:46:52
>>934
何をはき違えてるんだ?
936デフォルトの名無しさん:2007/03/21(水) 10:55:49
>>934
スパデッティになるのはコーディングやファイル命名方法がアホなだけであり、後付けで外から色々くっつけられることを理由にするのはおかしいといっている。
Ruby on Railsはその証拠として持ち出しただけ。
それをねじまげて
>RoRが整理されていると世の中のあと付けで付け足すコードは混沌としえないのか?
なんてアホか。誰もそんなこと言ってないだろ。へ理屈もいい加減にしろ。
937デフォルトの名無しさん:2007/03/21(水) 11:14:08
拡張したライブラリを使うのと、拡張して使うタイプのライブラリの違い
938デフォルトの名無しさん:2007/03/21(水) 12:16:58
>>933
いや、俺が勘違いしてたのが悪いとは思うんだが
そもそものスコープが違ってたから、APIが違うので
違うところを追っかけてたてたんだ。

で、同じ名前だけど、まったく違うAPIだったんだよ。
かたやただのアクセッサのはずのもの。
かたやアクセッサっぽいが、微妙に処理を行う奴。

grep して似た名前の def method もいっぱいあったので、
どれが呼ばれるのか見当つかんかった。

ちなみにその RoR を俺は追いかけてたんだがな…
939デフォルトの名無しさん:2007/03/21(水) 14:26:34
>>938
話が具体的じゃないから、おまえが何になやんでなぜこまったのかがさっぱりわからん。

>ちなみにその RoR を俺は追いかけてたんだがな…
公開できないコードなら大事なところをぼかすのは仕方ないけど、open sourceならもっと具体的にきけばいいんじゃない?
で、どの特異メソッドを探してたの?同じようなことで悩む初心者は他にもいるだろうから、もっと具体的に書いてくれ。もう解決したからいいよなんてのは無しな。
940デフォルトの名無しさん:2007/03/21(水) 15:10:30
(10 .. 2).each do |n|
 〜
end

はこちらの意図を汲んで動作してくれてもいいと思うんだ…
941デフォルトの名無しさん:2007/03/21(水) 15:25:32
Rangeは降順だとまったく無言で動かないよな
例外出すとかしてくれれば気づくんだが
942デフォルトの名無しさん:2007/03/21(水) 16:03:14
>>932
リスペクトってなに?
943デフォルトの名無しさん:2007/03/21(水) 16:03:21
こんなかんじでしょうか

class Range
  alias _original_each each
  
  def each
    if first > last && first.kind_of?(Integer) && last.kind_of?(Integer)
      first.downto(last) {|n| yield n }
      self
    else
      _original_each {|n| yield n }
    end
  end
end
944デフォルトの名無しさん:2007/03/21(水) 16:18:28
>>942
インスペクトの仲間じゃない?
945デフォルトの名無しさん:2007/03/21(水) 16:23:34
>>944
エスパーだな。

respect: 敬意を払う・尊重する
inspect: 検査する

語源的にspect(見る)という部分は共通してるがなー。
946デフォルトの名無しさん:2007/03/21(水) 16:29:17
先人のチョーすごいソースを参考にしてみたい、という意味でリスペクトなのかもしれん
947デフォルトの名無しさん:2007/03/21(水) 17:04:55
超低レベルな質問。
ruby-1.8.5-p12-i386-mswin32
Windows Xp

File.foreach(filename){|line|
p line
}
#=>
"一行目\n"
"\n"
"二行目"

File.foreach(filename){|line|
p line.chomp
}
#=>
"一行目"
""
"二行目"

1行目と2行目の間を出さないためにはどうすれば良いですか?
改行コードの問題?
948デフォルトの名無しさん:2007/03/21(水) 17:19:49
p obj == puts obj.inspect == print obj.inspect, $/

ループに
next unless line.size > 0
などと入れて出力したくないものは除外する。
949デフォルトの名無しさん:2007/03/21(水) 17:29:46
>>932
「敬意を持ってパクらせていただきます」の意。
950デフォルトの名無しさん:2007/03/21(水) 17:31:28
>>949
そんなツールはありません。
951デフォルトの名無しさん:2007/03/21(水) 17:33:04
>>947
同じことやってみたけど空行なんて出力されないけど、何故?
バージョン同じでOSはWIN2k
952デフォルトの名無しさん:2007/03/21(水) 17:43:00
>>951
空行が混じってないファイルだったのでは?
953デフォルトの名無しさん:2007/03/21(水) 18:26:59
なら>>947のは2行目じゃなくて3行目だろうに
紛らわしいなぁ。
954デフォルトの名無しさん:2007/03/21(水) 18:36:29
sample/tk/demos-jp
にピタゴラスイッチみたいなかわいいサンプルがあってワロタ
955デフォルトの名無しさん:2007/03/21(水) 18:43:05
windowsだとexerbを使えばexe配布出来るわけですが
linuxだとそうもいかず
ということはソースごと配布せざるを得ない?完全なるオープンソース状態?
いやだいやだ!
どうすりゃいいんだ?
956デフォルトの名無しさん:2007/03/21(水) 18:50:13
linux版exerbを開発すればええやん。
というか、UNIX界隈はバイナリの互換性が低くてやってられんだけでは(w
957デフォルトの名無しさん:2007/03/21(水) 18:54:47
つかソレは本当に公開に足るスクリプトなのかという話が

Windowsは細かい動作するスクリプトはニッチでも需要があるが
Linux界隈では自力でやってしまうことのほうが多いはず

使いでのあるライブラリとかならまだしも単一のバイナリではなんとも
958デフォルトの名無しさん:2007/03/21(水) 18:55:21
>>948
ありがとうデス。
>>953
す、す、すみません。
959デフォルトの名無しさん:2007/03/21(水) 19:11:58
apt-get一発で処理系が入る世界だからなあ
960デフォルトの名無しさん:2007/03/21(水) 20:08:10
>>948
unless line.size > 0
より
if line.empty?
のが早い…とかどっかで聞いたような
ソース忘れたけど
まぁ別解のお節介。
961デフォルトの名無しさん:2007/03/21(水) 20:29:24
vineかfedoraに移住予定なのです
962デフォルトの名無しさん:2007/03/21(水) 20:59:51
すみません、質問させてください
アクセサを記述したときふと気が付いたのですが、
classを記述するときに、

def hoge=(x)
@hoge=x
end

と記述したのですが、

これを呼び出すときは

hoge = x
とか、書いていました
つまり、=とメソッド名の間にスペースが入ってしまっています。

なのになぜ、正常に動作するのでしょうか?
963デフォルトの名無しさん:2007/03/21(水) 21:27:57
Cygwin 1.5.19 で ruby 1.8.6 を
./configure --enable-shared ; make ; make install
のようにビルドしてインストールしましたが
ruby -rnkf -e '' を実行すると
ruby: no such file to load -- nkf (LoadError)
というエラーがでました。
インストール方法に問題があるでしょうか?
964デフォルトの名無しさん:2007/03/21(水) 21:29:55
>962
代入の = はいくつかの解釈がされる。

var = val # 変数への代入
obj[idx] = val # obj.[]=(idx,val)
obj.hoge = val # obj.hoge=(val)

なので、より正確に書くなら

obj.hoge = x

だな。レシーバなしの hoge = x だと
ローカル変数 hoge への代入になってしまう。
965デフォルトの名無しさん:2007/03/21(水) 21:29:56
>>955
yarvには難読化機能があるらしいけど、それじゃだめなのか?

966デフォルトの名無しさん:2007/03/21(水) 21:57:26
>>964
サンクス
そういう勉強はどこですればいいの?
単純にRubyかけるだけではなく、もう少し深く学びたくなってきたので
967デフォルトの名無しさん:2007/03/21(水) 22:00:34
マッツと愛を育む
968デフォルトの名無しさん:2007/03/21(水) 22:05:35
使用法の勉強には全く役に立たないくせにデカくて厚くて高くて細かいこと書いてある例の本にお布施
969デフォルトの名無しさん:2007/03/21(水) 22:15:25
970デフォルトの名無しさん:2007/03/21(水) 22:56:02
>966
そういう細かい仕様はリファレンスマニュアルを隅から隅まで読んだり
MLを読んだりしてると覚えてくる。

ちなみにさっきのはリファレンスマニュアルの
「演算子式」→「代入」に書かれてる内容。
971デフォルトの名無しさん:2007/03/22(木) 01:45:01
以下のようなtidyのサンプルを実行すると

require 'rubygems'
require 'tidy'
Tidy.path = "/usr/local/bin/tidy"
html = '<html><title>title</title>Body</html>'
xml = Tidy.open(:show_warnings=>true) do |tidy|
tidy.options.output_xml = true
puts tidy.options.show_warnings
xml = tidy.clean(html)
puts tidy.errors
puts tidy.diagnostics
xml
end
puts xml


以下のようなエラーがでます。
RuntimeError: can't find the symbol 'tidyCreate'

method symbol in import.rb at line 126
method import in import.rb at line 145
method extern in import.rb at line 61
method load in tidylib.rb at line 17
method path= in tidy.rb at line 46
at top level in tidy_test_sample.rb at line 7


ご教授お願いします。
当方mac10.4.9 ruby1.8.5
972デフォルトの名無しさん:2007/03/22(木) 01:53:17
で、>>938はRuby on Railsの何を追いかけてたの?
973デフォルトの名無しさん:2007/03/22(木) 01:54:57
RoRが諦めかけていた夢を追いかけてたの
974デフォルトの名無しさん:2007/03/22(木) 21:53:51
def on_start(event)
rd = rand(@words.length)
@engTxt.set_value(@words[rd][0])
sleep 1
@japTxt.set_value(@words[rd][1])
end

sleepの入る位置がおかしいです。
英語を表示してから日本語を表示したいのですが、1秒待ってから英語と日本語を同時に表示します。
解決策はありますか?
975デフォルトの名無しさん:2007/03/22(木) 22:00:54
Windowがどれだかわからないけど、refresh呼んでみたら?
http://wxruby.rubyforge.org/doc/window.html#Window_refresh
976971:2007/03/22(木) 22:17:43
Tidy.path =

の行でエラーがでます。
自分なりにいろいろpathを変えてみた中ででた
エラーのパターンは
RuntimeError: can't find the symbol 'tidyCreate'  もしくは
Unable to load ほにゃほにゃ

です。

ttp://tidy.sourceforge.net/trt/tidy_mosx.tgz
HTML tidyは上記をダウンロードし解凍した”tidy”を
/usr/local/bin/ に放り込みました。
ターミナルで
tidy -h
とするとヘルプが表示されているのでインストールはできていると思います。


tidyは
gem install tidy でインストールし1.1.2がインストールできていると思います。

お助けください。
977デフォルトの名無しさん:2007/03/22(木) 22:24:22
>>975
そのサイトは知りませんでした!!!
ありがとうございます!!!
超感動しました。sizerの使い方もよくわからなかったので;;
978MoonWdLnkQ ◆MoonWdLnkQ :2007/03/23(金) 00:27:15
>>976
Tidyのコマンドじゃなくて、TidyLibライブラリを指定しないと駄目。
979デフォルトの名無しさん:2007/03/23(金) 01:48:15
>>978

ありがとうございます。

そうだったのですか。

scrapi-1.2.0についてたlibtidy.soでいいのでしょうか?

上記libtidy.soをTidy.pathにした場合
Unable to load /usr/local/bin/libtidy.so がでてきます。

ttp://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/vikiwiki/vikiwiki/vikiwiki2/tool.txt?rev=1.3
ここを参考にしようにも
ttp://tidy.sourceforge.net/src/tidy_src.tgzがダウンロードできても解凍できず
tidy4aug00.tgzをダウンロードして
make
sudo make install
してもコンパイル中?にエラーがでてうまくいきませんでした。
980971:2007/03/23(金) 02:28:40
>>978

すいません。自己解決しました。

ttp://nixbit.com/cat/programming/quality-assurance-and-testing/railstidy/
ここを見ていたら
It is assumed to be found at /usr/lib/libtidy.so .
とあったので見てみると
そのものはなかったものの
/usr/lib/libtidy.A.dylib というのを発見し、試してみると動きました。

本当にありがとうございました。


ついでで申し訳ないのですが
私は>>905で書いたようにハッシュと配列でデータを格納しましたが
>>917ではStructを使っています。

この2通りのやり方における違いとはどういったところでしょうか?
981MoonWolf ◆MoonWdLnkQ :2007/03/23(金) 03:34:48
>>980
Structだとアクセサが便利なのと
newするときに配列渡すだけで初期化できるとこがいい。
Arrayへの変換もできるし。
982デフォルトの名無しさん:2007/03/23(金) 09:04:42
983デフォルトの名無しさん:2007/03/23(金) 09:14:36
>>982
おつおつ
984デフォルトの名無しさん:2007/03/23(金) 13:08:59
>>982
ごちゃごちゃした1はいらない
985971:2007/03/23(金) 13:44:47
>>981
なるほど。ありがとうございます。

StructはRubyの入門書の類にはあまり出てこなかったので
ほとんど知りませんでした。

便利そうなので勉強して使ってみたいと思います。
986デフォルトの名無しさん:2007/03/23(金) 14:32:50
>>984
初心者スレだから必要
おまえのようなやつは本スレだけみとけ
987デフォルトの名無しさん:2007/03/23(金) 17:04:17
Tk::BWidget::NoteBook について質問なのですが,
raise(page=nil) メソッドで特定のページをアクティブにする(表示する)事はできたのですが,
逆に,現在アクティブな(表示されている)ページの情報を取得するにはどうしたらよろしいのでしょうか?

タブを右クリック→そのタブを削除

みたいな動作が欲しいのですが…
988デフォルトの名無しさん:2007/03/23(金) 17:23:55
wxRubyを使え
989デフォルトの名無しさん:2007/03/24(土) 13:28:47
if A > B then



if A - B > 0 then

ってどっち使うほうがいい?
990デフォルトの名無しさん:2007/03/24(土) 13:38:35
>>989
そりゃアルゴリズムにおけるAとBの意味による
例えば自動車Aと自動車Bの速度だとすると
前者は「Aの方がBよりも速い」
後者は「AのBに対する相対速度が正」

Rubyは人間の思考中心の言語だからNE
991デフォルトの名無しさん:2007/03/24(土) 13:45:42
>>989
A-B>0は、Cのintのような整数の範囲が限られている場合に意図しない(が正しい)
動作をすることがあるが、Rubyは自動的にFixnum<->Bignum変換されるから、
文脈に応じて分かりやすいほうでいいんじゃないかな。
992デフォルトの名無しさん:2007/03/24(土) 13:51:33
みんなreturnは必ず書くよな!
993デフォルトの名無しさん:2007/03/24(土) 13:54:05
最悪nilでも返さないとデータ漏洩につながるからな。
994デフォルトの名無しさん:2007/03/24(土) 13:56:54
>>990-991
ありがとう
適当に使い分けるよ
995デフォルトの名無しさん:2007/03/24(土) 14:01:06
returnは書く
でも
if hoge
 return foo
else
 return bar
end
な書き方ってあっちこっち飛び回って実際問題gotoと一緒だよなぁ
returnってメソッド内で1つだけにしたほうがいいのかなぁ
996デフォルトの名無しさん:2007/03/24(土) 14:02:21
>>995の自己レス
例えば
if hoge
 piyo = foo
else
 piyo = bar
end
return piyo
こんな風にね
997デフォルトの名無しさん:2007/03/24(土) 14:15:12
>>996
メイン分岐の処理自体に前処理を書くのが楽だったとしても無理矢理まとめる?

return nothing unless hoge.has_key?('momomo')

のような

出口は1個であるべきなんだけど難しいね
998デフォルトの名無しさん:2007/03/24(土) 14:27:44
if文が値返すから

return (if condition
 hoge
else
 bar
end)

とか書けるな。返す文を短く書けるなら

return (condition ? hoge :bar)

999デフォルトの名無しさん:2007/03/24(土) 15:09:25
でっかい if 文で括ったほうが素直かと
容易にネストしまくると思われるが
1000デフォルトの名無しさん:2007/03/24(土) 15:12:21
>>992
def hoge
@hoge
end
で、いちいち return @hogeとは書かない
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。