Ruby について Part 3

このエントリーをはてなブックマークに追加
オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。

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

<前スレ>
Rubyについて Part 2
http://pc3.2ch.net/test/read.cgi/tech/1028906179/

<過去スレ>
Rubyについて
http://pc3.2ch.net/test/read.cgi/tech/1012096319/
<関連スレ>

rubyを語るスレッド 2
http://pc.2ch.net/test/read.cgi/unix/1040496222/l50

goRua(Ruby/Gtkによる2chブラウザ)ってどうよ。
http://pc.2ch.net/test/read.cgi/unix/1008120213/l50
3げっと
5IP記録実験:03/01/08 21:28
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
6デフォルトの名無しさん:03/01/09 01:05
age
>>315答えは出てるけど。
>467
すでに・・・すでに!?
9IP記録実験:03/01/09 01:43
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
名スレの予感
漏れ達がひろゆきを愛したように、ひろゆきも漏れ達を愛してほしい!
IP表示すればいいじゃん。
田舎者の煽りは酷い。
>>138
メガビだからって安心なわけじゃないような。
なんか誤爆が激しいが、
2ch壊れたのか?
>>139
で結局IP記録に賛成なの?
前スレの RDT だけど、JRuby のパーサを使おうという話は出てないのかな。
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
18デフォルトの名無しさん:03/01/09 21:09
去年は2回しか新バージョンがリリースされなかったんだが、
ちょっと淋しいねえ。
いいかげん 1.8 も出してもらいたいし。
被ってる上にかなり出遅れてるし。
>>567
そういう状況なってみないと分からんよ。
>>16
JRuby触ってみたけど、結構いい感じ。
まだまだ細かいところで未完成の部分はあるけどな。
でも、起動がスゲー重いよ。
Javaの遅さにRubyの遅さがプラスされて…。
$ jruby -e "puts 'hello, world'"
だけで、数秒かかるのはJRubyの所為というよりやっぱJavaの所為かな…。
でも、何となく期待している。
Jythonに負けるな!

まあ、本家Rubyにほぼ完全対応って感じでないと、
パーサとして使うのは難しいかも知れないね。
>>21
irb・rtags・RDocのパーサー(と言えるか怪しいけど)は
Rubyの文法に完全対応していないけど、そこそこ使える。
JRubyは完全対応しないといけないだろうけど、
結局、適材適所じゃないかな。

ちなみに、Rubyのパーサーに本当に完全対応させるのはかなり面倒だと思う。
Rubyではローカル変数等に日本語が使えるので、そこまでやりはじめると…。
某○○は相手が事実を認識しえたと判った段階でレス汁w
某○○は相手が事実を認識しえたと判った段階でレス汁w
>>65
むしろ懐かしさすら覚えるよ。
って言うよりも俺たちがひろゆき氏を助けなければ
こんな面白い遊び場作ってくれたんだから・・・何とかしてやろ〜ぜ!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
はいっはい、日本生命の時からみんな、
その場でぎゃーぎゃー騒いでばかりで
何も勉強しようとしないよね、2ちゃんねらーって。
┏                                       ┓
  http://www.geocities.co.jp/Technopolis-Mars/6820/hoken/
┗                                       ┛
ここがよくまとまているから、熟読して出てこい。
読んで理解するのに3時間かかるかもしれんが
それだけの価値はあるぞ。できたら
┏                                       ┓
   http://cocoa.2ch.net/hoken/kako/987/987605232.html
┗                                       ┛
批判要望板で「2ch以外も含めて、俺が見たなかで最高のスレだ。」
と絶賛されたスレだ。ジオの元スレだからな。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
うわ、まじだよ。
こんなスタイルになるのかな?

誰かが他の掲示板で密告→第三者が2chでスレ建て→祭り
>>22
ruby本体にparser API みたいなのが欲しいねえ
なるほど
ひろゆき
仕事紹介してくれ
IP取ろうが取るまいが
捕まるときは捕まるし
別に今までと大して変わらんと思われ。
ただ、今はちと過渡期なので
まわりが様子見な感じだけど
すぐに元に戻ると思われる
34デフォルトの名無しさん:03/01/10 23:46
ぼすけて
切っ掛けは匿名だったかもしれないけど、今ではそんなに重要性ないでしょう。
アングラな内容も1ジャンルって感じだし。
昔はカテごとに雑談できるのも(目に付くところでは)珍しかったし
いち早くUG系から離れたのもあるんでない?
我ながら好き勝手にほざいてしまいますた・・(汗
もし実現しても回線細そうですしね。。。

新しいwww.ruby-lang.org、python.jpの後追いみたいで何だか...。
>>30
まつもと氏はRiteでは用意するとか言っていた気がする。
この辺のライブラリの整備のされ方はpythonと大きく違うよね。

今はFreeRIDEのようにripperを使うのが一番良い気がする。
氏ね
   /⌒∞、 ずさー♥
  ./ ゚∀~・:ヽ、 
  ι、,,,,、,,,,,,、,,,,ゝ
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
快速たん(・∀・)イイ!!
さん
10桁トリップの時に、トオルさんとマァヴさんが、話してましたわね、
スレ違いのレスはよくないな。
ここは快速スレですよ
45デフォルトの名無しさん:03/01/11 15:19
Vector 見てたら、
C/C++統合開発環境 WideStudio が
「Ruby 言語(v3.20から)」も使えるようになったようですな。

誰か使ってみた人いる?
ちょっと試したけど、Rubyのサンプルが見あたらないので訳わからん。
何で前スレスレストかかってんの?
sports3鯖死んでる??
国内サッカー板が見れない…
>>45
前に見たときは Linux 版しか対応してなかったけど、
Windows 版も出てるようだから試してみるね。
49デフォルトの名無しさん:03/01/11 19:24
>>45
おなじく ruby によるサンプルをはげしく希望
お前のは議論じゃないよw
「これ言っていいですか?」 「これ言うとヤバイですか?」 って他人に聞いてるだけw

寝るのがイヤなら、教えて厨は初心者板に逝ってねw
もしこれが実行されたらにちゃんは閉鎖だな、きっと
wって2ちゃん発祥なの?
ださくないか?
(笑)もザサイから、(^^)がナウイよ。
>>52
なわけねーだろ。
ネット初心者がこーゆーとこに来るのは、どうかと思うぞ。
吉と出るか凶と出るか
レスありがとう。
俺素人だからよくわからないが
アク禁にしないのは何か理由るのかな・・?
56名無しrubyist:03/01/12 03:10
荒らしと見分けるために、名前欄に何か入れるようにしない?

>>45
ガイシュツだったような気がする。

つか、WideStudioって結構使われているの?
使いやすい?
5745:03/01/12 04:16
今検索したら、前スレ666で既出でしたね。
すみませぬ。

#これ荒らしなの? 2chがイカレタのかと思ってた。
58case 名無し::03/01/12 04:46
http://pc3.2ch.net/test/read.cgi/tech/1040297337/110
> 荒らしというより、スクリプトのバグでは?IP実験を始めた途端に他のスレの
> 書き込みがPC板全般に流れてきてるみたい。
という噂が。
59名無しrubyist:03/01/12 04:57
>>57
うん、荒らしらしい。
詳しくは自治スレ見るとわかるよ。

プログラム板自治スレッド
http://pc3.2ch.net/test/read.cgi/tech/1029122103/
昨日、ruby-talkに登録してみたら、本日分だけで70通以上来てびびった。
これと比較するとruby-listはおとなしめだな。

興味を持った話題。
Win32Serial Extension Library for Ruby
WindowsのシリアルポートをRubyで使うライブラリ。
ttp://grub.ath.cx/win32serial/

Rubyで制御とかできるのかな。
だれかに突っ込むの手伝ってくだいよぉ

実質的には上告はもう無理らしい。

うれしいなぁ。


>>56
徹底できるわけがないから無駄なことやめて unix 板へでも逝け。
ここはもう人いないよ。
64名無しrubyist:03/01/12 12:57
>>63
それもそうだな。
俺、窓使いだけどおじゃまさせてもらいます。
あーっはっは!
久しぶりに笑ったよ!
公開トリップ?そんな魅力も何にもないトリップなんて
わざわざ使う人いないと思うけど…
どこで公開されてるの?そんな糞トリップ公開されてもねぇ
同じ人が串でも使っているんじゃ?
お疲れさまでした〜
68山崎渉:03/01/13 18:38
(^^)
69irbについて:03/01/14 15:48
irbを電卓代わりに使いたいのですが
自前のモジュール(関数郡)を組み込んだり
一度プロセスを終了しても変数の値を保存しておいたりすることはできますか?
1. 普通に require すればいい
2. Marshal や PStore
71山崎渉:03/01/15 17:46
(^^)
72irbについて :03/01/15 20:43
>2. Marshal や PStore
使った変数すべてを自動的に保存復旧したいのです。
a=3
exit
再起動
p a
3
みたいに。
>>72
irb で打ち込んだのを全て保存しておいて、
起動時に読ませるようにすれば?
>>72
irb を終了させなければいいのでは?
>>72
local_variables()を使えばいけそう。
と思ったが、ローカル変数だと、ちいと辛いな・・
bindingでうまくいかないかな?

ちと、やってみます。
7675:03/01/16 06:16
require 'pstore'

class VarsStore
  def initialize(storefile)
    @store = PStore.new(storefile)
  end
  
  def save(bind)
    hash = {}
    eval("local_variables", bind).each do |name|
      val = eval("#{name}", bind)
      if val.equal?(self)
        next
      end
      hash[name] = val
    end
    @store.transaction do
      @store["local"] = hash
    end
  end

-----
つづく
7775:03/01/16 06:17
つづき
-----

  def load(bind)
    hash = nil
    @store.transaction do
      hash = @store["local"]
    end
    hash.each do |key, val|
      $varsstore_val = val
      eval("#{key} = $varsstore_val", bind)
    end
  end
end
7875:03/01/16 06:21
requireして、
セーブ
VarsStore.new("hoge").save(binding)
ロード
VarsStore.new("hoge").load(binding)

とする、今のところBindingを指定しないとだめ。
ローカル変数にダンプできないオブジェがあるとエラーを吐く。
保存できるクラスは限定させた方がいいかな?(NumericかStringのみとか、、、)
あとは、適当に改造してみてね。>>72
79デフォルトの名無しさん:03/01/16 10:17
Win32APIを使う必要が出てきたのですが、
Win32API.new に関するリファレンスは
どっかに転がってないでしょうか?
http://www.ruby-lang.org/~rubikitch/refm/
ここのページのファイルって拡張子が.gzだけど、どうして?
(ダウソして中身みてみたらアーカイブになってなかったけど)
>>81
君がダウンロード時に自動的にgzip展開するブラウザを使ってるんだろう。
>>81
http://www.ruby-lang.org/ の設定がヘボいから。
84デフォルトの名無しさん:03/01/17 14:27
RubyUnit の Ruby 標準添付バージョン Test::Unit では、
サンプルコードとして以下のようなものが添付されてます。

-- tc_adder.rb

class class TC_Adder < Test::Unit::TestCase
..

--

ファイル名、クラス名なんですけども、もはや
ファイル名の頭に「tc_」、クラス名の頭に「TC_」っていうのは、
業界標準なんでしょうか。
85デフォルトの名無しさん:03/01/17 16:59
ruby-modeでC-jをenterでできるようにしたいのですが、.emacsにどのような設定をすれば
よいのでしょうか。
>>84
TestCaseの略では。
C-m
>>84
漏れは RubyUnit(runit) の表記の方が好き。
Adder -> AdderTest のように suffix をつける。
>>84
Adder -> TestAdderって付ける漏れは標準でないのか…。
そして、ファイル名はtestadder.rbだし。

ファイル名とクラス名を同じにするのは普通なんじゃないの?
それとも漏れがJavaなんかやっている所為でそれになれているから?
90デフォルトの名無しさん:03/01/18 09:42
ちゅうか、RubyUnit じゃなくて Test::Unit をRuby の標準添付ライブラリに採用するっていうのが
どうにも違和感がある。RubyUnit からの移行は、Ruby の動的な言語仕様のおかげで、移行のための
コードもそんなに書かなくて済むけど(今後、XML::Dom だの出てくるだろう)ちょっとな。

(メソッド名でも assert_equals, assert_equal という違いがある なんで統一しない? < Test::Unit)

今更、Rubyにライブラリのネーミング規則云々っていうのは似合わないような気がしてる。
eaocf-18p157.ppp15.odn.ne.jp
92デフォルトの名無しさん:03/01/19 00:18
Rubyって最近、すごい分野の狭い話題で1冊の本になってるのが多いですよね。
Ruby+GtkとかeRubyとかRuby+XMLとか…
あんなんでよく本が1冊も書けるなあ、っていうか、買う人いるの?
他の言語の開発者だったら、あんなの1冊ずつ買ってたら絶対置き場所なくなる。
>>92
そっか? Amazonで、Javaあたりで検索すれば、Swingで、Appletで、DBで、XMLで、
Webサービスで、……という具合なんだが。アプリケーションドメイン毎に本が出る
のは当然じゃないだろか?
>>92
入門書だけで10冊や20冊ぐらいある言語を見ると、
そっちの方がある意味おかしくないかい?

まあ、256本のやつは確かに異常だけどさ…。
でも、極道編は俺にとって面白かったぞ。
UnitTestの入門書としては。
95デフォルトの名無しさん:03/01/20 22:45
www.ruby-lang.orgもやっと最近流行のWeblog風になりましたけど、なんだかまだ
寂しげですね。素直にZope使ってはいかがですか?
96デフォルトの名無しさん:03/01/20 23:13
確かに他の言語と比べたらアート的な部分に関して(RWiki といい)今ひとつモダンな感じがしないね。
そーだね。Ruby界隈はカタい雰囲気ある。
HTMLはStrictじゃないと許さん、みたいな。
オンラインでリファレンスを見てると、たまにやたらと重いときがあるんで、
ローカルで見るようにしよと思ってドキュメントをダウソして解凍してみたら
形式がRDでやんの。
HTMLの形式でも配ってくれればいいのに。

HTMLのやつもあったけど、リンク切れがあちこちにあるし、
ひとつのファイルに連結されてるからIEじゃ重くて使いにくいし。
99Rubist@田中ノーベル賞:03/01/21 01:38
そんなチミにはミラーサイトをお勧めする

http://www.vsl.gifu-u.ac.jp/freeman/misc/ruby-docs-1.6.7/refm-ja/
100デフォルトの名無しさん:03/01/21 01:41
オブジェクト指向原理主義、オープンソース界のアルカイーダ
HTMLはStrictにしる!ドキュメントはRDにしる!!
Windows、Mac OSは消去してLinux/BSDにしる!

スローガン:
 欲 し が り ま せ ん 勝 つ ま で は
rd2 で HTML に変換すれば?
102Rubist@カラアゲ:03/01/21 04:20
んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ
んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ
んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ
んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ
んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ
んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ
んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ
んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ
んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ
んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ
んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ
んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ
103Rubist@カラアゲ:03/01/21 04:21
>97
俺のようなマイルドな奴もいるぜ、ヒヒヒ。。
10498:03/01/21 09:14
http://www7.tok2.com/home/misc/ruby.html
よくさがしてみたら、Windows版のHTML Helpってのがあった。
>103
ごめん, 厨のこと忘れてた。

美的感覚といえば、Ruby はインデントの主流が2なのもどうかと思う。
正直見づらい。

(RDフォーマットは賛美両論ありながらも、俺は気に入ってる)
>>106
賛否、だろ。
賛美なら一論。
>>106
何の言語でもインデント 2 で書きますが何か?
…趣味で作るやつは、だけど。
>>108
原理主義者だから、GNUスタイルのインデント 2なのね。
ruby は2がしっくりくるなぁ
C あたりは4
文字列にある文字列が含まれてるか判断するのに正規表現より
index()を使ったほうが速いだろうと思っていて、いままで全部index()
を使ってきたけど、念のために速さを調べてみたら正規表現のほうが
速かった。
ちょっとショック。

if str.index('hoge') ...

if str =~ /hoge/ ... # こっちのほうが速い
112デフォルトの名無しさん:03/01/21 19:49
>>109

あれ、linux カーネルは tab の 8 で書かれてなかったっけ。
インデントにスペース使う奴はドキュソ
オレはスペース派。
違う環境に持っていってもインデントが崩れないのが好き。
>>111
え?ほんとう?
>>111
String#indexをBM searchでも使って書き直して送るべし。

>>115
調べなおしてみたら、文字列が短いときとか最初のほうでマッチするとき
は、index()のほうが速かった。
if text.upcase == 'HOGEHOGE'
if text =~ /^hogehoge$/i

大文字小文字無視して等しいか調べるときも、正規表現が速かった。
1.7ではcasecmpというのがあるみたいだけど、入れるのが面倒だから
調べられない。
119名無しさん:03/01/22 10:18
http://i.loveruby.net/ja/ruby/codingstyle.html
にrubyのコーディングスタイルについての文章がある。
俺も3スペースインデントしてたけど、最近は2スペースだな。

ま、どんな言語でもその標準ライブラリが何で書かれてるかに
従ったほうがいいと思う。あんまり変なスタイルだと、それだけ
で気も悪がられる気がする。
だからCで外部モジュール書くときもついK&Rで書いてしまう。
120デフォルトの名無しさん:03/01/22 10:24
2スペースだと、年とってから苦労しますよ。4ぐらいにしときなさい。
普段、抽象化抽象化と煩い奴に限って、
インデントをタブ文字で抽象化しないのは何故だ?
環境依存だからです。
スクリプト言語でタブインデントする根拠は希薄
スクリプト言語でオブジェクト指向する根拠は希薄
動的オブジェクト指向は書き捨てでも役に立つぞ
Rubyyyy>>>>>>>>>>>>>>>perl.
HTML>>>>>>>>>>>>>>>>>>rd
http://mapbrowse.gsi.go.jp/mapsearch.html
で検索できる地形図から2.5万、5万、20万の地形図を合成
して作ろうと思っています。
例えば、5339は東京(20万分1地勢図)で、
5339??(??は00〜77)が東京(1/20万地勢)に含まれる1/2.5万地形図で、計64枚あります。
(メッシュコードの概念はhttp://www.biodic.go.jp/kiso/col_mesh.html参照
Web上からは以下で落とせます。
for j in {1..4}
  do
    for i in {00..77} 
      do 
        wget -q "http://mapbrowse.gsi.go.jp/mapimagef25k/5339/5339${i}${j}.png"
      done
  done
このpng画像は1/2.5万地形図を約*4分割したもので、
1→南西、2→南東、3→北西、4→北東となっていて、4枚合わせて2.5万になります。
(*:実は少しダブって分割されています。)
一気に合成する方法として、例えば、ImageMagick の
% convert -crop (ca)x(db)+a+b orange.gif blue.gif
の機能を使って、
png画像→1/2.5万
1/2.5万→1/5万
1/2.5万→1/20万
1/5万→1/20万
とする方法が考えられます。
この変換スクリプト、誰か書いてくださいませんでしょうか。
僕にはそこまでできません。

す み ま せ ん が 誰 か 助 け て く だ さ い 。




129デフォルトの名無しさん:03/01/23 10:39
winのmutexみたいに、プロセスをまたいで排他処理を行う方法は
rubyには無いのでしょうか?

(flockくらいしか方法は無いのでしょうか?)
130127:03/01/23 10:40
メッシュコードの概念は
http://nlftp.mlit.go.jp/ksj/mesh.html
の方がわかりやすいかも。

% convert -crop
を使うのは2.5万の4分割がダブっているからです。
きれいに分割できればあとはタイルのようにくっつけるだけですが
僕にはできませんでした‥‥‥










131デフォルトの名無しさん:03/01/23 10:55
>>111でindex()より正規表現が速いって書いたものです。

↓このように書いてたものを
while true
text.index('hoge')
end

↓このように書き直してみたら、正規表現とほぼ同じ速さになりました。
t = hoge
while true
text.index(t)
end

リテラルがあると遅くなるのかなぁ?
>>129
http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=Mutex
これでいいか?thread.rbにあるので、
require 'thread'
して、使ってね。
>>132
それはプロセス内でしか使えないのでは?
>>129
RAAで、semaphoreとかSysV IPCとか入れて探してみれば。

>>133
あ、勘違いスマソ。
プロセス間ね、スレッド間だと思っていた。
勘違いばかりなので責任感じて…

>>134さんが言っているのはたぶん、
http://www.ruby-lang.org/raa/list.rhtml?name=sysvipc
これのことでしょ。
でもプラットフォームによっては使えなさそう…。

flockもプラットフォームによるので、、まあ、UNIX系なら問題ないか。
つか、簡単に使えるのがあったら、CGIがめちゃくちゃ楽になるな〜。
137デフォルトの名無しさん:03/01/23 15:09
>> 131
> リテラルがあると遅くなるのかなぁ?

構文解析結果のノードの中の文字列をそのまま使用できないので、
毎回、'hoge'文字列のコピーが行われます。
変数を使用する場合は、その変数の値の文字列が
そのまま使用されます。
138山崎渉:03/01/23 19:58
(^^)
139デフォルトの名無しさん:03/01/24 11:13
>>137
> 構文解析結果のノードの中の文字列をそのまま使用できないので、
> 毎回、'hoge'文字列のコピーが行われます。

補足すると、文字列自体はStringオブジェクトの間で共有されるので、
文字列のコピーというよりは、Stringオブジェクトのコピーが
毎回行われるということです。
140デフォルトの名無しさん:03/01/24 11:40
arr.each{|i|...}
の|i|を省略可能にしてくれ。
その場合決め打ちで i になるわけ? そんなのヤだ。
142デフォルトの名無しさん:03/01/24 16:33
文字列linesをファイルに書き出したいのですが
もっと簡潔に書けないでしょうか?
open("log", "w"){|f|
lines.each{|s|
f.puts s
}
}
143デフォルトの名無しさん:03/01/24 16:35
>>142
f.puts lines.join("\n")
144デフォルトの名無しさん:03/01/24 16:35
http://jsweb.muvc.net/index.html
 ★こんなサイト見つけました★
>>144 ブラクラ
>>143
joinはいらないのでは?

f.puts lines
IO.popenで起動したプロセスが終了したのを認識するのってどうすればいいんでしょうか?
厨な質問でスマソ
>>147
読み込みならそれが終わるまででいいんでないの。
書き出しなら先に終了されたらエラーになるでそ。

どうしてもやりたきゃ pid をとって waitpid。

150デフォルトの名無しさん:03/01/24 20:58
スレ違いかもしんないですが、
Rubyで実装されたWikiを利用するとしたら、

* Tiki
* asWiki

どちらをオススメしますか? パッと見、似たような感じだけど……。
# RWikiはdaemonが必要だからちょっと敬遠。

amritaを使っているのでaswikiかなあ、とは思っているんですが、
「Tikiのほうがイイってば!」ってなポイントがあれば知りたい。
☆★▼▽▲△●○■□◆◇◇◆□■○●△▲▽▼★☆

今月もお小遣いすくなってきたよ・・・トホホ。
そんなあなたにこのサイト!!あなたのお小遣いを
1円でも多くして見せます!!
損はさせません!!早速アクセスをどうぞ!
↓   ↓   ↓
http://finito-web.com/kanemou/index.html

☆★▼▽▲△●○■□◆◇◇◆□■○●△▲▽▼★☆
152デフォルトの名無しさん:03/01/25 00:02
>>150
Hikiっていうのもあるよ
http://www.namaraii.com/hiki/
153デフォルトの名無しさん:03/01/25 01:01
>>152
tDiaryのプラグインが使えるってのがちょっと面白い。
154デフォルトの名無しさん:03/01/25 17:36
>>127

合成するって、めちゃくちゃにでかい画像ファイルができそうだが。
Ruby でグラフィックを扱うなら Ruby/GD を使うのがいいよ。
やっとrubyがわかってきますた。
慣れたら簡単やね
RDのフォーマットってもうこれ以上変わらんのかな?
オブジェクト(イメージ)の埋め込みが出来てほしい
PODに乗り換えようかと思ったけど、
RDの方が分かりやすかった。
この仕様だけなんだけど。
>>156
もともとはテキストの為のフォーマットなので、
画像を扱うというのは考えられていないと思われ。
RWikiとかみたいに自分で拡張する分には自由でしょう。
>>156
まつもとさんは以前RDをこれ以上複雑にしたくない、
という趣旨の発言をしていたんで、RDという枠組みでは無理じゃないかな。
んで、拡張するのならRDという名前は捨ててくれ、ということだった。
だから、欲しいのなら君が拡張してRDじゃない名前をつけて発表すれ(w
159牛丼うまうま:03/01/26 12:58
>>127
http://ha9.seikyou.ne.jp/home/sweetbasil/topography-get-from-web
rubyとは関係ないので、他スレへ。

160デフォルトの名無しさん:03/01/26 17:53
名前付パイプでプロセス間通信をしようとしています。

サーバー[1] <- クライアント[多]

クライアント(送信がわ)のデータが512バイト以下であれば、
データは交じり合わない(アトミック)であるということは調べたのですが、
RubyのIOバッファはどのくらいの大きさなのでしょうか?
512バイトの書き込みをして、2回に分けて書き込みがなされることはないと
考えてもよいのでしょうか?

data = 512バイト以下のデータ
open('パイプのパス', 'w') do |f|
 while ...
  f.print data
  f.flush
 end
end

↑このようにして、手元の環境で、複数のプロセスからパイプに書き込んで、
実験したところ、データが混じりあうことは無かったのですが…
161160:03/01/26 18:30
>>160
syswrite()でやればOKそうな気がするので、syswrite()でやります。
>>111
そういえば、以前、index を速くするパッチ投げたんですけど、
$= 見てなかったりいまいちだったんで、その後放置してたのを思い出しました。

あの頃から実装変わってるのかな?まあどうでもいいか。
163デフォルトの名無しさん:03/01/27 21:05
質問です。
-------------------------------
c:/src/hello.rb(↓中身)
def hello()
print("Hello ruby.\n")
end
-------------------------------
c:/src/call.rb(↓中身)
require "hello"
hello()
-------------------------------
c:/bat/hello.bat(↓中身)
ruby c:/temp/call.rb
-------------------------------
上記のような状態で3ファイル有り、
c:/bat>hello.bat(←コマンドプロンプト)
のような状態でバッチファイルを実行するとエラーになります。
そこで次のような形でとりあえず解決しました。
-------------------------------
c:/bat/hello.bat(↓中身)
cd c:
cd temp
ruby call.rb
-------------------------------
もしこれをRubyのみで解決する場合どのようにするのが賢いでしょうか?
どうか教えてください。
よろしくお願いします。
>>163
いつもいつも言われることだが、エラーの中身を書け、と。
あと、ruby -vの結果も。ついでにWindows(だよな?)のバージョンも。

ついでなので、環境変数PATHの中身とrubyがインストールされている
場所も書くとなおよいだろう。
>>163
環境変数 RUBYLIB に hello.rb のあるディレクトリを記述しる
>>163
call.rbの先頭に次の一行追加する。

$:.unshift(File.dirname($0))

これで、call.rbと同じディレクトリにあるファイルを
requireするようになる。
>>163
hello.batの中身を
ruby -IC:/temp C:/temp/call.rb
とするか、
ruby -CC:/temp call.rb
とする。

って、結局、*.rbはC:/srcとC:/tempとどっちにあるんだよ!
Exerb 使って単一ファイルにすれ。
169163:03/01/28 12:59
こんなまともな回答が来るとは思ってなかったので、正直ビビっております。
昨晩の時点でレス無くてあきらめてたんで、なおさらでした。

まず、 >>164-168 皆様回答ありがとうございます。

んで、回答ですが、私の求めていた形は >>166さんのものでした。
私の作った*.rbを他者が使用する場合、
各環境によってbatやPATHを変更するのがどうにも具合が悪かったためです。
たくさん回答していただきありがとうございました。ホント感激です。
2chなめててスマソ。

>>164
まず質問の書き方を知りませんでした。
以後気を付けます。

>>167さん
srcです。tempじゃ無いです。
ごめんなさい、逝ってきます…

>>168さん
Exerbの存在を知りませんでした。
こういう方法もあるのですね。
勉強になります。ありがとうございました。
>>162
> そういえば、以前、index を速くするパッチ投げたんですけど、
どこにあるの?
>>166
$0より__FILE__の方が良いかも。
172デフォルトの名無しさん:03/01/30 00:29
Windows(not cygwin)でrdrt2使うとOpen3.popenでforkが実装されていないよとエラーになるのですが解決策があればおしえてください。
>>171
なんで?
175166:03/01/31 02:11
>>174
call.rbが更に別ディレクトリにある他のスクリプトからrequireされると、
File.dirname($0)では困るからとか?
よいかどうかというより、意味が違う。
$0は最初に与えられたスクリプトファイル名、
__FILE__は現に実行中のファイル名(この場合はcall.rb)。
call.rbを基準にロードしたいなら、>>171のいう通りFile.dirname(__FILE__)。

はっきりいって散々外出。
ありがとうございます。
win32 環境で rttool を利用する手順です。

(1) rttool をインストール
(2) win32_popen をインストール
(3) rd/tree.rb:20 を以下のように書き換える
TMP_DIR = ENV["TEMP"] || ENV["TMP"] || "/tmp"
178172 iなので2分割:03/01/31 23:26
(4) ~/.rd2rc の external_filterを以下のように書き換える

#pipe[0] .close だとブロックしてうまくいかなかった。。。
def external_filter (prog)
require "win32_popen"
pipe = IO.win32_popen3(prog)
pipe[0] .print self
pipe[0] .print "\C-z"
pipe[1] .read
end
(5) rt2 を実行する rt2.bat を作る
ruby %YOUR_RUBY_HOME%/bin/rt2 %*

179デフォルトの名無しさん:03/02/04 17:40
すいません。すごい馬鹿なこと聞きます。

たとえば、a.txtっていうファイルを作って、
そこに I have a pen って内容を書きたかったらどうしたらいいですか?
次の様に書いたら動きませんでした。

new_file = File.new("a.txt")
new_file.print("I have a pen")
new_file.close
>>179
> new_file = File.new("a.txt")
open modeを省略すると"r"(読み込み)と解釈されるんで、当然書けない。
>>180
これで2時間悩んでました。
ありがとうございました。
>>178
> #pipe[0] .close だとブロックしてうまくいかなかった。。。
win32_popen3は三つのIO全部にpidをセットしてるので、どれかをcloseしよう
とすると子プロセスの終了を待ってしまう。

> def external_filter (prog)
> require "win32_popen"
> pipe = IO.win32_popen3(prog)
stderr垂れ流しでもいいんなら、1.8.0ではIO.popen(prog, "r+")でいけるよ
うになってるはず。
183 :03/02/07 06:23
rubi-1.6.7で
makeの時わざとconfigure消してautoconfigしたらreadlineの所で
エラーになったんだけど、これってreadlineが古いから?(1.??使用)
ちなみに、元々入ってるConfigreで、./configre、make、make test
だと問題無い。
>>183
rubiの話は専用スレへ。

autoconfのバージョンとエラーの内容は?
185デフォルトの名無しさん:03/02/08 18:06
mswin32版で拡張ライブラリをmakeするばあいVC++が必須なん?
VC++くらい買えよ
>>185
mingwでコンパイルできるはずだが、rbconfig.rbをいじらんと無理だろうな。
188デフォルトの名無しさん:03/02/08 19:06
javaでunicodeからshiftJisへの変換ってどうやるの〜????
189名無しさん:03/02/08 19:10
できません。rubyを使いましょう。

#!/usr/bin/env ruby
system('nkf -Ws #{ARGV[0]}')
>>188
激しくすれ違い。
java.nio.charsetパッケージのリファレンスを読んで自分で調べろ。
>>189
そりゃrubyでやってるとはいわんだろ。
せめてuconvかiconv
192デフォルトの名無しさん:03/02/08 22:23
>>187 やっぱそうなんだ。
しょうがないのでmingw版のバイナリをもってきて、バイナリエディタでruby-mingw32.dllにリンクしている情報をmswinに書き替えちゃったよ。
>>192
素直にmingw版を使えばいいのにとは思うが、
1.8ではmingwとmswinは拡張ライブラリを共有できるようになってる。
194質問スレではスルーされた:03/02/10 07:15
Rubyプログラミングを大学でやるらしいのですが、こちとら生まれて此の方
プログラミングなんていう高等技術をやったことがありません。
初心者Rubyプログラマーのポータルサイトなど御座いますでしょうか?
196名無しさん:03/02/10 10:28
>>194
教授に聞けよ。授業料払ってんだろ。
つーか授業でRuby使うって、島根大学?
>>195-197
入門って入れればいいのか・・・
何やってんだろう、ずっと初心者とかで検索してた。
すいませんでした。今度から徹底的に検索してから参ります。
199デフォルトの名無しさん:03/02/11 11:44
DelphiのExtractFileExt/Pathのようなパス操作関数ってないですか?
ExtractFileDir: File::dirname
ExtractFileName: File::basename
ExtractFileExt: File::extname
201MoonWolf:03/02/11 12:27
>>200
使ったことないけど、こんなのもある。
http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/rough/lib/pathname.rb
202デフォルトの名無しさん:03/02/12 22:57
hikiのソースって、まだダウンロードできないのかな?
まだっぽい。早く公開してくれないかねぇ。
2/9「変更点は以下の通り。あと、プラグイン周りを見直してページの凍結を作り込んだら細々と公開させてもらいます。 」
もうしばらく待つが吉。
205202:03/02/13 04:50
文法がWardCunninghamっぽい、tDiaryの匂いがする、ってことで
ヒジョーに期待しています。
って、ここに書かないでHikiに書いたほうがいいのかもしれないが、
向こうではガイシュツだからここに書こう。

206デフォルトの名無しさん:03/02/13 07:35
Hiki 良さそうですね。

ひとつだけ気になったのが、画像URLがデフォルトで<img>にされて
しまうこと。コピペしたテキストとかの中身に注意を払わないと、
含まれてた画像URLが意図せず埋め込まれちゃいそう。
207>>Hiki:03/02/15 01:49
あまりあれこれ機能を足さず、シンプルなまま公開してほすい
208デフォルトの名無しさん:03/02/15 15:11
Windows版ってパス名をC:\RUBY\HELLO.RBみたいに指定したり
SJISのファイル名をちゃんと処理できないんですか?
DOSISH 対応は漸進的に進められているので 1.8-cvs を使って。
210デフォルトの名無しさん:03/02/16 17:44
すみません。
つかぬことをお聞きしますが、'r+'で開いたファイルを操作する時に、
いままでそのファイルに記述してあったところの途中で、ファイルを終わらせたい場合には、
どのようにすればよいのでしょうか。
部分的に削除をしたいのです。
File#truncate
212210:03/02/16 18:17
truncateなんてあったのですね。
なんとかできたようです。
ありがとうございました。
>>212
基本的に、UNIX系の標準ライブラリやシステムコールを知ってると類推できる
ことが多い。
214デフォルトの名無しさん:03/02/16 22:07

オブジェクト指向っていっても、rubyのは単に .でつなぐだけでしょ?
>>214
そうだよ。 Perl にはそれすらできないんだってさ。
perlの話でもうしわけないんだけど、

日本語変換モジュールのJcodeは
Jcode->new($str, 'sjis')->euc;
みたいにできるのに
同じ作者のEncodeは
encode('euc', decode('sjis', $str));
みたいな仕様にしたのかな?
->を使ってOOっぽく見せるのはやめて
関数型でやるのがPerl的には美しいの?
>>216
> Jcode->new($str, 'sjis')->euc;
対応するエンコーディング名があらかじめ決まってないといけないからじゃないの。
あ、なんでこうしなかったかってことか。

Encode->decode($str, 'sjis')->encode('euc')
>>218
ですです
関数型の方が語順が英語と似るからかな。
ruby本に書いてありましたよね。
Jcode.pmのOO風変換インターフェイスは失敗だったと思うから、採用しなくて良かったと思う。
>>220
どういうとこが失敗だったと思う?
>>221
個々のメソッドのインターフェイスがバラバラ。
例えば、下の例の前者は問題なくて後者は実行時エラー
print Jcode->new('文字列')->h2z()->sjis();
print Jcode->new('文字列')->sjis()->h2z(); 
文字列化演算子をオーバーロードするのなら、
両方の構文をサポートしてもよかったのではないかと思うのだが。

更に、convert()のエンコーディング指定文字列も、
正式名称"EUC-JP"などを受け付けるようにしていれば、もっと便利だったはずだ。
>>222
なるほど。
しかしそれはOO風にしたための失敗とはいえないのでは?
>>223
いや、まあ、元々不満だったのは「Jcodeのインターフェイス」であって、
「OO風インターフェイス」だから不満だったわけじゃないのだ。

Encode.pmはというと、インターフェイスこそ手続き型だけど、
その実装はOO無しには語れず、ただの関数を多態的に動作させるようになってる。
にもかかわらずあえて公開OOインターフェイスを備えていないのは、
関数の方が楽だから、だと思う。これは想像だが。
Encode->find('EUC-JP')->encode($str); # タイプが面倒
Encode->encode("EUC-JP", $str); # 悪くないが、まだ長い
encode("EUC-JP", "文字列"); # 短い。楽だ。

スマートにコンマ区切りのCSVを処理したいのですが
どうsplitすればいいのでしょうか?
>>225
聞く前にRAAとかGoogleを検索しろよ。

cols = text.split(/,/)で駄目なら
http://raa.ruby-lang.org/list.rhtml?name=csv 使えば?
>>224
なるほどね。

> Encode->find('EUC-JP')->encode($str); # タイプが面倒
Rubyでいうと、iconvがこのスタイルだな

Iconv.new("shift_jis", "euc-jp").iconv(str)

> Encode->encode("EUC-JP", $str); # 悪くないが、まだ長い
これもあるようだが。
Iconv.iconv("shift_jis", "euc-jp", str)
>>227
Iconv はストリームを処理する状態機械だから str を引数に渡すのは派生だな
>>228
派生?
230202:03/02/19 00:31
TidyみたいなライブラリのRuby実装ってご存知の方、いらっしゃいますか?
マークアップがぐちゃぐちゃなHTMLをwell-formedなXHTMLに変換してくれ
るようなものを探しています。

html-parser.rbがそうかな?と思ったんですが、
探しているのとちょっと違うような気がするんです……。


>>230
つい最近ruby-extにその話題が([ruby-ext:02143]から)
Ruby-TidyLib: http://arika.org/ruby/tidylib
htmlrepair に手を入れて使うとか。
>>229
ああ「strを引数に渡すの」じゃなくて「クラスメソッド」だったyo
234202:03/02/19 16:48
>>230
ありがとうございます。ruby-extはsubscribeしてませんでした。
tidy.rbのAgeが4hoursとはこれまたホットですね。ヲチしたいと思います。

235202:03/02/20 00:07
236デフォルトの名無しさん:03/02/20 00:23
amritaはしょうがないとして、strscan前提ってのはやめてもらえないかねえ。
>236
class Foo; p self; end
>>237
1.8なら標準
>>237
shim 入れろ。

ていうか、HTML を自分でパースしようと思ったら、strscan ってめっちゃ便利よ。
現在の1.8の安定度ってどんなもん?
仕様の安定度なら、かなり低い
Ruby の仕様と実装の関係はイデア理論で説明できる。
仕様はイデアである。実装はその影に過ぎない。
従って、イデアを求めて実装は変化するのである。
実装の過程でイデアも変化したりするがな。
>>240
strscan って ML みてるとインストールのトラブルがあったりで印象が悪いんだよね。
それに strscan を使わなくても じゅうぶん速く parse できるよ。
pure ruby の xml parser だってあるし。
>>245
だから1.8かshimを使えと。
247デフォルトの名無しさん:03/02/24 01:45
RubyでJISX0208の記号(EUCで\xA1\x??〜\xA2\x??)にマッチするような正規表現を教えて下さい
EUCで?
/#{"[\xa1\xa1-\xa2\xfe]"}/eo
かな。
>>248
ありがとうございます。
これってそのままPerlでも通用するのでしょうか?
最近のPerlのI18N動向はよく知らないんだが、少なくとも#{}というのはRuby
独自なのでそのままは動かない。
あ、-Keつければ直接書けるよ。
/[ -◯]/
252デフォルトの名無しさん:03/02/25 01:13
10執念あげ。
>>249
jperl なら通用するかもしれない。と後ろ向きなアドバイス。
[ruby-talk:65710]はなかなかお茶目だな。
255デフォルトの名無しさん:03/02/27 17:49
BBSとか作るときに管理者パスワードとかはどうすればいいのかな。
安全で使いやすいのは、
BASIC認証? ruby-shadow? ruby-password?

それともこんな程度のセキュリティでOKなの?
http://www5e.biglobe.ne.jp/~access_r/hp/cgi/rb_light.html
>>255
思いっきりスレ違いやんけ!
ruby-shadow は後ろに立っている人から守る(ブラウザからは利用できない)。
ruby-password は統計的に弱過ぎるパスワードをつける不注意から守る。
BASIC認証は盗聴されない前提で比較的低頻度の総あたり攻撃から守る。

盗聴の危険が高い回線なら、SSLでBASIC認証を使い、
ruby-password で検査するくらいで適当。それでも弱いと思うなら、
BASIC認証を使わず、POSTでより長いパスワードを提供するしかない。
その場合はクッキーなどでセッションを維持することになる。

しかし通常のBBSならSSLでBASIC認証を使えば十分だと思うし、
SSLでなくてもBASIC認証だけでも構わないと思う。
258_:03/02/28 17:31
クラス変数をpublicにしたいのですが、どうしたらできますか?
>>258
他にやり方があるかもしらんが

class Mona
 @@val
 def val=(v)
  @@val = v
 end
 def val
  @@val
 end
end
>>259
クラス変数をインスタンスメソッドで変更するのはキモくないか?

class Mona
 @@val
 def self.val=(v)
  @@val = v
 end
 def self.val
  @@val
 end
end
>>260
確かにキモいと思いつつ書いてた。
262初心者:03/03/01 08:07
文字コードから、文字を得るのと
文字から文字コードを得るのって、どうすればいいですか?
>>262
文字というのがStringオブジェクトだとして
Integer#chr
String#[](index)
を使う

p 64.chr # '@'
p '@'[0] # 64
264初心者:03/03/01 09:21
なるほど、ありがとうございました。
2.8.0preview2が出たというのに、静かだなぁここは。
違う、1.8.0preview2だ。鬱。
>>266
一瞬どういうネタだ? と思ったよ(w
「ここだけ時間が5年進んでいるスレ。」からの誤爆とか。
previewはもういいよ。早く2.0出してくれ。
まだやること山のように残ってんので無理。
271デフォルトの名無しさん:03/03/05 10:40
rubyでCGIを書いているのですが、

printf('<p class="%s">%d<p>', ck, num)
print '<input name="'+name+'"' 〜

上記のような処理を下記のように全部書き直したら、
表示に6秒ほどかかってたのが3秒ほどになって、ちょっと感動しますた。

print '<p class="',ck,'">',num.to_s,'<p>'
print '<input name="',name,'"' 〜

文字列の連結とか時間がかかるんだなぁ。
>>271
前者のprintfはいちいち書式指定文字列をパースしているから。
前者のprint は余計な文字列オブジェクトを生成しているから。
>271
前者だと演算子のたびに新しい文字列オブジェクトを生成するからね。
ま、ふつうは

print %Q(<p class="#{ck}">#{num}<p>)
print %Q(<input name="#{name}"〜)

とか書くわけだが。
Person オブジェクトには、Person#name や Person#addr といったメソッドがあり、
実際には DB への問い合わせを行っているものとします。
DB の host 名や user や password などの設定を /etc/personrc に記述したい場合、
Person クラスへこの設定をくべるには、どのような設計にするのが良いでしょうか?

>>273
"#{num}" は新しい String オブジェクトを生成しないんでしょうか?
それとも生成してしまう?
>>274
> "#{num}" は新しい String オブジェクトを生成しないんでしょうか?
> それとも生成してしまう?

そこだけは新しいStringオブジェクトを生成する。num.to_sと同じ。
今までそんな文字列はどこにも存在しないんだから当然。
>>274
「くべる」って薪かよ。

すべてのPersonオブジェクトは単一のDBを共有するわけ?
最初にコネクションを張るときに読めばいいんじゃないの。

""ってだけでも常に新しいStringオブジェクトを生成するわけだが、
"#{num}"は(1.8では)""<<num.to_sと等価。
/.J が珍しく面白いことをやってる。

インタビュー:Rubyの まつもとゆきひろ に聞け!
http://slashdot.jp/articles/03/03/07/0413248.shtml?topic=86
趣味は聞くまでもないだろう。と思った。
「ケサランパサラン」って、どんな生物?
ttp://www.asahi.com/kansai/030308a.html
280デフォルトの名無しさん:03/03/10 01:54
truncate ってどこで区切って、なんて読むんですか?
普通の英単語なんだが
282名無しさん:03/03/11 23:05
>>280
「とらんかて」という関西弁のアルファベット表記です。
> お気に召さない場合は「インライン・コールバック」でも「ケサラン・パサラン」
> でも,なんでもお好きな名前に自由に読み換えてください.
ってなんだかなあ…
インタビューおもしろかった。
まつもとさんのインタビュー読んで思ったのだけど、Ruby はギャグ、ユーモア
という点で、Perl や Python に完全に負けてると思う。
Larry Wall や Tim Peters みたいにシャレの効いた言い回しのできる人がいない。
これけっこう重要なことだと思う。
うーん。
しかし、日本人のプログラマでユーモアのセンスがある人って見たことない。
>>286
namazuの高林さんてどう?
ユーモアのセンスありすぎだと思うけど、
ちょっと方向性が違うか。
288デフォルトの名無しさん:03/03/17 14:36
高林さんっていうか、ソニーCSL絡みの人はみんな面白いですね。
こういうのをまじめくさって話す時点で
もうシャレが通じないっていうか...。
ML によく投稿してる中田さんの
>--- 僕の前にBugはない。
>--- 僕の後ろにBugはできる。
っての俺好きだなぁ。
初めて見たときニヤリとしたよ。
ユーモアの感想をいうことほど面白くないものはない
>>290
人によっていろいろ解釈があるみたい
「ふえろ! わかめちゃん作戦ですえ但」は今年に入って消えたのな
「え但」って?
ハートマークが化けた状態か?
そういう化け方は見たことないが
>>292
ん、どんな解釈?
>>296
僕の書いたコードにバグはないが、後から続く者がバグを産む。
僕が書く前にはバグはないが、僕が書いた後にはバグを産む。
道程なんだから前者ってことはなかろう
>>296
http://sourceforge.net/mailarchive/message.php?msg_id=1349966
化けるので引用
> 「バグばっかりつくってごめんなさい」
> というのが、いちばん単純な解釈でしょうが、
> 謝ることができるということの裏には、
> 実際にコードを書いて働いていることや、
> 誤りを自ら認める心の広さが表現されているように
> 思えます。あるいは、「Bugはない」というのは
> 「コードそのものがない」ということを意味するとすれば、
> 開拓者魂の表現のようにも見えます。
> いずれにせよ、Bugの理由を、「コードは一般的にBugを
> 含むものだ」と「単に中田さんの技量の問題だ」の
> どちらの立場で解釈するかが、最初の分れ道ですね。
まさに >291 の言うとおりユーモアの解説は無粋だ。
>299 を攻めてるんじゃなくてそのリンク先の人ね。
笑えりゃOK、笑えなければポイでいいと思うんだがなぁ。
301デフォルトの名無しさん:03/03/19 14:55
↓こういう感じで書けば圧縮ファイルができます。
o = open('|gzip -c > a','r+')
o.print 'aaaaaaaaaaaaaaaaaaaaaa'
o.close

それをファイルに書き出さないで、メモリに読み込む方法はありますか?
↓こういうイメージです(このコードは動かない)
o = open('|gzip -c','r+')
o.print 'aaaaaaaaaaaaaaaaaaaaaa'
data = o.read
o.close

リファレンスのIO.popenのサンプルで、catを使ってそういう
ことをやっているので、なにか方法がありそうなのですが。
Warlus のひとの
「stableでなければ生きていけない。unstableでなければ生きてる意味がない」
ってのが好き

                         _人
                      ノ⌒ 丿  うんこ〜♪
                   _/   ::(
                  /     :::::::\ うんこ〜♪
                  (     :::::::;;;;;;;)_  うんこ〜♪
                  \_―― ̄ ̄::::::::::\
              \  ノ ̄     ::::::::::::::::::::::)  /うんこ〜♪
                \(     ::::::::::::::;;;;;;;;;;;;人/
                / ̄――――― ̄ ̄::::::::\
               (    ● \__/::●:::::::::::::)
                \__::::::::::\/;;;;;;;;;;;;;;;;;;;;;;ノ
   うんこ〜♪
304301:03/03/19 18:08
http://www.tcn.zaq.ne.jp/sheepman/diary/200108.htm#23
検索してたら解決方法がわかりました。
(こんなことに一日かかってしまった…)
305デフォルトの名無しさん:03/03/19 21:37
Rubyで作られているらしい
http://www6.big.or.jp/~beyond/bbsnews/
307デフォルトの名無しさん:03/03/21 19:17
おしえてください。
次の変形はどうやるの?
str = "123"
#=> "1,2,3"
>307
p "123".gsub(/(.)(?=.)/, "\\1,")
p "123".split(//).join(",")
309デフォルトの名無しさん:03/03/24 23:45
>307
こんなのはどう?
p "123".scan(/\d/).join(',')
p("1,2,3") if str == "123"
>>310
こんなのにウケてしまうのが、自分で悔しい。
312デフォルトの名無しさん:03/03/25 06:43
>>310-311
アハハ
RubyがANSIとかで標準化されるのはいつですか?
松本がアメリカに帰化するとき
その前に、JISで標準化されます。
RubyがJISとかで標準化されるのはいつですか?
マツモトの偽者、Rubyのルイジ貧が出てこない限りは、
標準化する必要がないです。
俺はそんなものは望まない!
すでに大部分の機能をPythonにパクられているわけだが
>>319
これまでのPythonがダメダメだったんでいいんでないかい
>>319
え?そうなん?
どのへんがパクられたのか、どっかでまとめられてたりするかな?
foo = 7 if !foo
をすっきり書くには
foo ||= 7
が定石だけど,
foo = (foo ? foo.to_i : 7)
はなんかうまく書けないでしょうか?
foo を 3 回も書くのがいやすぎ.

-s オプションお手軽で好きなんだけど…
foo = (foo || 7).to_i
ちょっと話しずれるけど、foo = 0 にもできるようにしたい場合を考えると、
Perl じゃなくてよかったと思えるね。
メソッドチェインで、途中でnilになったらそこでエラーにせずに止める、とい
うようなオペレータがかつて議論にのぼったことがあったような気がするが、
どうなったんだろう。
最近追い掛けてないのでage.
>>325
立ち消え状態だと思うが、こんなのはどうよ?

module Kernel
 def ifnil?
  self
 end
end
class NilClass
 def ifnil?
  yield
 end
end

catch(:nil) {
 hoge.foo.ifnil?{throw :nil}.bar.ifnil?{throw :nil}.zot
}
>>326
こんなのは?

class Object
 BLACKHOLE = Object.new
 def BLACKHOLE.to_s() "()" end
 def BLACKHOLE.method_missing(*x,&y) self end
 def default(v=BLACKHOLE,&b) self or BLACKHOLE end
 def and() default end
end

class NilClass
 def default(v=BLACKHOLE,&b) block_given? ? yield : v end
end

puts ARGV.shift.and.hex
puts ARGV.shift.default("0").hex
>>327
>  def default(v=BLACKHOLE,&b) self or BLACKHOLE end
 def default(v=BLACKHOLE,&b) self or v end
もっともだ
330デフォルトの名無しさん:03/03/28 22:39
Ruby界で標準のXMLライブラリってどれですか?

用途は、XML文章を操作するというのかなんというかDOMやらSAX
が使いたいんです(まだどっちがどうなのかよくわかっていませんが)。
配布する環境はUNIXなんですが、開発はWindowsなんで、
どちらでも使えるとうれしいです。
REXML
余裕があるなら xmlscan をいじってみると面白いと思う。
標準って何?
オープンソースって同一機能の複数実装が魅力なわけ。
標準なんてあるわけない。
もしも標準なんてあってそこを精密爆撃で狙われたら
標準が消滅しちゃうでしょ。
そのリスクを回避するために一見無駄な冗長性を持たせてるわけ。
333デフォルトの名無しさん:03/03/28 23:01
すごい簡単なことかもしれないけど、質問させてください。

Ruby であるテキストファイル中の特定の語句を置換したいとします。
例: いぬ いぬ いぬ ねこ -> いぬ いぬ いぬ いぬ (ねこをいぬに置換)
(要するに sed みたいなことがやりたい)

単純に File.open して each_line で置換したい語句があるかどうか調べていき、
マッチしない場合にはそのままの行を、マッチした場合には置換した行を一時ファイルに書き出し、
最終的に一時ファイルを元のファイルに rename する、ということを考えました。

この例だと一時ファイルを使ってしまいますが、一時ファイルを使わずに each_line で
見ていきながら、マッチする部分を直接書き換える、ということってできますか?

もしあれば、コード例を示していただけると助かります。
>>333
よくわからんが、ruby の -i オプションを使えば解決されるような話?
なんか正規表現の変更の話が出ているみたいだけど、

[-0-9]

のような表現って多用しませんか?
いまさら

[\-0-9]

と書けって言われても、って感じ。
>>333
デカいファイルを突っ込むとメモリ馬鹿食いするけどこんなの。

TEXTFILE = 'inuneko.txt'

if (s = IO.readlines(TEXTFILE).map!{|line| gsub(/ねこ/, 'いぬ')})
 open(TEXTFILE, 'w').print(s)
end
337336:03/03/28 23:21
あ。だめだ。これだとどんな場合でも書いてしまう。

if (s = IO.readlines(TEXTFILE).map!{|line| gsub(/ねこ/, 'いぬ')}) # ×
if (s = IO.read(TEXTFILE).gsub!(/ねこ/m, 'いぬ')) # ○

>>336
これならデカいファイルでも安心。
どんな場合でも書いちゃうし非 unix 環境でちゃんと動くかは知らないけど。

File.open(file) { |src|
 File.unlink(file)
 File.open(file, 'w') { |dest|
  src.each_line { |line|
   dest << line.gsub(/ねこ/, 'いぬ') }}}
ruby -i -pe 'gsub(/ねこ/, "いぬ")' *.txt
じゃだめ?
>>335
正直いやん
341デフォルトの名無しさん:03/03/29 00:06
rubyさわっててつまってます。

text = <<-AHYA
fooTEXTboo
AHYA

hoge = '\1000yen'
p text.sub(/TEXT/, hoge)

このスクリプトで出力が
foo\1000yenboo\n
となるのを期待してるのですが\1が消えてしまいます。
消えないようにするにはどうしたらいいのでしょうか?
\を¥にする
>>335
perlとかでも多用されているもんな。
344341:03/03/29 00:13
>>342
そんな一休さんみたいな答えじゃなくて他の案をお願いします・゚・(ノД`)
hoge = "('1000yen'.to_i / 10 - 10 + 10 / 10).chr.succ" + "1000yen"
>>341

text.sub(/TEXT/) {hoge}
347341:03/03/29 00:49
>>346
ありがとうm(__)m

>>345
わからないです…_| ̄|○
>>341
hoge = '\\\\1000yen'
>>347
誰かがまとめてたの見たことあるよ
本家マニュアルサイトの「落し穴」あたりをあたってみては
>>348
それは直感的にわかりにくい。

>>346 のほうが新婦瑠でわかりやすいから、暗号的なプログラムを書きたい
のでないかぎり、ブロックを使ったほうが良いと思う。
>>335
POSIX regex で許されてる表現はそのまま通って欲しいな。
352not333な初心者:03/03/29 13:02
>>338
の解説キボウ。お願いします。
なぜ、これなら、でかいファイルでもメモリを浪費しないんでしょうか?
2行目のunlinkが関係してるようなんですが。。
openしたブロックの中でunlinkって??
353338:03/03/29 13:37
>>352
1. each_line なので全行をいっぺんにメモリに格納しません。

2. ファイルを open した状態で unlink してもファイルの中身は消えません。
(open したプロセスが一個も無くなってから消えます)
unlink 後に同名のファイルを open しても旧ファイルの中身に触れることはできません。
354not333な初心者:03/03/29 13:52
>>353
じゃあ、メモリを浪費しないのは、each_lineを使ってるからで、
処理前と処理後を、同名のファイル名にしたい今回のような場合は、
一行ごと、each_lineするためには、unlinkして、
旧ファイルの内容と、新ファイルの内容を別々に扱ってるってことですね。

ありがとうございました。
>>354
だから結局一時ファイルを使っているのと変わらないのよ。
356333:03/03/29 19:36
どうも、ファイル書き換えについて質問させていただいた 333 です。

338 さん、プログラムリストと解説ありがとうございました。
>>338
少なくともDOSISH(mswin32, mingw32, bccwin32, djgpp, たぶんhuman68kも)
ではopenしているファイルを削除することはできない。
それ以外は分からん。
358デフォルトの名無しさん:03/03/31 14:22
RUBYってSmalltalkのぱくりだったんですね
んなこと言ったら、Rubyにオリジナルなとこなんて無い
色んな言語の良いとこ取りですよ?
361デフォルトの名無しさん:03/03/31 21:40
mswin版のruby使ってるんですけど、
倍精度の浮動小数点数使うにはどうしたらいいの?
Float で間に合わないときは BigFloat
今ならBigdecimal。
>オリジナル
本当にオリジナルな言語なんて数えるほどしかないだろうし、
これからさらに減っていくのでは。
>>359
Rubyオリジナルなのは、モジュールを使ったMix-inあたりかなあ。
イテレータの柔軟な扱いは他の言語にはない・・・こともないか。
Lispじゃ常套手段だしな。

変数のスコープをprefixで区別するのはRubyオリジナルかな?
>>361
というか倍精度しか提供されてないのだが
368デフォルトの名無しさん:03/04/01 13:50
名前空間ってこんな感じでいいの?

module ORE_NAME_SPACE
 class Main
 end
end
>368いい
るびきち氏ついにHP閉鎖?
http://www.ruby-lang.org/~rubikitch/
http://rubyist.net/~rubikitch/
我、詳細求む
>>370
「ついに」って、いままでなんかあったの?
372370:03/04/01 16:15
>>371
るびきち氏
http://enya-mp3.tripod.com
Ruby撲滅スレ part 2
http://pc.2ch.net/tech/kako/1009/10091/1009193707.html

撲滅スレ内をキーワード"るびきち"で辿っていきますと...
373デフォルトの名無しさん:03/04/01 16:21
★賞金が当たる★彼女が出来る★未成年クリック禁止★
http://www.pink-angel.jp/betu/linkvp2/linkvp.html
>>370
http://www.rubyist.net/~rubikitch/

つーか単純にURLが変わっただけ。
>>370
糠喜びさせやがって。まぁあの粘着君が閉めるわきゃねーわな。
Rubyなんて言語仕様がころころ変わるもんは使えないと上司に言われてしまいました。
(´・ω・`)ショボーン
バージョン番号振ってある様な言語は信用できんな。
正直バージョン番号の無い言語って何だろう。
C/C++ はライブラリ無いと何も出来ないし。
C も C++ も Perl も言語仕様が結構変わっているわけだが。
結局メジャーかどうかだな。
確かにC++なんて初期のころと比べたら仕様は変わりまくってる。
rubyなんかの比じゃない。
Windows も API が突然使えなくなったりとかしてるけど、
だから使うの止めたとか聞かないし。
382デフォルトの名無しさん:03/04/02 21:52
すみません。数字をバイナリでファイルに出力、そして読み込むことを目的で以下のメソッドを書いたのですが、
もっと簡単な方法はないのでしょうか??またはこう書いた方が速いとか。
それとネーミングセンスがないので、良い名前がありましたら教えてください (^^;

class Integer
  def fixedByte(byte)
    fixedByte_(byte, self.abs, 1, (self < 0 ? 0b10000000 : 0b00000000))
  end
private
  def fixedByte_(byte, target, count, flg)
    nexttarget = target / 256
    if count != 1
      str = (target % 256).chr
    else
      str = ((target % 256) | flg).chr
    end
    if byte > count
      str = fixedByteS_(byte, nexttarget, count + 1, flg) << str
    end
    str
  end
end
383デフォルトの名無しさん:03/04/02 21:52
class String
  def b_to_i
    ssize = self.size - 1
    i = 0
    for x in 0..ssize
        y = 1
        for z in 1..(ssize - x)
          y *= 256
        end
        if x != ssize
          i += self[x] * y
        else
          flg = ((self[x] & 0b10000000) > 0 ? -1 : 1)
          i += (self[x] & 0b01111111) * y
          i *= flg
        end
    end
    i
  end
end
pack unpack じゃだめなの?
お仕事の場合はゴルァって電話をかける先があるかどうかが問題じゃないかね
end読みにくいなあ。LISPみたい
今日は釣りが多い気がする。
lispのほうが256倍読みやすいYO
(・∀・)イイヨイイヨ-
>>382
Marshal.dump
>>382
fixedByteS_ってのがないがfixedByte_のtypoか?
任意のバイト数のビッグエンディアンで書き出そうという意図に見えるが、
最下位に符号をつけるのはまずかろう。
392デフォルトの名無しさん:03/04/03 17:15
393382:03/04/03 20:12
こんばんは〜。
ビッグエンディアン‥そうですねそのようです。
その用語はじめて触れました (^^;
はじめ、符号なしを書いて、上で書いていたメソッド名にして、
そのあと、符号つきを書いてその名前の後ろに'S'を付けてました。
バグありましたね。符号つきを書くとき、あまり考えず、テストをしないでいたようです (^^;
ここにカキコする際に、符号つきを'S'を取り払った状態でカキコしたつもりでそうなりました。

pack unpackは〜機能を限定すればスッキリ書けるようですね。同等の機能を持たせるには複雑になりそうな予感‥
Marshalは〜、そもそも使いたくありません。すみません。

取り敢えず、方法としては、あまり間違ってないんですね??
ところで、メソッド名とかいい名前はありませんかね‥
>>393
> 取り敢えず、方法としては、あまり間違ってないんですね??
方向としては間違ってないが、再帰を使う必要はないだろう。

> ところで、メソッド名とかいい名前はありませんかね‥
うーん、いい名前があればなぁ。前からこういうのは提案しようとは思ってる
んだけど。

# ワンライナー版
class Integer
def to_bin(width = self.size)
n = self
(0...width).inject([]) {|a,i| a << (n & 0xff); n >>=8; a}.reverse.pack("cC*")
end
def self.from_bin(s)
s.unpack("cC*").inject(0){|i,j| (i<<8)|j}
end
end
>>392
まだ、ruby2perlないですか?
396393:03/04/03 21:36
394さんありがとうございます!
わー短くてカッコイイなァ〜 (笑
そもそも私が用いた方法では、マイナスの表現方法がダサイしね (苦笑
はじめinjectでひっかかりましたが、それを使える方法で置き換えたらばっちりでした!
397395:03/04/03 21:40
ちがた。ほすぃのは、perl2ruby
399393:03/04/03 21:44
うっ、ばっちりと思っていましたら、
文字列から数字に変える変換で、ちょっと複雑になりそうな感じです‥
400395:03/04/03 21:51
>>398
ぐぐってきたけど、ない。
みんなhttp://pluto.im.uec.ac.jp/~sekita-n/jdocs/perl2ruby.htmlへの
リンク。これ見てrubyべんきょしますだ。a2pなんかもだめだったしさ、
どうせさんこにならないだろとはおもてますたがね。
現実的には、Perl 処理系を Ruby から使うか、
Ruby で Perl をエミュレートするライブラリを使うかくらいなので、
速度が糞遅くなることを考えれば、手で移植した方がまし。
perl2ruby程度なら作れそうだけど、
問題はライブラリなんじゃないかと。
おれは興味ないが。
>>393
仕様がよく分からないのだけど、これであってる?

class Integer
  def dump(w) f = f(self,w); (1..w).map{|i|(f>>(8*(w-i)))&255}.pack("C*") end
  private; def f(x,w) n = 2**(8*w); (x+n)%n; end
end

class String
  def undump(w) g(unpack("C*").inject(0){|i,j| (i<<8)|j},w) end
  private; def g(b,w) n = 2**(8*w); (b+n/2)%n-n/2; end
end

20.times do
  w = rand(10)+1
  x = (-1)**rand(2)*rand(256**(w-1))
  d = x.dump(w)
  u = d.undump(w)
  p [x == u, d.size == w, w, x, d.unpack("H*")[0].scan(/../).join(" ")]
end
404393:03/04/05 00:31
すみません。
私のinjectの分解方法が悪かったです。
injectをArrayに実装して、そのままで動かしたら、
394さんのもので、符号付きでしっかり動きました。
ありがとうございました。

符号付きでしたら、文字(?)から数字に変えるときはunpackを使ったほうが速そうですが、
そうでない場合はもunpackを使わないほうが速かったりするのでしょうか。
packは使わないほうが速そうです。
あまりまともには速度のテストしてませんけど (^^;
>>404
そりゃコードによるがたいていは組み込みメソッドが早い。
str = 'efgh'
str2 = 'abcd'
str = str + str2

より

str = 'efgh'
str2 = 'abcd'
str << str2

のほうが遅いのですが、どうしてでしょうか??

ruby 1.6.7 (2002-03-01) [i586-mswin32]
です。
>>406
どうやって計ったかを書くべし。これで計ったらどうよ?

N=1000000
t0=Time::times; N.times{str='efgh';str2='abcd';str=str+str2}; t1=Time::times
u,s=t1.utime-t0.utime,t1.stime-t0.stime
printf("%-2s user %7.4f, system %7.4f, total %7.4f\n", "+",  u,s,u+s)
t0=Time::times; N.times{str='efgh';str2='abcd';str<<str2};    t1=Time::times
u,s=t1.utime-t0.utime,t1.stime-t0.stime
printf("%-2s user %7.4f, system %7.4f, total %7.4f\n", "<<", u,s,u+s)
406ではないがやってみた。

[分かったこと]
・ オレの環境では << の方が少々早い。
・ その差は1ケタパーセント。これが大きいのか小さいのかよーわからん。
・ 1.8 の方がちょい遅い。そんなもん?
・ 1.8 では Time::times が obsolete。

% ruby -v ~/hoge.rb
ruby 1.6.8 (2002-12-24) [i686-cygwin]
+ user 3.6150, system 0.0000, total 3.6150
<< user 3.3850, system 0.0000, total 3.3850

% ruby-18 -v ~/hoge.rb
ruby 1.8.0 (2003-03-03) [i386-cygwin]
./hoge.rb:2: warning: obsolete method Time::times; use Process::times
./hoge.rb:2: warning: obsolete method Time::times; use Process::times
+ user 3.7350, system 0.0100, total 3.7450
./hoge.rb:5: warning: obsolete method Time::times; use Process::times
./hoge.rb:5: warning: obsolete method Time::times; use Process::times
<< user 3.4750, system 0.0000, total 3.4750
>>409
> ・ 1.8 では Time::times が obsolete。
ちょっとワロタ

同じく406ではないがやってみた。

ruby 1.6.8 (2003-03-11) [i386-netbsdelf1.6]
+ user 3.4000, system 0.0200, total 3.4200
<< user 3.2600, system 0.0100, total 3.2700

ruby 1.8.0 (2003-04-04) [i386-netbsdelf1.6]
+ user 3.6600, system 0.0000, total 3.6600
<< user 3.6200, system 0.0100, total 3.6300

全然変わらねぇ…
a)
for i in 0..10000000
1+1
end



b)
for i in 0..10000000
2
end

ではb)の方が早い。
a)10.21s user 0.03s system 100% cpu 10.208 total
b)5.85s user 0.00s system 100% cpu 5.802 total

rubyは毎回のループごとに1+1をいちいち計算してるわけか…
>>411
> rubyは毎回のループごとに1+1をいちいち計算してるわけか…

その手の最適化って一切しないのけ?
>>412
Fixnum#+が再定義されないとも限らないので、「最適化」しちゃうわけにはいかない。
この議論はdevでもtalkでも繰り返し出てるんで、検索してみるのがよろしいかと。
>>409 >>410
str='efgh';str2='abcd' を N.times の外に出したら変わるのかも
PerlのInline::Ruby使ってる人いる?
これでレンタル鯖にRubyインスコされてなくてもCGI書けるね。
http://search.cpan.org/author/NEILW/Inline-Ruby-0.02/lib/Inline/Ruby.pod
うーんしかしこういうのはいかがなものか

#define BEGIN {
とかいうのとあんまり変わらないような気もする(そんなこともないかな)
つーか Ruby が入って無いと使えないんじゃないのか?
正規表現の互換性を無くす話だけど、ruby-talk側には常識的な人が
多いようで、少し安心した。
頭が逝かれてるのは作者と一部の信者だけだろ
>>408-410
同じく406ではないがやってみた。
$ ruby -v ./time.rb
ruby 1.6.4 (2001-06-04) [i586-linux]
+ user 9.3900, system 0.0500, total 9.4400
<< user 10.1600, system 0.0400, total 10.2000

何故だ......_| ̄|○
>>421
<< の測定前にGCしたら変わったりして

N=1000000
t0=Time::times; N.times{str='efgh';str2='abcd';str=str+str2}; t1=Time::times
u,s=t1.utime-t0.utime,t1.stime-t0.stime
printf("%-2s user %7.4f, system %7.4f, total %7.4f\n", "+", u,s,u+s)
GC.start
t0=Time::times; N.times{str='efgh';str2='abcd';str<<str2}; t1=Time::times
u,s=t1.utime-t0.utime,t1.stime-t0.stime
printf("%-2s user %7.4f, system %7.4f, total %7.4f\n", "<<", u,s,u+s)
423421:03/04/08 06:27
406ではな(ry

>>422
変わらなかったっす。
くっだらねーイージーミスであることを恐れてソースを>>422からコピペして動かしてみましたが結果変わらず。
+ user 9.0300, system 0.0800, total 9.1100
<< user 9.7100, system 0.0800, total 9.7900

ちなみに
$ rpm -qi ruby
Name : ruby Relocations: (not relocateable)
Distribution: Kondara MNU/Linux 2.0(Mary) Vendor: (none)
Version : 1.6.4 Option: (none)
Release : 2k Build Date: 2001年06月07日 13時12分4

時代に取り残された環境です(〃▽〃)♪
424デフォルトの名無しさん:03/04/08 06:47
http://www.k-514.com/
(σ・∀・)σゲッツ!!
>423
1.6.4ってえらく古いな
kondaraの動向は知らんがmomongaに乗り換えたら新しいrpmが使えるのかな
426 ◆hMJAPH9PWA :03/04/08 09:55
一見<<演算子のほうが速いように思えるが…どういう実装なんだろう。
<<の実装と+の実装が同じなのかな。
427デフォルトの名無しさん:03/04/08 19:01
jpegのデータを読み込んだStringから
GD::Image.newFromJpeg(file)でimage instanceを作りたいのですが
ファイルを作らずにStringから直接image instanceを作れないでしょうか?
ローカル変数のアクセスが微妙に影響してるような。

N=1000000
t0=Time::times; N.times{'efgh'+'abcd'}; t1=Time::times
u,s=t1.utime-t0.utime,t1.stime-t0.stime
printf("%-2s user %7.4f, system %7.4f, total %7.4f\n", "+", u,s,u+s)
GC.start
t0=Time::times; N.times{'efgh'<<'abcd'}; t1=Time::times
u,s=t1.utime-t0.utime,t1.stime-t0.stime
printf("%-2s user %7.4f, system %7.4f, total %7.4f\n", "<<", u,s,u+s)

$ ruby-1.6 -v /tmp/s.rb
ruby 1.6.8 (2003-03-26) [i686-linux]
+ user 4.7000, system 0.0300, total 4.7300
<< user 4.6700, system 0.0300, total 4.7000
>>427
gdImageCreateFrom*Ctx()はサポートしてないみたいだな。
作者にリクエスト汁。
430デフォルトの名無しさん:03/04/09 16:09
1.8はいつ出るの?
作者の気が向いたら。
>>431
Preview releaseが出てるのに気が向いたらも糞もあるか
子供の日とかじゃないの?
もう一回くらいはpreview必要だろ。五月でもどうかなぁ。
作者はイラクに人間の盾に行ったので、戻ってきません。
436初心者:03/04/10 00:51
class Insertion_sort
def mini_sort(index,array)
i = index
unsorted_array = array
judge = true
while judge
if unsorted_array[i - 1] > unsorted_array[i] || i != 1
tmp = unsorted_array[i - 1]
unsorted_array[i - 1] = unsorted_array[i]
unsorted_array[i] = tmp
i--
else
judge = false
end
end
end
def Insertionsort.sort(unsorted_array)
i = 1
while i < (unsorted_array.size)
mini_sort(i,unsorted_array)
i++
end
sorted_array = unsorted_array
return sorted_array
end
end

test_array = [2,4,45,6,3,677,32,64,453,1,3,56,7,0]
p Insertionsort::sort(test_array)
437初心者436:03/04/10 00:54
配列とし渡した、数字の並びを挿入ソートしたいのですが
上のように書いたら次のようなメッセージで動きません。
test3.rb:12: parse error
test3.rb:22: parse error
test3.rb:29: parse error
p Insertionsort::sort(test_array)
^
Ruby始めたばっかりで、どこがおかしいか検討がつきません。
endの閉じ忘れとかは注意したはずなんですが。。
なにかおかしなところ指摘してください。
動かない理由以外でも、書き方のへんなところとか教えて下さい。
i++やi--はないのでi+=1やi-=1とかいてください
439初心者436:03/04/10 01:16
>>438
そこを直すと、違うエラーメッセージがでてきて進みそうです。
よくみたらクラス名もおかしかった。。

もうちょっと自分でやってみます
アドバイスありがとうございました

440できた436:03/04/10 06:17
class Insertion_sort
def self.mini_sort(index,array)
i = index
unsorted_array = array
judge = true
while judge
if unsorted_array[i-1] > unsorted_array[i] && i != 0 then
tmp = unsorted_array[i - 1]
unsorted_array[i - 1] = unsorted_array[i]
unsorted_array[i] = tmp
i -= 1
else
judge = false
end
end
return unsorted_array
end

def self.sort(unsorted_array)
i = 1
while i < unsorted_array.size do
unsorted_array = mini_sort(i,unsorted_array)
i += 1
end
sorted_array = unsorted_array
return sorted_array
end
end

test_array = [2,4,45,6,3,677,32,64,453,1,3,56,7,0]
p Insertion_sort::sort(test_array)
>>440
これだと破壊的だがそれで良い?

例えば
test_array = [2,4,45,6,3,677,32,64,453,1,3,56,7,0]
p test_array.sort, test_array # Array#sort は test_array を破壊しない
p Insertion_sort::sort(test_array), test_array # Insertion_sort::sort は破壊的

結果
[0, 1, 2, 3, 3, 4, 6, 7, 32, 45, 56, 64, 453, 677]
[2, 4, 45, 6, 3, 677, 32, 64, 453, 1, 3, 56, 7, 0]
[0, 1, 2, 3, 3, 4, 6, 7, 32, 45, 56, 64, 453, 677]
[0, 1, 2, 3, 3, 4, 6, 7, 32, 45, 56, 64, 453, 677]
>>440
breakというものを教えて上げたいような上げたくないような。
443436:03/04/10 18:58
>>441
もとのsortメソッドの名前をsort!に改めて
新しく次のようにsortメソッドを作りました。
普段、あまり破壊的、非破壊的ということを意識してませんでした。
単純にcloneメソッドを使ってつくりました。
def self.sort(unsorted_array)
i = 1
cloned_unsorted_array = unsorted_array.clone
while i < cloned_unsorted_array.size do
cloned_unsorted_array = mini_sort(i,cloned_unsorted_array)
i += 1
end
sorted_array = cloned_unsorted_array
return sorted_array
end
444436:03/04/10 18:59
>>442
breakを使うとしたら、mini_sortのwhile文中でしょうか?
loopとbreakを使うとすっきりしました。
def self.mini_sort(index,array)
i = index
unsorted_array = array
loop{
if unsorted_array[i-1] > unsorted_array[i] && i != 0 then
tmp = unsorted_array[i - 1]
unsorted_array[i - 1] = unsorted_array[i]
unsorted_array[i] = tmp
i -= 1
else
break
end
}
return unsorted_array
end
なんで>>443でwhile使っときながら>>444ではloop&breakになっちゃうんだよ。
446 :03/04/10 19:01
私だったこう書く

module InsertionSort
  module_function

  def insertion_sort!(array)
    modified = nil
    for n in 0..array.size-1
      n.downto(1) do |i|
        break unless array[i-1] > array[i]
        array[i-1], array[i], modified = array[i], array[i-1], true
      end
    end
    modified and array
  end

  def insertion_sort(array)
    insertion_sort!(copy = array.dup) or copy
  end
end
しまった、ら抜き言葉を発明してしまった
漏れだったこう書く(w

module Enumerable
def insertion_sort
array = []
each do |a|
if array.each_with_index {|b, i|
if b > a
array[i, 0] = [a]
break
end
}
array << a
end
end
array
end
end
>>448
かちゅで読むとインデントされてないから無茶苦茶読みにくい
451デフォルトの名無しさん:03/04/10 23:42
RubyでCGIを作ってIISで実行するとrubyプロセスがIISサービスを
殺してしまい、ワトソンくんが出現します。(スタックオーバーフロー)
rubyは1.6.7のmswinです。
あと意味はないですが、CGIの先頭行に#!を記述しています。
もし何か知っている方いられましたら教えてください。
>451
RubyでCGIがうんぬんというより、そもそもスクリプトがスタック食いまくりとか
だったりしませんか?
>>451
Apacheに汁!
>>449
そりゃ悪かった。かちゅーしゃって行頭の空白消しちゃうのか。

module Enumerable
 def insertion_sort
  array = []
  each do |a|
   if array.each_with_index {|b, i|
      if b > a
       array[i, 0] = [a]
       break
      end
     }
    array << a
   end
  end
  array
 end
end
>>452
もしそうならWindowsはスタックサイズの上限を指定できないの?
>>455
できまっせ。
標準で1メガはあるはずだけど。
でもスタックオーバーフローを起こす様なプログラムは
アルゴリズム修正した方がいいんじゃねえの?
それはそうだがサーバプロセスが死ぬような設定もよろしくない
サーバプロセスを殺せるってことはmod_rubyなのか?
IISでmod_rubyって使えるんだっけ?
451です。
ただのRubyプロセスでIISがシニマス。
プロセス空間を別にしてもシニマス。
CGIスクリプトは最後まで完了していて、その後もRubyがガリガリしていて
まもなくIISがシニマス。
自分のちびマシンのAN HTTPDでは問題なく動作します。
Apache+Linuxでも問題なく動作します。
仕事の都合上IISしか使えません。
ということでマイっています。
>>459
スタックオーバーフローって出るのはrubyに対して、それともIIS?
サーバを殺してしまうということだと、吐いてるデータに問題があるような気
がするが、nphモードにしてみるとどうなる?

>>460
451です。
IISに対してオーバーフローが発生します。
そのときRubyは終了しています。
一時的に標準出力に出さないようにしてテストしてみます。
勉強不足ですみませんが、nphモードって何でしょうか?
No Parse Header mode の略。CGIスクリプトの吐くヘッダを鯖が解釈しないモード。
ttp://CGI-Spec.Golux.Com/draft-coar-cgi-v11-03-clean.html#7.0
IISではCGIスクリプトを nph- で始まるファイル名にすることでNPHモードになる。
NPHスクリプトは最初に "HTTP/1.0 201 Created\r\n" を出力しなければならない。
またヘッダの改行コードは \r\n にする。
>>462
451です。
詳細にありがとうございます。月曜日に試してみます。
HTTPヘッダでの方法でやってみます。
pai...
>>462
やってみましたが、結果は同じでした。
RubyプロセスがIISを殺せるなんてやっぱりおかしいので、IISのバグあたりが
妥当ではないかと思っています。
>>465
AN HTTPDでは動くってことは、その可能性が高いと思われ。
rubyを使わずに、固定のデータを送るようなCGIにしても同じかな?
添付ライブラリのURIクラスがあんまり遅いんでワラタ
使うのやめたら、10秒以上掛かってた処理が1秒を切ったよ。

これに限らず、Rubyの添付ライブラリは玉石混淆過ぎ
つか、地雷原(w
どういう使いかたしてたんだ?
漏れも実例が見てみたい
>>467の玉と石の分類を見てみたい。
煽りではなく、参考にさせてもらいたいので。
URI使う所の多くで、URIのインスタンスを使ってたの。
プロファイラに掛けたら、URI.parseも遅かったが、
URI#+は失禁するぐらい遅かった。

URIライブラリは、UriValidatorとUriUtilに分けたらどうだ?

CGIライブラリもなぁ、なんか使いにくいよ。
Ruby唯一の処理系に付属するオフィシャルな
おまけライブラリにしては、実装者のアクが強すぎ。
なんつーか、ツブシの効かない感じ。
>>471
プロファイラの結果見たい。遅いのはどのへん?
# URI::Generic#mergeあたりかな。
473デフォルトの名無しさん:03/04/16 01:15
XMLを出力したいのですが、適当なライブラリって何になるのでしょうか?
xml-parserでできますっけ。
parserってんだから入力じゃないの。使ったことないので分からんけど。
http://raa.ruby-lang.org/cat.rhtml?category_major=Library;category_minor=XML
libxmlとかかねぇ。
そも「るるる」とは何ぞや?
単純な質問ですが、しばらくわからないままなので教えてください。

X ターミナルの表示可能なカラム数を Ruby から得るにはどうしたらいいですか?
やりたいことは、Debian や RedHat の apt-get を実行したときに、画面右端に出る
[38%] などのパーセント表示を右端ぴったりに出したい、ということなのですが。
477デフォルトの名無しさん:03/04/16 22:50
age
>>476
安直でよければ
columns = (columns.to_i if columns = ENV["COLUMNS"])

ウィンドウリサイズに追従したければcursesでも使うべきだろう。
$ ruby -rcurses -e 'Curses.init_screen;l,c = Curses.lines,Curses.cols; Curses.close_screen;puts "#{c}x#{l}"'
100x50
479476:03/04/17 06:05
>>478
ありがとうございました!その方法でやってみます。
480山崎渉:03/04/17 15:16
(^^)
481デフォルトの名無しさん:03/04/17 23:35
>>473
print文でいいんじゃねえの?
>>465
CGIでRubyがIISを落とす件です。
なんとなくわかりました。
httpdはIIS4です。フォームからCGIにデータを送信して、CGIの中で
Locationヘッダを使って自分のCGIに戻すことをしています。
掲示板なんかでの再読み込み防止策としてやったのですが、
これがなぜか無限ループに陥ってしまうのです。
リクエスト内容を見るとLocationにはクエリを渡していないのに
その前のフォームのデータが流れてきています。
そしてまたLocation。
ちなみにただLocationでループさせても適度な回数でたたききられます。
>>482
RFC2616 の
10.3 Redirection 3xx
14.30 Location
をよく読んだら何か分かるかも。
'a' =~ /(a*)*/
のマッチのあと、$1 が 'a' ではなく '' になるのはなぜでしょうか?
"a" に (a*) が2回マッチするからじゃないかのう。
>>482
つまりスレ違いだったわけでつね
487 ◆hMJAPH9PWA :03/04/19 23:52
>>484
空文字列にマッチするから。
488山崎渉:03/04/20 03:46
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
>>487
それじゃあ説明になってないんじゃ?
普通に考えると、a* が貪欲に 'a' にマッチすると思うんだけど。

/((a*)*)/.match('a').to_a # => ["a", "a", ""]

↑これは、ちょっと理解し難いです。
(a*) が空文字にマッチしてるのに、
どうしてその外側の ((a*)*) が 'a' にマッチし得るの?
>>489
だから内側のカッコは2回マッチしてるんだってば。
最終的な $~ は最後のマッチが有効になる。

これなら分かる?
$ ruby -e 'p /((ba*)*)/.match("bab").to_a'
["bab", "bab", "b"]
$~ が最後にマッチしたデータになるというのは分かります。
でも、なぜ(a*)が2回マッチするのかが分かりません。
1回目のマッチで文字列全部を取ってしまってるので、それで終了にはならないのですか?
>>491
.{0,0} は空文字列に最低一回マッチする。
493489 (not (484 or 491)):03/04/20 16:53
>>490
あぁ、なるほど。理解できました。

(a*) は、1回目のマッチで 'a' を食べて、
2回目のマッチで '' を食べたところで繰り返しが終了し、
その時点のマッチの状態ってことで $1 = '' がセットされたってわけですね。
>>493
まあこういうのはマニュアルなんかにはあまり詳しく書かれてないから
Friedl の Mastering regular expressions でも買って読むのが吉
495491:03/04/20 17:50
えっと、.* が空文字にヒットするのは分かるので、
2回目のマッチが行われれば $1 に '' が入るのは分かるのですが、
1回目のマッチですべての文字列を食べ終わっているのに
2回目のマッチを行おうとするというのがどうも理解できません。

文字列の最後に仮想的な空文字を想定して、
1回目のマッチ後ではそれがまだ残っているというふうに考えるのでしょうか。
>>495
まあそうなんだが「仮想的な空文字を想定して」というのはよく分からん。
まず空文字ではなくて空文字列というべきだろう。
そして仮想的に想定しているのでなく実際にある。
Time#to_s をそのまま Time.parse しても元に戻らないってのは不便じゃないですか?

irb(main):008:0> t = File.stat('foo').mtime.to_s
=> "Fri Jul 26 23:01:14 GMT+9:00 2002"
irb(main):009:0> Time.parse t
=> Sat Jul 26 23:01:14 UTC 2003
Time#to_s のフォーマットは好きに変えられるんだからいいじゃん?
Time#to_s って %Z とかあるからOS依存なのでは
>>497
そういうTZってありだっけ?

begin-base64 644 tz.diff.gz
H4sIAAAAAAACA71Ry2rbQBRde77iLAKRMh7r4dgmA0IJKZQssknclWWKLI3C
gCyZGdmkxvTbM3rFSeqmi0LuQvcx95xzxbkrUvHMkcuVk8aVcLJSreNqpFYk
+P8gD7ePyGQuOJxkpx21Xf1ytEra4k/N4Y4oUSkpdrJ4gjJJy7KAN5qSVGYZ
2BbMB9uAKTPD8VbG2IlfGPhXuI8VfNcdw53y8RWfuGCuiUHNSSk9iRrjZtOh
fJ/7U+52KHJ9bQ64nAxnoG0ygySPtcY3w0EwGACI9EVXWYQ1GVjEbL+kVsgj
TVNd2WG0IrR7M9OndXXYVokdLhhdRmm9yEOT7Y7ocCT6uEA/UWjBLYkdkruj
15Vciy8zuRP7q7ued8Jez0N/ZO9u139uqyHrfX3d/2DojHuXbwyducMJaPN9
tXNuoARtlOa0AIXM+8G+LISZ1Gm03SSxFoS1LzKDE91YC8qWthWlUWrzsM3R
3kHwu8EQ+m455N/v54cf81s7/BcQeHeSdeYhCHDOzhGCeeDwbFyYsT+qyp/S
lFMXFGfjprWbvucQuW71a8la6K3OCx+CUAoVBAAA
====
あ、lib/time.rbのほうは不要だった。
502デフォルトの名無しさん:03/04/24 14:07
初歩的なことですが、どなたか教えて下さい。
実行結果、「123aaa456789」を期待していたのですが、
「123aaa789」となってしまいました。ファイルの途
中に追加書き込みするには、どうしたらよいのですか。

f = open("text","w")
f.print("123456789")
f.close

f = open("text", "r+")
f.seek(3, IO::SEEK_SET)
f.print("aaa")
f.close
>>502
直接的な手段はない。
ファイルの途中に直接挿入はできないので、
挿入したい位置から先を後ろへずらす必要がある。

>>502
ファイルがそれほど大きくなければ
f = open("text", "r+")
img = f.read       # 全部読んで
img[3,0] = "aaa"   # ファイルイメージを文字列として編集して
f.truncate(0)      # ファイルを切り詰めて
f << img           # 書き出すのが頭を使わなくて楽
f.close
505497:03/04/24 14:56
OS依存というのは知りませんでした。
>>497はWindows2000のcygwin環境です。

>>500 どうもありがとうございます。
>>505
そのTZフォーマットの典拠を明示できるなら、
bugs-jaにでも投げといてくれるとありがたい。
507502:03/04/24 17:39
>>503,504
どうもありがとうございます。

ファイルが大きく、編集箇所も多いので、
結局、以下のようにしました。

f_read = open("text1","w+")
f_read.print("123456789")
f_read.rewind

f_write = open("text2", "w")
f_write.print f_read.read(3)
f_write.print ("aaa")
f_write.puts f_read.gets

f_read.close
>>http://pc2.2ch.net/test/read.cgi/tech/1045074808/721
def random_permutation(n,k) (0..n-1).sort_by{rand}[0,k] end

sort_by は便利だ
>>508
(0..n-1).sort_by{rand}
(0..n-1).sort{rand<=>0.5}
確率的な違いをどう表現したらいい?
>>509
(0..n-1).sort_by{rand} が以下と等価かどうかすら分からん

def perm(a, k=0, v = [])
n = (a = a.to_a).size-1
n == k ? v<<a : (k..n).each{|i| perm((b=a.dup;b[k],b[i]=b[i],b[k];b),k+1,v)}
v
end

perm(0..n-1)[rand((1..n).inject(1){|v,x|v*x})]
qsortが平均n・log(n)っていうときの平均ってどれ?
>>511
どれ?と聞く以上は選択肢を出していただきたい。
>>512
qsortの平均コスト評価で想定している分布って
(1) (0..n-1).sort_by{rand} # n個の一様乱数の順序
(2) (0..n-1).sort{rand<=>0.5} # ランダムな2分割による入れ換え?
(3) >>510 # 順列上の一様分布
(4) 上記以外
のどれ?
>>513
それは (3) だが (1) や (2) が (3) と等価なのかは知らん。
RubyUnit で自動テストを cron 等で行い、テスト結果を html で出力したいのですが、
そいういったことをしてくれるツールが検索しても見当たりませんでした。

こんなツールがあるよといった情報や、他の Ruby 用 Unit Test ツールでは実装
されているという情報がありましたら、教えてください。
>>515
cronの方はどうとでもなるとして、htmlのそれっぽい出力はないんじゃないかな。
ui/gtk/やui/fox/のtestrunner.rbを参考に書いてみては?
>>515
RubyUnitはTest::Unitに統合されてるのでそっちを使ったほうがいいかも。
HTMLでの出力というのがどういうものを求めてるのかよく分からんが、
test/unit/ui/html/testrunner.rbを他のtestrunnerを参考に書いてくれると
嬉しい人が増えると思われ。
ちゃんと>>516が書いてるじゃん。なんで見落とすかな。
519デフォルトの名無しさん:03/04/30 23:23
rubyのスコープがわかりません


スクリプトファイルはじまり
#!/ruby

if なんとか
 i = 10 #ここではじめてiが出てくる
end

print "#{i}\n" # 10
おわり

ifの中で初めて使う変数が、ifの外でも使えます。
これってあり!?
a=Hash.new([])
b=a["3"]
b[4] = b[4].to_i + 1

で、a["3"][4] が1になって欲しいんですがならないのはどーして?
それで、a["3"][4]は1を返すよ。
ただし、多分意図している動作とは異なる。
http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=trap%3A%3AHash
523521:03/05/01 11:30
>522
ほんとだ、a["3"][4]は1を返しますね。
でも、 a.inspect => {} となってしまいます。
a.each do |key,val| とかなにも返って来ませんし、、、

Ruby 1.6.7 です。
>>523
調べればあちこちに書いてあると思うけど、
Hash.new(obj) の引数 obj は Hash#default の値として保持され、
このオブジェクトは存在しないキーへの参照があったときに返される。
  h = Hash.new("Go Fish")
  h["a"] = 100
  h["b"] = 200
  h["a"]    #=> 100
  h["c"]    #=> "Go Fish"
  h.default #=> "Go Fish"
  h["c"] << "pond"
  h["c"]    #=> "Go Fishpond"
  h.default #=> "Go Fishpond"
  h["c"] = 300
  h["c"]    #=> 300
  h.default #=> "Go Fishpond"
  h["d"]    #=> "Go Fishpond"
>>523
>>522のリンクを読めよ。
>>522 のリンクの説明、「デフォルト値」っていう表現が良くない気がする。
「デフォルトオブジェクト」とかにすれば勘違いしづらいかも。
そう思ったら直せばいい。
528デフォルトの名無しさん:03/05/01 19:22
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-06515-4
↑これ読んだ人、乾燥キボンヌ。
>>528
乾いてたよ。
乾いて候
「クラスのインスタンス変数」って何に使うんですか?
クラスのインスタンス変数をインスタンスのインスタンス変数として使っちゃだめ?
クラスのインスタンスのインスタンス変数してなら使えるけど?
>>532
では、クラスのインスタンスのインスタンス変数として使っちゃ駄目?
つまり「クラスのインスタンス変数」と「そのクラスのインスタンスのインスタンス変数」
の使い分けを教えて欲しいのれす。
テンプレ
JaMing/Ruby って面白そうね。
>>533
それは全然違うと思うけど。
クラスのインスタンス変数は、継承したくなくて(クラス変数じゃ駄目)、
公開もしたくない(定数も駄目)が、クラスに所属させたい名前じゃないかな。
例えば特異メソッドで使う値とか。
537533:03/05/02 03:29
この結果を見ると、どうもクラスに所属してない気がしてしまうのですが、なぜこうなるのでしょう。
--(コード)--
class Person
@name
def initialize(name)
@name = name;
end
def say
p @name
end
end

p1 = Person.new("foo");
p2 = Person.new("bar");
p1.say();
p2.say();
--(結果)--
"foo"
"bar"
--
両方とも "bar" ってなってほしかったのですが、、
@name じゃなくて @@name
>>537
> class Person
> @name
この@nameと
> def initialize(name)
> @name = name;
この@nameは別物。

前者はPersonというClassオブジェクトのインスタンス変数。
後者はPersonクラスのオブジェクトの持つインスタンス変数。
ありがちなクラスのインスタンス変数の使い方

class C
  @n = 0
  def self.n() @n end
  def self.new() @n += 1; super end
end

class S<C
  @n = 0
end

S.new; C.new; C.new; C.new; S.new;
p [C.n, S.n] #=> [3, 2]
>>427

ファイル無しでimage instance作りたいってこと? フツーに new すりゃいいし
クラス変数使いこなしてるってひといますか?
イマイチどんなつかいでがあるのかわかんない。
サブクラスでの変更がスーパークラスへ反映されなければいいのに、
と思うことが多い。
543デフォルトの名無しさん:03/05/02 08:13
>>542
つかってるよ。例えばなんかのデフォルト値とか。
サブクラスでも同じデフォルト値を使いたいからね。
定数でもいいんだけど、デフォルト値を変更したいときもあるから。

目的に応じて、クラス変数とクラスインスタンス変数を
つかいわければいいんじゃない?
サブクラスでの変更を親クラスへ反映させたければクラス変数、
させたくなければクラスインスタンス変数。
>>543
おお、クラスインスタンス変数ってのがあるんですね (←節穴野郎) 。
>>540 みたいに使うのか。
なんか漏れにもうまいこと使い分けれそうです。ども。
545sage:03/05/03 23:27
あのーすみません。なんか呼び名がごちゃごちゃしているのですけど、
正しい読み方ってどういう風に呼ぶのでしょうか??? > @、@@
クラスのインスタンスが持つ変数を「インスタンス変数」
クラスが持つ変数を「クラス変数」
という風に覚えていたのですけど、違ったのですか???
はうっ。
sage間違えた‥
>>545
あってる
@instance_variable オブジェクト毎
@@class_variable クラス毎
クラスはそれ自身がオブジェクトでもあるので両方持てる
548デフォルトの名無しさん:03/05/04 04:32
mswin用gdbm.so バイナリを公開している所はないですかね。
http://jarp.jin.gr.jp/win32/aは知っているのだけれど、gdbm.soはないです。
Makefile が妙でnmake失敗してしまうです。
gdbm.dllを.soにリネーム
551548:03/05/04 05:06
ぐわっ、こんな簡単なことだったなんて。
ありがとうございました。
windowsの.dll=*nix系の.so
って事を知らない人、結構いるね。
この板だと話が通じない事多い。
同じだったの?ELFとCOFFとかって違わないの?
同じと思っててイイヨ
この板だと
>>553みたいに
話が通じない事多い。
556Rubyist@553:03/05/04 09:43
ウゼェェェェェエエェェェーーーーーーェェーェーェ>>>>>>>>>>>>>555
しらなかったんだよシラネーよ知って根ーよシラララララララネネネネネネネシラネー
ヨヨヨヨヨヨヨヨヨヨヨヨヨヨヨヨ
ブァベブチャグチャグハアァァアアアアァァブァァアアァアアウアウアアウアウウウウウアウウアウウアあうアウアアウアウガアアアアアウゥァウガアカカカガ゙カクククセゼグギ
http://jarp.jin.gr.jp/win32/gdbm-1.8.3-1-mswin32.zip
をダウンロードし、
\bin\gdbm.dll 21,504 03/04/22
を、gdbm.soとリネームし、
require 'gdbm' したところ、

\hage.rb:1:in `require': 127: 指定されたプロシージャが見つかりません。 - Init_gdbm (LoadError)
./gdbm.so

が出てしまいました。
ruby 1.6.8 (2002-12-24) [i586-mswin32] です。
嘘を嘘と見抜けない人は……(ry

まあ、元の聞き方が悪いから仕方がないけど。
それはrubyから(gdbmモジュールを通して)使うgdbmライブラリ本体だよ。
それくらいzipファイルの中身を見て見当つけなさい。

つーか、jarpのwin32ディレクトリの存在を知ってるのにその意味を知らない
というのはいかがなものか。
Ruby のスレで嘘を付かれるなんて、信じていたのにッ。
>558
後学のためにどう聞けば良かったか教えてください。
>>561
558じゃないけど。

Makefileがどう妙なの?
どうやってMakefileを作ったの?
rubyのバージョンは?(557に書いてあるけど)

あたりは最低限必要かと。
それがわかれば、もうちょっとましな質疑応答になると思われ。

ちなみに、今回の場合は、550が嘘で552は本当だけどミスリーディング。
RDってHTMLと比べて何が嬉しいんですか?
生でも読みやすいところ?

unix板の情報整理スレでも「メモはRDで書いてる」ってのが
何度か挙げられていたから、良いモノなのかも。
タグが少ないからうちやすい
RD って plain2 と比べて何が嬉しいんですか?
Apacheのログの解析してるんですが、
ttp://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=Google+UTF-8+%E6%A4%9C%E7%B4%A2%E6%96%87%E5%AD%97%E5%88%97+Ruby&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
のq=???の日本語部分のデコードができなくて困っています。
CGI.unescape や NKF してたんですが、うまくいきません。
UTF-8だからかな?
できればポインタなどお願いします。
>>567
UTF-8は現nkfでは扱えない(nkf自体Unicode制定前のものだから当然だが)ので、
uconv,iconv,unkfあたりを使う。在処は

uconv: RAA
iconv: 1.8では標準、1.6ならshim
unkf: rough

>>568
さがしてやってみます。
570567:03/05/08 14:43
できました。
unkfをインストールして、
require "cgi"
require "unkf"
q="%93%FA%96%7B%8C%EA"
NKF.nkf("-e", CGI.unescape(q))
で、EUCの文字列が取得できました。

どうもありがとうございます。
571デフォルトの名無しさん:03/05/08 21:30
print nil
とすると、nilと表示されてしまうのですが、これを何も表示されないようにしたい。

class NilClass
def to_s
''
end
end
としても、
def nil.to_s
''
end
としても、nilと出力されてしまう。

どうすればよいか、知恵を拝借したい。
printを再定義しないとだめ?
inspect を再定義。
つか、print 対象に nil がこないようなロジックにすべきじゃないかと。
>>571
諦めてprintを再定義してくれ。

>>572
inspectをどれだけ変えても無駄では?
なにしろ、printのソースが
 case T_NIL:
  rb_io_write(out, rb_str_new2("nil"));
だ。

>>573
あ、ほんとだ。早とちりだった。
575デフォルトの名無しさん:03/05/08 21:51
>>573
まじで?ソースコード埋め込みだったのか。

質問の背景を説明すると、RubyでCGIを作成してて、
cgi = CGI.new
user, = cgi['user']
mail, = cgi['mail']
print user, "<br/>\n"
print mail, "<br/>\n"
としてるんだけど、このときuserやmailがnilと表示されるので
どうにかしたかった。いちいち
user ||= ''
mail ||= ''
とするのもうざったいし。
こんなとき、みんなはどうしてるの?
>>575
もっといい方法がありそうだが、
user = cgi['user'].first || ''
なんてのはどうだろう。一行で書けるし。
print "#{user}<br/>\n"
print "#{mail}<br/>\n"
>>575
576+577で脳内idiom化済み。
579デフォルトの名無しさん:03/05/08 22:28
>>576
最初はこうしてたんだけど、
http://localhost/login.rbx

http://localhost/login.rbx?username=&password=
とを区別したかったので(前者ではcgi['username'][0]はnil、
後者では "" )、使わないことにした。

>>577
これ、うまくいくね。ありがとう。
でもなんで?もし仕組みをしってたら教えてください。
#{} は String 以外は to_s で String に変換するから。

もちろん明示的に
print user.to_s, "<br/>\n"
としても望み通りになる。
>>580
うー、そういうことか。
def nil.to_s() とか class NilClass; def to_s() ... とか
していたおれはアホやね。すでにそうなっていたのか。
さんきうです。
そもそも、CGIの入力を無加工で出力するなんて考えられないのだが。
だって、質問のためのサンプルだもん。
現実のコードが複雑なら、質問するときは本質部分だけをとりだした
簡単なものを示すのが普通では?
>>583
その「簡単なもの」が571だというならそれはそれで納得なんだけど。

575のようにCGIの入力を無加工でprintに渡すわけはないので、
それまでに別のところでnil問題に遭遇するだろう、ということだよ。
なので、575でいう「こんなとき」はありえない。
585デフォルトの名無しさん:03/05/09 14:58
Cygwinにpackage: ruby-1.6.8-1が出たわけだけど、
ソース取ってきて自分でビルドするのと比較して何が嬉しいの?
ソース取ってきて自分でビルドしなくてもいい
ruby捨てるのが簡単に
>>585
ソース取ってくるほど熱心でないユーザも使う可能性が増える。
そしてリリースがますます慎重に
cygwinのバイナリをビルドした設定って後から参照できるように記録されているの?
だとしたら、使ったバイナリをビルドした設定を記録するのがちょっとは楽になるかな。
>>590

???
今いち言いたいことが分からないけど、Un*x と変わらないよ?
Cygwin 環境だと configure につけるオプションって --enable-shared くらいじゃ。
593デフォルトの名無しさん:03/05/10 19:13
yamlインポートage
>>593
でも動かない。
インポート?
addだな。いやそういうことはどうでもいいんだが。
YAML.rb って Racc で真面目にフル実装しようとしてるせいか、かなり重くないですか?
機能限定でいいから軽い YAML 実装ってないですかね?
無きゃ自分で書くしかないんだけど・・・
>>585
Cygwin入れてない環境でも、Cygwin DLLさえあれば使える。
…mswin32版との具体的な差が気になるところではあるけれども。
プログラミング自体初心者なんだけど、
「これは見とけ」とか言うサイトや本ある?
もう、馬鹿でも分かるような。
ruby本で?
「たのしいruby」あたりはどうかね。
601名無しさん@xyzzy:03/05/13 00:29
602599:03/05/13 07:55
ありがとうございます。
Rubyのオフィシャルサイトはもちろん見ましたよー。
でもRubyって、どのサイトも
「プログラミングそこそこ理解できる」が前提みたいな感じで、
まるっきりの初心者対象にしたようなページはあまり見つからないんですよね。
その点で多少敷居が高いと感じたり…。
やっぱり「たのしいruby」とか「Rubyプログラミング入門」くらいしか思い浮
かばんなぁ。

ところで、「プログラミング初心者」であっても「コンピュータの初心者」じゃ
あないよな?
604597:03/05/13 14:29
結局 YAML.rb 使わないことにしますた。
しかし、-ryaml するだけで重いんですよね。
そもそも Racc 自体が重いのかしら・・・?
1.8に入ったsyckはracc使ってないと思う。
高橋 麻奈で「やさしいRuby」か
結城 浩で「Ruby言語プログラミングレッスン」キボン
いや、Rubyはプログラミング初心者にはやさしいつくりではあるが、
解説書で初心者(他言語経験者を除く)にやさしいのはっていうとちょっと?だったりする。
他言語のいい初心者本からRubyにきたほうがいいかもって、本末転倒。
ひと頃と比べるとRuby本の出るペースも落ちてきてちょっとさびしい。
607597:03/05/13 18:29
>>605
どうもです。ちょうどさっき Syck の存在を知って調べ始めたところでつ。
# 1.6 ユーザなので流行に乗り遅れてますね・・・
608597:03/05/13 18:46
Syck でつが、コメントの扱いとかダメダメな悪寒。
ほかにも気になるところが沢山あるのですぐには使えないな・・・
もうちょっと調べてみよう。
>>608
詳しくレポートきぼん。
量が多ければruby-bugsかruby-devへ。
610599:03/05/13 20:29
>>603
どのくらいの知識と経験を積めば「コンピュータの初心者」から脱出できるのか
分からないので何とも言えませんが、少なくとも、
PCを昨日今日買ってきたというレベルではありません。

以前、まつもとゆきひろ氏の「Rubyプログラミング入門」を入門書として購入しましたが
余計な注釈や、読みづらい本文で(゚Д゚)ポカーン
この本では「楽しいRuby」は無理だと感じました。
「Rubyプログラミング入門」は原先生のはずだが。

注釈云々からすると「オブジェクト指向スクリプト言語Ruby」(通称Ruby本)じゃ
ないかと思うが、あれはまったく初心者向けじゃないよ。
Rubyの初心者向けであって、(オブジェクト指向)プログラミングの初心者向けじゃない。
つーことね。
>>610
個人的経験からいうと、初心者向けのサイトを作ると覚えるよ。
614599:03/05/14 02:10
>>611
スマソ、今見直したら
「原信一郎 著 まつもとゆきひろ 監修」と書かれてますた。
「著 まつもとゆきひろ」部分だけ見て激しく勘違い。
本の名は間違い無く「Rubyプログラミング入門」。
615名無しさん@xyzzy:03/05/14 03:34
>>599
目的がないからおぼえないんだよきっと。tdiaryとか導入していま流行の
bloggerになってみれば?tdiaryのpluginをかくためにrubyを覚えたひと
もいるよ。

オレも「たのしいRuby 」に一票。
617597:03/05/14 19:29
>>609
syck-0.15 とかいうのだとダメだったんで、
CVS 最新を取り寄せて試してみたところ、問題なさそうでした。
また何か問題が見つかったら適宜報告するようにします。
618597:03/05/14 19:32
つーか、 Syck は全然重くないっすね。快適快適。
YAML もっと普及するといいなぁ。
結城 浩(の本)に−1票
Perlをちょっとやったことあるなら「Rubyプログラミング入門」がいいね。
これ読むまで、
オブジェクト?はぁ?クラス?はぁ?インスタンス?はぁ?
って感じの漏れだったが、これ読んだら概念がちょこっとわかったよ。
ちなみに「たのしいRuby」を読んでもオブジェクト指向がなんなのか
全然理解できなかった。これを読んだあとも
オブジェクト?はぁ?クラス?はぁ?インスタンス?はぁ?
の状態に変わりはなかった。
けど、超基礎から説明してるので、
プログラム自体が初心者の人は「たのしい」から読むべきだろうね。
「Rubyプログラミング入門」はUNIXの基礎とか、プログラムの基礎とか知らないと、
わけの分からん用語の連続になっちゃうよ。
621デフォルトの名無しさん:03/05/15 05:34
プログラムスーパー初心者です。
Rubyに興味を持ち、先日初めてオフィシャルページを
みてきました。Rubyはvariable declarationがいら
ないようなんですが、そこで質問です。
functionがinteger valueにreturnするときなんか
はどうなるのでしょう?例えばc++で
int function(int i, int j)
{
return i+j;
}
これをRubyでかくと、どうなるのでしょうか?
簡単すぎる質問ですみません。

622Ruby知らない:03/05/15 05:36
関数(とは言わない?)の書き方くらいマニュアルや初心者本でも載っているんじゃなかろうか。
623621:03/05/15 05:40
>>622
すみません。海外在住なのです。
日本の本が手に入らない僻地にいるので、webだけが
たよりなのですが、なかなか簡単なサンプルがないの
で、ここで聞きました。
624_:03/05/15 05:40
>>621

def function(i,j)
 return i+j;
end

とも書けるけど、大半のヤシは

def function(i,j)
 i+j
end

と書くだろう。
>>597
YAMLは、現在開発中の新バージョンは拡張ライブラリになって
おり、これはとっても速いらしい。まだα状態だろうけど。
>>621
def function(i,j) i+j end
p function(1,2) #=> 3
p function("foo"+"bar") #=> "foobar"

型を指定するための方法というのはない
どうしても検査したければ obj が Klass のインスタンスであることを
obj.is_a? Klass によって検査することはできるがあまり使わない
>>627
> p function("foo"+"bar") #=> "foobar"
p function("foo","bar") #=> "foobar"

629621:03/05/15 19:42
マトリックスを観てきて、今帰ってきました。
夜12時のshowだったのですが、すごい混雑ぶりでした。

>>625, 627
どうもありがとうございます。
本当に型がないのですね。(笑) javaとC++しかしらな
い私にとっては、とても不思議です。
>>629
> 本当に型がないのですね。
変数にはない。オブジェクトが型を持っている。
631_:03/05/15 19:45
632デフォルトの名無しさん:03/05/15 21:36
>>597
開発中のYAML次期バージョンは拡張ライブラリとして実装
されているため、とても速いらしい。
633( ´w`):03/05/15 21:52
http://www13.big.or.jp/~fubuki/
ここの管理人は『2chに行くヤツは全員オタクだ。
2ch用語発言したボケはアク禁』などとほざくゴミだ。
これはひろゆき氏及び全ての2ちゃんねらーに対する侮辱である。
ここに行って2ch用語を連発して頂きたい。
>>633
藻前一人でいきがってれば?
>>634
藻前
konnnakotobadukaisuruyatuniiwaretakunaiyona.
>>597
開発中の次期バージョンの Ruby は拡張ライブラリとして
現在とても速いα実装をしており、とても YAML らしい。
人工無能のテスト中なのか…?
Array を shuffle したいのですが、スマートな方法はありますか?
639638:03/05/16 17:17
試しに自分でも書いてみた。非破壊的バージョン。でもいまいちだよなぁ。

class Array
def shuffle
src, dst = self.dup, []
while not src.empty?
dst << src.delete_at(rand(src.size))
end
dst
end
end
古いのが出て来た。

class Array
 def shuffle!
  size.downto(2) do |i|
   j = rand(i)
   self[i], self[j] = self[j], self[i] unless (i -= 1) == j
  end
  self
 end

 def shuffle
  dup.shuffle!
 end
end
class Array
 def shuffle!
  size.downto(1){|i|
   push delete_at(rand(i))
  }
  self
 end
end
rand(1)は常に0だから1までdowntoするのは無駄。

それと、delete_atはそれ以降を全部ずらすから、大きいArrayに対しては効率
が落ちる。
要素数がトランプの枚数くらいだったら>>641のが速い(Ruby1.6.8)…が、それくらいならそもそも速度気にしない罠

おまけ(実用性はたぶんない)
class Array
 def shuffle!
  sort!{
   rand - 0.5
  }
 end
end
sort{ rand - 0.5 } がランダムな入れ替えになるというのがいまだによく分からない。

いや、もちろんなんだかぐちゃぐちゃになりそうだなってのは分かるけど
ちゃんとn!通りの並びの全てが等確率で出るのかどうかよく分からない。
しかも終わらなさそーだし。
>>645
ソートのアルゴリズムも知らない中学生ですか?
>>646
試してみるとわかると思うが、終わらない。
>>647
% ruby -e 'class Array; def shuffle!() sort!{ rand - 0.5 } end end ; a=[0
,1,2,3,4,5,6,7,8,9]; a.shuffle!; p a'
[1, 7, 9, 3, 5, 0, 8, 6, 2, 4]
%
終わるけど?
class Array
  def shuffle!(&block)
    if block
      1.upto(size-1){|i| j = block[i+1] ; self[i],self[j] = self[j],self[i]}
    else
      1.upto(size-1){|i| j = rand(i+1) ; self[i],self[j] = self[j],self[i]}
    end
    self
  end
end

上の方法だとrand(n)かblock[n]が0,…,n-1を等確率で返すことを仮定すれば
すべての要素が異なるときにそれぞれの順列が等確率になることを証明できるが
他の方法はどう?
>>643の場合を、quick sortで考えてみる。
中央値はランダムに決定されることは自明だと思うので省略。
残りの要素はランダムに振り分けられるので、左右どちらに行くかは等確率。
これを再帰的に繰り返せば全体も等確率と考えていいんじゃないかな。
ただ、最後はselection sortを使ってるんで、これは等確率じゃないような気がする。
n個の要素から最小値を選び出す場合、最初に比較された要素が選ばれる確率は
2**(1-n)だけど、最後に比較されたものが選ばれる確率は1/2。

おまけ
def tossup
  rand(2)*2-1
end
for i := 0 to length(arr)-1 do
 swap(arr[i], arr(rand(length(arr))));
>>644 ダメポ
def hist(n,k)
a, h = 1..n, Hash.new(0)
(a.inject{|i,j|i*j}*k).times{ h[yield(a)]+=1 } ; h
end

n, k = (ARGV[0]||3).to_i, (ARGV[1]||100).to_i
h = hist(n,k){|a|a.sort{rand-0.5}}
h.sort_by{|i,j| [j*10/k,i]}.each{|i| p i}

>>650 スマン、最後はselection sortってどういうこと?
それは抜きにしても左右に振られるのがランダムであることから
等確率であることをいうのは飛躍が大きいと思われ。
ary.sort_by { rand }
Enumeration#sort_by の実装の話?
Enumerable の typo だとしても、何を言いたいか分からない。
>>652
> >>650 スマン、最後はselection sortってどういうこと?
勘違い。ruby_qsort()は切替えたりしてないな。

> それは抜きにしても左右に振られるのがランダムであることから
> 等確率であることをいうのは飛躍が大きいと思われ。
というか、順次比較して行くから等確率じゃないな。
>>645の意図が分かった気がする。
>>643の場合、停止確率は1だが停止しない場合もあると言いたかったんだろう。
それならば正しい。
しかし>>647は間違いだな。確率0の事象を実際にみることはないに等しい。
>>657
>>643については正しいが、確率1だからといって見ることができるとは限らないので
「確率0の事象を実際にみることはないに等しい」は言い過ぎかと。

class Array
  def shuffle!()_=self;1.upto(size-1){|i|j=rand(i+1);_[i],_[j]=_[j],_[i]};_ end
  def shuffle() o = dup ; o.shuffle! ; o end
  def sorted?() empty? or !! inject{|i,j| i <= j ? j : break} end
  def bogosort!() until sorted? do shuffle! end ; self end
  def bogosort() o = dup ; o.bogosort! ; o end
end

100.times do |i|
  STDERR.printf("%2d: ", i)
  a = (1..i).to_a.shuffle ; t0 = Time.now ; b = a.bogosort ; t1 = Time.now
  STDERR.printf("%f sec [%s] --> [%s]\n", t1-t0, a.join(","), b.join(","))
end
>>656
> というか、順次比較して行くから等確率じゃないな。

それも明らかじゃないと思う。難しい。
660653:03/05/19 02:14
>>653って何かおかしい? スマートな実装だと思ったんだけど……。
661653:03/05/19 02:14
つーか、>>508 あたりから既出なのか。スマソ。
[ruby-dev:20209] からのスレッドを見ると、>>491 のような疑問は尤なような。
rdoc なんだけど、ここ
ttp://rrr.jin.gr.jp/doc/http-access2/
の rdoc の出力は、rdoc-0.9.0 の標準 (Squeak のクラスブラウザみたいに、上半分に
クラス階層やメンバが表示されているやつ) とは違って、左半分にクラス階層やメンバが
表示されているんだけど、

これって rdoc の CVS 版使うとこうなるのかな?誰か知っている人いますか?

664663:03/05/19 20:08
>>663
すいません、自己解決しました。

ttp://rrr.jin.gr.jp/doc/Makefile
をみたら、--template kilmer っていうオプションが rdoc にあるみたいね。
665デフォルトの名無しさん:03/05/20 00:40
rubyで、文字列が'aaa', 'bbb', 'ccc'のどれかであれば真、
それ以外では偽という条件を書くとき、
if str=='aaa' || str=='bbb' || str=='ccc' then
 ...
end
としているのですが、もっとうまい書き方はありますか?

case str
 when 'aaa', 'bbb', 'ccc'
 ...
end
でもよかったんだけど、if修飾子としても使いたいので
できればif文での書き方を希望。
>>665
Rubyスレをあげないでください。
>>665
if %(aaa bbb ccc).include?(str)
668667:03/05/20 00:51
うおお、ミスった。
if %w(aaa bbb ccc).include?(str)
>>668
なるほど、配列の要素として含むかどうかで判断するのね。
ちなみにこれ、実行するたびに配列が作成されるのかな?
erubyやmod_rubyで使用すると、実行するたびにオブジェクトが
増えてしまう?
(仕方ないか)
670667:03/05/20 01:09
>>669
実行のたびに配列は生成されちゃうだろうね。
それがいやだったら、配列を定数に入れとくとか。

ifの評価が終わったら参照されない配列になるから、
gcされちゃうんで増え続けることはないだろう。
漏れならこっち
if /\A(?:aaa|bbb|ccc)\z/ =~ str
672669:03/05/20 01:46
どうもありがとう。
いろんなやりかたがあるのね。
>>671
なるほど。正規表現のリテラルだったら毎度同じオブジェクトなのか。

$ ruby -e '2.times do p /hoge/.id end'
538146270
538146270

$ ruby -e '2.times do p ["hoge"].id end'
538146160
538146130

VALUE * を使い回す話とごっちゃになってた。
>>673
> VALUE * を使い回す話とごっちゃになってた。
何それ?
>>674
たぶんC言語レベルでのソースコードの話。
VALUEって型があって、それへのポインタのことでは?
>>673
そうとも限らないんだけどね。

ruby -e '2.times do |i| p /mona/.id end'
ruby -e '2.times do |i| p /#{i}/.id end'
ruby -e '2.times do |i| p /#{i}/o.id end'
真中のは厳密にはリテラルと言わないような気もする。
真中のは言わなくても最後のは言うの?
>>675
それは分かるんだけど、「使い回す」ってのが何の話だかが。
>677 はリテラルとは何か定義してみれ。
# 最近fj.lang.cでフレームになってたような気もするが。
fj.lang.cだと最近じゃないわけだが。
文脈によっては、たとえ100年前でも最近ていうからなぁ。
で、そういう文脈なの?
俺様のニュースサーバで expire されてなければ最近。
で、あなた様のニュースサーバはどこにあるんですか?
686山崎渉:03/05/28 12:56
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
687デフォルトの名無しさん:03/05/29 02:33
http://www.rubyist.net/~matz/slides/ipsj-hi103/index.html
にあるグラフはどっからのデータのグラフなんだ
もしかしてmatzが主観で書いたグラフか?
客観データだとしたらむしろびっくりだ
689デフォルトの名無しさん:03/05/29 07:41
lzhやzipなどの書庫ファイルの中身を
Rubyからアクセスしたいのですが、どうしたらいいでしょうか。
list = `"lzh lq #{archive}")`.split(/\n/)
list = `"zipinfo #{archive}"`.split(/\n/)[1...-1]
Array#sort が比較関数をブロックで渡せるんだから、
Array#uniq も比較関数をブロックで渡せたら…と思いませんか?
>>691
思わないなぁ。めんどくさいと思うよ。
それなら俺様 uniq を作った方が早いと思う。
>>690
どうも。
書庫内のファイルの中身も見たいので、DLLのAPIヘルプを見ているところです。

>>693
環境はWindowsなのか?
なら「Ruby+統合アーカイバ+DLL」でぐぐるとなんか出てくる。

zlibを使ったRubyZipってのもあったはず。
というか、RAA。
>>694
情報どうもです。いろいろ試してみます。
697デフォルトの名無しさん:03/06/01 14:11
pythonマンセ〜
http://pc2.2ch.net/test/read.cgi/tech/1047970129/782 に出ている、
遅延評価に対応した ruscheme というのを試してみたいのですが、
どこかダウンロード可能なところは無いでしょうか?
>>698
ぐぐれ。ちなみに綴りが間違ってる。 Rucheme だ。
綴り間違い失礼。

rucheme003 はまだ遅延評価に対応していないみたいなんです。
もっと新しいのはダウンロードできないんでしょうか?
まつもっちゃんよ・・・

頼 む か ら ソ ケ ッ ト の g e t c で デ ッ ド ロ ッ ク す る の 直 し て く れ

これじゃネットワーク全然使えねーよ
>>701
再現出来る短いコードを書き環境を明示して晒してみたら?
ごめ。スレッド使えばデッドロックにはならないぽい。
でもスレッドは止まる。timeoutも効かん。

再現?簡単だYO!
TCPServerとTCPSocketで試してみ。

ソケットオープソ

接続

getc (getsでもreadでも何でもいいが)

受信データを送らない

あぼーん
>>703
だから、再現コードと再現環境を晒せっての。
どんなコードや環境でも再現するようなら
今頃 Ruby なんか使ってる香具師なんかいねえよ。
>>704
ワカタ。ゴメン。ちょと待ってろ
706703:03/06/05 03:08
uwaaaaaaan

書き込めねえよ

でけえとかなげぇとか言うなよ

>>704スマソ
環境だけ書かせてもらうわ

Ruby1.6.8 無印とCVS版200304全般
mswin32、mingwは全滅。Cygwinは送信だか受信のどっちか×だった。

1.8pre2のLinux版では問題なし。
ttp://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=trap%3A%3Atimeout
これってまだ直ってないんだっけ
708703:03/06/05 06:20
少なくとも上の環境では無理ぽ
>>706
> mswin32、mingwは全滅。
winsockの呼び出しは中断できないから。

ついでにいっとくと、Windows対応はまつもとさんにいっても無意味。
つか、デッドロックの意味がわかってない悪寒
711デフォルトの名無しさん:03/06/05 20:54
Rubyでcrc32を求める一番無難な方法は何でしょう?
それともMD5使っとけばいいんですかね。
単なるブロックをデッドロックと言うのは最近の流行か何かですか?
ネットワークプログラミングをするべきでない人たちが
ネットワークプログラミングをするのが流行っているようです。
こうしてRubyは消えていったとさ。



     〜〜 完 〜〜
まだ粘着がはりついてるのか(藁
藁って久々に見ました。
717デフォルトの名無しさん:03/06/06 01:20


701 名前: デフォルトの名無しさん [sage] 投稿日: 03/06/05 02:18
まつもっちゃんよ・・・

頼 む か ら ソ ケ ッ ト の g e t c で デ ッ ド ロ ッ ク す る の 直 し て く れ

これじゃネットワーク全然使えねーよ

module ComparisonChainable
def self.append_features(mod)
mod.module_eval do
alias lt < ; def <(x) lt(x) && x end
alias gt > ; def >(x) gt(x) && x end
#ailas le <= ; def <=(x) le(x) && x end
alias ge >= ; def >=(x) ge(x) && x end
alias eq == ; def ==(x) eq(x) && x end end end end
class FalseClass
def <(x)false end; def >(x)false end; def <=(x)false end; def >=(x)false end
end
[Fixnum, Bignum, Float, String, Module].each do |k|
k.class_eval do include ComparisonChainable end end

p 1<2<3
p 1<2<2

文法スレ読んでてこういうの考えたんだけど、
コメントアウト外すと parse error になるのはバグ?
>>709
selectはできるかな。
ruby 1.6 と 1.8 の両方で動作するプログラムを書こうとしていますが、
Hash#indexes をつかうと 1.8 だと warning がでます。
Hash#values_at をつかうと 1.6 では動きません。
どうすればよいですか?
class Hash
alias values_at indexes unless self.instance_methods.include? "values_at"
end

こう?なんか違ってそう。
method_defined?
つーかshim使えよ。
>>719
ソケットに対しては使える。
>>718
ailas

ruby-mode.elとか、強調表示できるエディタを使え。
>>722
shim は嫌
>>721-722
なんかかっこ悪いなあ。1.8 でも indexes で warning を出さないべきだと思うのは
漏れだけ?
warning を出したければ 1.9 以降にして欲しい。
>>726
いまさらそんなこと言っても...
>>727
1.8はまだ出てないじゃん。

次のレスの予想:
ここでそんなこと言っても...
Rubyの質問スレがないようなので,ここに投稿させてもらいます.

10人が受講する科目Aの成績平均を計算するため
「氏名,成績点」をキーボードから入力して,
連想配列に格納する.得られたデータから平均値を算出し,
最後に,氏名,素点,平均からの偏差を画面出力したい.

という問題があり
dt = ArrayScore.new(10);
dt.inputData();
dt.meanCalc();
dt.outputData();
と実行するみたいなんですけどうまくできません.
リファレンスマニュアル見ながら作ってみたんですが
エラーが直りません.どなたか直してもらえませんか.
次に全文載せます.
class ArrayScore
@hash = {}; @num = 0; @mean;

def new n
@num = n; return self;
end

def inputData
@hash.clear;
for i in 1..@num
gets;
tmp = split(",");
@hash.store(tmp[0],Integer(tmp[1]));
end
end

def meanCalc
@mean = 0;
@hash.keys.each do |key|
@mean += @hash[key];
end
@mean /= @hash.size;
end

def outputData
@hash.keys.each do |key|
p key, ",", @hash[key], ",", @mean - @hash[key];
end
end
end
731729:03/06/08 23:49
dt = ArrayScore.new(10);
dt.inputData();
dt.meanCalc();
dt.outputData();

これで全文です.
- def new n
+ def initialize n
733729:03/06/09 00:13
>>732
ありがとうございます
最初のエラーが消えました.
ただ次に
`inputData': undefined method `clear' for nil (NameError)
と出てきてしまいました.
リファレンスマニュアルのHashのところには
たしかメソッドとしてclearがあったと思うんですが
これはどういうことでしょう.
hashを使うのに最初になにか宣言がいるんでしょうか.
頭悪すぎ……。メッセージよく読めよ。
>>728
1.7 で既に出ている warning を 1.8 で出すなとおっしゃるのですか?
>>733
@hash = {}; @num = 0; @mean;
を initialize メソッドの中に。

どのスコープの中にいるかをよく考えてね。
>>735
1.7は開発途上のバージョンだし、最初のほうと今では仕様が違っている点は
いくらでもあるし、別に関係ないんじゃない?
738729:03/06/09 00:59
>>736
ありがとうございます.
やっと動きました.
メソッドの中に入れたら
他のメソッドで使えないとか思ってました.
739デフォルトの名無しさん:03/06/09 01:06
Ruby用の、Windowsで使えるおすすめエディタってどんなのがありますか?
740デフォルトの名無しさん:03/06/09 01:12
>>739
なんでんかんでんMeadowでよかとよ。
>>739
とくにおすすめはしないがMeadow。
おれはとても便利に使ってるが、
windowsアプリケーションとして見たら癖ありすぎだもんで。
>>740
どうもです。探してみます。
Emacsみたいなエディタかぁ
744740:03/06/09 01:18
Linuxやるときに、CUIでエディタ使えるようになるから一石二鳥。
745740:03/06/09 01:19
>>743
emacsのwin版 = Meadow
Ctrlキーに指が届かないからvi使っている。。。
>>742
もしMeadowを使うことに決めたのなら、
rubyのパッケージについてくるruby-mode.elを使うようにしなよ。
これを使わないとMeadowを使う意味が半減だ。
xyzzy用のruby-mode.lもあったよな。
RDEも挙げてみる。使ったことないけど。
自分自身の言動を「〜していたらしい」と書く人がいるが何度見てもキモい
Eclipse はどうなん?
752740:03/06/09 03:49
>>746 余談だが・・・
Ctrlキーを指ではなく、手のひら(小指の付け根よりちょっと下)
で押すと良いらしぃ。
>>746
ESC キーの方が遠くないか?
窓使いの憂鬱で CapsLock と Ctrl を変えれば。
>>750
昨日ウェブを巡回していたらしいたけ皮膚炎という病気の存在を知った。
>>752
変換/無変換をCtrlに割り当てる。これ最強。
>>756
そのどっちかをshiftに割り当てようよw
>>757
いや、shiftよりCtrlの方が使用頻度高いし。
代わりにカタカナひらがなをshiftに割り当ててみたんで、しばらくこれで試してみよう。
759デフォルトの名無しさん:03/06/09 17:38
あるクラスの中で、

def +=(i)
end

def -=(i)
end

def *=(i)
end

def /=(i)
end

がsyntax errorになります。
これらの実装はどうやんの?
+=などは+などから自動的に定義されます。
独立して定義することはできません。
>>753
上(ESC)は届くけど、下(Ctrl)はホームポジションから離れないと届かないよぉ ちなみにノートPCのキーボード
++も自動的に定義してくれよ。
++ など必要ではありません。
はっちゃけた!!
succ!のaliasにすればいいんだよ>++
実際のところ++があったとしてRubyで使う場面てそんなにないような。
…ってこのての議論はもう飽き飽きw
まつもとさんは確か++を実装しないと言ってたと思った。
だから誰か++を実装したRubyをブランチしなよ。名前はRuby++w
767デフォルトの名無しさん:03/06/09 19:20
Emacs系エディタを使うか使わないかに関わらず,
AltIME等でCtrlとCapsLockを入れ替えたほうがなにかと左手小指にやさしいかと。
保存やコピペなど,Ctrlキーを使う機会は多いから。
ついでに"Ctrl+["でESCを押したのと同じだからviユーザにとっても
押しやすいCapsLockの位置にCtrlがあったほうが幸せでしょう。
>>767
Aの隣にCtrlがあったほうがいいか、というとそうでもないらしい。
おれはそっちのほうがいいんでmayuで設定しているが。

一般的な106とか109キーボードのCtrlの位置(左Shiftの手前)に
あったほうが使いやすいという意見もある。
それはそれでうなずける主張だと思うんだな。
CapsLockはCapsLockとして使うよ
770デフォルトの名無しさん:03/06/09 20:43
つまらない話題ですね。
rubyって何に使うの?
車輪の再発明?
>>771
そういう批判をするならばCOBOLでも使ってろw
>>770
この間の読書会ではこれでかなり盛り上がってた。
ルビ基地に逢いたい
マツモト ユキヒロ どっかの店みたい・・・
ハァハァ(°д°;)ハァハァ
>>766
メソッドの実体は実装しなくていいから、せめて演算子として ++ 使わして欲しい。
まだ ruby 初心者だった頃、++演算子はあるもんだと思って

++i

とかやって、無限ループになってはまった。
ょぅι゙ょ
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |  次でボケて!    |
 |_________|
    ∧∧ ||
    ( ゚д゚) ||
    / づΦ
goto >>778
781名無しさん@xyzzy:03/06/10 13:17
だれかLL Saturday行く人いる?
郁代。
ょぅι゙ょ
refe.elの最初の補完リストを作るのに失敗するのですがどうすれば
いいんですかぁ。

環境が Meadow + ruby 1.6.8 (2002-12-24) [i386-mingw32] なので
(refe-call-process t "*") の * を ruby が自前で展開して
refeに*が渡らないのが原因だと思うのですが・・・
* を '*' にして展開しないようにしてもだめでした。
>>784 追記
M-x refe して * を指定するとrefeのusageが出て
'*'だとno such class or method: '*'になりまちた。
微妙にスレ違いですけど、どなたか・・・たすけて・・・
>>784
まず、ReFeのバージョンは0.7だよね?
それが大丈夫なら、refe '*[#,]*' でやってみ。
>>786
ReFe 0.71でつ。
M-x refe '*[#,]*'の結果は
not match: '*[##]*'だそうです。

788784:03/06/10 23:57
さらに実験。
(defvar refe-program-args
'("-e" "puts ARGV"))
と書き換えてみると
M-x refe * の結果は refe.elをおいてるディレクトリのファイル一覧が出ました(゚Д゚)
'*'だと'*'と出ました。

もしかしてワイルドカードの展開ってmeadowさんがやってるの???
>>787
わかった。ruby を経由するのは潔くあきらめよう。
ReFe のデータベースディレクトリに method_document_comp という
ファイルがあるから、それを elisp を使って読み込んでくれ。
構造は中を見れば一瞬でわかるから。
>>784
(refe-call-process t "*")

(refe-call-process t "")

にしたらどうなるん?
791789:03/06/11 01:11
>>790
あ、そうか。そっちのほうが賢いな。すまん。
792784:03/06/11 07:02
>>790
> (refe-call-process t "*")
> を
> (refe-call-process t "")
no such class or method: ""
です。というか最初は""だったけどruby-listでWindowsでうごかねーよ
ってなって"*"になったんです。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/37546

>>789
こんなナイスなものがあったんですね。ありがとうございます。


・・・でも、なにがだめなんだろう。
xyzzyではうまくいくのになぁ。meadowさんがなにかごにょごにょしてるのかな。
まあいいやmeadowつかわねーし。
793784:03/06/11 07:06
> > (refe-call-process t "")
> no such class or method: ""
> です。というか最初は""だったけどruby-listでWindowsでうごかねーよ
> ってなって"*"になったんです。
> http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/37546
スマソ。勘違いだった。
最初は引数なしだったんですね。
ruby foo.rb みたいに直接呼ばれたのか
他のスクリプトから load 'foo.rb' されたのかを,
foo.rb の中で見分けるにはどうしたらいいんでしたっけ?
if __FILE__ == $0
Hashの中身を表示する際に
「値」で降順ソートして「キー」と「値」を出力するのに
簡単な方法ありませんか?

valuesで全値の配列を返してもらって
それをsortメソッドでソートして
次にkeysで全キーの配列を返してもらって
そのキーに対応する値を順に見ていって
ソートした値の配列の前から順に対応してるのが
見つかったら出力していくって方法しかないでしょうか

これは一つ一つのキーで毎回値の配列を
全部確認するので効率悪い気がします

値は重複しているものもあるので
index(val)は使えなさそうです

Hash 使うの止めれば。
Hash#to_a
hash.map{|k, v| [v, k]}.sort.reverse_each{|v, k| puts "#{k} => #{v}"}

1.8ならこうもできる。
hash.sort_by{|k, v| v}.reverse_each{|k, v| puts "#{k} => #{v}"}
よくわかんねーけど、こういうこと?

hash = {'a' => 3, 'b' => 1, 'c' => 2}
p hash.sort {|a,b| b[1] <=> a[1]}
----------------
[["a", 3], ["c", 2], ["b", 1]]
あ、800ゲト
ordered_hashみたいなのって誰か作ってなかったっけ
>>802
http://raa.ruby-lang.org/list.rhtml?name=pseudohash
これかな。使ったことがある。
でもvalueに重複があってしかもinvertした結果、
つまりkeyが重複するようなのにつかえんだろう。
>>803
う。意味がとおらねえ。
valueに重複がある場合invertして果たしてそれが使い物になるかどうかわからん、
といいたかった。
拡張ライブラリについて質問!
Integer から size_t に入れたいときはどうすればよろしいの?
NUM2ULONG でいい?
hash.keys.sort {|a, b| hash[a] <=> hash[b]}.each do |key|
  p hash[key]
end
<=> の両辺が反対か。
値でソートしたいならすりゃいいじゃんってこった。
808796:03/06/14 09:23
>>798>>799>>800>>806
ありがとうございます.

やりたかったことは>>799>>806です.
おかげでできました.

hashにmapなんてのがあるんですね
http://www.ruby-lang.org/ja/man-1.6/index.cgi?cmd=view;name=Hash;em=hash
ここにあるHashのメソッドしか知りませんでした.
>>808
> hashにmapなんてのがあるんですね
> ここにあるHashのメソッドしか知りませんでした.

漏れもよくはまるんだけど、Array や Hash は Enumerable を include してるので、
そっちのメソッドもチェックしる。
>>809
そうね。Hashに限らず何を継承(include含む)してるか見ないとね。
おれの場合マニュアル見るときFileを見るべきかIOを見るべきか
迷うことがよくあるw
リフレクションかなんか使って
オブジェクトが持ってるメソッド全部を
列挙できなかったっけ?
まあ列挙しただけじゃ使い方はわからないから
結局リファレンスを見ないとダメか。
>>811
できるしそういうブラウザもある。

でもやっぱり Hash や Array の場合、Enumerable のメソッドもマニュアルに
書いておいたほうが親切だと思うなあ。
813796:03/06/14 20:59
>>809
なるほど
今後はもっとチェックしまつ
irb使ってるか?
815デフォルトの名無しさん:03/06/14 21:59
irbってもっとカッコイイ名前だったらいいのになー。
iRuby?
ょぅι゙ょ
ムーア
伊良部でいいよ
irbと書いて I love Ruby と読む。これ最強。
電卓代わりに使ってる
>>821
電卓代わりならPerlとどっちがいいかな?
俺Perlつかってるけど
電卓代わりだったら、MAXIMAかSciLab、Risa/asirあたり
の方が強力だよ。
irb をログインシェルに使ってる香具師の数 →
0だな。
826822:03/06/15 01:05
>>823
全部知らないや・・・調べてみよ―っと
>>823
電卓というにはちとオーバースペックな気もする
俺はちょっとした計算は
emacsの*scratch*バッファでelisp使ってます。
俺はbcだな。
ちょっとした計算なら俺は M-: だな。
俺はexprだな。
俺はRだな。
俺は電卓だな
俺はcalcだな
俺は指だな。
俺は爪楊枝です
つまようじ最強
836822:03/06/15 02:46
>>835
計算してるときにケガしないように気をつけてね
俺は算木だな
俺はおなーにだな
>>827

elispって、(/ 3 2)が1になっちゃうんですけど、
その程度でいいってこと?
840デフォルトの名無しさん:03/06/15 11:57
晒しあげ。
俺は計算尺だな。
俺は脳内妄想電卓だな。
>>839
rubyって 3/2 が1になっちゃうんですけど(ry
exprって 3 / 2 が1になっちゃうんですけど(ry
俺は gosh だな。
>>843
必要に応じて
require "mathn"
int/int が rational なのは結局Cプログラマが多いせいなんだろうな
間違えた逆だw
100万回ループの所要時間を調べようと思ったのですが

starttime = Time.now.to_f
for i in 1..1000000;end
p [Time.now.to_f - starttime]

と、

def bench
starttime = Time.now.to_f
yield
p [Time.now.to_f - starttime]
end
bench {for i in 1..1000000;end}

では 1割くらい前者のほうが速いのですが、何故でしょう?
$ruby -rprofile hoge.rb
Range#each の速度が、トップレベルで使う場合と yield で呼び出された中で使う場合
で、かなり差があるように見えるんだけど、何か勘違いしている?
852849:03/06/15 19:47
def forloop
for i in 1..1000000;end
end

starttime = Time.now.to_f
forloop
p [Time.now.to_f - starttime]

だとさらに結果が違うよう。わけわからん。
853827:03/06/16 00:47
>>839
847 で答え出てるけど一応教えておく。
C でも 3 / 2 は 1 になるだろ!
小数値がほしかったら (/ 3.0 2.0) にしろや、ボケ。
>>849
後者はiがブロックローカル変数になるから。
>>853
だから、そんな面倒なことしてちゃ、今の時代生き残れないよってこと言いた
かったんよ。
rubyでcalc作ってる。自分用のoptionもたくさんあって、これ最強。
訳の分からないことを言いたがらないでください。
>>855
おまえは生き残れない
なるほど!伊良部の略だったのか、なるほど。
で、伊良部とrubyのつながりはどこにあるのだろうか?

わからない
>>853
ではCに合わせてるとみてよろしいか
860855:03/06/16 10:41
>>857
俺は生きる、生き抜いてやる。
計算機が欲しければ普通にmaximaとかmupad使うのがいいと思うけど。
お金があるならmathematicaとかmatlabを使えばいいわけで。
分数計算で十分なら irb -m でもいいだろうが変数の入った式は扱えない。
Emacsじゃ(/ 3 2) => 1 かもしれないけど
Xyzzyなら (/3 2) => 3/2 だよ。
有理数のまま計算していって、答えを出す手前で + 0.0 して実数に直すと
丸め誤差が少なくてイイ!
863862:03/06/16 21:55
/ と 3 がくっついてしまった。
誤: Xyzzyなら (/3 2) => 3/2 だよ。
正: Xyzzyなら (/ 3 2) => 3/2 だよ。
>>854
なるほど。たしかにbench {...} の前に i=nil を入れると速度差は誤差の範囲になりました。
しかしブロックローカルの変数って何で遅いんだろ?
Rubyの勉強にruby-dbiとPostgresを利用してるのですが、
select文で取得したレコードの、日本語の部分が化けてしまうのです。
原因・解決方法など教えてもらえませんか・・・?

866865:03/06/17 13:54
化けた文字は

テスト
\245\306\245\271\245\310

こんなかんじです。
>>866
pの多バイト文字の出力はそんな感じになる。
print/putsあたりを使えば?
868865:03/06/17 15:11
>>867
なるほど。print/putsは日本語表示されました。
pはprintの略なのかなぁと思ってました。
ありがとうございあす。
>>868
あるいは$KCODEを指定しとく。
>>864
メソッドスコープのローカル変数は配列になってるのに対して、
ブロックローカルはIDとVALUEのlinked listになってるから、
それをたどる分だけ遅くなる。
>>870
やっぱり Ruby Hacking Guide を読まなきゃならんか。
>>870
あんたすげーよ。勉強になった。
インスタンス変数へのaccessorは attr_accessor :v1, v2, ... を
使うことで簡単に定義できる。
では、クラスインスタンス変数へのaccessorはどうすればよい?
今は
class Foo
def self.v1=(v)
v1=v
end
def self.v1
@v1
end
end
とチマチマ定義している。
これをもっと簡単に定義したい。
>>873
class Foo
class << self
attr_accessor :v1,:v2,:v3
end
end
ようやくwww.cygwin/setup.exeにrubyが標準搭載されたので
次はRuby.netがVS.NETで使えるようにして欲しい。
>>874
ごっつさんくす。
かなーりたすかった。
今度おごるよ。
>>874

この書き方だとRubyスクリプトとしてはまったく問題ないけど、
RDocがうまく解釈してくれないね。惜しい。

(RDocのバージョン:RDoc Vbeta-2: 2002/07/22 21:07:31 (1.67))
878874:03/06/19 23:22
>>877
class Foo
 class << self
  # v1 - Foo's instance variable
  attr_accessor :v1
 end
 # v1 - Foo's attribute
 attr_accessor :v1
end

みたくコメントを工夫するしかなさそうだね。
>>878

あれー、それでうまくいった?
試したけど、どちらもインスタンス変数へのアクセッサと
してしか認識されなかったよ。
RDocのバージョンが古いのかな?
win32api の SendInput() を使いたいんですが、誰か書いてませんか。
引数が Struct 使う場合にどうすればいいのかよくわからないんです。
>880
配列をpackした文字列を渡す。
ブロックローカル変数をローカル変数と同様の実装にできないのはなんでだろ
>>882
Rite では直すのかな?
eRubyをはじめて使ってみたんだけど
index.rhtml:1:missing end delimiter (ERuby::CompileError)

こういうエラーがでてしまう。
何が悪いのだろうと調べて、キーワという文字列を抜くと動く。
日本語を含んだ文を書き出すには、なにか必要なのでしょうか。
よくは分からんがこういうことかな

require "kconv"
s = "ーワ".toeuc
d = ""
s.each_byte{|c| d << (c&0x7F)}
$KCODE = "n"
p s # "\241\274\245\357"
p d # "!<%o"

$KCODE を変えてみれば動くかも
Proc.new {|a|}.arity => -1 になるのが俺の悪い頭では理解できません。
引数の数だから、1 になるんじゃないかと思うんだけど、
なんで -1 になるのか誰か教えてー。
arityが-Nってのは、N-1個以上の引数を取れるって意味ってとこまではOK?
で、ブロック引数は多重代入と同じセマンティクスを持つので、

a = 1, 2, 3 # => a == [1,2,3]

と任意の個数の引数を取れるということ。

だったんだが、1.8.0 preview3ではそれは1になる模様。
888デフォルトの名無しさん:03/06/21 20:58
Paint Shop Pro 8のマクロ言語としてPythonが採用されたそうだ。
Rubyが採用された市販アプリって有るのか?
まぁ、PSPは米国製だからってのもあるんだろうが。

つか、Rubyを採用しようにも、簡単に組み込めるようなライブラリが
無いよな? Pythonにはそれが有るらしいが(伝聞)。
そのへんどうにゃのよ?
Rubyも組み込むのはそんなに難しくないよ。
最近の俺的には、ネイティブスレッドに対応してないのでRubyは選べないけど。
890886:03/06/22 00:31
>>887 さん
わかりやすい説明どうもありがとう。

> で、ブロック引数は多重代入と同じセマンティクスを持つので、
はじめて知りますた。。。
なるほど納得です。

> だったんだが、1.8.0 preview3ではそれは1になる模様。
ふむ!こっちのほうが俺にはわかりやすいです。

ためになる情報ありがとうございました。




>>887
> だったんだが、1.8.0 preview3ではそれは1になる模様。

lambda{|x|}[] とか def f() yield end ; f{|x|} が出来なくなるということ?
>>891
> lambda{|x|}[] とか def f() yield end ; f{|x|} が出来なくなるということ?
できるけど、警告が出る。

$ ruby -ve 'lambda{|x|}[]'
ruby 1.8.0 (2003-06-21) [i686-linux]
-e:1: warning: multiple values for a block parameter (0 for 1)

任意個の引数を取るときには|*x|、一個だけなら|x,|と書けば、1.6以前でも問題ない。

ちょうど同じ話題が出てる
ttp://jarp.jin.gr.jp/diary/200306c.html#200306211
>>888
Becky!用のRuby pluginってのはある。
あとtalkではたびたびアプリケーションに組込むって話がでてるけど、
具体的な製品名は分からない。
Rubyを自作アプリに組み込むHowToマニュアル出して欲しいな。
できれば、Win版とUNIX版両方で。
C++用だけどこういうのがあることはある。
ttp://metaeditor.sourceforge.net/embed/
>>892
ああ、それなら知ってるけど、どうしていまさら後方互換性をなくす方向に
動き出したんだろ。2.0への布石?
>>896
> 動き出したんだろ。2.0への布石?
そんなとこだと思うけど。
arityに関しては、たしかに分かりにくいという声が以前からあったし。
>>894
一時期の出版ラッシュのついでに出しておいてくれれば良かったのに。
>自作アプリへの組み込み
Cマガあたりに記事がなかったっけ?
Web上でも読めた気がする。
>>899
本じゃないが、erubyなんかはいい例にならないかな。
1.8.0 preview3出ますた。
902784:03/06/23 20:01
標準入力ってなんでopenできないの。

>ruby -ve "File.open '-'"
ruby 1.6.8 (2002-12-24) [i386-mingw32]
-e:1:in `open': No such file or directory - "-" (Errno::ENOENT)
from -e:1
- は標準入力ではないです。
標準入力は $stdin
あぁ。すんません。
具体的に質問します。

コマンドラインでファイル名が指定されたらそれを、
指定されなければ標準入力を開くって処理をしたいんです。

Perl だと
push(@ARGV, "-") if no @ARGV
foreach (my $file @ARGV) {
open(F, $file);
#ほげほげ
}

とかできて楽なんですけど、Rubyだとどう書くんですか。
ファイル単位で(ファイル名を意識して)処理したいんで、ARGFは却下です。
>>905
なんかいろいろ間違ってる・・・Perl久しぶりとはいえ・・・欝だ。
ARGV.each do |file|
f = (file == '-' ? STDIN : open(file))
begin
# ほげほげ
ensure
f.close unless f == STDIN
end
end
def reading(file, &block)
if file == '-'
yield STDIN
else
open(file, &block)
end
end

ARGV.each do |file|
reading(file) do |f|
# ほげほげ
end
end

>>905
>ファイル単位で(ファイル名を意識して)処理
ARGF.file や ARGF.filename 使えば。
なんで場合わけしなきゃいけないの。
tar だって cat だって UnixTool はみんな - が標準入力じゃないか。
なんで STDIN を特別扱いしなきゃいけないだ。
めんどくさいだけじゃないか。

#ほげほげ

そうか、いろんな - がありえるんだ
- が標準入力じゃなくてもいいんだ。
Perl がやりすぎなんだ・・・
ボクは Ruby が好きなんだ!
ボクはここいいたい!!
ボクはここにいてもいいんだ!!!

ところで amrita って便利ですね。
>>909
> ARGF.file や ARGF.filename 使えば。
うーん。そうなんですけど、なんかうまくいかなくて。

やりたいのはファイル名とファイルの全内容を
もとに処理をしたいのです。

def hogehego(filename, content)
# ほげほげ
end

↑こんな感じ。で・・・

while not ARGF.eof?
puts ARGF.filename
puts ARGF.file.readlines.size
end

こうすると最初のファイルしか処理されなくて、
じゃあ while not ARGV.empty? ってすると
標準入力から読み込んでしまってわけわからん。

ARGFの挙動が理解できないんですけど。
912784:03/06/23 23:19
>>911
こうすれば全ファイル処理された。

while not ARGF.eof?
puts ARGF.filename
puts ARGF.file.readlines
ARGF.skip
end

でもファイルを指定しなかった場合の挙動がいや・・・

というか誰か↓を解説してくれ。まじでわかんねぇ。

>ruby -e "puts ARGF.filename" hoge.rb
-

>ruby -e "ARGF.eof?; puts ARGF.filename" hoge.rb
hoge.rb
>>911
$ ruby -e '%w(foo bar).each{|f| File.open(f,"w") << "1\n1\n"}'
$ ruby -ne 'BEGIN{p ARGF.filename}; p ARGF.filename' foo bar
"-"
"foo"
"foo"
"bar"
"bar"
$ awk 'BEGIN{print FILENAME}; {print FILENAME}' foo bar

foo
foo
bar
bar
$
>912
ARGVで指定されたファイルを触るのをぎりぎりまで先送りにしたいからでは?
ファイルを開かないことには eof? の真偽を知ることが出来ないから
eof? のあとでは指定された名前のファイルの存在も分かる。
しかしfilenameを知るために(詳しくいえばfilenameで返される名前のファイルの
存在を保証するためだけに)ファイルを開くのは許せないとか。
存在を保証するためなら File::readable?(ARGV.first) という手もあるが、
readable? では実際に読みにいったときにファイルがまだあることを保証できない。
もっともこれだけでは最初にSTDINをさしている理由は説明できないがね。
915R:03/06/24 21:47
ルビー初めて2週間目の初心者です。
いま、自分で考えているオンラインゲームがありまして
それの実現に、Rubyを使ったサーバプログラムを考えているので
第1歩として、多人数向けのチャットサーバを作ろうと思い作り始めたのですが

多人数向けのエコーサーバは「Rubyライブラリ編」を参考に(ほとんどそのまま)で
つくり、うまくいったのですが、ある端末から他の端末へ文字を送る方法で
悩んでいます。

配列を使い、TCPServerのインスタンスを配列の中に入れようと考えたのですが
どうも、うまくいきません。
先輩方、どうかアドバイスをお願いいたします。
>>915
「どこまでやって、どこでつまづいたか」を具体的に書いた方が
回答を得やすいと思われ。
917R:03/06/24 22:08
>916
はい、了解しました。
エコーサーバを改造してこんな風に書いてみたんです。
require "socket"
gs = TCPServer.open(8888)
online = []
while TRUE
ns = gs.accept
print(ns, " is accepted\n")
Thread.start {
s = ns
online.push(ns)
while str = s.gets
x = 1
while x <= online.size do
online[x].write(str)
x+=1
end
end
print(s, " is gone\n")
s.close
}
end
うまくいけば、接続している人全部にメッセージを送ることが
できるはずなんですが、誰にもメッセージが帰ってこないのです。
自分なりに調べたところでは、配列の中身がいつの間にか
無くなっているっぽいのです。
>>917
とりあえず、while str = s.gets ... end の中がよくわかんないんだけど、
こんなんでどう?

online.each do |c|
c.write(str)
end

あとは、s.close のあとで online.delete(s) とか。
919R:03/06/24 23:35
>918
うまくいきました、ありがとうございます。
while str = s.gets ... end の中が間違っていたってことなんですよね
どこが良くなかったのだろ?
でも、online.each使ったほうが簡潔で解りやすいですね。

またお世話になるかもしれません。そのときは皆様よろしくお願いいたします。
>>919
クライアントが一つだけ接続に来たとき、そのソケットは online[0] のはずだが、
x = 1 から始まるので online[1] を参照にいき、online[1] == nil であるから、
nil.write(str) が実行される。この時点でそのスレッドは死ぬが、
デフォルトでは Thread 内で例外が起こっても黙っているので分かりにくい。
ruby -d server.rb のように -d つきで実行すると上の状況が分かるだろう。
>>917 もう見てないかも知れんが、
> Thread.start {
> s = ns
> online.push(ns)

もし online.push(ns) する前にメインスレッドに切り替わって
ns = gs.accept が成立すると、ns は予期しないものになっている。
よってこうした方が良い

Thread.start(ns) { |s|
online.push(s)

あるいはロジックは少し変わるがこれでも良い

online.push(ns)
Thread.start(ns) { |s|
922R:03/06/25 10:56
>920
配列は、0からはじまるのですか。
だからnilを参照してたのですね。
自分の間違えが、わかりすっきりしました。

>921
了解しました。
仰るとおりに、タイミングしだいではnsは
不定になります。
下のほうが、より確実っぽい気がするので
これでいってみたいと思います。

みなさま、ありがとうございました
def f0
aa = 111 #0
return binding
end
def f1(bb, a_bind) #1
cc = 222 #2
eval "p aa, bb, cc", a_bind #3
end
f1(333, f0)

上のスクリプトで、#3 の eval のとき、aa(#0), bb(#1), cc(#2)
の指すオブジェクトを eval に評価させる式の中でいっしょに使い
たいのですが、よい方法はあるでしょうか? この場合の結果は
111
333
222
が欲しいということになります。

質問の意図がわかりにくいかと思いますが、誰か教えてくれるとうれしい。
これじゃあかん?

def f0
aa = 111 #0
return binding
end
def f1(bb, a_bind) #1
aa = eval("aa", a_bind)
cc = 222 #2
eval "p aa, bb, cc" #, a_bind #3
end
f1(333, f0)
925923:03/06/25 14:56
>>924
解答ありがとう。でもそれではだめなんです。923で説明が足りなくてスマソ。

f1の定義の時点で a_bind のコンテキストに存在する変数aaについては知らんのです。

#3 のところでやりたいことは、a_bindにメソッドf1の定義で出てきたローカル変数を
追加したコンテキストで #3 の行の評価をする、ということです。以下のスクリプト
の方が923のより多少は意図が伝わりやすいかも…


def f0
aa = 111 #0
return binding
end
def f1(bb, expr, a_bind) #1
cc = 222 #2
eval expr, a_bind #3
end
f1(333, "p aa, bb, cc", f0) #4
926923:03/06/25 15:23
923のスクリプトは、私のやりたいことの意図を正確にあらわして
いませんでした、すまそ。以下のスクリプトみたいな方法で、とり
あえず問題は解決できそうです。

class Data
attr_accessor :aa
end

def hoge(bb, expr, bind)
data = eval("self", bind)
cc = 111
data.instance_eval(expr)
end

d = Data.new
d.aa = 222
bind = d.instance_eval { binding }

hoge(333, "p aa, bb, cc", bind)
なにー!せっかく考えたから送る

def empty_binding
  binding
end

def marged_binding(*bindings)
  dst = empty_binding
  bindings.each do |src|
    eval("local_variables",src).each do |var|
      id = eval(var, src).id
      eval("#{var} = ObjectSpace._id2ref(#{id})", dst)
    end
  end
  dst
end

def f0
  aa = 111                     #0
  return binding
end

def f1(bb, expr, a_bind)       #1
  cc = 222                     #2
  eval expr, marged_binding(binding, a_bind)
end
f1(333, "p aa, bb, cc", f0)    #4
928923:03/06/25 17:05
>>927
なんかすげー。理解するのにちょっと時間がかかりそうだけど、使えそうな予感。
ありがとう!
>>926
Dataは標準の組込みクラスで、new(1.6)やallocate(1.8)は定義されてない。
Data って Ruby API だけ使ってる人は知らない罠
>>930
まぁそうだろうな。
ともあれDataのインスタンスは作れないし、拡張ライブラリ使うならDataはい
じらんほうが身のため。
そりゃそうなんだけどDataってそれほど存在が知られてない割に
名前が一般的過ぎてよくないよね。
なんか、知らずに Data ってクラス作って(使って)ハマりそう・・・

つか、漏れは obj.id とか obj.hash とかでハマったことあり・・・
>>933
idははまったなあ。hashは知ってたんで、はまったことないけど。
Kernel#idは廃止予定。
__id__かobject_idならかぶらんだろ。
Data -> ExternalData とかに変更してほしい
937デフォルトの名無しさん:03/06/27 11:56
まずは、二つのプログラム
1.
while $in = STDIN.gets
$in.chomp!
print $in + "\n"
end

2.
while $in = "11"
print $in + "\n"
end

なぜ1のプログラムは動いて、2のプログラムは
動かないのでしょうか?
僕が考えると、1が動く方が不思議なんですが。
というのも、while文というのがwhileのうしろが
trueの時に処理を行なっているのなら、
上のプログラムのように、whileの後で代入をおこなっている(つまり、なにも値を返していない)
ような場合は、ともにエラーがでると思います。

どう考えればいいのでしょうか?
ありゃ、Dataってクラスは作れないのか。初めて知った。
とは言え、Dataという名前のクラスは作りそうで作らない気がする。
さて、まず>>937が釣か否かが問題となるわけだが
>>937は釣りである」の値はtrueとなるので問題ないと思います。
941937:03/06/27 12:49
釣りでないです。
プログラミング自体、畑違いなので
聞ける人がまわりにいません。
教えてください。お願いします。
>>937
2のほうも動くだろ。
943デフォルトの名無しさん:03/06/27 13:11
↓↓↓釣りにマジレス
>>937
次の二点を確認して、放課後までに職員室に来なさい。

・代入は値を返さない?
・偽はfalseとnil。では真は?
945デフォルトの名無しさん:03/06/27 13:22
C言語の関数で、rintとlogに成り代わる関数ってなんでしょう?
946デフォルトの名無しさん:03/06/27 13:27
>>945
C言語の質問?
>>946
rubyの質問なんですが・・・?
まず日本語の勉強を・・・
ライブラリ同士の名前空間の重複を回避したいのです、例えば、

hoge1.rb:
class Hoge
def hoge
"ほげ1"
end
end

hoge2.rb:
class Hoge
def hoge
"ほげ2"
end
end

があるとき、自前でファイルを開いて

require 'hoge1'

module A; end

File.open("./hoge2.rb"){|f|
A.module_eval f.read
}

p Hoge.new.hoge   #=>"ほげ1"
p A::Hoge.new.hoge #=>"ほげ2"

のようにやっているのです、もっとシンプルにTop Levelではなくユーザの導入した名前空間への
requireやloadのようなことを行う方法はありますか?
950945:03/06/27 19:19
>>948
私の発言のなにが解らないのか教えてもらえますか?
「C言語の関数で、」なら答えはC言語の関数でなければならないのだが…

もしも「C の rint と log に相当するのはRubyでは何?」ってことなら、
log(x) は Math::log(x) で rint(x) は x.round

ちなみに rint は C の標準関数じゃないよ。
>>950
句読点の使い方
>>949
今んとこ、ない。loadの第二引数にModuleを使えるように、という話はtalkで
ちょっとだけ出てるようだ。
>>938
作れないわけじゃないよ。

消しちゃうなり、Object以外を継承させれば別物になる。
class Object;remove_const(:Data);end
class Data < NilClass;end
955945:03/06/27 21:21
伝わっていることが解って安心しました。

> log(x) は Math::log(x) で rint(x) は x.round
ご教示ありがとうございます。
> C言語の関数で、rintとlogに成り代わる関数ってなんでしょう?

1.CのrintとlogにあたるものはRubyではどんな関数なんでしょう?
2.CではRubyのrintとlogにあたるものはどんな関数なんでしょう?

1だろうか、と思いきや2だったか。
rintがRubyにはないことから推理。まあCにもないわけだが。
推理してまで答える必要なし
959デフォルトの名無しさん:03/06/28 01:12
質問!OSXでTk使えるようになりませんか?
require "tk"とすると見つからないようです。
/usr/lib/ruby/1.6/tk.rb:7:in `require': No such file to load -- tcltklib (LoadError)
from /usr/lib/ruby/1.6/tk.rb:7
from ./btn:3:in `require'
from ./btn:3
960945:03/06/28 01:32
man rint
(snip)
準拠
rint() 関数は BSD 4.3 に準拠する。その他の関数は C99 から導入された。

(snip)
失礼しました。
man rint
(snip)
HISTORY
     A rint() function appeared in Version 6 AT&T UNIX.
(snip)
失礼こきます
962デフォルトの名無しさん:03/06/28 13:23

[A,B0,B1,C0,C1,D]を
foo.a #->A
foo.b[0] #->B0
foo.b[1] #->B1
foo.c[0] #->C0


と代入する方法を教えてください
963962:03/06/28 13:30
競馬のデータ(固定長レコード形式)から構造体を作成するときに躓いてしまいました
言葉足らずなところもあると思いますが、よろしくお願いします。
>>962
foo.a = A
foo.b[0] = B0
foo.b[1] = B1
foo.c[0] = C0

foo.a, foo.b[0], foo.b[1], foo.c[0] = [A,B0,B1,C0,C1,D]
>>960-961
ハイハイ、とりあえず、rintはPOSIXやC99にはない環境依存な関数だってことはわかったからね。

967デフォルトの名無しさん:03/06/28 19:39
Rubyの本はもう出ないんですか?
最近さびしいので。
>>967
書いてくれ。
969967:03/06/28 20:37
どんな本がいい?
walrus
rubyでOSを作る本
972デフォルトの名無しさん:03/06/28 22:25
rubyでrubyを作る本
973デフォルトの名無しさん:03/06/28 22:28
RUNIX
rubyが必要なくなる本
>>949
モジュールを名前空間独立に書くっていつでもできるの?
例えば、以下の状況で A#bar() がこの A::foo() を
呼ぶことを保証できるんだろうか?

module A
def A::foo() end
def bar() A::foo() end
end
>>975
> module A
> def A::foo() end
> def bar() A::foo() end
> end
この後でA.fooを再定義されたら、当然「この A::foo()」が呼ばれることはないけど、
クラス/モジュールやメソッドの定義時の名前空間のネストは実行時に再現される。
dlopen関係を使って、動的にsoライブラリの関数を呼び出す方法ってありませんか?
RHGの第二版が欲しい。
Riteが出てからじゃないか?
981980:03/06/29 22:30
これも<関連スレ>に入れる?

Rubyの実装に疑問あり!
http://pc2.2ch.net/test/read.cgi/tech/1004873294/
982980:03/06/29 22:38
あとこういうのもあるんだが。

【Ruby】RubyでCGI
http://pc2.2ch.net/test/read.cgi/php/988948655/
ついでにこれもよろ。
Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/index.html
【UNIX板】rubyを語るスレッド 3
http://pc.2ch.net/test/read.cgi/unix/1045705000/

【UNIX板】goRua(Ruby/Gtkによる2chブラウザ)ってどうよ。
http://pc.2ch.net/test/read.cgi/unix/1008120213/

【プログラム板】Ruby について Part 3
http://pc2.2ch.net/test/read.cgi/tech/1042004759/

【プログラム板】Rubyの実装に疑問あり!
http://pc2.2ch.net/test/read.cgi/tech/1004873294/

【WebProg板】【Ruby】RubyでCGI
http://pc2.2ch.net/test/read.cgi/php/988948655/

【WebProg板】ゲームを作ろう!【PHP】【Perl】【Ruby】【ASP】
http://pc2.2ch.net/test/read.cgi/php/1030267927/

【WebProg板】/*Perl.Ruby.php以外でCGI*/
http://pc2.2ch.net/test/read.cgi/php/1004107967/
986980:03/06/30 00:17
<title>Ruby について Part 4</title>

オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。

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

= 前スレ
* Ruby について Part 3
  http://pc2.2ch.net/test/read.cgi/tech/1042004759/

= 過去スレ
* Rubyについて Part 2
  http://pc3.2ch.net/tech/kako/1028/10289/1028906179.html
* Rubyについて
  http://pc3.2ch.net/tech/kako/1012/10120/1012096319.html

987980:03/06/30 00:17
= 関連スレ

== [UNIX板]
* rubyを語るスレッド 3
  http://pc.2ch.net/test/read.cgi/unix/1045705000/
* goRua(Ruby/Gtkによる2chブラウザ)ってどうよ。
  http://pc.2ch.net/test/read.cgi/unix/1008120213/

== [プログラム技術板]
* Rubyの実装に疑問あり!
  http://pc2.2ch.net/test/read.cgi/tech/1004873294/

== [WebProg板]
* 【Ruby】RubyでCGI
  http://pc2.2ch.net/test/read.cgi/php/988948655/
* ゲームを作ろう!【PHP】【Perl】【Ruby】【ASP】
  http://pc2.2ch.net/test/read.cgi/php/1030267927/

= その他リンク
* Ruby Weekly News @ Ruby Garden
  http://www.rubygarden.org/rurl/html/
* <rubyXML/>
  http://www.rubyxml.com/
988980:03/06/30 00:18
でいいかな? RD風味。
あぁ、すまん、<rubyXML/> は半分冗談。
それよりこっちのがじゅーよー。

Matzにっき
http://www.rubyist.net/~matz/
990980:03/06/30 00:32
りょーかい。「その他」でOK?
991980:03/06/30 12:36
異論はないものとみなしてたてますた。

Ruby について Part 4
http://pc2.2ch.net/test/read.cgi/tech/1056944114/
乙であります。
>>966

C99 は BSD 4.3 より新しいんだから >>960 からは「rint がC99 にない」と
いう結論は出ないと思うんだが。

というかrintはC99にあるよ。(7.12.9.4)


ルビー世水楽ね?
ああ、次スレあるのね
じゃあ埋めるわ
996
a
書くことがない
まいいや
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。