5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Ruby初心者スレッド Part 10

1 :デフォルトの名無しさん:2007/01/23(火) 17:59:23
マニュアル
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
Ruby初學者スレッド Part 9
http://pc10.2ch.net/test/read.cgi/tech/1164065622/
Ruby初心者スレッドPart8
http://pc8.2ch.net/test/read.cgi/tech/1159424939/
Ruby初心者スレッドPart7
http://pc8.2ch.net/test/read.cgi/tech/1154077799/
http://makimo.to/2ch/pc8_tech/1154/1154077799.html
Ruby初心者スレッドPart6
http://pc8.2ch.net/test/read.cgi/tech/1147918197/
http://makimo.to/2ch/pc8_tech/1147/1147918197.html
Ruby初心者スレッドPart5
http://pc8.2ch.net/test/read.cgi/tech/1143403165/
http://makimo.to/2ch/pc8_tech/1143/1143403165.html
Ruby初心者スレッドPart4
http://pc8.2ch.net/test/read.cgi/tech/1137927749/
http://makimo.to/2ch/pc8_tech/1137/1137927749.html
Ruby初心者質問スレPart3
http://pc8.2ch.net/test/read.cgi/tech/1125587131/
http://makimo.to/2ch/pc8_tech/1125/1125587131.html
Ruby初心者質問スレPart2
http://pc8.2ch.net/test/read.cgi/tech/1107799347/
http://makimo.to/2ch/pc8_tech/1107/1107799347.html
Ruby初心者質問スレPart1
http://pc5.2ch.net/test/read.cgi/tech/1100534824/

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はええ。

23 :22:2007/01/23(火) 22:05:00
あ、ruby 1.8.5 p12は1.23秒ね。

24 :デフォルトの名無しさん:2007/01/23(火) 22:10:05
Python2.5 VS YARVキボン。

25 :22: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

30 :26:2007/01/23(火) 22:39:03
試してみた。Python2.5(0.89秒)に対してYARV(1.262秒)。
Python2.5はコンパイラに手が入ったって聞いてたけど、なかなか良いね。

31 :デフォルトの名無しさん:2007/01/23(火) 22:44:24
>>29
それ暇つぶしにいいけどキの人が書いたとしか思えんw
訳すの大変だったろうなぁ
キツネは可愛かった

32 :22: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だけ冗談かと思うくらい遅いな。なんだこりゃ?

33 :22: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
厳密にはそうだね。
しかし、そこまで厳密である必要もないだろ。

40 :21: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)

のようにすればボタンを押すごとに描画する機能が安直に実現できる。

44 :43:2007/01/24(水) 00:13:41
他にも巨大なテキストファイルがふたつあったとする。内容を比較したい場合、
内部イテレータでは、どちらかを全部読み込まないと比較できないが、
外部イテレータでは並列に読み込みながら比較できる。

45 :43: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)

51 :50: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 の問題なんでしょうか?


121 :113: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は真。ついでながら、""も[]も真。


133 :130: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に同意。


140 :135: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以降の流れだな。

144 :135:2007/01/29(月) 21:45:36
>>141
なるほど、EnumerableモジュールのMix-inか。
Rubyも上手くできているなあ。
勉強になりました。ありがとう。

>>142-143
既出だったようですまん。その該当箇所も読んでみる。


145 :113:2007/01/29(月) 22:59:37
ありがとう >>128 さん
なるほど ruby -v で warning が表示されますね(1.8.5 使用)。
同義なはずの attr_accessor 使ったコードだと warning が出ないのは意図的なのかな?

146 :129: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を定義してあった方が親切かもねえ。

150 :129: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

クラス定義中と同じってのは、何処に書いてあるン?

152 :129:2007/01/30(火) 04:02:52
>>151
申し訳ありません。ちょっと取り込み中で、ご返事が遅れました。
なるほど、クラスではなく、メソッドの内部ですか!
考えてみたら、メソッドの中でもメソッドは定義できますね。盲点でした。

153 :129: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にしてる

156 :129: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ってどっかある?

159 :129: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 }


164 :162:2007/01/31(水) 13:22:02
>>163
ありがとうございます。標準には存在しないということでしょうか。
意外でした。

165 :154: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')


166 :161: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())

170 :162: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) とか
これから色々機能つけるのなら、継承よりは内部に持った方が安全

177 :174: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/

189 :184: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部品に?
画像に直接?

194 :192: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. な言語にこそ、
定石集であるレシピブックの価値があると思うがなぁ。
実際、忘れっぽい俺はすごく助かってるし。

(レシピブックを参照してばっかだから、いつまで立っても定石を覚えないのか?)

212 :192: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'が必要じゃない?


214 :192: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]



231 :230: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が英語なので日本語にしたいです。
どのような方法があるでしょうか?

260 :227: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.

274 :273: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 は?

276 :273: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でも動作はするかも)んだけど、それでインストールできなかったってこと?

278 :273: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が尽きるまで繰り返させたいのですがどうすれば?

284 :273: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
>>310
また変わった。
http://www.rubyist.net/~matz/20070104.html#p03

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
この後どんな処理をしたいかによる

322 :320: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番目の要素を参照するだけでよく、実際そのような内容のメ
ソッドが定義される。ハッシュ値を考えない分、速い。

もっとも、ふつうのクラス定義より速い理由はよくわからん。


328 :320: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
>>336
http://www.igvita.com/blog/2007/02/04/ruby-screen-scraper-in-60-seconds/

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
ブラウザのキャッシュ

357 :354:2007/02/20(火) 13:09:45
補足なんですが、要するにIF部分をevalで動的にしたいのですが、
メソッド名と変数名がかぶって混乱したという話です。

変数名は変えたくないんです。これだけは譲れなくて。
ちなみに '=' は '=~' です。

358 :デフォルトの名無しさん:2007/02/20(火) 13:22:39
だから何を動的にしたいんだよ

359 :354: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}だろ

何をしたいのかわかんねーよ

361 :354: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"


366 :354: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
誰もそんなこと言ってませんけど。

378 :365:2007/02/20(火) 20:51:46
どなたか教えてください
それとも不可能ですか?

379 :デフォルトの名無しさん:2007/02/20(火) 20:55:49
>>378
nkfを使え。

380 :365: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"

383 :365: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] あたりで話題になったが結局実装されていない。


400 :399: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
分かった

409 :399: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をけすんじゃね?


425 :351: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を他のフラグに。


448 :446: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
>>452
ruby/tk FAQ
http://www2s.biglobe.ne.jp/~Nori/ruby/ja/tk-faq/rtkFAQ.html



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
ttp://www.fxruby.org/

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
コピペ元
ttp://d.hatena.ne.jp/nurse/20060618

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


495 :493: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つずつ処理したい時に使うとか。

516 :514:2007/02/26(月) 22:30:26
>>515
関数じゃだめなのでしょうか?
それとも、1個1個に対して異なるブロックを指定して処理内容を変えるってことですか?

なんか、トンチンカンなこと言っていたらすみません

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



518 :514: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が発動しないのですが・・・

523 :514: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
だた。


526 :514: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が発動してしまうのはなぜでしょうか?

536 :514: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

571 :514: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ですよね、すまそ

160 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)