Rubyについて Part 8

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

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

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


= 過去スレ
: Rubyについて Part 6
http://pc2.2ch.net/test/read.cgi/tech/1067623825/
: Rubyについて Part 5
http://pc2.2ch.net/tech/kako/1063/10630/1063028224.html
: Ruby について Part 4
http://pc2.2ch.net/tech/kako/1056/10569/1056944114.html
: Ruby について Part 3
http://pc2.2ch.net/tech/kako/1042/10420/1042004759.html
: Rubyについて Part 2
http://pc3.2ch.net/tech/kako/1028/10289/1028906179.html
: Rubyについて
http://pc3.2ch.net/tech/kako/1012/10120/1012096319.html
2おかん!見てるか!?:04/03/23 02:15
= 関連リンク
: Matzにっき
http://www.rubyist.net/~matz/
: Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/
: <rubyXML/>
http://www.rubyxml.com/
: ruby-cvs
http://rrr.jin.gr.jp/rwiki?cmd=view;name=ruby-cvs
: Ruby hotlinks 五月雨版
http://znz.jin.gr.jp/samidare/
: リファレンス
http://www.ruby-lang.org/ja/man/

= 関連スレッド
: rubyを語るスレッド 4
http://pc.2ch.net/test/read.cgi/unix/1060537252/
>1乙
4おとん、おかん:04/03/23 03:01
>>1
よくやった
例の比較サイトにリンク張れや
>>5
自分で張れや知障が
>>5
例のってどれだよハゲ
>>1
CGIなので恐縮なのですが、以下のCGIを実行するとrubyが固まります。

具体的には、CGIと同じフォルダに65KBぐらいの大きさの a.dat を用意し、
以下のCGIを実行して現れるボタンを押すと固まります。

#!/usr/bin/ruby
print "Content-Type: text/html\n\n"
if !ENV['CONTENT_TYPE'].nil?
  File.open('./a.dat') do |f|
    while str = f.gets; print str; end
  end
else
  print "<form method=post><input type=text name=a><input type=submit></form>"
end

環境はOS Windows、Ruby 1.8.1mswin32、Apacheで発生しました。
ちなみにLinuxだとうまくできてしまいました。
どうにかしてちょ(´・ω・`)
>>9
a.datって中に改行ある?

なんとなく、
  File.open('./a.dat', 'rb') do |f|
    while str = f.read(1024); print str; end
  end
とすればいいような気がするが、試してないし根拠もない。
Tabの幅が8文字分じゃないときってどんなとき?
そんな設定をするやつの気が知れんのだが。
なぜそんな設定をするやつのことを考慮しなきゃいけないのか。
>>11
もうちょっと世界を知れ。
13デフォルトの名無しさん:04/03/23 12:18
blade止まってるの?
>>11は池沼か?
>>13
ヲレもそれおもった。
MLはとらずに、いつもblade見ている人間なので。
>>10
改行あります。
a.datは2ちゃんのdatファイルを想定してます。
今試しているdatでは167行目を超えると反応なしに。

改行ばっかりのファイルを作成してみたら8000行くらいで反応なしになりました。
(ファイルサイズは56KBくらい)

>>10のコードも試してみましたが駄目でした。
Linux上でテストしようかなぁ(´・ω・`)
なんとなく、print するたびに STDOUT.flush すればいいような気がするが、試して(ry
IO.foreach じゃダメなの?
19デフォルトの名無しさん:04/03/23 18:34
def hoge(buf)
sjis = Regexp::compile("[\x82\x9f-\x82\xaa]", nil, 's')
buf.each do |str|
if ($sjis == 1) # 無駄なループを減らす
break
end
case str
when sjis
$sjis = 1
end
end

buf.each do |str|
if ($sjis == 1)
なんとか
end
かんとか
end
end
今こんな感じに、処理すべきテキストがSJIS の場合$sjis に1 が
代入されるようにしているのですが、ものすごく非効率的な感じがします
もう少しきれいに書けないでしょうか?
ああ、tabのインデントが消えてしまった..
>>20
ネタかよ!
こんなんとか。
# グローバル変数やめれ。

require "nkf"

def hoge(buf)
sjis = (NKF::guess == NKF::SJIS)

buf.each do |str|
なんとか if sjis
かんとか
end
end
23デフォルトの名無しさん:04/03/23 20:18
def hoge(buf)
sjis = Regexp...
jis = Regexp...

buf.each do |str|
if ($ja == 1) # 無駄なループを減らす
break
end
case str
when sjis, jis
$ja = 1
end
end

buf.each do |str|
if ($ja == 1)
str = NKF::nkf('-e', str)
end
なんとか
end

19は簡略化して書いたんですが、本当はこんな感じのことがやりたかったんです。
nkfがもの凄く重いので事前に日本語だとわかってるときだけ動いて欲しい。
上の日本語判定のところがどうにも無駄なような気がして
NKF::guess は NKF と言いながらも nkf の機能は一切使ってないので、
そんな重くないかも知れないし重いかも知れない。
しかし nkf ってそんな重いかね?
そろそろ女の子の落書き希望
2616:04/03/24 01:29
>>17-18
返信ありがとうございます。
flush と each を試してみましたが、やはりファイルが大きいと固まります。

ただ、テスト環境でWindows使ってるだけで、最終的にはLinux上で使うので、
50KBぐらいの小さいファイルでテストすれば動作するようなのでそれでやります。
>>23
$ja = 1のところですぐにbreakしないのはなぜ?
guessが重いってどういう場合なんだろ。
ほかの部分がほとんど何にもしてないような場合なんじゃないかな。
しょーがねーなー>>25の期待にこたえてオネエ口調でスレを展開しますわよ!

nkfってCで書かれたやつだろ。あっ、ですわよね。
Rubyで判定コード書くより相当早いんじゃねーの?あっ
>>27
buf.each do |str|
case str
when なんとか
$ja = 1
break #ここでbreakしてもcase~whenを抜けるだけだと思ってたから
end
かんとか
end

あれからしばらくしてbreakですぐ抜けるよう書き直しました
で、なんでグローバル変数なんだ
>>31
undefined local variable or method `ja' for #<Probability:0x402881d0> (NameError)
こういうエラーが出るから
これよんだらローカル変数の使い方わかった
最初に0代入しとかなきゃならんのか
http://www.ruby-lang.org/ja/uguide/uguide22.html
宣言なり初期する方が普通な気も?
つか、グローバル使うくらいならインスタンス使う方が普通な気も?
34.each do { |line| sub("初期する", "初期化する言語の") }
>>35
それやっても34は変わらないぞ。
34.sub!(/初期化する/, '\1言語の')
だから\1を使うなと(ry
>>37

え、じゃ、何使うの?
sub の第2引数使うの禁止
There's more than one way to do it.
ですよ。
>>38
一目では理解できないスクリプト用。
というか、 line.sub だろ。
tabでインデントしないってことは、
じゃあtabって一体何のためにあるんだ
tab移動するためだな
>>44
tab コードの話と tab キーの話がごちゃまぜになってない?
8tabにして空白の多いテキストの簡易圧縮に使ったり、
エクセルでタブ区切りでcsvに吐かせたり、
まあいろいろある。
REXML の Encodings に "UNILE" ってのがあるんだけど、これ一体何者?
UNIcode Little Endian 略して UNILE ですかね?
>>43
補完
>>49
いや、だから、「tab キー」の話をここでするのは混乱するからやめたほうが。
じゃ、0x09 はエディタ等で補完に使う。
>>38
34.sub!(/(初期化する)/) do $1+'言語の'; end

ブロックと$1をつかう。かな?
>>37じゃないからわからn
3インデント推進委員会の結成を今ここに発表致します。
なんでもいからMatzに宣言させとけ。
そうすれば黙っておとなしく従うよ。
もともとインデントサイズ・キャラクタコードなんて何の必然性もないんだからな。
RGSS は似てるだけの別実装かと思ってたら Ruby ベースか。
ネイティブスレッドと相性が悪い問題とかどう解決したのか知りたいね。
3インデント推進委員会の結城を、に一瞬見えた。
>>52
なぜ $& を使わないのかと
rubyってややこしいんだな
perlにするか。
5952じゃないけど:04/03/25 11:33
>57
へぇー $& って知らなかった。
$1 よりもわかりにくくない?
俺は可読性をとくに高めたいときは
Regexp.last_match[0] とか Regexp[0] って
冗長にタイプするときもあるよ。
でも余計なリテラル増えるし。
>>59 sed/awk/Perlで常識<$&
# 更にPerlだと遅いから使うなというのも常識
## Rubyでは $&, $', $` は遅くない
>>52
なぜブロック引数を使わないのかと

個人的には、ブロック付き sub, gsub(あと scan)は
ブロックに MatchData を渡して欲しいかも。
MatchData が来ても便利だけど、
あえて言うけど「一般的な」用途向けには、
String が来たほうが便利というかタイプ数が少なくなると思う。
MatchData だとリテラル増えるし、別に Regexp.last_match でアクセスできるし。
そのへんのバランスはよく考えられてると思う。角度とか。
>>62
何の「角度」?


まあ、ruby は「統一性」優先よりも「使用感」優先だもんな。
64デフォルトの名無しさん:04/03/29 05:32
if str =~ /regexp/ then ... end
では返り値0の時困るんですが
どう書けばいいですか?
できればperlから離れ過ぎない書き方がいいです
65デフォルトの名無しさん:04/03/29 08:41
>>60
> # 更にPerlだと遅いから使うなというのも常識
> ## Rubyでは $&, $', $` は遅くない

$ time perl -e 'for(1..1000000){/(\d+)/;$s+=$1}print "$s\n"'
500000500000
1.79user 0.00system 0:01.79elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

$ time perl -e 'for(1..1000000){/\d+/;$s+=$&}print "$s\n"'
500000500000
1.68user 0.00system 0:01.68elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k

「Perlだと$&が遅いという常識」はデマだと分かりました
RubyもPerlのバッドノウハウ大量に受け継いでるんだよな。
ていうかRuby自身が新規のバッドノウハウ撒き散らしててウザ杉。
ごめん、>>63 だった (角度の話ね)
>>68
よく分かったよ。
>>59=62?
> MatchData だとリテラル増えるし
何の話だ? コードに書いた以上のリテラルができることはないぞ。
おそらく「リテラル」の意味するモノが違うんだと思われ
MatchData#[] とかで使うリテラル増えるだろ。
String#gsub に渡すブロックの引数が
String になる場合と比べてね。
ひょっとしてMatchData#[]の引数のことをいってるのか?
>73
そうそう
KDevelopってRubyサポートしてるらしいけどどの程度のことをしてくれるの?
クラス定義ではないところでインスタンスメソッドを使うことはできますか?
やりたいことは、ERB::Util#escape_html()ってのがあるんだけど、これをCGIスクリプトで使いたいの。
でも暮らすメソッドじゃないから、CGI.escapeHTMLのようには使えない。
importeかextendでなんとかなるのかと思ったけどできないし。
インスタンスメソッドをインスタンスを作らずに使うことはできない。
インスタンスに対して作用するか、インスタンスの情報が必要かだか
らこそインスタンスメソッドにするわけだ。もしインスタンスが必要
でないなら、クラスメソッドにしてそれを使うか、module_function
にしたほうがいい。

ところで、標準のerb.rbにはERB::Utilなんてないようなんだが。
>>77
あるよ。
$ grep Util /usr/lib/ruby/1.8/erb.rb
# ERB::Util
module Util
あと
http://www2a.biglobe.ne.jp/~seki/ruby/erbway.html
とか。

いや、Rubyなら特異メソッドなりを使えばなんだってできるような気がしたもんだから。
やっぱ無理っすか。
ERB::Util.h()はクラスメソッドもつけて欲しかった。require 'cgi' するしかないか。
escape_html じゃなくて、html_escape な。
とりあえず自分で module_function したら?

module ERB::Util
 module_function :html_escape
end

p ERB::Util.html_escape("&") #=> "&"
>>76

% ruby -rerb -e 'include ERB::Util; p html_escape("<p>")'
"<p>"
% ruby -v
ruby 1.8.1 (2003-12-25) [i686-linux]

という話ではなく?
8180:04/03/29 10:15
すまそ。出力は、
"&lt;p&gt;"
>>80
あれーなんでできるの?おれはぜんぜん出来なかったのに・・・
と思ったら
>>79
メソッド名を間違えてただけでした。真できます。
>>82
本題は解決したようですが。
これって明らかにクラスメソッドであるべきだと思わない? >all
もしそう思ったら、ぜひメンテナ(咳さん)に報告してあげてよ >>79

こういう細かい改良の報告を積み重ねる事こそ、バザールモデルの
力の源だと思うのだけれど。
# やけに高尚になってスマソ
>>83
クラスメソッドにしてしまうとクラス名つけないと使えなくなるのでそれはそれで不便だろう。
どちらの形でも使えるようにモジュール関数にすべきだという意見なら賛成だな。

自分で>>76のようにすれば今のままでもいいといえばいいが、はじめからそうなってた方が
なにかと便利だろうし。
手持ちのログは以上です。
>>64-67 には、流れを切ってしまってスマンかった。

それと、>>72, >>74 の名前は以下になってました。
>>59=>>62
変更しわすれますた……ごめんなさい。
8683:04/03/29 10:44
>>84
そうそう、それが言いたかった。(汗

>>85
お疲れさまっす。
>>84の本文の中の「>>76のようにすれば」は「>>79のようにすれば」ですな。
88○| ̄|_:04/03/29 11:26
>>87
修正どうも
89デフォルトの名無しさん:04/03/30 23:45
class FooTest < Test::Unit::TestCase
def test_1
end

def test_2
end
end

とあって、test_2 だけ実行したいときはどうすればいい?
コマンドライン引数でやれるとのことでしたが:

$ ruby footest.rb test_2

cygwin rubyではできませんでした
他でも多分、できないと思うんですけども
>>89
ruby -r footest -e 'footest = FooTest.new; footest.test_2'
Rubyがいつまでもマイナーな原因の一つが判明しました。
それはRWikiがぜんぜん広まらないからです。
RWikiは、インストールの難しさもあるけど、それ以上に見た目のデザインがダメすぎます。
英語ばっかりで恐いし、色も気持ち悪いです。
こんなんじゃ一般プログラマは誰も使う気にならないでしょう。
Rubyの未来のためになんとかしてください。

PukiWiki
http://pukiwiki.sourceforge.jp/pukiwiki1.4/pukiwiki.php?FrontPage

RWiki
http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=top
つーかなぜRWiki?Hikiでいいじゃん。あとBitChannel。
そんなのあったのか、HikiもBitChannelもいいねー
Rubyを使っていることを全面に押し出してもらいたい。
個人的にはBitChannelに期待
コミュニティとかなんとかしろとか言ってる奴は、いろいろと勘違いしてるんじゃなかろうか。
>>95
短く書きすぎ。

「どう」なんとかしろとか言っている奴が、「何を」いろいろと勘違いしている
のかを言わないと。
コミュニティとかなんとかしろとか言って(〜中略〜)ろと勘違いしてるんじゃなかろうか。
98RPI ◆3x0ES2jpL2 :04/04/01 00:37
RPIC のお知らせ。

Ruby Professional Institute は、Ruby の専門家それぞれのレベルを測るために、
各国共通の基準となる認定制度 RPIC の創設を計画中です。
# RPIC は「アルピック」と発音します。
Ruby の専門家の雇用主や契約先といった団体組織や専門家自身のニーズを満たす
技術者資格を目指しています。
資格は、Level 1 (初級)、Level 2 (中級)、Level 3 (上級) の3つに
分かれる予定です。
Level 1 の試験内容は、逐次、このスレで発表があります。
>>95
さらに短く書くと。

「クレクレ君うざい」
Rubyってまだやってたんだね。いや、煽りじゃなくて。
どんなところで使われてるの?
>>100
Javaの代わりに決まってるだろ?
煽りはドトネトすれいってやれよ。
>>98
なんじゃこりゃー
Rubyもなんか認定試験がつくようになったんだね
>>98
知らなかった、Rubyの資格ができるとは。
やっぱりスクリプト言語が社会的に認知されるようになって来た、ということかな?
参考になりました。サンクス。
コピペ失礼。



まつもとひろゆき氏は4月1日、自身が開発するオブジェクト指向スクリプト言語の次世代実装、通称Liteのβバージョンを発表した。
LiteのLはLispを意味し、LiteはすべてEmacs Lispによって書かれている。このため移植性は非常に高い。

この他のLiteの優れた特徴としては
・動作の重量感
・「;;」によるコメントアウトの実現
・新標準ライブラリ「psychiatrist」
・Kernel#car・Kernel#cdrなどを実装
・処理系自身がGCの恩恵を受けるため、segmentation faultとは無縁
・「)」を文の終端とし不要な「(」を無視することによって、カッコまみれのLisp風新文法を実現
・いちいちEmacsを立ち上げる必要があり、思考が寸断され同氏の掲げる「苦しいプログラミング」を体感できる
・新正規表現処理エンジン「Onigoroshi」により、Emacs Lisp由来のバックスラッシュを多用した分かり辛い表記に対応
などが挙げられる。

ダウンロード開始時期は未定。
質問です。
load と require の違いって何ですか?
load も require もロード&実行するみたいなんですが。
>>105
前スレでもあったな。その質問。
requireは同じものを1度しか読まない。
loadは呼ばれたら必ず読む。

で、合ってる?
>>105
リファレンスマニュアルのFAQにあるから読んできなされ。
ttp://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby+FAQ
次からは質問する前にこことマニュアルをチェックしてくだされ。

わかんなかったら require だけ使ってれば問題ないと思うよ。
109105:04/04/01 23:48
>106-108
ありがとうございます。
FAQだったようですみません。
マニュアルは読んだのですが、「load が必ず読む」ということが
明記されていなかったので、両者の違いがみいだせず
混乱したしだいでございます。
以後、FAQ を気をつけて読むように致します。
>>109
誰かが書き直してくれたよ(君かもしれんが)。
今年は上出来なRubyジョークはあったのかな。
>>111は騙されたことに気づいてないだけ。
113デフォルトの名無しさん:04/04/02 05:49
>>98, >>104
明白に april fool って分かるな…。
114102:04/04/02 10:25
>>113
なにぃー。確かに >>98 がgoogleに引っかからない…。騙された orz
マジで騙されたのかよ?
正直なところ >>104 はつまらなかった。
116スクリプト未経験者:04/04/02 18:49
Rubyって将来性あるの?
>>116
あんたよりはある。
>>116
おれよりもある。
もっと必死こいてRubyで金儲けするやつがいればいいのに。
>>119
何を必死こくの?

RZope とか、RCSV とか、RSubversion とか?
256倍シリーズとかボッタクリにしてもひどすぎると思うけどな。
アフォか。
Zend社のようなことを言ってんだよ。
なんだ妄想か。
Zendは金儲けになってるのか?
256倍シリーズ… あれはあれで役に立った
暇潰しの読み物としてな
RaccとRubyUnitは普通に役に立ったけどな。
網道は後半がビミョー。場外乱闘は買って損した。
256倍を読んでRuby/Tk覚えて、さあ実戦投入だと思ったら
リファレンスが尻切れトンボだった罠。
DBIのやつ買おうと思って立ち読みしたら、
半分以上違う話で、さすがに金を出そうとは思えんかった。
>>128
> DBIのやつ

買っとけよ!話のネタになるだろ!
>>115
まあ、好意的に書くと、
「Emacs由来のバックスラッシュ多用正規表現」というのにはそれなりに同情。
Rubyでいい本ってなんかないの?
前 UnixUserで連載してたやまだあきらってひとは、
なかなかいい記事書いてたから彼の本買ってみたいんだけど
>>131
http://www.amazon.co.jp/exec/obidos/search-handle-url/index=books-jp&field-author=%E3%82%84%E3%81%BE%E3%81%A0%20%E3%81%82%E3%81%8D%E3%82%89
ruby way は訳書だが、初心者向き。
rubyアプリケーションプログラミングは、もうちょっと中級向き。
SWS/SDSって無くなっちゃった?
>>132
あとはリファレンスに「プログラミングRuby」かね。
これくらいあれば十分かな。
>>132 >>134 >>135
ありがとうございます。
Ruby way は探したんですけど、なかった(´・ω・`)。
137131:04/04/04 10:20
あっ。 >>136>>131 です
138デフォルトの名無しさん:04/04/04 16:54
Ruby/Tkが働かなくて困っています
環境:Windows98 + Ruby1.8.0(mswin32版)

このアプリケーションの実行に必要なライブラリファイルの1つが見つかりません
-D:/DEVELOP/Ruby/lib/ruby/1.8/i386-mswin32/tcltklib.so (LoadError)

と怒られてしまいます。ですが
D:\DEVELOP\RUBY\lib\ruby\1.8\i386-win32\tcltklib.so
は所定の場所に見つけることができました。

Tcl/Tkを D:\Develop\Tcl以下に導入したので
RUBY_TCL_DLL=D:\Develop\Tcl\bin\tcl84.dll
RUBY_TK_DLL=D:\Develop\Tcl\bin\tk84.dll
で環境変数を与えています。
Tcl/Tkのデモスクリプトが実行できたのを確認しました。

ためしに同じスクリプトをmingw版で実行するときちんと通ります。
cygwin版はmswin32版と同じでLoadDrrorが出てしまいました。

インストールしたファイルは
ftp://ftp.ruby-lang.org/pub/ruby/binaries/
から落としたバイナリ版です。

これはmingw版を使えってことなのでしょうか。
何かよきアドバイスをお願いします
D:/DEVELOP/Ruby/lib/ruby/1.8/i386-mswin32/tcltklib.so (LoadError)
D:\DEVELOP\RUBY\lib\ruby\1.8\i386-win32\tcltklib.so

よーく比べてみよう
140138:04/04/04 22:23
すいません、タイプまちがえました。

D:/DEVELOP/RUBY/lib/ruby/1.8/i386-mswin32/tcltklib.so (LoadError)
D:\DEVELOP\RUBY\lib\ruby\1.8\i386-mswin32\tcltklib.so
>>133
ttp://www.starware.one.pl/software/sws/index.html
それか、おとなしくCGIKitつかっとけ。どっちも似たようなもんだ。
>>138
よくわからんが、D:\Develop\Tcl\binにPATHを通してみては?
143138:04/04/05 12:41
D:\Develop\Tcl\binにPATHを通してみましたが
やっぱりLoadErrorと言われました。
win32版はあきらめて
動いてくれているmingw版を使うことにします。
>>141

WebObjectsを参考にしているだけあって、生産性の向上はかなり微妙だが
何も使わないほうがよいと漏れは思うよ
アナルバクバクおじさん = るびきち
musya たんと食い歩きオフ会のようなものは開催しないのでつか?
花見もいいのだけど。
「duck type」ってどういう意味?
>>148
サンクスコ
musya たんって誰だ?
ちょんまげが乱れた落ち武者を想像してしまったぞ。
>>150
knuタンだ。FreeBSD界ではportupgradeの作者として高名かな。
152デフォルトの名無しさん:04/04/07 09:57
http://www.enterbrain.co.jp/digifami/products/rpgxp/shinkinou.html

RPGツクールでRubyが使えるようになるんだってさ。一ヶ月近く昔のニュースだけど。
>>150
本人の表記に従うなら"musha"のはず。
>>152
スレ立つたびに宣伝レスするのやめれ。
knuセソセイの日記
http://www.musha.org/~akinori/diary/
>>155
だから、そのアドレスは 301 (Moved Permanently) だって。
正しくはこっち
http://d.akinori.org/
>>154
前スレにあったの?
スマソ
1589:04/04/07 22:57
>>9 です。今さらですが現象報告です。
ruby が固まると書きましたが、同じようなコードをperlで書いても固まったので、
ruby ではなくapacheとか環境が問題っぽいことがわかりました。
お騒がせしました。
>>152
 ┌-┴-┐   l             l
 ├──┤   |  _  l        -┼─
 ├──┘  ̄| ̄ ヽ |   _    | ─-
  |  l /     |   │   ̄   ヽ   |
 ⊥-ーヽ、_    |   ヽl     _ノ  |  ヽ__ o
File.basename ってOSによって動作違うんですか?
Windows:
  File.basename('d:\kirai\demo\suki') #=>sukiが得られる
Linux:
  File.basename('d:\kirai\demo\suki') #=> d:\kirai\demo\sukiが得られる
できれば動作を一緒にしてもらいたかった…。
どっちにあわせろと?
>>160
OS によって同じ動作にしたければ、普通はこうすると思うけど。
File::basename('d:/kirai/demo/suki')
つーか、touch d:\kirai\demo\suki で d:kiraidemosuk 作れるし
ls d:\kirai\demo\suki で引っかかるし
>>161
どっちかというとこっち。
File.basename('d:\kirai\demo\suki') #=>sukiが得られる
>>162
ありがとうございます。やっぱりその方法ですか。trでもしときます。
>>163
それはいいんですが、File.basenameではベース名が取得できてほしいんです。
今作ってるものはCGIなんですが、その中で \ 区切りパス文字列をブラウザが送ってくるもので…。
いちいちtrするのも・・・。
Linuxでは\はパス区切り文字じゃないんだからしょうがねーじゃん。無茶言うな。
>>164
> その中で \ 区切りパス文字列をブラウザが送ってくるもので…。

そのへん詳しく教えれ。
正直、2ch向けのレスは書いてて疲れますね。「wait(2) くらい知っとけよ!」って思ってしまう。
書けるやつが書きたいときに書けばいい。
自分がいなくてもスレは回る、地球は回る…('・ω・`)ショボーン
ばーかばーかばーか
>>165 正直スマンカッタ
>>166
CGIなんで微妙にスレ違いですが、multipart/form-data のfilenameの部分です。
↓の filename="D:\data\ruby\a.rb" の部分です。

-----------------------------7d45c21102aa
Content-Disposition: form-data; name="uploadfile1"; filename="D:\data\ruby\a.rb"
Content-Type: application/octet-stream

print File.basename("http://www.2ch.net/2ch.htm"), "\n"
print File.dirname("http://www.2ch.net/2ch.htm"), "\n"

-----------------------------7d45c21102aa--
>>167 うーん、unix系でも同じような動きがいいんだが。正直スマンカッタ
>>170 正直スマンカッタ
>>171
File.basename とは別に CGI::XXX.basename みたいなのを作って、
そっちはプラットフォームにかかわらず DOSISH 対応、ってのがいいやり方なのかなあ。

うpろだ作るなら避けて通れない問題っぽいけど、普通はどうしてるんだろうか。
ちらっと調べたら、
File.basename(params['foo'][0].original_filename.gsub(/\\/, '/'))
みたいなことしてるのを発見したけど。
テキストファイルかバイナリファイルか判別する方法ある?
perl の -T -B みたいな機能。
>>173
ないと思う。

……っていうか、perl にはそんな演算子があることを始めて知った。
「テキストファイル」と「バイナリファイル」の定義を知りたいものだ。
NKF を使えばいいんじゃない?
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=NKF
>>172の言うとおり、CGIクラスが持つべきだろうね。
>>174
ファイルの先頭の数百バイトを見て判断してるらしい。
ちなみに日本語入りファイルはバイナリファイル。
Rubyのmd5生成ってバグ持ち?
オフィシャルのサンプル使ってもmd5、md5sumとかで生成した値と一致しないんだけど?
「オフィシャルのサンプル」って具体的にはどれ?
>>171
> うーん、unix系でも同じような動きがいいんだが。

UNIX だと '\' もファイル名に使えるからあまりよろしくないんじゃないかと。
'/' なら UNIX でも DOSISH でもファイル名に使えないので、
'/' に path 区切りを揃えてから File::basename に食わせるという方が良いと思う。
>178
D:\WINNT\system32>ruby -rmd5 -e "p Digest::MD5.hexdigest( ARGF.read() ) " NTOSKRNL.EXE
"ab349b95d62bf9770a17959c00a8b022"

D:\WINNT\system32>ruby -rmd5 -e "ARGF.binmode;p Digest::MD5.hexdigest( ARGF.read() ) " NTOSKRNL.EXE
"dccb693e32ca945462bf4f12185a1e82"

D:\WINNT\system32>\\tpi\d$\cygnus\bin\md5sum.exe NTOSKRNL.EXE
dccb693e32ca945462bf4f12185a1e82 *NTOSKRNL.EXE

というオチ?
182178:04/04/09 13:52
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Digest%3A%3ABase

> require 'digest/md5'
> p Digest::MD5.hexdigest(File.read("ruby-1.8.0.tar.gz"))
です。
同じファイルをこのスクリプト(ファイル名の部分だけ変更)とmd5とかmd5sumでmd5値を作ると合致しないんです
183178:04/04/09 13:57
>>181
もろにそれが原因でした…_| ̄|○
ありがとうございました
184171:04/04/09 15:31
>>180
おお。納得。そういえば \ ってつかえますもんね。
path 区切り揃える方向でつくります。

そう考えると確かに >>172 のようなものを用意して、
それを使うようにする方がいいですね。
185171:04/04/09 15:33
そうかそれで、>>165は無茶いうなと言っていたわけですか。正直スマンカッタ_| ̄|○
真性だな。
flockのように共有ロックと排他ロックの両方ができる
Mutex風のクラスはありませんか?
>>187
require 'sync'
189173:04/04/09 23:34
>>175
ありがと。使ってみた。
ただ、wavやmpgがテキストとみなされることが多かったんで
仕方なく拡張子で判別するコードも加えることにしたよ。
>>173
印字できないバイトが入ってたらバイナリファイル、ってくらいでいいなら自分で作れるだろ。
つーかrubyでやることかよ
print "hoge\n"と書いたときに表示される改行を、あらかじめ便利な感じで
全部CR+LFにそろえることはできますか?
$KCODE="s"としておくと全部表示がShift_JISになるような。

Rubyスクリプトと生成データをLinuxとWindowsで使いまわすもので…
>>193
回答になってないけど、ふつー print "hoge\n" でなくて puts "hoge" 。
195デフォルトの名無しさん:04/04/11 04:30
>>194
WindowsでputsするとCR+LFになるの?
>>195
やってみほ。Windowsが周りに無いの?
なんかInteger/Integerの話題、mathnとかquoとかの存在が無視されてない?
Integer/Integer=Rationalって、ブロックじゃ駄目なんかねぇ。
 precision do
  《Rationalになる演算》
 end
みたいな。面倒か。
>>198
漏れもそんな感じが良いと思ってた。
>>195
Windwos版Ruby(mingw32、mswin32、bccwin32、djgpp)では出力される改行は全てCR+LF。
UNIXのようなもの版Rubyでは出力される改行は全てLF。
Cygwin版Rubyでは出力される改行は全てLF。

Rubyに限らず3番目でハマる人が時々います。
cygwin向けにコンパイルされたプログラムをcygwin外でも使おうとする人ね。

>>193
つーことで多分できません。生成されたデータファイルの改行を適宜再加工してください。
結局selector namespaceを入れましょうっていう話になるのかな
>>200
Cygwin って、text mode で mount してる時も LF になるんだっけ?
>>202
うーん、mount -tで明示的にマウントされた場合は
改行がファイルに書き込まれた時にCR+LFに変換されるっぽい。
マウントポイントごとに設定しわけることはできるけど…めんどいね。

Cygwin環境用にコンパイルされたプログラムをCygwinシステム外の
普通のWindowsプログラムとしてこっそり使うときはどういう処理になるんだろう。
よくわかめ。
いい加減意地を張るのをやめてPythonに統一しようよ。
リソースの分散はあまりにももったいない。
Pythonに対する明確なアドバンテージを示せないなら今すぐ開発をやめるべきだと思うがいかがかな?
文字列の長さを得るメソッドが str.len になったら考えてもいいよ
>>204
Pythonに対する明確なアドバンテ−ジは、わしが使ってること。
>>204
統一厨が宗教戦争を仕掛けるスレはここでつか?
ずいぶん釣られてるなぁ。
    \   ∩─ー、    ====
      \/ ● 、_ `ヽ   ======
      / \( ●  ● |つ
      |   X_入__ノ   ミ    こんな餌で俺がクマーーーーー!!
       、 (_/   ノ /⌒l
       /\___ノ゙_/  /  =====
       〈         __ノ  ====
       \ \_    \
        \___)     \   ======   (´⌒
           \   ___ \__  (´⌒;;(´⌒;;
             \___)___)(´;;⌒  (´⌒;; 
                          (´⌒; (´⌒;;
いずれParrotが完成すれば、Perl,Python.Rubyのそれぞれの資産をそれぞれの言語で使えるようになるだろうから、
今更別の言語に移る価値はないだろ。
本当に完成するのかな(ワラ
現実問題としてC#とVB Scriptでプログラミング領域の98.774%はカバーできるから
Rubyはいらないんだけどな。
>>211
Riteよりは(ry
>>212
うちの会社は UNIX 上のサーバサイドアプリしか作らないので
.NET に縁がありません。
まー世の中には「ハック価値」という物がある訳で。
でなきゃIntercalなんて生まれてない。
>193
$/ を使うのはどうですか。
>>148
自分は147ではないけれど、
リンク先を読んでも、言わんとするところがよく分からなかったっす。
よかったらもうちょい解説お願いします。
# 「もしそれがアヒルのように歩き、アヒルのように鳴くなら、それはアヒルに違いない。」??
英語が読めるならまずググるくらいのことはしたら?
>>217
自分は >>147 ですけれど、
「もしそれが String と同じメソッドを持ち、String のようにふるまうなら、
 それは String の duck type に違いない」
と読みました。
彼はいまだにテストを書いていないのかな?
テストを書かずにリファクタリングってどうやってるんだろうか?
>>220
彼って、matz? テスト書いてるよ。
http://www.rubyist.net/~matz/20040309.html#p01
Dir.globの人の事じゃない?
>>222
ああ、そっちの人か。
誰か勝手に CVS にテストを突っ込んどいたら。
224RPI ◆3x0ES2jpL2 :04/04/13 18:29
RPIC のお知らせ。

Ruby Professional Institute は、Ruby の専門家それぞれのレベルを測るために、
各国共通の基準となる認定制度 RPIC を創設しました。
# RPIC は「アルピック」と発音します。
Ruby の専門家の雇用主や契約先といった団体組織や専門家自身のニーズを満たす
技術者資格を目指しています。
資格は、Level 1 (初級)、Level 2 (中級)、Level 3 (上級) の3つに
分かれています。

Level 1
101 試験 Ruby 基本文法
102 試験 標準ライブラリ

Level 2
201 試験 オブジェクト設計
202 試験 ライブラリ

Level 3
作成中。

試験は、ピアソンVUE、アール・プロメトリックで受けられます。
>>224
もう2週間も前の話だろ。遅すぎ。
>>224
学生の漏れには、15000 円は高すぎる。
学割とかないのか?
>>226
学割あるよ。
Level 1 取った。
認定カードがピンクだぞ。
なんでピンクなんだ?
Level 1 ピンク
Level 2 橙色
Level 3 赤
101 試験落ちた。
引っ掛け問題多すぎ。
15000円がパー。
RPIC 対策本は、翔泳社の赤本しかないのでつか?
101 試験の範囲

1. 組み込み型
2. 式
3. メソッド
4. 正規表現
5. クラス、モジュール
6. 基本入出力
7. 例外
8. スレッド、プロセス
9. デバッガ
Ruby暦2年だが、>>224 これとろうかな。
まだ学生なんで、就職時使おうと思っています。
>>229
マジでか?
101 は Ruby を普通に使っていたら絶対受かるぞ。
漏れも 101 落ちた。
もうだめぽ。
>>231
アホか。
国家資格にしろ。
学生なら情報処理技術者試験の方を受けた方がはるかに良い。

プログラミング言語の試験だったら
Sun Certified Programmer for the JAVA
にしておけ。
Ruby に将来なんてない。
一応旧通産天下り団体主催だよ。
Rubyをメイン言語としたWEBアプリ開発会社を作りたいんだけど、
貯金が数万しかありません。どうしたらいいんでしょうか。
>>236
確か1円でも起業できるんじゃなかったっけ?
>>234
うちの会社では、Ruby でプロトタイプを作る。
最後に Java で作る。
移植しやすいように Ruby で Java スタイル。
attr_reader/writer ではなく、セッターゲッターを使う。
ヘビ式でなく、ラクダ式の命名規則に従う。
>>238
蛇式って?
>>239
_ で繋げる命名法じゃない?
bar_obj.foo_method() みたいな。
レベル1受かりました。
101 は 620 点、102 は 640 点でした。
普通に Ruby を使っていて、翔泳社の対策本をやれば受かります。
102 の Complex クラスとか、普段使わないので
対策本は必要です。
だまれ業者。
 ☆チン     マチクタヒ゛レタ〜
                        マチクタヒ゛レタ〜
    ☆ チン  〃 ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ヽ ___\(\・∀・) < レベル2合格記まだ?
      \_/⊂ ⊂_)   \________
     / ̄ ̄ ̄ ̄ ̄ ̄/|
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
       | 三ヶ日みかん |/
こいつ AA に慣れていないのがバレバレ。
でも面白い。
めげずに、もっとふざけてみ。
こんなオリジナリチィーもなにもないAAの使い方のどこがおもろいのやら。
>>245
尋常でないずれ方だろ。
>>246
うん、おれもそこが面白いと思った。
スレの流れが不自然過ぎる…。
いかにも2ちゃん初心者が宣伝しにきたって感じがします。
まぁどうでもいいけど。
249デフォルトの名無しさん:04/04/14 09:02
趣味レベルでウェブを運営してるのですが、その場合、Rubyを勉強する利点はありますか?
それとも無難にPerlにしておく方がいいですか?
あなたがPerlをすでに習得しているとして。

(利点)
・あなたのプログラム感が広がる
・あなたのプログラミング技術が広がる
・あなたの選択肢がひとつ増える(このときにはRubyを使おう)
・あなたの宣伝文句がひとつ増える(Rubyも使えます)
・Perlに比べるとライブラリが少ないので、自作する機会が増える
・rubyを使える人とのコミュニケーションの機会が増える

(欠点)
・新しい言語を覚えるための時間的、経済的コスト
・Perlに比べるとライブラリが少ないので、自作する機会が増える
・「まだPerlを使ってるの?」と言ってもらえる機会が減る
・Perlで悪戦苦闘する機会が減る

くらいかな。
251249:04/04/14 09:33
>>250
分かり易い回答ありがとうございます。
時間があればやってみてもいいって感じで受け止めました。
252デフォルトの名無しさん:04/04/14 11:55
>>246
わざとずらしているように見える。
利点
変数に$をつけなくて良い
文末に;をつけなくて良い良い

欠点
他の言語で書いたときに付け忘れるようになる
254249:04/04/14 12:57
>>253
サンクス。
プログラムを書くのが楽しいっていう触れ込みですよね。
余分な文字を書かなくてもいいっていうのもその一環なんでしょうね。
>>249
いまさら Perl なんてやる必要ないと思うけど。
せめてPHPにしたら?
256249:04/04/14 13:02
>>255
そうなんですか?
でもCGIを考えるとPerlが主流ですよね?
>>256
もうCGIそのものが主流じゃないと思われ。

それに、あなたは自分の趣味としてウェブを運営しているのではなかったのですか?
趣味ならば、世の中の多勢に従う必要はありません。
まあ、ruby も十分多勢になりつつありますが。
漏れなら、どれか一個でとりあえずはじめてみる。
そのうちある程度スキルが上がったころになれば、
嫌でもその言語のダメなところや各言語毎の利点欠点がわかってくるので、
そうなったら一番自分にしっくりきそうな言語に乗り換える。

そのときには、それまでに書き貯めたコードは無駄になるかもしれないが、
それまでに身に付けた知識は無駄にならない。
259249:04/04/14 13:48
>>257
CGIはもうすたれてるのですか?
何故、Perlにしようと思ったかというと、Perlは過去の遺産が多いからです。

だから、自分の作ろうと思うCGIに似たCGIを容易に探せますよね。
後は自分用にカスタマイズすればいい訳ですから。

>>258
自分的にはrubyをしてみたいのですが、すぐに恩恵を受けられる実益(遺産が多いということ)を
考えると、Perlかなと思ったわけです。

PHPも結構、流行ってるみたいなので(あるサイトにはPHPの出現でPerlを学ぶ利点がなくなった
と書いてあった)結構、悩みます。
以後249は放置の方向で。
>>259
いやあ、もうそこまで考えてるなら、あとは自分で決めるだけっしょ。
決めることは、自分で出来るよね?
262249:04/04/14 14:17
>>261
レスどうもです。

最初はPerlをやろうと思います。
その後、情勢を見極めて次の言語を決めたいと思います。

どうもありがとうございました。
263デフォルトの名無しさん:04/04/14 15:18
ruby1.6で、
・成功するまで3回試行する
・3回試行してダメならあきらめる
の時、

result = nil
RETRY = 3
i = 0
begin while ( i < RETRY && ! result )
 i += 1
 puts "Try: " + i.to_s
 result = do_something()
rescue
 retry
end
puts "end."

と、ruby-lang.orgのrubyリファレンスマニュアルにある"while 修飾子"に
従って書いたつもりなんですが、rescueの行とputs "end."の行でparse error
で叱られます。
自分にはなぜparse errorになるのかがわからないのです。
どうすればうまく行くのでしょうか?
while修飾子になってねーし。
265263:04/04/14 15:51
自己解決。

begin
while ( i < RETRY && ! result )
 i += 1
 puts "Try: " + i.to_s
 result = do_something()
end
rescue
...

なのね。
まだ文法が壊滅的だ...
>>65
古い話でスマンが
> 「Perlだと$&が遅いという常識」はデマだと分かりました
$1を使っても遅い。
>>263
「成功する」ってのはdo_smoethingがnil/false以外を返すってことなのか?
retryを使ってるあたりは例外が発生しなけりゃ、とも取れるんだが。
>>265だと、例外のときは試行せずに終るだろうし。
「成功」の定義と例外の扱いをどう考えてるのがよくわからん。
>>266
ていうか、「$&を使うと他のマッチが巻き添えで遅くなる」なので65のベンチじゃわからんよ。

プログラムのある部分に出現した$&が「どのマッチの$&なのか?」を静的に決定するのが
カナーリ難しいので、プログラム中に$&が出てきたら全てのマッチについてとりあえず$&を
毎回保存しとくモードにしといて参照されたときに最新のを返すって実装にしちゃったから。

パターンマッチが1つしかなければ$&を使うのもカッコでくくって$1で取り出すのも同程度。
>>268
こゆことかな?

% time perl -e '$&;for(1..1000000){//}'
perl -e '$&;for(1..1000000){//}' 1.11s user 0.00s system 99% cpu 1.110 total
% time perl -e '$1;for(1..1000000){//}'
perl -e '$1;for(1..1000000){//}' 0.76s user 0.02s system 100% cpu 0.768 total

デマじゃなさそう。
ライブラリのファイル名を、
"foo-bar.rb" か "foo_bar.rb" のどちらにするかの基準ってありますか?
>>270
"foo/bar.rb"

e.g. net/ftp.rb digest/mdg.so
>>271
そういう意味ではなくて、ファイル名が 2語以上で構成されている場合のはなしです。
標準添付のライブラリを見てみたら、結構いい加減ですね。

irb/input-method.rb
rdoc/generators/html_generator.rb
soap/netHttpClient.rb

好きにしる、ってことでしょうか。
>>272クラス名を downcase しただけが基本。getoptlong とか prettyprint のように。
274デフォルトの名無しさん:04/04/14 19:16
$?って、真偽値じゃなくて数値でしたっけ?

msg = `command -opt args`
result = $?

でresultにtrue/falseが格納されてることを期待しちゃダメ?
>>274
$?はProcess::Statusオブジェクト。
>>274
ttp://www.ruby-lang.org/ja/のリファレンスマニュアル→組み込み変数に
1.6以前は整数。1.7からProcess::Statusオブジェクトだって明記してある
じゃん。
よく読め。
最新リファレンスマニュアルのオフライン版ってないですか?
最新がなければ、例えば ruby 1.8.0 版のリファレンスマニュアルとか。
いろいろ試してて気づいた。これってまずいんじゃないの?
x = 1
x.taint
x.tainted? # => false
>>278
1.taint.tainted? # => false
1.0.taint.tainted? # => true
(10**100).taint.tainted? # => true

Fixnum だけか。まあ、「Fixnum は汚染さないという仕様だ」と主張されれば、
納得できるけど。
# その場合は Fixnum#taint は undef して欲しいが。

それよりも
"1".taint.to_f.tainted? # => false
の方が気持ち悪い。

ちなみに ruby 1.8.1 (2003-12-25) [i386-cygwin]。
以降で変更されてるのならスマソ
C++ から Ruby 使うにはどしたらいいの?
C++ から スクリプトとデータを char の配列で渡して、結果を自作の Tree クラスで返してもらいたいんですが、
その辺について解説したホームページとかあったら教えてもらえないでしょうか?
ちなみに C++ Builder 使ってるんですけど、Visual C++ でも全然問題ないです。
>>280
ruby.hに"#if defined(__cplusplus)"とか書いてあるし、そのまま普通にやればいいんじゃない? なにか問題があるなら具体的に書いた方がよいと思います。
「どうしてももっとC++らしく書きたい」という理由なら、ttp://rubyxx.sourceforge.jp/でもどうぞ
>>279
いろいろ突っ込みたいところはあるけど、とりあえず一箇所だけ。
> Fixnum は汚染さないという仕様だ
揚げ足を取りたいわけじゃないんだけど、脳内補完がうまくいきませんでした。
どういう意味っすか? もう一度書き直してもらえるとありがたい。
283280:04/04/16 00:17
>>281
え〜っと C++ / C の違いについて知りたいわけではなくて、
C から Ruby(の変数) にどうアクセスしたらいいか知りたいです。
どっかにそういうドキュメントがあったような気がしてるんですが、
思い出せないので;;
284デフォルトの名無しさん:04/04/16 00:24
>>283
README.EXT.jaの事でしょうか。
286279:04/04/16 00:35
>>282
スマソ。「汚染さない」→「汚染されない」

現在のRubyの仕様は
・任意のオブジェクトは Object#taint で汚染することができる。
だと、オレは理解している。

でも実際に試してみると、Fixnum, Symbol, {Nil,True,False}Class は
:foo.taint.tainted? # => false
などとなる。

これは上に書いた仕様と違うのでマズイ。これの解決策は二つある。
(a) Fixnumなども、ちゃんと汚染できるようにする
(b) 「Fixnumなど、一部のオブジェクトは汚染できない」という仕様に変更する

普通に考えると(a)なんだけど、このケースでは(b)を選択しても、特に問題は
起きないような気がする。それだったらエラい人の好きな方に決めてもらって
いいよ……というのが>>279の前半で書きたかった事。

でも再考してみると、Bignum と Fixnum の関係だとか、よく分かんなく
なってきたので、その主張は保留。

後半の話は、オレが Ruby の汚染モデル(というか、汚染状態の伝搬モデル)を
勘違いしてそうな気もする。「foo.tainted? == true の時、foo を元にして
作ったオブジェクトは全て自動的に汚染される」という理解は合ってる?

リファレンス「セキュリティモデル」
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%A5%BB%A5%AD%A5%E5%A5%EA%A5%C6%A5%A3%A5%E2%A5%C7%A5%EB
>>283
RubyExtensionProgrammingGuide も参考になるかも。
ttp://i.loveruby.net/w/RubyExtensionProgrammingGuide.html
>>284 >>287
>>283 のやりたいのは逆じゃない?
>>286
immutable なオブジェクトは汚染され得ない、ってことじゃないの?
>>289
ごめん。「immutable なオブジェクト」ってのがよく分かってない。
Fixnum は immutable だけど、Bignum は immutable でない?

実装上の理由(VALUE にポインタじゃなくて即値が入ってる)から
taint のフラグが保持できないんだろうな、と想像はつくけど、
実装と immutable とは別の話だと思う。
291280:04/04/16 01:55
>>284
>>287
>>288
「え〜、それって拡張ライブラリ作る時に読むやつちゃうん?」と思いましたが、
よく読むと、アプリケーションから ruby の機能を使うのも同じインターフェースなんですね^^;
1.8.x だとコンパイルエラーになっちゃってだめだったんですけど、
1.6.8 だとちゃんと動きました。
これでやりたいことが実現できそう。これから研究してみるっす。
ありがとう!
292277:04/04/16 03:23
>285
ありがとうございます。
HTML Help 版だと内容が古いようですので
ttp://www.ruby-lang.org/ja/man/man-rd-ja.tar.gz
↑これをダウンロードして使うことにしました。
293277:04/04/16 03:27
あ、HTML Help 版も 1.8.1 対応ですね。失礼。
そちらを使わせていただくことにしました。
Fixnum(とかSymbolとかtrueとかfalseとかnil)で汚染が伝播しないことが困るのってどういう時?
たしかに現在の実装は美的完全性を損ねているが、実用上は問題ないのと違うか
295278==282:04/04/16 10:40
>>286
どうもです。
> 「foo.tainted? == true の時、foo を元にして作ったオブジェクトは全て自動的に汚染される」
自分もそういう理解でいます。

>>294
自分も最初はそう思っていました。
しかし例えば正の数を仮定しているところで負の数を指定されると困るとか、考えようと思えばいくらでも考えられると思うんです。
抽象的なのを承知で書くとすれば、「オブジェクトの意味を決定するのはスクリプト次第」ではないでしょうか。
だとすれば、どんなオブジェクトでも汚染が伝播しないとおかしいと思います。
>>295
294が「実用上は問題ない」と言ってるのにそれに対する反論として「抽象的なのを
承知で書」いても弱いんじゃないかな?
おそらく294も「どんなオブジェクトでも汚染が伝播しないとおかしい」とは思っている
のだろうが、理想と実装のトレードオフを考えた結果、現状の実装で実用上は問題
ないだろう、と述べているのだろうし。
>>294で挙げられてるオブジェクトはsingleton/multitonなので、一ヶ所で
汚染されたからって他のまったく関係ないところまで影響されちゃうのはまず
いんよ。

このモデル自体が問題だというかも知れないけれど、しかし、1+1の2と5-3の2、
あっちのtrueとこっちのtrueを区別したいかといわれると、俺なら区別したく
ない。
結局286がリンクをだしてた「セキュリティモデル」にそのあたりのことが
全く触れられてないので読む方は混乱するわけで。

最初の「オブジェクトの汚染」のところに一言注釈なりありゃいいだけの
ことのような気がする。
class X
def initialize(a,b,c)
end
end

p X.method(:new).arity
p X.method(:initialize).arity
p X.new(1,2,3).class.method(:new).arity
p X.new(1,2,3).class.method(:initialize).arity
////////////////////////////////////////////////
-1
-1
-1
-1

コンストラクタの引数の数を数えるにはどうすればよいですか
X.instance_method(:initialize).arity
X.new(1,2,3).method(:initialize).arity

その initialize はクラスX のインスタンスメソッド。
クラスX はクラスクラスのインスタンス。
new は クラスクラスのインスタンスメソッド。
つーかそろそろFixnumを無くすべきなんじゃないかと。

Fixnumが即値である限り絶対に汚染に対応できないわけで。
汚染されているべき危険な値でも素通りでシステムコールに渡せるってのは正直どうかと。
Symbolやnilといったオブジェクトはともかく、頻繁に使うであろうFixnumはヤバイよ。
この辺matzはどう思ってるんだろう?「仕様です」だけ?
>>301
つーよりも、外部からどうやって Fixnum を取り入れて、そんな危険なことをしたがるのかが分からん。
実際にやって見せてよ。
>>301
・「Symbol や nil がオッケーだけど、Fixnum が特にヤバい」という
シチュエーションがよく分からない。

・Fixnum などが汚染できないことに関して、公式なコメントは出てないと思う。
(調べ足りないだけかもしれないので情報キボンヌ)

・即値でも、汚染用に1ビット割り当てれば対応できそう。
バイナリ互換はなくなるが(・∀・)キニシナイ!!
「汚染された1」と「汚染されてない1」という2つの singleton オブジェクトが
存在するイメージ。
つーかただのバグ
>>298 に同意。
Fixnum を汚染したりされたりするときに warning 出ればよいんじゃないのかな。
$SAFE によっては SecurityError になるのもよいかと。
全ての値について汚染が伝播するならば、$SAFE=1で危険な操作が
汚染エラーにならなければ、少なくとも危険な値をuntaintせずに渡して
はいないということが保証される。untaint操作の場所は特定しやすいし
きれいに書けば妥当なチェックをしてからuntaintしていることを確認する
こともたやすい。即値をはさむとそれが言えなくなるので、同じことを
保証するにはプログラムを追いかけるしかなくなるだろう。

もっともエラーがでたら出た場所にその都度.untaintを足していく
香具師には全く関係ないことだがな(笑)

307301:04/04/17 00:10
cgi = CGI.new
value = cgi["value"].to_i

とか、普通にしてそうだが。
ああ、だがFixnumが特にヤバイ、ってことはないか。to_symとかやるしな。


1bit割り当てるってのは思いつかなかったな。これは漏れの考えが浅かった。
VALUEをキャストしてそのままポインタとして使えるってところがrubyの速度とか拡張ライブラリの作りやすさとかに非常に影響を与えてると思うのだが。
1bit割り当てるってことは毎回ビットシフトしなきゃいけないってことだろ?
ビットシフトなんてのは動的型を採用している時点で必ず
何回も発生するので今更その回数を気にしてもあまり意味がない。
まあ減るにこしたことないが、せこいチューンと同じ。

それよりは実行コード断片化によるキャッシュミスヒット・
ページフォルトの方が深刻なんでね。
310301:04/04/17 00:44
いや、VALUEに1bit割り当てるという話は即値(Fixnum, Symbol, nil...)のみの話。
ビットシフトはFixnum, Symbolは値を得る為に既にしている。
問題があるとすれば、Fixnumが30bitになってBignumに変化しやすくなるくらいなもんだろう。
そういえばbignumは汚染されるので、数字がでかいときだけ汚染により
操作が禁止されてうまく動かないバグを仕込みそうだな。fixnumが
汚染されないという仕様なら他の数も汚染されない方がいいような
気がする。


>>253
>他の言語で書いたときに付け忘れるようになる

俺もそれある。最近、CやJavaで ; のつけ忘れが多い。
C言語しか知らなかったときはこのミスはほとんどしなかったのに
operator () がホスィ…

o = Object.new
def o.()(s)
puts s
end

o("OK") #-> OK
>>312
慣れの問題かと。漏れも以前はそうだったけど、最近は無くなった。
むしろ、コードをパッと見たとき、 ; や変数名の $ の有無で、
今どの言語を見てるかのスイッチが切り替わるようになってきた。

>>313
def o(s); puts s; end とどう違うの?
>>313
[] で我慢する、ではダメ?
>>315
その「我慢」をしたくない、って意味でね

operator() があれば
・[]のもつ意味を単純化できる。つまりプログラムを読みやすくする。
・ProcやMethodの呼び出しを自然に出来る。
self.o を呼ぼうとして o#() になる悪寒。
318280:04/04/18 00:17
racc 使ってる人いますか?
racc で作られたパーサってエラーが発生すると、エラーの原因となった文字列を
表示してくれますが、その文字列のある行番号は表示してくれません。

スキャナいじったり、文法ファイルを修正してみましたがなかなか思う結果が得られません。

だれか解決策知りませんか?
319デフォルトの名無しさん:04/04/18 00:22
self.age
>>318

パーサには行番号の情報がないので出せない。
自分でパーサの on_error メソッドをオーバーライド
して出すしかないね。現在読み込み中の行番号は
だいたいトークンかスキャナのどっちかから得られるはず。
321280:04/04/18 01:40
>>320
速攻レス、感謝。
自前で処理する方法を、もうちょっと検討してみます。
昔それやったなぁ。
StringScanner 使ってたから pos しかわからんもんでさ、
on_error でもう一度スキャナ回して pos までの改行数えたよ。
% ruby -v
ruby 1.8.1 (2003-12-25) [i386-cygwin]

% ruby -e '"0" > 0'
-e:1:in `>': comparison of String with 0 failed (ArgumentError)
from -e:1

% ruby -e '0 > "0"'
-e:1:in `>': comparison of Fixnum with String failed (ArgumentError)
from -e:1

メッセージを統一しる!ヽ(`Д´)ノ
>>323
そうはいくか!ヴォケ!
>323

ん? 統一したら、まずいんじゃない?
まずいかな?
327325:04/04/18 18:35
>326

まずいっしょ。
Float だとどっちも Float って出る。
Fixnum にそろえるとどこがまずいかな?
>>323
「統一」って、前者を「String with Fixnum」にしる、ってことか?
それならなんとなく納得。
前者で Fixnum じゃなくて 0 って出るのがイヤって話なのでは。
% ruby -e '"0" > 1000000000'
-e:1:in `>': comparison of String with 1000000000 failed (ArgumentError)
from -e:1
% ruby -e '"0" > 10000000000'
-e:1:in `>': comparison of String with Bignum failed (ArgumentError)
from -e:1
なるほろ
332323:04/04/18 21:55
あーまぎらわしくてスマソ。0 を Fixnum にしるってことね。

もういっちょ。

% cat ~/hoge.rb
def foo(args)
args.min
end
foo(["0", 0])
% ruby ~/hoge.rb
/home/ore/hoge.rb:4:in `min': comparison of Fixnum with String failed (ArgumentError)
from /home/ore/hoge.rb:2:in `each'
from /home/ore/hoge.rb:2:in `min'
from /home/ore/hoge.rb:2:in `foo'
from /home/ore/hoge.rb:4

4行目に min なんてないよヽ(`Д´)ノ
matzさんの家って、PC が何台もごろごろしているものなの?
それともハードには余り興味が無くて、言語にしか興味がないとか、、、
>333
あなたの、他人に対する興味の持ち方に
興味がある。
>>333
実際のところは知らんけど、MLなどでのやり取りを見てる範囲では、
ご自身の環境(ノートPCにdebianだったか)以外についてのrubyの動作の検証とかは、
(自分で環境を用意してするのは)かなり億劫のようなので、PCがゴロゴロというのは創造できないです。

まあ、会社とかでいろんな環境に触れる機会はあると思うのですが。
「言語にしか興味ない」というのは当たってると思います。

まったく他人の私が思うには。
>>335
「想像できない」
337デフォルトの名無しさん:04/04/18 23:12
>>337
ぐおぉ…すげえなそれ。ATOKが欲しくなってきたよ。
すごいとは思うが、便利な使い方が思いつかない。
誰か教えてくれ。
クリップボードの内容をワンライナーや作り置きのスクリプトで
ざっくり加工できるっぽいところが便利そう。
たとえばエディタとしては貧弱なブラウザのフォーム内で、
置換処理ができるようになるわけだし。

ランチャーとしても十分便利そうだけどね。
HTTPで天気予報を引っ張ってくるスクリプトを書いておいて、
「てんき」でその場に出力されるってのとか。
メモしたい内容をクリップボードに放り込んでから「めも」で、
メモツールに記録されるとか。
なんかrubyって車輪の再発明つか、
既存のもののrubyへの置き換えが多いような気がするのは気のせい?
資産が少ないので作らなならんというのは分かるけど。
穿った見方をすると、rubyの美しいコードになんでも
書き換えようとする言語ヲタのナルチシズムに見える気もする。
ライブラリの充実が必要だけど、
移植で済むなら一から設計することもないってことかと。
>>341
「何が出来るのか」の確認と、
「何が出来ないのか(何が必要か)」の
洗い出しになってイイんじゃないかな。
たぶん、341 は覚えたばかりの「車輪の再発明」って言葉を
使ってみたかっただけなのではないかと。
Microsoft Visual C++ Toolkit 2003 でrubyをコンパイルしたいのだけど
どうすりゃいいんかい。
lib と dumpbinがないみたい?でも、win64/にはある???よーわからん。
> 例によってwindows.hとかそれに関するライブラリは Microsoft Windows
> Platform SDKのCore SDK(ttp://www.microsoft.com/msdownload/platformsdk/sdkupdate/)を
> インストールする必要あり。
らしい。ハズしてたらスマソ。
まあ、いろんな人が言語を使うので。
「perlじゃコレがあるのに、なぜrubyでは無いのか」という人も多いし。

あとそれと、同じようなものが必要になったときには、
既にあるものの仕様を参考にすることが多いので、
そういう意味では再発明とも言えるかな。
>>347
Core SDK とdebug SDKは入れたんですけど lib.exe と dumpbin.exe
は入ってきませんでした。
ほかの SDK もいるのかなぁーと。

Internet Development SDK
IIS SDK
MDAC SDK
Windows Installer SDK
WMI SDK
Tablet PC SDK

・・・関係ないよなぁぁぁ。
ところで、なんで「車輪の再発明」という言葉になったんだろう?
人類最古の発明の一つってことじゃないかな
電球の再発明じゃ新しすぎる感じ
電話の再発明
xmlparser-0.6.8 は make 通らないなあ (FreeBSD & BSD/OS) 。
353352:04/04/20 12:29
あ、GCC 3 とかだとこれでも make 通るのかな。

GET_PARSER(recv, parser);
VALUE content = makeContentArray(parser, model);



VALUE content;
GET_PARSER(recv, parser);
content = makeContentArray(parser, model);

にしたら通った。
>>345
lib.exe/dumpbin.exe は .NET Framework SDK に入っている。(ランタイムじゃないぞ)
それから,byacc と sed が必要なので ttp://gnuwin32.sourceforge.net/ からGET。
bisonを使いたければ同じく GET して YACC=bison -y を Makefile に追加。
ま、再発明でも便利なら万事OK。
多様性は保険だ。
port や(新規性の乏しい)派生はそもそも"発明"ですらないよ。
>>355
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=9b3a2ca6-3647-4070-9f41-a333c6b9181d
↑入れたんですけど、入ってなかった・・・_no _no _no _no _no
rubyというかアルゴリズム全般の話な気もしますけど質問させてください。
ポーカーで任意の枚数を捨てて、出来得る役を全部表示するのを考えてます。
トランプ1枚は1から52の通し番号で識別してます。

def koukan(ary,rej)
if ary.size >= 5
puts ary.join(',')
return
end
for i in 1..52
next if (ary + rej).include?(i)
ary.push i
koukan(ary,rej)
ary.pop
end
end
myAry = [1,2,3] # 残すカード
myRej = [4,5] # 捨てるカード
koukan(myAry,myRej)

これで、一応動くんですけど、[1,2,3,6,7]と[1,2,3,7,6]みたいな
同種別配置を排除することができないかなと考えましたが、分かりません。
何かいい方法ないでしょうか。
>>358
Array じゃなくて Set (順番や重複の無い集合を扱うクラス) を使ってみるとか。
for i in 1..52

for i in ary.last..52
にするのは?
レスありがとうございます。
>>359
Setクラスは初耳ですが、リファレンス見たところ、
この場合はこっちの方が速そうですね。
できた役をぶちこんでいけば勝手に重複は削除されると。で、

irb(main):016:0> set1 = Set.new [1,2]
=> #<Set: {1, 2}>
irb(main):017:0> set2 = Set.new [2,1]
=> #<Set: {1, 2}>
irb(main):018:0> sset1 = Set.new [set1,set2]
=> #<Set: {#<Set: {1, 2}>, #<Set: {1, 2}>}>

あれ?重複してるはずなのに削除されない?
なんか使い方間違ってますかね?

>>360
うーん、それだと、[1,2,3,5]で[6]捨てる場合とかで
4が無視されてしまうような…
あぁ、sset1 みたいな使い方もしたいのか。
すると、 Set#eql? と Set#hash を再定義してやらないとダメかも。
ちょっと漏れにはすぐには思い付かない。
>>353
gcc3.3はC99デフォルトだからな。
まぁ、バグだろう。作者にレポートするよろし。
364359:04/04/20 19:40
>>361
考えてみた。イマイチだなぁ・・・

class CardSet < Set
def eql?(oth); self == oth; end
def hash; self.size; end
end

set1 = CardSet::new([1, 2])
set2 = CardSet::new([2, 1])
set3 = CardSet::new([2, 3])

sset1 = Set::new
sset1 << set1
sset1 << set2
sset1 << set3
p sset1
議論を巻き戻して悪いが、結局taintの件はどうなったのだろう。
ここ見てくれてた人のおかげで、現在のリファレンスは>>298氏の言うとおり
> * 実装の都合上、Fixnum・Symbol・true・false・nil は汚染されない。
> なお Bignum・Float は汚染されることは注意が必要。
と追加されているが(青木さんありがとう)、BignumとFloatを汚染する意味があるのか・ないのか、自分ははっきりと読み取れなかった。
もし「本来は汚染させるべき」ということなら、大量のOBJ_INFECT()忘れが発覚するわけだが。
>>365
続きは ML でやった方が良いのでは?
367デフォルトの名無しさん:04/04/20 22:13
>>363
ほんとだ、知らなかった。
ていうか-std=c89とかしても通る。なんじゃこりゃ…
368デフォルトの名無しさん:04/04/20 23:28
WindowsでRuby/DBI+SQLite使いたいのですが、
どっかにバイナリあるでしょうか?
__END__ 以下のデータってバイナリで読み取れないの?

DATA.binmode
data = DATA.read

こうしたけど駄目でした。助けてドラエもん
>>369
ばーじょんは?
>>369
DATA.binmode
DATA.seek(0, 0)
data = DATA.read
でどうよ?

msvcrt版だと、改行コードはstdioでバッファリングされた時点ですでに変換
されてたと思った。seekすりゃ一度バッファを捨てるはず。
マルチスレッドなスクリプトを書いているのですが「〜押したらスクリプトを終了」
みたいな処理をしたいのですがどうしたらいいでしょうか?
$<、ARGF、から取得しようとするとそこでスクリプトが止まっちゃうので…
373369:04/04/21 16:31
>>370
C:\>ruby -v
ruby 1.8.0 (2003-08-04) [i386-mswin32]

>>371
おおおお!さすがドラエもん。できました。
ただ、DATA.seek(0, 0) とすると__END__の前の部分(スクリプト部分)まで出てきてしまいました。

DATA.seek(DATA.tell, IO::SEEK_SET ) # ←の一行加えたら__END__以降のデータが取得できました。
DATA.binmode
data = DATA.read

ありがとうございました。
プログラム書いている時に、ちゃんと動くようになるまでは、
とりあえず最初の5行くら動かしながらテストするってのを
よくやるので、

while gets
  break if $.>=5 ###
  # なんかの処理
  print
end

なんてコードを書いて動くようになったら ### の行を削除
ってのをよくやります。
これと同じことを。 イテレータでやる場合、

c=0
vec = readlines
vec.each do |i|
  break if (c+=1)>=5
  # なんか処理
end

と書くしかないでしょうか?いちいち変数cを宣言するのが
めんどうなんですけど、なんかいいほうほうあったら
教えてちょんまげ。
>>374
each_with_index使ったらどう?
376374:04/04/21 20:07
勉強不足でした。
正直スマンかった。
車輪の再発明するならせめて、既存のものよりマシなものでなければいけないわけで、
rubyはマシどころかものすごく使いやすいのでいいのではないかなと。
「車輪の再発明をするな」=「既存の良いものを積極的にパクれ」
という意味では、Ruby はそれを地で行って (そして成功して) いると思うのだが。
379358:04/04/22 10:48
>>364
遅レスですいません。ありがとうございます。
$ ruby cardset.rb
#<Set: {#<CardSet: {1, 2}>, #<CardSet: {1, 2}>, #<CardSet: {2, 3}>}>
うーん、重複削除されませんね。
sset1をCardSetクラスにしてみてました
#<CardSet: {#<CardSet: {1, 2}>, #<CardSet: {1, 2}>, #<CardSet: {2, 3}>}>
やっぱり削除されません。
ちょっとクラス定義について勉強してみます。

あと、Cのアルゴリズム事典でビット演算使った、
テクニカルで爆速な組み合わせ生成が載ってたので
こいつをrubyで試してみようと思います。

380358:04/04/22 12:23
>379で書いたビット演算のが意外にrubyで簡単に書き直せました。
枚数が31枚を超えるとfixnumからbignumの変換の関係でバグるみたいですが
とりあえず、26枚で実行。rubyで書いても結構爆速で感動しました。

$ time ruby koukan_array.rb > /dev/null ←358のヤツ
real 3m12.084s
$ time ruby koukan_bit.rb > /dev/null ←ビット演算
real 0m6.705s
381358 koukan_bit.rbソース:04/04/22 12:25
N = 26; K = 5
def first(n); (1 << n) - 1; end
def nextset(x)
smallest = x & -x; ripple = x + smallest
new_smallest = ripple & -ripple
ones = ((new_smallest / smallest) >> 1) - 1
ripple | ones
end

def printset(s)
for i in 1..N
printf(" %d", i) if ((s & 1) != 0)
s >>= 1
end
print "\n"
end

i = 1; x = first(K)
while((x & ~first(N)) == 0)
printf("%4d:", i); printset(x)
x = nextset(x); i += 1
end
382358:04/04/22 16:52
fixnumとbignumの変換が一定の条件でなされてないのか
N>30で変な所で止まったり、5枚以上選択して止まらなくなったり。

fixnumを使わないでbignumのみ使うような
整数クラスって定義できないんでしょうか?
>>382
bigdecimal?
384358:04/04/23 09:14
bigdecimalは多倍長の浮動小数点数なんで、
| & ^ << >> ~ みたいなビット演算をサポートしてませんでした。
>>375
ヽ(`Д´)ノウワァァァン
そんなのあったのかYO!!
386358:04/04/23 12:47
mswin32版の1.8.1と1.6.8だと >381 を N=52 にしても、
正常に動いているみたいです。
どうやらcygwin版固有のバグみたいですた。
ruby 1.8.1 (2003-12-25) [i386-cygwin] で Nを大きくして >>381 を動かしたら
確かにアヤシい動きするな。空行の有無で出力が違ったりするし……。
388358:04/04/23 14:14
>>387
ですよね。再現条件が特定できんのですよ。
389358:04/04/23 14:21
mswin32版の1.6.8も1.8.1も、
nCk (n=52,k=5) = 2598960 通りを吐き出して無事終了。
これで逝くとします。
>>387
> 空行の有無で出力が違ったりするし……。
そういうのはおおむねGC関連のバグ。
最新版だとどう?
391デフォルトの名無しさん:04/04/24 01:37
いつになったらRubyの主要ライブラリからLGPL物がなくなりますか?
1.9じゃもうないはず。
>>392
まじっすか!!
regexやgcは置き換えできたのか
この辺がクリアされていれば組み込みが楽になりそうで嬉しい限り
>>393
regexはとっくの昔にOnigurumaになってる。
GCのどこにLGPLなコードがあるんだか、自分は知らないんだけれど。
LGPL ならべつに商用利用でもなんでもいいんじゃなかったっけ?
組み込みの障害になんかなるの?
>>395
単語が欠けすぎてて何言ってんだか分からない。

プロプライエタリなコードがLGPLなコードにダイナミックリンクをするのは、OK。
LGPLなコードをプロプライエタリなコードと混ぜて使うのは、(プロプライエタリ的には)NG。
プロプライエタリって何?
>>396
用語がいい加減で何言ってんだかわかんない。
「混ぜて」ってスタティックリンクのことを言いたいんだろうか・・・・
>>398
コードを混ぜるというのは、同一のソフトウェアの中に出身ライセンスの異なるコードを入れるということ。
同一のファイル内であろうが、異なるファイル同士をスタティックリンクさせようが、変わらない。
これくらいの日本語も読めないのか?
>>399
あなたの同僚は苦労しますね。
gc.cはたしかスクラッチだと思ったぞ。
まぁ組み込みのためには、まだまだ技術的な課題も残ってるんだが。
Rubyで、ネストしたループから脱出するにはどうしたらいいですか?
catch(:hoge) {
 loop {
  while true
   throw :hoge, some, value
  end
 }
}
catch & throw
catch & release
catcher in the rye
407デフォルトの名無しさん:04/04/26 03:34
age
            ____| ̄ ̄|____           ________
            |               |\        /           |\
            |____    ____|:::::|      /   , ───    /\|
             \::::::::::::::::|   |:::::::::::::::::::::::\|    /   <:::::/ /   /:::::/
  ┏┓  ┏━━┓  | ̄ ̄ ̄      ̄ ̄ ̄|\ ̄  ./     \._/    /:::::/         ┏┓
┏┛┗┓┃┏┓┃  |_________|:::::|   <    /\      /:::::/           ┃┃
┗┓┏┛┃┗┛┃┏|   ○      ○   |:::::|━━ \/:::::/ >   / ̄ ̄ ̄ ̄ ̄ ̄|\.━┓┃┃
┏┛┗┓┃┏┓┃┃|    \──/    |:::::|      ̄  ̄/   /    ___    |:::::|  ┃┃┃
┗┓┏┛┗┛┃┃┗|      \/      |:::::|━| ̄ ̄ ̄ ̄   /    /::::, '━|   |:::::|━┛┗┛
  ┃┃     ┃┃  |____ ____ |:::::|  |_____/    <:::::/ /    |:::::|   ┏┓
  ┗┛     ┗┛  \  \:::::::::::::/   /\l  \:::|           \ . /    /\.|   ┗┛
          | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄||______/\        /:::::/
          |_______________|\::::::::::::::::::::\/ \    ./:::::/
          \:::::::::::|             |\:::::::::::::\| ̄ ̄ ̄ ̄   /   /:::::/
            ̄ ̄|  ┌────┐  |:::::| ̄ ̄ ̄        /   /:::::/
              |  └────┘  |:::::|    | ̄ ̄ ̄ ̄ ̄   /:::::/
               |_________|:::::|   |______/:::::/
              \:::::::::::::::::::::::::::::::::::::::::\|     \::::::::::::::::::::::::::::\/
何がやねん
春が。頭に。>>408の。
>>395
上司を説得するのに障害になる…
412デフォルトの名無しさん:04/04/26 15:09
Ruby/DBIについて質問です。
以下のプログラムで、プログラム実行中はtestdbが有効なのですが、
プログラムが終了するとtestdbのファイルサイズは0になってしまい、
その後読み込めません。何が原因でしょうか?

また、
データを入れるのに
ary=Array.new
ary[0]=123,"abc"
ary[1]=456,"def"
while data = ary.shift
#gonyogonyo
end
を使って一括して入れる方法はあるでしょうか?
413412:04/04/26 15:10
require "dbi"
def create_table(dbi)
dbi.do(<<EOF)
CREATE TABLE R (
r1 INT,
r2 CHAR)
EOF
end
def test(dbi)
dbi.do(<<EOF, 123, "abc")
INSERT INTO R VALUES (?, ?)
EOF
dbi.do(<<EOF, 456, "def")
INSERT INTO R VALUES (?, ?)
EOF
end
dbi = DBI.connect("dbi:SQLite:testdb", "test", "test")
create_table(dbi)
test(dbi)
row = dbi.select_all(<<EOF)
SELECT * FROM R
EOF
print row
>>412
commit してないからかな。

DBI:SQLite はアヤシイので、SQLite/Ruby を使うのがオススメです。
DBIダメポ? なんだか悲しいオススメ
>>415
はい、私も悲しいんですけど、
UNIX 板の Ruby スレの 325 で報告したような感じなのです。
>>416
普段はdbh['AutoCommit'] = trueにしておいて、transaction開始時に
falseにする、とかして逃げられないのかなーと思った。かなり姑息
だし試してもいませんが。
418412:04/04/26 16:53
情報どうもです。
もう少し、DBI:SQLite試して見ます。
#ようやく環境整えたのに...
SQLite/Ruby使ってdbd_sqlite書き直せばいいのかな。
[ruby-list:39589] ってなんなんだろう?煽ってるのかなあ?
>>419
どうでしょうね。件の記事 ([ruby-talk:75057]) を読んだ感じだと、
そもそも DBI がクソだから直すのはしんどいよ、ってことのようなのですが。
# 誤読していたらすいません。
422デフォルトの名無しさん:04/04/26 21:00
Ruby/DBIで正規表現は使えますか?
使えるとしたら、サンプルはあるでしょうか。
423デフォルトの名無しさん:04/04/26 21:04
>>422
ageるな
424デフォルトの名無しさん:04/04/26 21:22
>423
>423
425デフォルトの名無しさん:04/04/26 21:24
>>422
どういう意味?具体的に何がやりたいの?
427デフォルトの名無しさん:04/04/26 21:37
>425
>423
>>426
SQLにはLIKE式があるようですが、
Rubyの正規表現をLIKE式の代わりに使えないかなー、と。
ぽかーん
>>428
結局 DBMS に渡すときに SQL になるんだが。
>>428
折角「SQL」で検索オペレーションが抽象化されてるんだから、
あんまり姑息なこと考えずに SQL でがんがれ。
432デフォルトの名無しさん:04/04/27 02:00
CでARGVにあたるのって、gets()しかないのですか?
>>432
はぁ?
>>432
おまへは既に答えを知っているはずだ
ARGFも便利なんでヨロシク
こんなことできないの?

module M
 v = 0
 def get() v end
 module_function :get
end

M::get

NameError: undefined local variable or method `x' for M:Module
>>436
module M
 @@v = 0
 def get() @@v end
 module_function :get
end

http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%CA%D1%BF%F4%A4%C8%C4%EA%BF%F4
module M
 v = 0
 define_method(:get) {v}
 module_function :get
end
p M.get
>>420
煽ってるんでしょう。
単に親切だって話でないの?
あのやりとりで癒される香具師はどこかがおかしい。

というか、あの引用でSubjectに関係ない質問を付け加えてるんだから
煽りだろう。
元のメールも相当の煽りだが。
Net::HTTP の get クラスメソッドで、サイトのデフォルトのページを取得したい場合、
どうすればいいでしょうか?
たとえば、http://www.yahoo.co.jp/ にアクセスしたいとき、
Net::HTTP.get('www.yahoo.co.jp',[???])
[???]の部分に何を入れればいいんでしょうか?
よろしくお願いします。
"/"
>>403
遅れましたが、どうもありがとうございます。
raise - rescue とはべつに、throw - catch なんてのもあるんですね。
勉強になりました。
両者の違いはこれから調べてみます。
>>443
・・・それは、気がつかなかったよ;-)
str="昔(2000年前)、あるところ(北海道)でうんこした。\nおわり\n"
str.gsub!(/\(.+?\)/) {$&.tr!('\w', ' ')}
print str


昔、あるところでうんこした。
おわり
となってしまうんですが、
昔( )、あるところ( )でうんこした。
おわり
としたいのですが、どうすればいいのですか。
ruby 1.8.1 (2003-12-25) [i386-mswin32]
str="昔(2000年前)、あるところ(北海道)でうんこした。\nおわり\n"
str.gsub!(/\(.+?\)/) {$&.tr!('\w', ' ')}
print str


昔、あるところでうんこした。
おわり
となってしまうんですが、
昔(            )、あるところ(      )でうんこした。
おわり
としたいのですが、どうすればいいのですか。
ruby 1.8.1 (2003-12-25) [i386-mswin32]
こんなんどうよ?

p "昔(2000年前)、あるところ(北海道)でうんこした。\nおわり\n".gsub(/\((.*?)\)/m){|m|
  s = '('
  m.length.times{s << ' '}
  s << ')'
}
* tr! じゃなくて tr
* ていうか tr で \w は使えない

やり方はいろいろありそうだけど、とりあえずオレなら
str.gsub!(/\(.+?\)/) { "(#{' '*($&.size-2)})" }
かな。他の人のコードもみてみたい。
450448:04/04/29 16:23
>449
あなたのコード方がよっぽどスマートだ・・。
目的に沿った動きになりました。感激です。
>>447のstrがalphabetだと動くんで、アホーな頭が混乱してしまいます。
汚ない文章だと思考回路が働きにくい事に気付いた。
良かれと思ってやった事が裏目に出る事があります。
便所の落書き2chに相応しいなぁーと思ったのですが。
便所の水で顔洗って出直してきます。
454デフォルトの名無しさん:04/04/30 08:07
>>449
size-2 ってのが気持ち悪いので、俺なら+?をくくって$1かな。

>>428
素直にSQLの正規表現マッチを使うべし
>>431>>458
わかりました、SQLでやります。
456デフォルトの名無しさん:04/05/01 01:21
win32oleでエクセルの操作をしていんですが、
すでに開かれてるエクセルのブックにアクセスするには、どうすればいいでしょうか?

つまり
エクセルファイルとして存在してるブックを開いて、編集っていうののやり方はわかったのですが、
編集中のエクセルファイルを、rubyから操作する方法がわかりません。
どうすればいいでしょうか?
>rubyから
VBS での書き方を調べれば自ずとわかるはず。
458デフォルトの名無しさん:04/05/01 23:05
perlで
@arr=();
while(<>){ push(@arr,$_);}
print $#arr+1, ": end\n";
rubyで
arr=[]
while gets
arr << $_
end
puts "#{arr.size} : end"

10万行位のテキストデータを食わせると圧倒的に
Perl君の方が速いんですが、改善できるですかねえ。
改善も何も parrot になれば同じだろ
ParrotってIOStreamやArray等基本データは各言語共通なんかな。
だとしたら全く同じコードが生成されるかもしれないが。
readlines使うだろ
>>458
うちでやったら、大差ない(rubyの方が微妙に速かった)けど環境キボンヌ

$ wc data
100000 100000 10588890 data

$ time ruby hoge.rb data
100000 : end
real: 0.69s(user: 0.51s, system: 0.18s)
$ ruby -v
ruby 1.8.1 (2003-12-25) [i386-cygwin]

$ time perl hoge.pl data
100000: end
real: 0.77s(user: 0.54s, system: 0.18s)
$ perl -v | grep "This is perl"
This is perl, v5.8.2 built for cygwin-thread-multi-64int
463デフォルトの名無しさん:04/05/02 01:21
>>461 のいってることはもっともだな
それからmacがわるいのかも。
データサイズを増やして露骨にわかるようにした以下を動かした。

perl -e'foreach $i (0..1000000){ printf("%07d\n", $i); }' > data ;\
uname ;\
perl -v | head -2; time perl -e '$a=(); while(<>){push(@arr,$_); }' < data ;\
ruby -v; time ruby -e 'arr=[]; while gets; arr << $_; end;' < data ;\
echo "readlines" ; time ruby -e 'arr=readlines' < data

その結果orz
Darwin

This is perl, v5.8.1-RC3 built for darwin-thread-multi-2level
4.840u 0.730s 0:06.41 86.8% 0+0k 0+0io 0pf+0w
ruby 1.8.1 (2004-04-16) [powerpc-darwin]
22.590u 2.290s 0:47.20 52.7% 0+0k 0+0io 0pf+0w
readlines
13.100u 2.060s 0:30.78 49.2% 0+0k 0+0io 0pf+0w
464デフォルトの名無しさん:04/05/02 06:37
Array#pushって、配列の最後まで毎回リンクたどるんかな。
>>464
んなこたない。
つうかRubyのArrayはCレベルでも配列。リンクリストじゃないよ。
467デフォルトの名無しさん:04/05/02 18:48
くすこ
配列だってリンクリストだ。
次要素へのアドレスが算出可能だから省略されているだけの話。
>>468
> 配列だってリンクリストだ。
勉強いちからやり直してね。
>>468
アドレスが決まった後のアクセスが同じってこと?
リンクではないようだが。
471デフォルトの名無しさん:04/05/02 23:13
>>468
それCのこと?

>>470-471
放っとけよ。屁理屈だろ。
>>469
はて、rubyはぜろオリジンだったはずだが。
Array は C レベルでも配列なので、追加のときに毎度 realloc してるという
話を RHG で読んだ気がする。ある程度は先読みして確保してるかもしれない
けど。だからそんな風に毎度毎度 Array に追加するコードは書かない方がい
い。

Perl の実装がどうなのか知らないんだけど、そのあたりの差なんじゃないか
と思われ。行数カウントなら IO#lineno を使うとかでしょうね。
とりあえず手元にあったRuby1.6.1のソース見たけど、
Arrayのサイズが不足している場合、
現在のサイズ/2 か、 ARY_DEFAULT_SIZE(16) のうち大きい分だけ
増やすようになってるよ。毎度reallocしているというのは嘘。
rubyはループそのものが遅かったりするかもな。
じゃあ駄目駄目じゃん
ちょっと Ruby/Gtk2 について質問をさせてください。

ruby-1.8.1, ruby-gtk2-0.9.1 の環境で GUI の勉強をしています。
API References と rbbr-0.6.0 を参考にして
文字列検索のために下のように TextIter#forward_search を使おうとしました。

text_buf.start_iter.forward_search("Hello", Gtk::TextIter::SEARCH_TEXT_ONLY)

このとき

`forward_search': GtkTextSearchFlags is not a GEnum (TypeError)

というエラーが出てしまうのですが、これはどこに問題があるのでしょうか?
479デフォルトの名無しさん:04/05/04 00:55
>>475
+2: 参考になる
2ch にこそ モデレート が欲しい
481デフォルトの名無しさん:04/05/04 01:50
(1)あいうえお。
かきくけこ。

(2)さしすせそ。
たちつてと。



(1)あいうえお。かきくけこ。
(2)さしすせそ。たちつてと。

という風に整形するプログラムなんですが

filename = ARGV[0]
file = open(filemname)

while text = file.gets.do

if /^(/ =~ text

elsif /\s/ =~ text

text.chomp!

end

これじゃどう考えてもダメだよね・・・
手元の本は初心者向きじゃないからわかんねえ。
>>481
filename = ARGV[0]
file = open(filename)
txt = file.readlines
txt = txt.join("")
txt.gsub!( "\n","")
txt.gsub!( "(","\n")
puts txt
listitems = ARGF.read.sub(/.*?(?=^\()/m, '').split(/(?=^\()/)
puts listitems.map {|item|
    item.map {|line| line.strip }.join('')
   }.join("\n")
484483:04/05/04 02:47
stripで十分だった

listitems = ARGF.read.strip.split(/(?=^\()/)
puts listitems.map {|item|
    item.map {|line| line.strip }.join('')
   }.join("\n")
Apollo でユーザー定義のメッセージを受け取るにはどうすれば
よいのでしょうか?タスクトレイを扱いたい(Win32API ごり押し^^;)
と思ってみたものの、メッセージループがどこにあるのやら。
TForm なら WndProc をオーバーライドするらしいのだけども、
Phi.Form にそれっぽいのはないし。
>>482-484
ありがとうございます。やっぱネットがあると、学習速度が上がります。

>>481
手抜きだけど、
ARGF.read.gsub(/\n(?!\n)/m,'').display
じゃだめ?
488デフォルトの名無しさん:04/05/06 06:46
win32oleについての質問です。

なぜ、プロパティの取得や設定の式が
p book.title
でなく、わざわざ
p book["title"]
としてあるんでしょうか?(わざわざというのは、もとのVBAがbook.titleでアクセスしてるから)

http://homepage1.nifty.com/markey/ruby/win32ole/win32ole03.html#propaty

Winのpropertyっていうのは、そんな特別なもの(?)なんですか?
僕的には、Workbookオブジェクトのtitleインスタンス変数とみた方がわかりやすい気がするのですが。。
単にカプセル化ってことですかね??

みなさん、どう思います?
>488
インスタンス変数にしたら、COM インターフェイスのラッパクラスとして
効果的に働かないと思います。
アクセッサとして定義しない理由は、メソッドとプロパティを区別したい
という意図かと思います。
この文字化けはどうやれば解決できるでしょうか?
$KCODE = 's'
puts "予約" => 蘭?
puts "予定" => 嵐?
ruby 1.8.1 (2003-12-25) [i386-cygwin]
-Ks
ありがとうございました。
>478
試してみたけどエラーは出なかった。
エラーの出る例全体希望。

# エラーにならなかった例:
require 'gtk2'
text_buf = Gtk::TextBuffer.new
p text_buf.start_iter.forward_search("Hello", Gtk::TextIter::SEARCH_TEXT_ONLY)
text_buf.text = "Hello"
p text_buf.start_iter.forward_search("Hello", Gtk::TextIter::SEARCH_TEXT_ONLY)
494デフォルトの名無しさん:04/05/07 06:35
x = ARGV[0].to_i
y = ARGV[1].to_i
z = x + y

p z

これのフローチャートなんですが、
コマンドラインから数値を入力

数値を変数に代入

画面に出力

という書き方でいいのですか?
>494

 どこまで細かく書くかによるのだろうけど。

第1引数を整数に変換したものを変数 x で指し示す

第2引数を整数に変換したものを変数 y で指し示す

x と y の和を変数 z で指し示す

z を出力する

 こんな感じ?
フローチャートなど書くな
ttp://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.3.3.html

> フローチャートに、代入文とかをいちいち書くものではありません。
> それでは、プログラム設計ではなく、コーディングをフローチャートを使ってしているだけです。
> これはフローチャート以前のことで、そもそもプログラム設計とは何かということが理解できていないようです。
「フローチャート」という言葉に脊髄反射しただけと見た。

自分はフローチャートは絶対書かないが、前任者が残しておいてくれると
助かることもある(フローチャートがなければ理解できない、スパゲティ
ソースコード書かれた場合の話だけど)
フローチャート書いてるヒマがあったら、わかりやすいコード書くほうに
時間かけろと言いたい。
他人に見せるためのフローチャートなんて最近は書かないよなぁ。
思考の手助けのために自分用としてなら、まれに書くことはあるけど。

で、個人的には「他人に見せるためのフローチャート」は
プログラムソースの読解の手助けになれば十分だと思ってるから、
>>494 程度の書き方で十分だと思われ。
入力ってところに違和感は感じるけどね。コマンドラインはそのプログラム
ではないから、入力するってよりはプログラム自身が引っ張り出してくる
イメージがある。>>495 みたくね。

それと、足し算は省略しちゃダメ。
それはこのプログラムの本質であり目的でしょう?
冗長な部分は省く。大切なところはきちんと残す。
文章を要約するみたいなもんさ。
>>496-497
授業でやらされてるんじゃないの?
プログラム全く初めての人にいきなりプログラミング言語教えて
みたいなシチュエーションだとたとえばwhile構文とはなにかを
示すのに流れ図あったほうが教えやすそうってのはもはや
考えが古いのかな。iteratorとかあるしなぁ...
501デフォルトの名無しさん:04/05/07 15:52
class OuterHoge
def initialize(str); @msg = str; end
def sayHello; puts "hello, #{str}"; end
def createInner; InnerHoge.new; end
class InnerHoge
def method
OuterHogeの sayHelloを呼ぶ
end
end
end

obj1 = OuterHoge.new("obj1").createInner()
obj2 = OuterHoge.new("obj2").createInner()

というコードで以下のようにしたいのですが、
obj1.method #==> hello, obj1
obj2.method #==> hello, obj2

こんなクラスがあるときjavaだとstaticでない内部クラスなら
OuterHoge.this.sayHello
で自分が関連付けられている外側のクラスのインスタンスメソッドにアクセスできますよね?
rubyだとどうするんですか?
InnerHogeをnewするときにselfを明示的に渡してやらないと駄目?
502478:04/05/08 00:35
>>493
レスありがとうございます。
そのコードを試してみたのですが、手元ではエラーになってしまいます。
こちらの環境の問題でしょうか?
>>499
YEAH!
>>501
ruby では、ネストの外側のクラスは名前空間くらいの意味しかないよ。

javaは全く詳しくないんでカンが働かないんだけど、
javaでそんな感じのコードを書いて実現したい事ってのは、
Ruby では(ネストしたクラスじゃなくて)もっと別のやり方で実現するのが
普通なんじゃないかな。

「自分が関連付けられている外側のクラスのインスタンスメソッドにアクセス」じゃなくて
「自分が生成されたコンテキストで評価(実行)」でよければ↓みたいにやる手はあるけど。

class OuterHoge
def initialize(str); @msg = str; end
def sayHello; puts "hello, #{@msg}"; end # <== @msg だよね
def createInner; InnerHoge.new{}; end # <== block付けた
class InnerHoge
def initialize(&block); @binding = block.binding; end # <== 追加
def method
eval("sayHello", @binding) # <== blockが生成されたコンテキストで評価
end
end
end

OuterHoge.new("obj1").createInner().method #==> hello, obj1
OuterHoge.new("obj2").createInner().method #==> hello, obj2
>>501
OuterHoge.this ってなに?
>>505
Javaで、内部クラスのインスタンスから外部クラスのインスタンスを参照する書き方
クラス名指定して、インスタンスをどうやって区別すんの?
それとも obj1.OuterHoge.this ってこと?
RAA の XML-RPC の I/F って無くなっちゃった?
>>507
全然違う。わからんのなら自分で調べろよ、低脳。
じゃあいいや。

「クラスの中のクラス」という構文は似てるけど、Java と Ruby では
全然別物って結論みたいだよ>>501
>InnerHogeをnewするときにselfを明示的に渡してやらないと駄目?
それが正解。OuterHogeとInnerHogeでは、両者のクラスは外・内の関係があるけど
両者のインスタンスはまったく関係がない。
>両者のクラスは外・内の関係があるけど
Class としてじゃなくて、Class の親クラスである Module として、だね。
Ruby の内部クラスは、 Java の static 内部クラスと同じ?
何を以って「同じ?」と聞いているのかよくわからない。
それに Ruby の内部クラスって何を指しているの?
(俺言葉を使われても困る)

非建設的で乱雑な比較を行い、低質な質問を浅墓に繰り返しても
答える人の時間がもったいないだけ。

比較サイトでも覗いてみたら。
http://www.google.co.jp/search?num=100&hl=ja&oe=UTF-8&q=ruby+java+%E6%AF%94%E8%BC%83
浅墓
深墓
深揺籃
一人でスレッド伸ばしてることに疑問を感じないのかなあ。>ruby-dev
ruby -0777 -n -e 'p $_' foo
とやったら foo の中身が表示されるのを期待したのですが、
なぜか空文字列が無限に出続けて終了しません。
間違ってますでしょうか?
>>519
$/ = nil な状態だと、終端に来ても gets などが nil を返してくれないみたい。
なんとなく実装ミスっぽい気がする。
ruby 1.8.1 (2003-12-25) [i386-mswin32]

とりあえずこんな感じで。一つしかファイルを与えられないのが難点だけれど。
ruby -0777 -e "p gets" foo
class A
@a="abc"
def initialize
@b="def"
end
def p_a
p @a
end
end

irb>a=A.new
irb>a.p_a
nil

"abc"って結果を期待していたんですが、代入されてないのはなぜ?

irb>A.instance_variables
["@a"]
irb>a.instance_variables
["@b"]

@aと@bは同じインスタンス変数なのに扱いが違うのはなぜ
なんでしょう?上のプログラムの場合、@aは何に属する
インスタンス変数なんでしょう?
>>521
Class クラスに属する、A という名前がつけられたインスタンスの変数。
だから A クラスに属する a という名前がつけられたインスタンスからは
直接は参照できない。
>>521
class A
@a = "abc"
def self.a; @a; end
def p_a; p self.class.a; end
end
Matz日記のコメント欄の議論ウゼェ
と Matz さんが申しております。
>>522 >>523
すばやいレスありがd。
なんとなくわかってきたよ。もうちょいいじくりまわしてみます。
文字列で、ある正規表現にマッチする部分から別の正規表現にマッチする部分まで削除したい場合ってどうすればいい?
イメージ的には str.gsub(regexp1..regexp2, '') なんだけど。
str.gsub(/#{regexp1.source}(?:.*)#{regexp2.source}/, '') かしら。
もっとスマートな方法ない?
str1=regexp1.match(str).pre_match
str2=regexp2.match(str).post_match
str=str1+str2
>>528
それだと sub はできても gsub は無理なような。
regexp1 より前に regexp2 があった場合にダメです
531RPI ◆3x0ES2jpL2 :04/05/10 21:06
str='012345vwxyz012345vwxyz012345vwxyz0'
from=/123/
to=/xyz/

mm=nil
i=-1
arr=[]
str.gsub!( from ){ |mm|
i+=1; arr[i]=mm; "\x00from#{i}\x00";
}
str.gsub!( to ){ |mm|
i+=1; arr[i]=mm; "\x00to#{i}\x00";
}

# from - to, \x00 は間にないと見なす。
str.gsub!(/\x00from\d+\x00[^\x00]*\x00to\d+\x00/, '')

# from - to , ペアになっていないものを戻す。
str.gsub!(/\x00(?:from|to)(\d+)\x00/){ arr[$1.to_i] }

puts str
# 0000 になる。
# str='0xyz012345vwxyz012345vwxyz012345vwxyz0' ならば
# 0xyz0000 になる。
# 例は簡単すぎるが。
532RPI ◆3x0ES2jpL2 :04/05/11 00:05
あっ、そっか。
1from2from3to4 は 1234 にしていいのね。
>>532
1from2from3to4   はどうする。
1from2to3to4    はどうする。
1from2from3to4to5 はどうする。

from にマッチする文字列集合と
to  にマッチする文字列集合の関係も気になります。
たとえば、完全同一の from==to はどうします。
設問が一般的すぎ。個別具体的でないと。

str.gsub(/#{regexp1.source}(?:.*)#{regexp2.source}/, '')
str.gsub(/#{regexp1.source}(?:.*?)#{regexp2.source}/, '')
で終了。
534508:04/05/11 12:54
XML-RPC なんか捨てて SOAP を使えということですかそうですか。
536508:04/05/11 20:43
>>535
あなたには聞いてませんよ。

raa のエントリのデータを取得する API として、以前は、
http://raa.ruby-lang.org/xmlrpc/1.0/
という XML-RPC のエンドポイントが用意されていたのですが、
現在は 404 Not Found になっているようなのです。

SOAP のエンドポイントは、現在もあるようです。
http://raa.ruby-lang.org/soap/1.0/
http://raa.ruby-lang.org/soap/1.0.2/
Windows2000上でRuby/Tkを使いたいなぁと思っている者です。
Tcl/TkはActiveTclを三日前にダウンロードしてインストールしました。

で、以下のスクリプトを実行したのですが。。。

=========================================
require 'tk'

x = TkVariable.new('適当な文字列を入れてください')
TkEntry.new(nil, 'textvariable'=>x).pack
TkButton.new(nil, 'text'=>'値を表示', 'command'=>proc{p x.value}).pack

Tk.mainloop
========================================

Entryを書き換えずにそのまま「値を表示」ボタンを押すと、以下のような出力になり、日本語が出力されません。

========================================
"\223K\223\226\202\310\225\266\216\232\227\361\202\360\223\374\202\352\202\304\202\255\202\276\202\263\202\242"
========================================

何か設定ができてないためだろうと推察しているのですが、どうすればきちんと日本語が出力できるようになるでしょうか?

ちなみに、普通のRubyスクリプトではきちんと日本語がDOSプロンプトに出力されます。
538537:04/05/12 20:37
>>537
自己レスです。

「proc中のpをputsにする」という解決方法を教えて頂き、これでうまくいきました。
>>538
p (ていうか String#inspect) は、
$KCODE か -K オプションで出力する文字列の文字コードをセットしないと、
日本語の文字列はバイナリとみなして出力しちゃうね。
>>502
text_buf.start_iter.forward_search("foo", "bar")
のように意図的に違うものを渡しても
TypeError: not a Gtk::TextIter::SearchFlags
にしかならないからruby-gtk2のインストールがなんか変なのかも。
541デフォルトの名無しさん:04/05/13 15:22
質問です。

要素が 1000 個ぐらいの Array があって、それぞれの要素は
['apple', 'orange', 'mango'] とか ['kiwi', 'banana', 'apple'] みたいな単語からなる Array だとします。

1000 個の要素のうち、以下のようにすくなくとも一度だぶっている要素、を抽出したいんですが、
1000 個の全体全で & をとっていく方法以外に、なにかうまい方法はあるでしょうか?

['apple', 'orange', 'mango'] ['kiwi', 'banana', 'apple'] ['kiwi', 'melon']
-> ['apple', 'kiwi']
>>541
配列をなめつつ単語をキーにしたハッシュで出現回数を数えて
最後に出現回数>=2なものを抜きだすといったあたりじゃないですかね。

543デフォルトの名無しさん:04/05/13 17:26
>>542
ワオーそれでできました大変ありがとう!
考えてみた。

dict, result = {}, {}
[
['apple', 'orange', 'mango'],
['kiwi', 'banana', 'apple'],
['kiwi', 'melon'],
].each { |set|
set.each { |word|
if dict[word]
result[word] = true
else
dict[word] = true
end
}
}
p result.keys # -> ['apple', 'kiwi']
これはどう?

ary=[
['apple', 'orange', 'mango'],
['kiwi', 'banana', 'apple'],
['kiwi', 'melon'],
]
ary0=ary.flatten
ary1=ary0.uniq
ary1.each{|x|
ary0.delete_at(ary0.index(x))
}
p ary0.uniq # => ["apple", "kiwi"]
(ary.flatten - ary.flatten.uniq).uniq

…と、つい書きたくなるけど、これはダメ。
一つの要素に二つ以上入ってる場合があるからってこと?
>>547
あぁ、それだと漏れの >>544 もダメか。
元の各要素は Array じゃなくて Hash か Set にするか uniq しとくべきだな。
self - other
集合の差演算。self から other の要素を取り除いた内容の新しい配列を返します。重複する要素は取り除かれます。

この「重複する要素は取り除かれます]は直観的でないよね。
>>549
たぶんみんなそう思ったらしく

ruby 1.8 feature: 重複した要素は保持されます。

だって。しかしこの文、オレは読んだだけじゃどういう意味なのか
さっぱりわからなかった。

ruby 1.8 featureの変更点一覧には例があるけどね。

p([1, 2, 1, 3, 1, 4, 1, 5] - [2, 3, 4, 5])
=> ruby 1.6.8 (2002-12-24) [i586-linux]
[1]
=> ruby 1.8.0 (2003-02-16) [i586-linux]
[1, 1, 1, 1]
[2, 2, 2] - [2, 2] は [2] だろうよと思わなくもなくなくない。
result = Hash.new(0)
[
['apple', 'orange', 'mango'],
['kiwi', 'banana', 'apple'],
['kiwi', 'melon'],
].each {|set|
set.uniq.each {|word| result[word] += 1}
}
result.reject! {|key, cnt| cnt == 1}
p result.keys # -> ['apple', 'kiwi']
俺も考えてみた。



なにも浮かばなくて涙が出た。
>>551
[1, 2, 1, 2] - [1] #=> [2, 2]
確かに中途半端な感じだね……。

array.c の 1.108 -> 1.109 で以前の仕様から変更されてるみたいだけど、
2003-02-03 前後の ChangeLog や ruby-{dev,list,talk} を見ても、現在の仕様に
なった経緯について触れてないっぽい。

Array#- を使ったことなかったけど、↓こんな動作するんだと思ってた。
class Array
def -(other)
occur = Hash.new(0)
other.each{|elm| occur[elm] += 1}

result = []
self.each do |elm|
if occur[elm] == 0
new_ary << elm
else
occur[elm] -= 1
end
end
result
end
end
556デフォルトの名無しさん:04/05/17 17:16
Ruby からシェルスクリプトのように、コマンド群を実行したいのですが、
たんに system とかから実行するのではなく、以下のようなことがしたいと思っています。

* 実際にはコマンドを実行しないモード(dry run)みたいのがある。
* シェルスクリプト中の各コマンドについて、エラーハンドリングができる。
* そのほかシェルスクリプトから呼び出される各コマンド・プロセスの仮想化

いろいろぐぐってみたんですが、warlus プロジェクトの OBAQ というライブラリがそれっぽいことをやってくれそうです。
http://walrus-ruby.hp.infoseek.co.jp/pfm/func.html
とりあえず、ここにある pfm をインストールしようとしたんですが、以下のエラーで失敗します。

/usr/lib/ruby/1.6/pfm/pfmsupp.rb:15: uninitialized constant Resource at LocalResourceBase (NameError)
from /usr/lib/ruby/1.6/pfm/pfmmodel.rb:3:in `require'
from /usr/lib/ruby/1.6/pfm/pfmmodel.rb:3
from /usr/lib/ruby/1.6/pfm/pfmjob.rb:3:in `require'
from /usr/lib/ruby/1.6/pfm/pfmjob.rb:3
from /usr/bin/pfm:5:in `require'
from /usr/bin/pfm:5

メーリングリスト等は止まっているみたいなので、作者の中島@ブレーンさんに直メールでうかがったところ、
このプロジェクトは開発途中で終了とのことでした。。。
(中島さん、もしこのスレッド見てたら、お返事ありがとうございました)

OBAQ を今も使用してる方はいらっしゃいますか?
もしくは、上記のような目的をみたすライブラリってなにかあるでしょうか?
>>556
> Ruby からシェルスクリプトのように、コマンド群を実行したいのですが、
> たんに system とかから実行するのではなく、以下のようなことがしたいと思っています。

外部のコマンドを実行するには、fork&execとかsystemとか1.9ならspawnとか
IO.popenとか``とか使うしかないんだが。

> * 実際にはコマンドを実行しないモード(dry run)みたいのがある。

単なるフラグの処理だろ。

> * シェルスクリプト中の各コマンドについて、エラーハンドリングができる。

例外処理? それとも$?.exitstatusについて?

> * そのほかシェルスクリプトから呼び出される各コマンド・プロセスの仮想化

意味が分からない。
こわーい
559デフォルトの名無しさん:04/05/19 13:18
こわいこわい
関数型言語の知見に基づくビルドツール DRMake
http://spa.jssst.or.jp/2003/program/papers/03007.pdf
なるほどと思って読んでたんだがここでワラタ。
|Ruby ユーザにとって新しい言語の習得の必要がない
562デフォルトの名無しさん:04/05/20 12:30
PHP普及の原因は、イスラエル・Zend社のマーケティングの成功にある。
@Perlでは別インストールで多くの人が知らないデーターベース利用を標準で使用できるようにし、「データーベースが簡単に取り扱える」というイメージを特に強く植えつけた。
Aウェブサイト作成への特化。例えば、セッション管理がそうだ。
Bソースの隠蔽による著作権保護を可能にした。
データーベースを使いたいが、使い方がわからない。そこに、PHPなら使えるという情報が先に入る。これで、PHPに入った人もかなり多いはず。
PHPの言語仕様はZendに大きく左右される。
二年ほど前、PHPが出始めた頃には、変数のスコープがPerlとまったく同じ仕様だった。
もともと、Perlのソースコードを改編して作成されたPHP。
↓PHPの歴史
http://php.planetmirror.com/manual/ja/history.php
PHPには、Perlコードの退行による高速化の意図が言語のいたるところに見える。
マイクロソフトは、オブジェクト指向への対応というのが大義にVB6.0からVB.NETに言語仕様を大幅に変えた。
今後も大きく言語仕様が変わることはないのか?
オープンソースとは言っても、Zend社の
http://www.zend.com/management.php
の数人のスタップによって大きく左右される。
再帰的定義とされる「PHP:Hypertext Preprocessor」という名前にも理由がある。これは、要するに、正確には、「Perl Hypertext Preprocessor」としたいところだが、GNUの「GNU is Not UNIX」という再帰的な定義をもじったものだ。
要するに、「GPLのフリーソフトのライセンスには違反していませんよ!」と一つには主張し、また、一つには、「PHP is Not Perl」とでも言って、Zendの社としての姿勢を、先人の「Perl開発者たち」から擁護する意図があったのだろう。
Nではなく、Hなのが、そのための味噌だ!Perl開発者たちは、当然、面白くないはずだ。
PHP信奉者は、六芒星(hexagram)マークのユダヤ教にでも、入信せよ!


>>562 って元ネタはどのコピペ?
リファレンスマニュアルに open-uri って無い?
>>565
節穴でした。しょうもない質問してしまってスマソ。
567デフォルトの名無しさん:04/05/21 15:27
いろいろ調べましたが無理でした。

大変お忙しい中お手数ですが、
Ruby/Tkをmswin32かmingwで動かす方法を丁寧に教えて頂けないでしょうか。
>>567
インストールするだけでOK
http://rubyforge.org/frs/?group_id=167
569567:04/05/21 16:27
簡単に動きました。ありがとうございます。
>>556
warlus 開発終了なの?お疲れ様でした。

…自作アプリ、warlus使わなくてよかった。
…… amrita の行く先は大丈夫かな。
Rubyで文字列を記述する場合、シングルクォートとダブルクォートの2種類があるのはなぜでしょう?
ダブルクォートだけでは困るケースがあるのでしょうか?
シェルスクリプトからの伝統でしょ。
また実際、""で書いた方が楽な場面もあれば、''で書いた方が楽な場面もある。
a = 1
p "#{a}" # => "1"
p '#{a}' # => "#{a}"
とか。
>>571
\ が混じるとめんどい。特に Win のファイルパスを貼り付けた時。
あいぼーん
Ruby1.6.7 + rss-0.0.8 で RSS1.0 の dc_date が拾えない。もう1.8系しかだめなのかな。
577デフォルトの名無しさん:04/05/24 21:49
rdoc の国際化がどうなってるか、追っかけている方はいますか?
納品せにゃならんプログラムの各に英語/日本語のコメントをつけるとき、
私は↓のように併記してますが、なにかうまいやりかたあるでしょうか?

#
# Returns current rcs timestamp.
#
# 現在の RCS タイムスタンプを返す
#
def rcs_date
...
end

>>577
Rubyで仕事。
イイナー、イイナー。
俺なんかPerlしかまわってこないぞ。
まあいいんだけど。
rdocの多言語対応はまだなんも決まっちゃいないはず。
javadocな人はどうやってんだろ。
仕事でヘタにrubyで書いちゃうと
会社辞める時の引継ぎが大変
普通使わねって。
582素人:04/05/25 20:21
mod_rubyについて教えてください
何故エラーが出てるのかわかりません


[Tue May 25 20:15:31 2004] [error] mod_ruby: error in ruby
\n/usr/local/apache2/htdocs/ruby/test/TestMain.rb:2:
in `load': ./TestTool.rb:12: dynamic constant assignment (SyntaxError)
\n\t\tAAA1=CGI.escape(szEucKey)\n\t\t ^
\n\tfrom /usr/local/apache2/htdocs/ruby/test/TestMain.rb:2
\n\tfrom /usr/local/lib/ruby/1.8/apache/ruby-run.rb:53:in `load'
\n\tfrom /usr/local/lib/ruby/1.8/apache/ruby-run.rb:53:in `handler'\n

とapacheのerror_logに出力されてしまいます
SyntaxErrorって書いてあるじゃん
馬鹿?
584素人:04/05/25 20:22
ソースです

TestMain.rb
------------
require "cgi"
load "./TestTool.rb"

szEucKey="&&"

AAA1=CGI.escape(szEucKey)
print "1:",AAA1,"\n"

TestTool.testMethod()
--------

585素人:04/05/25 20:23
TestTool.rb
-------------
require "cgi"
require "uri"
require "kconv"

class TestTool

def TestTool.testMethod()
cgi=CGI.new
keyword=cgi["keyword"]
szEucKey=Kconv.toeuc(keyword)
p szEucKey
AAA1=CGI.escape(szEucKey)
print "2:",AAA1,"\n"
end

end
-------------
586素人:04/05/25 20:25
>>583

TestMainの
AAA1=CGI.escape(szEucKey)は
うまくいくのですが

TestTool.rb だとエラーになってしまいます

全然わからなくて、困ってます。
in `load': ./TestTool.rb:12: dynamic constant assignment (SyntaxError)
って書いてあるじゃん
>582-586
dynamic constant assignment - 動的な定数への代入

定数への代入はメソッドの外でなくてはならない。
定数のじゃなくて変数を使うこと。
589素人:04/05/25 20:55
あ・・・
すみません

気づきました
「AAA1」が駄目だったのですね
小文字にしたら旨くいきました

ありがとうございました、とても感謝しています。
rubyわかりにくいよね>素人
やめちゃえ
>>589-590
俺たちが悪かった。
どうか使ってやってくれ。
例えば、今回素人が全然わからなくて困っていた、
「小文字にしなかったのが原因」
という結論は、*nixでshとか使ってるやつなら直感的にわかる様な事だろうか。
そうだとしても、shも妙な仕様を抱えている言語の1つでもあるし、
ここは考察すべきところであると思う。

rubyがめざす言語ポリシーとして正しい道を歩んでいるのかどうか。
第一に、 *nix とか sh とかで把握できるようなものではないだろう(環境変
数が大文字というネタくらいか。でもこれって慣例だよね)。

たとえばメンバ変数が @ から開始される、とかいった決まりとほとんど同じ
だと思うし、大文字と小文字というのは区別としてはわかりやすいと思うなぁ。
ruby-mode ならかなり目立つ色になってくれるし。定数と覚えなくても「大文
字はクラス名という慣習である」という程度の理解でも、回避する役には立つ。

現実問題としては、これをやめた場合に Class や Object といった定数をど
う保護するか、というのが問題となる気はする。
そういうわけで、けっこう妥当な方針だと思うけど。
ん〜
そんなの Ruby のちゅーとりあるナナメ読みすれば
わかることじゃん。

自分でコーディングして、自分で調べるのが面白い、
それがプログラミングの楽しさと私は考えてます。

初学者でも、マニュアル読むくらいの丁寧さというか
学ぶ積極性というか周到さというか、そういうのは必ず持っているハズ。
そういった謙虚さが足りないと、学ぶスピードが落ちるし、
自分にとって大きなマイナスになる。

トライアル&エラーだけでコーディングを学ぼうとする人は
面倒臭がりすぎというか、頭のネジとか肛門とか、どこかゆるんでると思う。
プリーズ ティーチ ミーーーー
小数点4位以下を丸める方法はどうするのが一番簡単ですか?
(f * 1000).to_i / 1000.0
puts(Float(sprintf("%.4f", 0.123456)))
>>592は頭のかわいそうな人
>>595
「丸める」の意味次第で、>>596の to_i の部分を
ceil, floor, round のどれかに置き換える必要があるかもしれない。

600595:04/05/26 11:15
(f * 1000).round / Float(1000)
で、いくことにします。ありがとうございました。
Float に四捨五入メソッドとかあったほうがよくないかな
>>601
四捨五入にもいろいろ種類があるんだぞ。
>>602
ごめん、よければ詳しく教えて。
602じゃないので想像で。

負数で .5ちょうどの場合に、正の無限大側に切り上げる(-1.5 -> -1.0)のか、
絶対値で考える(-1.5 -> -2.0)のか、とかかな。

あと、一つ上の桁の数字が奇数か偶数かで、.5の扱い(切り上げ・切り捨て)を
変えるような方式もあった気がするけど、これは「四捨五入」じゃないかも。
そのへんの仕様を決めるのに一悶着、メソッド名決めるのにもう一悶着。
606602:04/05/26 16:56
http://www.google.co.jp/search?q=%E5%9B%9B%E6%8D%A8%E4%BA%94%E5%85%A5+ISO&ie=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
なんだ、情報処理に関係してる人には割と有名だと思ってたんだけど、そうでもないのか。
んなもん全部パラメータで指定すればいい。
メソッド名はaliasばら撒いて解決。
>>606
そういう数値演算とかの話って、知らなくていいひとは全然知らない気がする。
609606:04/05/26 17:51
>>608
なるほど、そんなもんかな。
で、「1.0/2 != 1/2」の話へ繋がっていくとか。
そこでグローバル変数eの導入ですよ。
切り上げと切り捨てだけなら揉めずにすむか?
なんで四捨五入がないんだゴルアってもめる。
じゃあround()とiso_round()か。
それともsort()みたいに、round()にブロックを渡すとか。そりゃやり過ぎ。
>>592
変数命名の仕様は、知ってさえいれば十分に直観的。
そして今回の場合は、エラーメッセージを読めば十分に原因の見当は
つく(定数のつもりはないのにconstantとか言われてる)のだから、
こんなところで直感なんて使うなと。

>rubyがめざす言語ポリシーとして正しい道
とりあえずこれ嫁。特に2番目あたり。
http://slashdot.jp/articles/03/03/14/0258247.shtml
「Stringの連結が * であるべきだ」なんて言ってるやつがいるの?
わけ分からん。
616デフォルトの名無しさん:04/05/26 23:22
Ruby1.6.4上でCGIを作っているのですが、File::unlink の際に奇妙な事が
起こり、困っています。

---
p Dir::entries(hoge + '/')
Dir::entries(hoge + '/').each {|filename|
path = hoge + '/' + filename
next if FileTest::directory?(path.untaint)
p Dir::entries(hoge+ '/')
File::unlink(path)
}
p Dir::entries(hoge + '/')
Dir::rmdir(hoge)
---
これを実行すると
---
(下の行のようなファイル名の配列がずらずら消えてゆく)
[".", "..", "body", "style", "lock"]
[".", "..", "style", "lock"]
[".", "..", "lock"]
[".", "..", ".nfs0c3e6b4700000d9a"] ←これ
./lib/Database.rb:50:in `rmdir': Directory not empty - "./database/bc9189406be84ec297464a514221406d" (Errno::ENOTEMPTY)

なぜ、突然 .nfs0c3e6b4700000d9a のようなファイルが作成されるのが
不思議です。 そして、そのファイルのおかげでディレクトリを削除できな
いのですが。 理由をご存知の方、いらっしゃいませんか?
618616:04/05/27 00:11
>>617
ありがとうございます。 ようやく納得できました。
まさか作業ディレクトリがNFS上だとは知りませんでした…。

.nfs* が File::unlink の後に残っているということは、クローズ処理なるものが
完了していないという事ですよね。 仮にそうだとすると、プログラムが終了
するまで、そのファイルは消えない事になりますよね。

そうすると、ディレクトリを削除するには、別のプロセスを立ち上げて消すしか
方法はないものでしょうか。 意外とNFSって曲者ですね。
>>615
数学屋
標準のCGIライブラリって使わないほうがいいんですか?
621616:04/05/27 00:55
自己レス。
何か勘違いしてるかも。
出直してきます。
>>592
まあ確かに素人が↓のエラーを見たときに、
in `load': ./TestTool.rb:12: dynamic constant assignment (SyntaxError)
大文字が定数になるから。なんてわかるわけないよなぁ。

正直、定数は const 修飾子みたいなのがほしかった。
大文字小文字で区別するのはちょっとなぁ。
>>622
そお? どーせ、ハンガリアンうんたらで大文字で記述されたりするんだから
それを言語仕様に組み込むのってのは、いいアイディアじゃね?

大文字小文字関係なしにクラスだの変数たの定数だのがでてきたら、それだけで
コードを追う手間が増える。 部分を見ただけで、一発でそれが何かわかるってのは
すごく重要だと思うんだけどなー。

まつもと氏の「初心者はいつまでも初心者に甘んじるべきではない」ってのに一票。
初心者は大文字小文字の区別がつかないバカが多いからなあ。
>なんてわかるわけないよなぁ
調べてないんでしょ?わかるわけがないよ。
手持ちの知識と勘だけでいつでもどうにかなるなんて大間違い。
「なんで定数になってるの?」という疑問から、ふつうは言語仕様を調べる。
ていうかコーディングする前に、言語仕様ぐらいざっとでも目は通す。

素人に優しく玄人にも便利、っていうならかまわんけど。
でも素人とか初心者(≠初級者)なんぞのために、とっつきやすくも
不便な仕様に変えるようなら、きっと自分はrubyを見限る。
…優しい独裁者はそんな決断をしないと、信じてるけどね。
>>616
ああぁ、そのスクリプト、ホームディレクトリで実行しちまったよ・・・
なんかスッキリしたみたいだよ。鬱死・・・
627デフォルトの名無しさん:04/05/27 03:29
rubyのCGIが動かせて無料で広告無しのホームページ作れるとこってない?
自宅鯖
用途は限られるがRubyForgeとか。RubyForgeって無料だよな?
>>615
"kyonkyon" は "kyon"*2 ではなくて "kyon"**2 じゃねえの?って話みたい。
>>624
DOS/Windowsのファイル名の仕様で慣れてるってのがあるかもね < 初心者
そういや、VBって区別するのかな?
"kyon"=="k"*"y"*"o"*"n"=="k"*"n"*"o"*"y"=="knoy"
行列とかやったこと無い?
加算で交換法則が成り立たないことはないはずだけど、
乗算では成り立たないケースがあるんだよ。
その習慣に倣えば、文字列結合は乗算となる。

言い分はいちおう理解はできるんだけど、そもそも文字列で
数学やってるのが間違いなんだよなぁ。
634デフォルトの名無しさん:04/05/27 13:37
pdumpfsの質問です。

LAN上のPC1から、PC2へバックアップを取ろうとすると、
>pdumpfs.exe C:\temp \\PC2\backup
pdumpfs:444:in `main': undefined method `fprintf' for #<IO:0x8ce980> (NoMethodError)
from pdumpfs:462
なるエラーが出るのですが、LAN経由でのバックアップはできないのでしょうか。
PC1 XP NTFS
PC2 2000 NTFS
>>634
ruby 的な解法じゃないけど、ネットワークドライブを割り当てたらどう?
>>634
エラー嫁。
>pdumpfs:444:in `main': undefined method `fprintf' for #<IO:0x8ce980> (NoMethodError)

fprintf なんてメソッドあるのか?
ネットワークには関係なさそうだけどな。
>>636
ちなみにそこのまわりは

 if windows?
  fstype = get_filesystem_type(dest)

  if fstype !~ /ntfs/i
   STDERR.fprintf("pdumpfs: only NTFS is supported but %s is %s.",
        dest, fstype)
   exit 1
  end
 end

てな感じだった。fprintfは単にprintfの間違いだと思うけど結局NTFSじゃ
ないってエラーはいて終わるだけだね。とりあえずprintfに直して走らせ
ればそこが何になってるか調べることができると思う。windowsはよくわか
らんけど、LANで共有した奴はNTFSにはならないのかな?

638634:04/05/27 16:10
ネットワークドライブ割り当てでうまくいきました。
ありがとうございました。
>>631
初心者だけってわけじゃなさそうですよ。どざの多くはそうなのかも。

ttp://linux.ascii24.com/linux/allascii/ascii/1999/07/30/176000-009.html
> ファイル名の大文字小文字を識別するのも生理的に受け入れ難い。
文字列中の^Hにマッチする正規表現って何ですか?
あと文字列中の
_____^H^H^H^HTEXT
みたいなのは何を意味しているんでしょうか?
/\x08+/ もしくは /(?:\^H)+/
ホンモノのデータを見ないとどっちかはわからん。
とりあえず「コントロールコード」について調べてみ。

>_____^H^H^H^HTEXT
HTML で表現するとこんな感じ。
<del>_____</del>TEXT
/\b/
643デフォルトの名無しさん:04/05/28 06:54
>>637
ネットワークドライブに割り当てられたドライブは SMBFS になると思うぞ。
その先がNTFSだろうとFAT32だろうと、リモートホスト側で変換するはず。
NFSでも相手のファイルシステムいかんに依らず、NFSとして扱えるだろ?

以上、想像でした。
>>641 違う。HTMLで表現するなら <u>TEXT</u> だろ。
roffベースの man か何かのエスケープシーケンスだな。
645デフォルトの名無しさん:04/05/28 10:06
パスワードに使えて、どの環境でも同じ結果を出す
暗号のライブラリってありますか?
crypt
>>646
環境によって違うからダメでしょ。md5 とかにした方がマシ。
捨てっちまえ > bcc
1.8 で、

class Foo; end
class Foo::Bar; end

こう書けるようになったのは嬉しいのだが、

class Foo; class Bar; end; end
class Foo::Baz < Bar; end

これがエラーになるのはちょっと悲しい。
>>643
unix 系の場合はそうかもね。

ちなみにエクスプローラのプロパティを見ると、ネットワークドライブ
の場合はしっかり NTFS と認識してる。元が FAT32 の場合はシラネ。
>>649
class Foo::Bar; end は
class Foo; class Bar; end end の省略記法では*ない*からな。
>>649
class Foo::Bar; end は
class Foo; class Bar; end end の省略記法では*ない*からな。
というかスコープの話じゃない?
Foo::Baz の定義は main で行われているのだから、当然 ::Bar を探しに
行くわけだ。Foo::Bar と指示してやらないと。
スコープの話じゃない?
Foo::Baz の定義は main で行われているのだから、それだと当然
::Bar を探しに行くわけだ。Foo::Bar と指示してやらないと。
スマソ。pc5 重すぎ&反映遅すぎ。orz
ふかわりょうスレですか?というのはともかくとして。

だとすると、 class Foo::Bar; end と書けてもあまり嬉しいことないなあ。
class Foo; class Bar; end; end のままでいった方が良さげだなあ。
>>649
class Foo::Bar; end は
class Foo; class Bar; end end の省略記法では*ない*からな。
>>649
class Foo::Bar; end は
class Foo; class Bar; end end の省略記法では*ない*からな。
>>649
class Foo::Bar; end は
class Foo; class Bar; end end の省略記法では*ない*からな。
>>656
ライブラリの再定義をするときとかに便利だよ。
特に名前空間が深い時ね。
 module Foo; class Bar; end; end
 class Foo::Bar; def baz; end; end

あと class Foo::Bar は、クラス Foo そのものには影響を
与えないことが明瞭になる。
 class Foo; end
 class Foo; class Bar; end; def baz; p 'Foo#baz'; end; end
>>657-659
これ全部俺か? ケイタイだとよく分からん。
スマソ逝ってくる。orz
>>657-659
これ全部俺か? ケイタイだとよく分からん。
スマソ逝ってくる。orz
663デフォルトの名無しさん:04/05/29 02:56
>662
その調子で1000までたのむよ
664デフォルトの名無しさん:04/05/29 03:07
www.ruby-lang.orgメンテ中。
CVS周りのアップデート中か?
>>663 も二重書き込みだったらおもしろかった。
>>664
このタイミングだと、namazu.orgやらmozilla.gr.jpやらの話
http://slashdot.jp/article.pl?sid=04/05/27/1453244&topic=92&mode=thread
を思いだしてしまうのだけど。やっぱクラックされたんじゃ?
>>666
やっぱり。
本当にクラックされてたとは
669デフォルトの名無しさん:04/05/29 17:36
helium.ruby-lang.orgがクラックされました
http://www.ruby-lang.org/announce-ja.txt
670デフォルトの名無しさん:04/05/29 19:10
やっぱりオープンソースって怖くて使えないね。
671デフォルトの名無しさん:04/05/29 19:11
ラビーて無料?なら教えれ
>>671
もみあげを伸ばすのか?
クラックされました
ttp://www.rubyist.net/~matz/20040529.html
http://www.namazu.org/ の orz はなんなんだ?ワラタぞ
このまま消える言語に一票。
これか。

【オフィシャル】Rubyはこのまま消えていく言語にノミネートされました 【サイト消滅】
http://pc5.2ch.net/test/read.cgi/php/1060009605/
>>673
ツッコミわろた
678デフォルトの名無しさん:04/05/31 00:00
これでオプソプロジェクト全滅してくれると非常にうれしいよね!>ALL
これからはクローズド・ソース!
>>626
いまさらだが、あまりの感動に泣いた。( ´Д⊂ヽ
よーし、パパも質問のふりして、さりげに危険なコード貼っちゃうぞ!
681626:04/05/31 01:51
兄さん。
あれからというもの、コツコツあちこちから設定ファイルの断片をかき集めて、
最近ようやく普通の暮らしになれてきたところです。
バックアップは重要、そんな平凡であたりまえな言葉の、
本当のありがたみが身にしみてきている、
そんな今日この頃です。
…そんなあなたのために、pdumpfs。
ttp://namazu.org/~satoru/pdumpfs/
683デフォルトの名無しさん:04/05/31 07:18
s.split(/(,)/).each{|ss|
 if ss =~ /,/
  print ss
 else
  print "\"" + ss + "\""
}
これはカンマで区切られた文字を""で囲むコードなんですが、
二度も/,/でチェックしていて無駄な感じです。
ssがsplitの引数にマッチしたのか、マッチしていないのかは
どこかに保存されていないのでしょうか?
684デフォルトの名無しさん:04/05/31 07:26
orgも下半身のふくよかなorzに見えないことはない
>>683
splitの正規表現にカッコを使わないのはどうよ
print s.split(/,/).map{|ss| '"' + ss + '"'}.join(',')

あるいはgsub使うとか
print '"' + s.gsub(/,/,'","') + '"'
URI って file は解釈してくれないでしょうか?
ruby -ropen-uri -e "puts URI::parse('file:///tmp/hoge').read"
みたいな。
あんまruby本体に機能詰め込むと起動が遅くなると思うんですが。
その辺どういう見解ですか?>開発者ども
こんな見解でどうですか。

$ time ruby16 -ep

real 0m0.047s
user 0m0.030s
sys 0m0.010s

$ time ruby18 -ep

real 0m0.030s
user 0m0.020s
sys 0m0.010s
>>687
自分で外してビルドすれば。
そういえば、ruby で Robocode みたいなことをやりたいんですが
ruby 本体を埋め込みして、不特定多数のデベロッパが作った
ruby スクリプトをネットワークでやりとりするんです。

セキュリティ上、埋め込みした ruby からは File などを
はずしておきたいんですが、そういう ruby のソースコードの腑分けを
解説してくれてるサイトってないですかねぇ。

ttp://i.loveruby.net/ja/rhg/index.html
↑こちらとかは、とても参考にさせていただいてます。

できれば Thread ははずしたくないんですが、これは残しておいて
大丈夫ですかね?
>>690
$SAFE = 4 じゃだめなの?
>691
なるほど、目からウロコです!
それでいけそうですね。
とりあえずセキュリティはセーフレベルにゆだねる形で
作っていって、なにか不具合があったら、また検討したいと思います。
ありがとうございました。
(こういうスレで聞いてみるもんだなぁ・・)

ついでに質問で恐縮なのですが
私は embedded ruby はまるきり初心者なのですが、
みなさんはどういう風に勉強されましたか?
トライアル&エラーでしたか?
>>690
RubyRobots?
>693
なんと、もうあったのですね…。
まぁ勉強にはなりますので助かります。
参照させていただきます。
設定ファイルをRubyで書いてもらってそれを読み込みたいんだけど、
本体スクリプトとのデータの受け渡しはどうやるのがいい?
わざわざ設定用のAPIを作るほどでもなくて、いくつかの変数に
代入してもらう程度なんだけど。
load とか require とか YAML とか Marshal とか PStore とか・・・
697デフォルトの名無しさん:04/06/01 18:35
☆★☆★ 日本語プログラミング言語『ひまわり』 ☆★☆★

日本語で『こんにちはと、言う。』と入力すれば
ダイアログに『こんにちは』と出るプログラミング言語登場!!
PNGもサポートしてるので、かなりおすすめです!!
また、【『http://www.xxxx.xx/』を、『index.htm』へ、HTTPダウンロード。】
とすれば自動的にダウンロードできる優れ物です!!

↓日本語プログラミング言語『ひまわり』
http://hima.chu.jp/index.htm
↓日本語プログラミング言語『ひまわり』スレッド
http://pc5.2ch.net/test/read.cgi/tech/1083053283/l50
>>695
>Rubyで書いてもらってそれを読み込み
この時点で、
* load
* 読み込んで eval する
のどっちかじゃないかな。
require はムダに再読込を防止されちゃうから使わない方がよさげ。

たとえば tDiary は load してる。

>>696
Marshal(PStore) は手書きできないし、互換性も保証されない
んじゃなかったっけ?
>>698
tDiary は load じゃなくて eval してる。

$ ident tdiary.rb ; grep -n \"tdiary.conf\" tdiary.rb
tdiary.rb:
$Revision: 1.190 $
471: eval( File::open( "tdiary.conf" ){|f| f.read }.untaint, binding, "(tdiary.conf)", 1 )
700695:04/06/01 19:16
うーん、なにかいいライブラリがあるわけじゃないのね。
サンクス
>>688
他と比較してない時点で無駄なデータ
>>699
ぅげぇ
>>701
バージョン上がって機能が増えると遅くなるんじゃないか、
という話とは違うのん?
704デフォルトの名無しさん:04/06/02 11:40
おしえてください。

以下のような、現在の時刻を表す文字列を生成したいのですが、
(用途は Debian の debian/changelog ファイルなどの生成)

'Wed, 2 Jun 2004 10:48:57 +900'
こういう形式の文字列って Time クラスだけで作ることできるでしょうか?

自分がやってみたのは、
t = Time.new
t.strftime("%a, %d %b %Y %X %Z")
=> 'Wed, 02 Jun 2004 10:48:57 JST'

となり、自分が求めているフォーマットと比べると、
日付 2 -> 02
タイムゾーン +900 -> JST
となってしまい、いまいちでした。。。



time.rbのTime#rfc2822を参考に数行書き替えるとできるんじゃないかな。
% ruby -e 't=Time.new; p t.strftime("%a, %e %b %Y %X %z")'
"Wed, 2 Jun 2004 13:35:14 +0900"
>>706
%z が使えるかどうかは環境依存と思われ。
リファレンスだけでも復活させてよヽ(`Д´)ノ
>>708
漏れは手元にダウンロードしてきて見てる。
http://www7.tok2.com/home/misc/ruby.html
710デフォルトの名無しさん:04/06/03 01:28
すいません、プログラムを実行すると標準出力に出力があるんだけど
それがどこのコードによるものかがわからない場合
どうしたらいいんでしょう?
ラビーって何?ひまわりと同じ言語?
Ruby

Ru by


普通Ruを’ラ’とは読まんよなあ・・
狙ったボケだったりしたら萎えるなあ・・
寒いよなあ・・
>>712
メール欄よく読もうね。
なんでそんなのが釣りになりうると思えたんだろう。
ユダヤ教の司祭だろ?
ttp://i.loveruby.net/d/20040516.html#p04
レシピブック、早いとこ項目見出しも公開して欲しい。
田舎なんで本屋に置いてないから中身確かめることもできんよ。
>>710

とりあえず、きれいな方法でなくても良いなら。

set_trace_func(

Proc.new {|event, file, line, id, binding, classname|

if event == 'c-return' and id = :puts
puts ['trace:', file, line, classname].join("\t")
end

}

)
>>710
grep で関連コードを絨毯爆撃か、デバッガで追うのがふつうかな。
ruby ならではということで >>717 と同様に STDOUT.print を
書き換えることも考えたけど、出力のメソッドが print とも puts
とも限らないのが悩みどころなんだよね。
たぶん print か write あたりが比較的低レベルだと思うんだけど、
調べる気力が今はない :-)


どーでもいいけど、デーモンだからって、モジュールの使い回しをする
関係で出力してしまうことがあると思うんだけどな。
出力しないように作り直すのもめんどくさいし。
個人的には、IO 派生のログ出力クラスを作ってそこに繋いどく。
>>718
そんな糞モジュール(ry と言いたいところだけど、そういうのは意外と多いのかね?
そんなの漏れなら全部 /dev/null 行きにしちゃうんだけど、
でも、Ruby 本体の例外終了時のエラー出力だけはどうしようもない、
というかどうにかして欲しいんだけど、どうにか拾わないとメチャメチャ困るので、
STDOUT, STDIN, STDERR は /dev/null 行きにしつつも、
$stderr はどっかのファイルかログ出力用クラスに繋ぐ、くらいはやるかな。
720710:04/06/03 23:04
>>717,718
ありがとうございます。解決しました。
メソッドの名前をdataにしていたのが原因でした。
名前を変えたら直りました。
けど、dataって特別なメソッドでしたっけ?
721デフォルトの名無しさん:04/06/04 08:43
>>712

俺は北米系の英語しかわからんが、 u は、日本語だと「う」じゃなくて「あ」に近いね。
南の方いくと「う」に近い感じになってくるかもしれん。 特にスペイン語系の奴らは。

まあ、どうでもいいね。
長い u のどこが「あ」に近いと言えるのか理解に苦しむ
雲丹が兄になっちゃうのはイヤだなぁ
>>722
長いって何?
よくわからんが、一応、ありふれた単語で例をあげておく

Urgent -> あーじぇんと(×うーじぇんと)
Upload -> あっぷろーど(×うっぷろーど)
Cut -> かっと(×くっと)
Curry ->かりー(×くりー)
Tully's -> たりーず(△とぅりーず)
Starbucks -> すたーばっくす(×すたーぶっくす)
Fuck -> ふぁっく(×ふっく)
Suck -> さっく(×すっく)

さ、カタカナ英語の時間はおしまい。 オフトピsage
rúːbi
>>720
> けど、dataって特別なメソッドでしたっけ?
違う。

そのコードやSTDOUTに出てたっていう出力でも見ないことには何もいえん。
727デフォルトの名無しさん:04/06/05 03:39
で、この言語はルビーなのかね?ラビーなのかね?
ルービ
>>724は真性バカ決定
730デフォルトの名無しさん:04/06/05 18:01
already initialized constant

が出てくるんだけど、原因がさっぱりわからない

このwarningで例外投げるようにしてほしいのだけど、どうすればよいですか
731デフォルトの名無しさん:04/06/05 18:05
Walk は ワルク と読みます
Netscape は ネッツカーペ と読みます
Builder は ブイルデー と読みます
ではRubyは ルァゥヴィ- と読みましょう

>>730
変数名のはじめに大文字つかってるっぽいな
変数名のはじめが大文字の場合は定数扱いになるから。

だからょお、constとか作ろうze
>>729
ならば>>724をみて納得した俺も真性バカ決定
>>730
たしか ruby-list に要望があがってたはず。

とりあえず >>717 を if event == "line" then に書き換えて、
代入を全て追いかけるとかは?
やたら冗長だけど、目星をつける役には立つんじゃないかな。
メソッドを引数の数でオーバーロードって出来ないの?
def a(x, y=1)
x-y
end
puts a(10) # => 9
puts a(10, 2) # => 8

定数の再代入禁止が採用されないのは組み込みで困るとかいう話じゃなかったかな。
だからインタープリタのインスタンスを複数持てるようにしてくれ、と。
evalじゃまずいの?
インタプリタのインスタンスがあったとして、制御とIOはどんなAPIになるの?
スマソ、記憶の片隅にあったのはクラス再定義(Class オブジェクト再代入)
の話だった。[ruby-list:39567]

>>737
デフォルトはともかく、strict なモードがあってもよいと思われ。
>>741
グローバルなモード(?)ならやっぱり組み込みで困るような。
>>736
それはオーバーライドなんでわ?
744736:04/06/06 00:47
うぉ、素で間違えた。いつまで経ってもどっちがどっちだか覚えられんので
す……スマソ。
メソッドを引数の数でオーバーライドって、こんな感じ?
class A
def a(x, y); x + y; end
end
class B < A
def a(x); x ** 2; end
end
B.new.a(10) # => 100
B.new.a(10, 1) # => 11
これはできないと思うけど。
>>743
ハァ?
746735:04/06/06 01:38
自分が意図していたのはこんなのでした。

class C
 def initialize(str)
  # 文字列から生成
 end

 def initialize(a, b, c, d)
  # パラメータを与えて生成
 end
end

デフォルト引数を駆使するか、メソッド名を変えるしかない?

def C.parse(str)
 # ...
 new(a, b, c, d)
end
>>733
チミは無害なので仮性
影舞結構よさげな感じ。
ただIISだとぽろぽろCGIエラーや警告が出る。
ところで運用中にフィールド削ったらいけないの?
担当者削ってレス書き込んだらassignedが無いとか怒られた。
>>746
こんな感じとか?
漏れはメソッド名変えた方がおすすめするけど。

def initialize(*arg)
if arg.size == 1
# 文字列から生成
else
# パラメータを与えて生成
end
end
>>742
$DEBUG みたいなものをイメージしてたけど、
$SAFE のようにスレッドローカルなら問題ないのでは?

>>746
def initialize(a, b=nil)
 if b == nil
  init_a(a)
 else
  init_b(a,b)
 end
end
protected
def init_a(a)
 :
こんな感じの方法もあるけど、nil を渡せない欠点あり。
でも一般的に、メソッド変える方がわかりやすいコードになるんじゃないかな。

そーいや modruby.net もヤラれてたんだね。
あっちもこっちもで前田さん大変だ。
http://modruby.net/ja/announce.txt
>>748
フィールド削除でエラーは、影舞の BTS:154 だな。
Win32 での動作は BTS:190 あたり。
CVS の release-0_8-branch を取得するのがベストかも。
Win32 まわりの修正もコミット済みっぽいし。

つーかそろそろバグ修正をまとめてリリースして欲しいんだが。
752デフォルトの名無しさん:04/06/06 15:53
>>733
大丈夫、キミはズルムケだ。

>>724>>712 の Ru に対して言ったんだろ?
きっと、>>729 はアメリカの国防長官の名前を「ルムズフェルド」とか発音してるはずだ。
酒場に行っても「ルム・コーク」。 さすが真性。
rubyでコンソールアプリを作ってるんですが
方向キーを押した瞬間、なんらかの動作をする
みたいなことはできるのでしょうか?

Enterだけなら

if STDIN.gets == "\n"
do_something
end

とかでできそうですが… 他のキーだとやり方が思いつかないです。
>>753
curses とか使った方が良さげ。
755753:04/06/06 23:36
>>754
お、これは便利そうですね。解決しそうです。
やっぱりRubyはおもしろい

ありがとうございました。
手元のジーニアスでは [ru:bi](uにアクセント)で
わざわざ赤で <発音注意> と書いてあるんだけど。

http://dictionary.goo.ne.jp/search.php?MT=ruby&kind=ej&mode=0&base=1&row=1
の音声も、上記のようにしか聴こえないのだが...
>>756
おいおい、そこまで引っ張るネタかよ!?
cygwin版でputsしたときの改行コードを"\r\n", "\n"に切り替えるにはどうすればいいですか?
>>758
改行コードが入ってるグローバル変数なかったっけ?
いま、ドキュメントが見れんからわからんが・・・。
いつ、公式サイトは復活するんだ?

>>768 さんよ、必死なのはわかったが、どこで掛け違えてるのか、俺はすぐにわかったよ。
Ru は、一般的にどう読めるかって話だろ? 別にラビーが正しいなんて、誰も言ってないが。
>>768
本当オマエ必死だな
>>768
開音節と閉音節の区別ぐらいつけろと
>>758
putsは再定義しないと無理ぽ。printなら$\ = "\r\n"
無学だなあ >>768
>>768
公式復活させたってホント?
>>768
お前がクラッカーだったって聞いたけどどうやったの?
>>774
おおお!!!そんな技があったとは目から鱗です。勉強になります。
ありがとうございました。
>>768
ラ・・・ラビー・・・なのか・・・?
…な〜んてね♥
>>768
まぁこういうので期待に応えたレスなんて見たとき無いしな
よく頑張ったよお前は
       ________∩_∩
     /   ノ ヽ (  ノ⊂ ̄))) ̄⊃
     /|ヽ  (_ノ  ._ ̄  0'ヽ 0'
    / |ノ  .)    (_)  ヽ  i (   むしゃむしゃしていた。
 ∋ノ |  /――、__  ./(∩∩)  草なら何でもよかった。
      / /| ヽ__ノ   | / ./     今はモー反芻している。
    | ( | ( ’’’    | ( /
    |__ヽ.L_ヽ        Lヽ_ヽ
''" ""''"" "'''''" ""''"" ''" ""''"" ''" ""''"" ''" ""''"" "'''.
rubyとは余り関係ないんだが、rbファイルをFFFTPでlinuxにASCII転送
してやると、なぜか改行コードが変換されない・・・。なぜ・・
>>771
「オプション」→「転送1」の「転送モード」と「アスキーモードのファイル名」の
設定を確認しる。
おそらく激しくスレ違いなので、それでダメなら、以後はソフトウェア板あたりへ。
オーバーライドとオーバーロードの区別が付かない人がいます
strongtyping を使えば、引数の型や数に基づいたオーバーロードができるよ
>>773 と得意気な顔したオーバー30がいます。
Don't trust ( )
OpenHtmlHelp.vbs

' HTMLヘルプを開き、単語を検索する
dim searchword
'if WScript.Arguments.Count = 1 then
'searchword = WScript.Arguments(1)
'end if
searchword = "sleep"

set ws = WScript.CreateObject("WScript.Shell")
ws.Run "C:\Ruby\docs\rubymanjp.chm", 1, False
WScript.Sleep 100
ws.SendKeys "%n"
WScript.Sleep 100
ws.SendKeys searchword
WScript.Sleep 100
ws.SendKeys "{ENTER}"
778デフォルトの名無しさん:04/06/09 09:29
プログラミング言語は何種類も知ってるけど、
スクリプト言語は詳しく無い(UNIXのBシェルとDOSのバッチファイル位)ので、
PerlとRubyはどっちが強いか分かりません。

今からはじめるならどっち?
文法の汚さが気にならなければ(あるいはC++のような汚物を積極的に好むなら)、
あるいは仕事で使うならPerlにしとけ。
780778:04/06/09 09:48
C++のような汚物とか、使いやすいDelphiは好きです。

画面をちょこちょこ作れて、
クラスをふつーに記述できるスクリプト言語が欲しいなー、と思いまして。

Rubyのホームページみたら、なんか今止まってますね。
>>775
残念、27でした。
仕事に使うにしても、今からPerlっておすすめできないなあ。
Perl5の末期に来た今始めても、腐った知識をたくさん詰め込んだころには他の言語(あるいはPerl6)が主流になってそう。
今、仕事で使うというのならPerlだろうけどね。
でも、
* delphi知っててwinのGUIもやりたい
* クラスをふつうに記述したい
ならRubyでしょ。
VCLのラッパがあるし、Perl5のクラスはひどすぎるし。
>VCLのラッパがあるし
これってどのくらい実用的なの?
apolloだっけ。
785778:04/06/09 14:36
RubyでGUIをちょこちょこっと書けるんなら自分のツール開発として即Ruby導入。
VCLのラッパは使わないかも。
昔はVBとDLLの組み合わせで開発したことあるけど、今はクラスの時代でしょ。

MACのアプリをRubyから操作出来たりしたら、仕事でも使いまつ。
どっちが Pでどっちが R?
どちらなりと。
787デフォルトの名無しさん:04/06/09 16:36
Rubyのホームページずっとこのままだったりして
まぁ、それでもいいと思うけどね。管理、大変そうだし
788デフォルトの名無しさん:04/06/09 17:30
正規表現が苦手な者です。
レシピブックに出てきた例なんですが、

レシピ 57 で、
/(.*?)\t/n って正規表現が出てくるんですけど、これって/(.*)\t/n と
どう違うんでしょうか?

なにか具体的な違い(マッチする String)などがあればおしえてください。
>>788
"FOO\tBAR\tBAZ" とかでマッチしてみそ。
普通はできるかぎり長い文字列にマッチしようとするんだけど、
? を付けるとマッチする最短の文字列のところでマッチをやめちゃう。
>>788
マッチするしないという意味ではどちらもマッチする文字列は同じ。
ただし、.*?は最短マッチ,.*は最長マッチなので、文字列のどの部分
にマッチするかは異なることがある。

% ruby -e 'a="a\tb\tc"; a.match(/(.*?)\t/n); p $1'
"a"
% ruby -e 'a="a\tb\tc"; a.match(/(.*)\t/n); p $1'
"a\tb"
791788:04/06/10 00:41
>>789, 790 さん
なるほど。。。
ご説明と具体例ありがとうございます。
とってもよくわかりました!ありがとう!
> ? を付けるとマッチする最短の文字列のところでマッチをやめちゃう。
最短だと".*"は必ず空列にマッチするから、
そうすると、/(.*?)ABC/は/ABC/と等しくなって意味なしのような。
最短マッチって仕様的な矛盾感じるなぁ。
最短マッチと便宜上呼ぶ人もいるがもちろん最短ではないぞ。
通常の貪欲マッチに対応した非貪欲マッチなだけだ。
794789:04/06/10 02:46
>>792
「マッチを *やめちゃう*」ってのがミソで、マッチを *始める* のは同じとこからなのね。
空文字列は長さを持たないから"最短"にはならない、という解釈じゃダメ?
長さ 0 に対して「長い短い」を比較するのに違和感がある。
「大きい小さい」なら数学的な感じだから、「最小マッチ」なら 0 を
含んでもしっくりくるんだけど。
>>795
perl本で見た「最左最短」という説明がオレ的にはいちばん
わかりやすかった。
>>795
まるで駄目。
/(.*?)ABC/ を "123ABC" にマッチさせた場合、ヒットするのは
0("ABC")でも1("3ABC")でも2("23ABC")でもない。

おまいの思考は数学的じゃない、というか論理的じゃないよ。(・д・)
798デフォルトの名無しさん:04/06/10 17:17
メソッドローカルなスタティック変数ってどうやって作るんでしょう?
>>798
まず、なぜstatic変数にしたいか、そこからだ。
800デフォルトの名無しさん:04/06/11 06:36
>>799
例えばメソッドが呼ばれた回数を記録したり、
メソッド内で複雑な計算をする場合にキャッシュしたり。

インスタンス変数でもできるけれど、そのメソッド内でしか使わない場合
メソッドローカルなスタティック変数が欲しい。
シングルトンクラスを作って
そのクラスのシングルトンメソッドからクラス変数を使うとか。
そもそもデータがメソッドに属しているっていう状況がOOP的に異常なんだよ。
だいたい呼ばれた回数を記録したって外から観測できなきゃ意味ないのと違うか?
>>802
オレも同じようなレスを書こうとしたけど、
>>800にある「メソッド内キャッシュ」みたいなのは、
メソッドに属するデータなんじゃないかと思えてきた。
OO的には、メソッドオブジェクトのインスタンス変数、って感じか。

--[思い付いたけどダメな例]--
def func_with_cache(x)
name = caller(0)[0].match(/`(.*)'/)[1] #メソッド名取得
m = method(name) #メソッドオブジェクト取得
m.instance_variable_set(:@cache,{}) unless m.instance_variable_get(:@cache)
cache = m.instance_variable_get(:@cache)
unless cache[x]
cache[x] = func(x)
end
cache[x]
end

--[ダメな理由]--
def foo() end
foo1 = method(:foo)
foo2 = method(:foo)
p foo1 == foo2 #=> true

foo1.instance_variable_set(:@var,1)
p foo1 == foo2 #=> true

p foo1.instance_variable_get(:@var) #=> 1
p foo2.instance_variable_get(:@var) #=> nil <= 1 を期待してた

というか、メソッドオブジェクトの位置付けがよーわからん。
少し前に-talkでも出てたけど、Kernel#methodは毎回新しいオブ
ジェクトを返す。これを同一のオブジェクトにするには、すべての
Methodオブジェクトを覚えておかなきゃならない。
>>800
コンテキストを離れたキャッシュなんてナンセンス。
インスタンスから独立なら、クラス変数でも使え。
全てのMethodオブジェクトを覚えておく、というのはそんなに無理な前提なのかなあ。
そこでメソッドオブジェクトをキャッシュしておいて返すメソッドの実装ですよ。
マイナー OS 使ってるんで [ruby-dev:23681] を試したいんだが、
CVS でソース取ってこれねー。
nightly snapshot みたいなのってどっかにありましたっけ?
>>806
もちろん不可能じゃないが、単に必要とは思われてないだけだろう。
>>807
class Method
 orig = instance_method(:method)
 cache = {}
 fin = cache.method(:delete).to_proc
 define_method(:method) do |*args|
  m = orig.bind(self).call(*args)
  cache.fetch(id = m.object_id) do
   ObjectSpace.define_finalizer(m, fin)
   cache.store(id, m)
  end
 end
end
こんなのはどうかな。メソッド内だけでローカルではないけれども
すぐ外のブロックだけでスコープが終わるので、クラス変数みたいに
どっかからこっそりいじられる心配からは解放されるんじゃないかと。

class A
end

catch (:foo) {
sum = 0
A.__send__(:define_method, :f) { |x| sum += x; sum }
A.__send__(:public, :f)
}

a = A.new
p a.f(10)
p a.f(10)

catchは無引数のブロックを1回だけ実行する関数として使ってる
だけです。
オレは 1.times {} を使う。
現在プログラム板にはHSP関連スレに凶悪な荒らしどもが住みついています。

・HSPに関係の無い話題でスレッドを上げまくる
・HSPオフィシャルサイトの住人を名指しで誹謗中傷する
・重複スレを乱立させる

などの荒らし行為を行っています。
みんなで団結してム板のゴミどもを追い出しませんか?

【HSP関連スレ】
【皆のレイプ魔】HSP初質P25【WWEヲタ=ハゲ】
http://pc5.2ch.net/test/read.cgi/tech/1086878505/
HSP>>>>>>>>>>>>>C=糞w
http://pc5.2ch.net/test/read.cgi/tech/1071899663/
今日もどこかでHSP初心者が質問ですP19
http://pc5.2ch.net/test/read.cgi/tech/1084089079/
HSPについて
http://pc5.2ch.net/test/read.cgi/tech/1085149790/
def get_fib()
 hash = Hash.new{|h,k|
  k < 0 ?
   k:
   h[k] = h[k-2] + h[k-1]
 }
 hash[0],hash[1] = 1,1
 return hash
end
f = get_fib
p f[10]
814810:04/06/12 12:53
>>811
1.times {}の方が1回だけやるぞって感じがするので、
次からはそうしよう。
>>810
こんなことできるんですね。
でも、びっくりしたというか、どこか心地が悪いかも。
ブロックが閉じた時点で、ライフラインが切れたように思えるからかな。
816デフォルトの名無しさん:04/06/12 21:34
RubyでHTTPSで接続するコード書いたんだけど、SSLのセッション全然保存されない・・・
どうしたらセッション保持できるの?
差し支えなければ書いたコードを見せて
818デフォルトの名無しさん:04/06/12 22:17
Net::HTTP.version_1_1
http = Net::HTTP.new( ADDRESS , 443)
http.use_ssl = true

http.get2(PATH1) { |resp|
  puts resp.body
}


http.get2(PATH2) { |resp|
  puts resp.body
}
>>818

http.use_ssl = true
http.start {
 http.get2(....) {....}
 http.get2(....) {....}
}

とする
820デフォルトの名無しさん:04/06/13 02:25
>>819
2つ目のget2で
/usr/lib/ruby/1.8/net/protocol.rb:199:in `sysread': SSL_read:: (OpenSSL::SSL::SSLError)
っていうエラーが出る・・・
差し支えなければRubyとOpenSSLのバージョンやOSなんかの環境を教えて
822デフォルトの名無しさん:04/06/13 10:27
Ruby: 1.8.1-7
OpenSSL: 0.9.7d-3
OS: Debian sid
ここはド素人な質問もしていいスレ?
>>823
ウホッ
>>823
まあとりあえず書いてみろ
ループをbreakで抜けたかどうかによって分岐する構文はないの?
Pythonにはループにelse節をつけられるんだけど。
http://www.python.jp/pub/doc_jp/tut/node6.html#SECTION006400000000000000000
Rubyのbreakは値が持てるから、構文なんか使わなくてもループ式の値を見ればbreakで抜けたかは判断可能。
% ruby -e'
(2..10).each do |n|
 print n.to_s, (2..n).inject(" is in prime¥n") {|r,x|
  if n != x and n % x == 0 then
   break " == #{x} * #{n/x}¥n"
  else
   r
  end
 }
end
'
2 is in prime
3 is in prime
4 == 2 * 2
5 is in prime
6 == 2 * 3
7 is in prime
8 == 2 * 4
9 == 3 * 3
10 == 2 * 5
>>827
サンクス。
いまいち明示的じゃないのが気になるけどね…
829デフォルトの名無しさん:04/06/14 13:21
"aa'aa'aa" を "aa\'aa\'aa" に置換したのですが、
良い方法がみつかりません。 gsub(/\'/,\\\')を試して
みましたが、エラーが出てしまいます。
>>829
String#gsub(pattern, replace) は使っちゃダメ。絶対。
String#gsub(pattern) {|matched| .... } の方を使いましょう。

puts "aa'aa'aa".gsub(/\'/) { "\\'" }
>String#gsub(pattern, replace) は使っちゃダメ。絶対。
どうして?
そこらへんどっかにまとまってたりするの?
832736:04/06/14 13:29
gsub(/'/, "\\'") じゃなくて?
といっても、何故か漏れのところでも不思議な置換のされ方をする。\\' って何かあったっけ?
そういうわけで、
"aa'aa'aa".gsub(/'/) { |s| "\\'" } # => "aa\\'aa\\'aa"
だった。
833デフォルトの名無しさん:04/06/14 13:29
>>830
ありがとうございました。
834830:04/06/14 13:37
>>831
初心者は絶対 '\' でハマるから。
もちろん、理解できてて使う分には構わないんだけど、
「どうして?」とか言ってる香具師は理解できてないはず。
リファレンスマニュアルだと「Ruby の落し穴」の「\の影響」のところとか。
XML のパースライブラリっていくつかありますけれども、
XML を出力するのに何か定番というかおすすめツールやライブラリはありますか?
>>834
おまいの自信満々に乾杯
837830:04/06/14 19:08
>>836
だって ruby-list で同じようなやりとりを何度見たことか。

つーか、漏れもこの落し穴にハマるんだよね・・・
文字列受け取るようにする仕様が悪い
\ を正規表現置換文字列のメタ文字にしたのが失敗なんでは。
「#」とか「$」にすればよかったのにね。
その仕様はperlからパクってきたものなので今更変えられません。
>>835
クラスに to_xml というメソッドでも作って適当に生成。
>>840
perlよりはむしろelispでしょ。

とりあえず、subst/gsubst みたいな新しいメソッドを作って
sub/gsub から徐々に移行すれば何も傷は残らない気がする。

する価値があるかはしらん。
843デフォルトの名無しさん:04/06/15 08:56
gsub(pattern, replace) と gsub(pattern){replace} の挙動が逆だったら
よかった気がする。
>>841
いや、その to_xml の中で使うのに便利なライブラリはありますか、
という質問なわけのですが・・・
皆さん手でゴリゴリ XML を書いてるんでしょうかね?
>>843
逆ってどういう意味で?
846デフォルトの名無しさん:04/06/15 14:45
>>845
今は
gsub(pattern, replace) #=> replace の '\\' はメタ文字
gsub(pattern){replace} #=> replace の '\\' は普通の文字
なんだけど、
gsub(pattern, replace) #=> replace の '\\' は普通の文字
gsub(pattern){replace} #=> replace の '\\' はメタ文字
のほうが嵌りにくそう。
847デフォルトの名無しさん:04/06/15 14:59
>>846
s.gsub!(/foo(.+)boo/) { $1.strip.downcase } があるから逆にできなかった。
ごめん、忘れて。
「俺」に都合が悪いという事ね。
gsub('hoge', 'fuga') なんてのは第2引数を使うな。
こういうのはいちいちブロックで書いてたらめんどくさい
web 復活おめ&乙
TOPページってblogなの?
blogにも使えるツールで作ってあることは事実だが、だからといって必ずしもblogであるとは限らない。
853デフォルトの名無しさん:04/06/16 00:50
Rubyってインストールしないで使えないですか?
フラッシュメモリにRubyのバイナリをいれて、
Rubyがインストールされてないパソコンで使うとか。。

dllとかsoとか、よくわからないけど、関係してる気がするんですが
その辺の知識がなくて、よくわかりません。
教えてください。
>>853
インストールって・・・
>>853
使える状態にすることをインストールといいます。
この後葬式かよ
>>853
--enable-shared なしで作れ
ということではありませんか?
858デフォルトの名無しさん:04/06/16 09:17
enumってないんですか?
Enum1=1
Enum2=2
...
と根性でやるしかないですかね
>>858
引数のためかな?
>>859
とりあえずは状態を表すフラグとしてcase/whenで使いたいです。
単に1,2,3,...を書くのが面倒だというのなら

module Enum
def define_enum(*symbols)
n = 1
symbols.each {|s| const_set(s, n); n+=1}
end
end

class C
extend Enum

define_enum(:Enum1, :Enum2)
end

2つぐらいじゃよっぽどこっちの方が面倒だが(笑)
>>861
直接enumをサポートしてないということすよね。了解です。

追加モジュールなしの標準で
enum(
 :Enum1,
 :Enum2
)
とでも書けたら使いたいけど字面がRubyっぽくないか・・・

ありがとうございます。
>>862
自分で正解にカスってる。
状態を表わす定数が欲しかったら、単にシンボルを使えばいい。

@state = :OPEN

case @state
when :OPEN
 ...
when :CLOSE
 ...
when :UNKNOWN
 ...
end

タイプミスで未定義のシンボルを使ってしまうというリスクはあるけど
ENUM_ARY=[NAME=0,ITEM=1,BODY=2,TAIL=3,TERM=5]
utf8へ変換できるRubyスクリプトってないですか?
uconvだと自分でコンパイルしないといけないですよね?
nkf
>>866
それを言うなら、unkf でしょ?

環境依存になっても良いなら、iconv。
レシピブックに詳しく載ってたよん。

>>865
Pure Ruby で utf8 へ変換するのは聞いたことないな。
uconv も unkf も iconv も lv も自分でコンパイルしなきゃダメだし、
観念して自分で uconv コンパイルしる。
869868:04/06/16 17:48
ああそうか、1.8.1 以降なら iconv が標準添付だから、
環境によっては最初から使える、ということを >>867 は言ってたのか。
>>853
システム次第。

例えばLinuxなら、LD_LIBRARY_PATHとRUBYLIBを指定すればできるはず。
*BSDだとRPATHが固定されるので無理かも知れない。
Windowsなら最初から位置独立になってるのでそのまま使えるはず。

もちろんPATHを追加するのは前提。
>>868
> Pure Ruby で utf8 へ変換するのは聞いたことないな。
RbUconvを知らんのか?
http://www.yoshidam.net/Ruby_ja.html#rbuconv
872865:04/06/16 19:04
iconvでできました。ありがとうございました。
>>871
スマソ。無知だった・・・
てゆーか時代はutf8デフォだろ
875810:04/06/16 20:58
従来の文字コードとのマッピングを何とかして欲しい。
>>875
ん?それは Ruby の問題?
# デバッグ中は↓のヒアドキュメントを標準入力とみなしたいんですがそんなことは可能ですか?
<<STDIN
aaa
bbb
ccc
STDIN

while gets ...
input = $debug ? <<STDIN : STDIN
aaa
bbb
ccc
STDIN

while input.gets ...
と思ったら String に gets はなかった。

require 'stringio'
input = $debug ? StringIO.new(<<STDIN) : STDIN

かな。あるいは input.each { |line| ... } か。
$stdio = StringIO.new(<<EOS) if $debug
aaa
bbb
ccc
EOM

while gets

じゃあだめだっけ?
すまん、終端間違えた。
cygwin/MinGWでSDLを使った拡張ライブラリを作ろうとしているのですが
extconf; make すると
undefined reference to `_rb_w32_fclose`
となってしまいます。これはRubyの方のものだと思うのですが
何をリンクすればいいんでしょうか?
>>880
ruby 1.8.1 (2003-12-25) [i386-cygwin]
で試したけど駄目でした。普通に標準入力からになってしまいます。
>>883
$stdio は $stdin の間違い。
うは。申し訳ない。>>883-884
$stdin = $-d ? DATA : STDIN

p $_ while gets

__END__
foo
bar
baz
>>882
make -n の結果は?
Unicode->SJIS変換をするために変数の内容をnkfの標準入力に渡してその結果を受け取るにはどうしたらいいですか?
質問があります.
ruby は全ての変数がオブジェクト(インスタンス)で、
変数の代入は参照渡しなので
「メソッドに変数(インスタンス)の参照を渡して,
メソッドの中でそのインスタンスの内容を変えてもらう」が
できると思います. 実際できますね.

とろこが, 以下の code で, 変数の内容が変わってくれないのはなぜでしょうか?
Java とかと違い Integer もオブジェクトで, 参照渡しなのでできると期待していました.
しかし, 以下のメソッド inc で, 引数にもらったインスタンスの内容を変えることができませんが,
なぜでしょうか?
#--------
def inc i # Integer 型のインスタンスの参照をもらう
i += 1 # もらったインスタンスの中身を変えてしまう
end

j = 7
print j, "\n" # これは 当然 7 と表示される.
inc j
print j, "\n" # これは 8 と表示されて欲しいが, 7 と表示される.
#--------
890889:04/06/20 12:57
これは, C言語で言うところの以下のコードと同じ振る舞いを期待しています.
/*--------*/
void inc(int *i){
(*i)++;
}
void main(){
int j =7;
printf("%d\n", j); /* 7 と表示される */
inc(&j);
printf("%d\n", j); /* 8 と表示される */
}
/*--------*/


上記 Ruby の inc メソッドの中の挙動ですが,
メソッド開始時は, i と j は同じインスタンスを参照しているのだと思いますが,
i += 1
を行うと, 内容が ``8''である新しい Integer 型 Object が作成され,
i は その新しいオブジェクトへを参照するようになるだけで,
元々のオブジェクト(j が参照しているオブジェクト)に変更が加わっていないように見えますが,
それは正しい認識でしょうか?
(私は, i が "+= 1" のメッセージの レシーバになると期待していました)
def inc i
i += 1
print i # 8と表示される
end
では 8 と表示されます.

また, 上記の C 言語と同じ挙動を ruby で実装するにはどうしたら良いでしょうか?
891889:04/06/20 12:58
補足ですが,
一応 こんな感じにラッパーで囲ったら
インクリメントできまた.
つまり, Integer 型のインスタンスに "+= 1" の様なメッセージを受けさせて
そのインスタンスの内容が変わってもらうことは無理なのでしょうか?
#--------
class IntWrapper
def initialize n
@i = n
end
def get
return @i
end
def set n
@i = n
end
end

def w_inc i
i.get
i.set(i.get+1)
end

j = 7
w_j = IntWrapper.new j
print w_j.get, "\n" # 7 と表示される
w_inc w_j
print w_j.get, "\n" # 8 と表示される
#--------
i += 1 ってどういう意味かわかってる?
i = i + 1 って意味でしかないんだよ。
i + 1 という新しいオブジェクトを代入によって i で指し示すようにしただけ。
+= というメソッドを起動したんではない。
>>888
Open3 使うと良いよ。
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Open3

でも、変換には Iconv か Uconv を使うのがおすすめ。
894889:04/06/20 13:13
Ruby は 1.8.1 を使用しています.
ruby 1.8.1 (2003-12-25) [i686-linux]
>>891
>つまり, Integer 型のインスタンスに "+= 1" の様なメッセージを受けさせて
>そのインスタンスの内容が変わってもらうことは無理なのでしょうか?

(1)よく勘違いされるんだけど、変数それ自身はオブジェクトではない。
(2)整数オブジェクトはその値それ自身によってアイデンティティを定義されているわけ。つまり、7と8は別のオブジェクト。

ようするに
(3)内容が違うのに同じオブジェクトであるような整数は存在し得ない。
(4)変数の指すオブジェクトを弄ることは=以外では不可、なぜなら変数はオブジェクトじゃないから。

結論として
(5)Rubyに++はない。(*i)++みたいなことはできない。理由は上記(1)から(4)。
> (2)整数オブジェクトはその値それ自身によってアイデンティティを定義されているわけ。

Fixnum はそうだけど、 Bignum は違うよね?

このへんの事情ってどこかにまとめて説明してないかな?
このスレでも頻出問題だし、ここ読め、みたいなのが欲しいところ。
897889:04/06/20 13:46
>>891
>つまり, Integer 型のインスタンスに "+= 1" の様なメッセージを受けさせて
>そのインスタンスの内容が変わってもらうことは無理なのでしょうか?

(1)よく勘違いされるんだけど、変数それ自身はオブジェクトではない。
(2)整数オブジェクトはその値それ自身によってアイデンティティを定義されているわけ。つまり、7と8は別のオブジェクト。

ようするに
(3)内容が違うのに同じオブジェクトであるような整数は存在し得ない。
(4)変数の指すオブジェクトを弄ることは=以外では不可、なぜなら変数はオブジェクトじゃないから。

結論として
(5)Rubyに++はない。(*i)++みたいなことはできない。理由は上記(1)から(4)。


お返事ありがとうございましたm(_ _)m

まず, 多分(1)に勘違いは無いと思います.
ここが本質の様なので, ここに勘違いがあったら話が通じなくなってしまうので
もし, 勘違いがあったらご指摘頂けると幸いです.
私の理解は,
インスタンス:メモリ上にあり実際にデータを保持している.
変数:インスタンスへの参照情報だけ. Cの様な即値は存在しない.
という感じです.
898889:04/06/20 13:47
「変数が参照するインスタンス」と書いたのはその様な意味を出したつもりでした.

次に, (2)もかなり本質的なことのようですね.
このようなことは知りませんでした.
値が変わったら絶対に「別のインスタンスになる」のですね.
となると,「メソッドに Integer 型のインスタンスへの参照を渡して,
メソッド側でそのインスタンスの値を変えてもらう」は不可能っぽいですね...

(4)ですが, ご指摘を受けて自分のひどい勘違いに気がつきました.
"+=" はてっきり メソッドであり, Integer クラスライブラリの実装で処理しているのかと思っていました.
今 調べたところ, "+=" は 演算子( x = x + y の省略形)で, 言語仕様だったのですね_| ̄|○
(2),(3)より, = 演算子("変数の指すオブジェクトをいじる")では 絶対に不可能ですね.
理解致しました. ありがとうございましたm(_ _)m

"Integer 型も即値でない"ので何かしら方法があると期待していたのですが,
となると, 私の希望は Java のように ラッパークラスを作成する様な方法でしか解決できないのでしょうか?
899889:04/06/20 13:49
>>897
うは. >>895さんの書き込みを全文引用してしまいました.
ごめんなさい.
まぁ、結論から言えばラッパ書くのが一番簡単だわな。
[Ruby-list:126]によると「++を使うためだけに言語仕様としてラッパを(暗黙に)生成するのはコストが大きすぎて、やめた」みたいなことが書いてある。
>>889
-inc j
+j = inc j
じゃだめっすか? カコワルイ?
Rubyの多言語と比較した際の具体的なメリットを教えてください
903892:04/06/20 21:14
>>889
892は無視かい
>>903
おうよ
905デフォルトの名無しさん:04/06/20 21:37
Rubyのいろんなテクノロジって草の根的に、何の後ろ盾も無い個人が物凄い貢献してたりするよね。
例えば関将俊氏のプロフィールは分からないけど、大きな企業が支援してくれないと惜しすぎる気がする。

趣味だからとか、これがオープンソースだからとか、それはそうなのかもしれないが、
これが正しい状況なのかはかなり謎。理想的なテクノロジが受け入れられるかは、
わからない。今から数年たったときにようやく理解されそうな気は漏れはしてるが、
クソなテクノロジ選んでソフト作る香具師がどんどん増えてる今の状況どうにかしなきゃ
いかん。
>>905
糞なテクノロジとは具体的に何?
某MSILとか?
>>906
いやぁ、それもそうだが、例えばPHPとかね
あるいは、サーバサイドJavaとか
PHPの仕様しらねーや
PERLのパチモンという印象しかなくて仕様すら知らないw
微妙に重複表現だな
1行目に何かいたか忘れるとは、俺も老いた・・・
結局のところ、何か組織力とか、後ろ盾が無いといいテクノロジもスルーされて終るってことを
証明しているんだよな。テクノロジを選択する立場にある人が結局いかに下請けに出すかってこと
しか考えてないところに問題がある気がする。誰もが使えそうで事例がなんとなくでもあるものを選択する。
クソなプログラマ大量に使ってモノ作るより、少数でも経験豊かでソフトウェア設計に理解がある
人たちを使ったほうが安いってことに気づかないといけない。プログラマも少数精鋭で働ける場所を
しっかり選ばないといけない。
>>911
> プログラマも少数精鋭で働ける場所をしっかり選ばないといけない。
選べない上に自己修練する暇も与えられない可能性ありw
まぁ労使問題はそれはいいとしてだ


やっぱ、キソ技術作る人には後ろ盾が要ると思うんよ
KDE と Gnome の違いを見ても思うが、資金援助。これ重要

Ruby Foundation とか設立できないか
しっかりしたプログラミング言語が発展することで得する企業は探せば沢山あると思う
FTPサイトが激重でドキュメントすら落とせない・・・
>>913
企業相手に延々とロビー活動する人が何人か必要になるが
そういう人材はなかなかいない。
>>915

いないのかな
そういうの大好きな人たくさんいると思ってた
>>915-916
るびべんだったりして。
禿しく却下。
.NETってRubyが乗りうるプラットフォームでは最大の規模のライブラリを備えてるんだから
早く乗せて欲しいな。ライブラリが同じなら言語仕様の優位性が際立つと思うんだけど。
正直UNIX信者(作者含めて)置いてきぼりにしてWindows上で栄えて欲しいよ。
栄えるってどういう状態だよ。
920889:04/06/21 20:38
みなさまありがとうございます.
>>892>>903
すみません. 見落としていました.
失礼をお詫びいたしますm(_ _)m
ご指摘の通りです. 意味分かっていませんでした(>>898参照)..
新しいオブジェクトが生成されて, その新しい方を指すようになるんですね.
ここに, 大きな勘違いが一個がありました.
今更ですが, 重要なご指摘ありがとうございます

i.plus(1) とかで,「i が指しているインスタンスの中身が変わる」メソッドでもあればまた違ったと思いますが,
>>895 の (2), (3) の理由により, 不可能っぽいですね.


>>900
了解です. では ラッパを書く手法で行きたいと思います.

>>901
すみません.
"-inc" という表現も,
"+j =" という表現も 知らない表現方法です.
今から ちょっと試してみます.
>>918
 rubyって、”スクリプト”ってイメージが強すぎて、windows上で栄えてるところが
想像できないなー。
>>921
WSHが流行ってない時点でねw
しかもその存在自体ActivePerl入れたずっと後だったし(遅っ
923889:04/06/21 20:58
>>901
すみません. 手元で実行してみましたが,
"syntax error"
になってしまいました. 何か基本的な知識が足りてないのかな?orz

これは,
#--------
def inc i
return1
end

j = 3
print j, "\n"
j += inc j
print j, "\n"
#--------
という 感じで「戻り値」を使用するという感じに理解してよろしいのでしょうか?

私が使用している局面が「これが戻り値になるのは, 意味的に変」なのもありましたが,
変更を加えたいインスタンスが2個以上あるとダメなので採用しませんでした.
(もちろんメソッドが配列を返してきて, 受け取り側で全部処理すれば問題ないわけですが)
>>920
inc j の部分を、j = inc j にしてはどうすか? という意味でした。
行頭の + とか - とかは diff -u の形式のつもりだったニダ。
>>889
ほかの人も書いてるけどIntegerはimmutableだから
状態を変更するメソッドはありえない。
mutableなオブジェクト、たとえばArrayを使えば
似たようなことは出来なくもない。

def inc(x) x[0] += 1 end

x = [3]
p x #=> [3]
inc(x)
p x #=> [4]
926889:04/06/21 22:35
>>925
すみません. しつこく i.plus() とか話題を振ってしまいましたが(笑)
immutable なので状態を変更できないのは 理解致しました.
ありがとうございます.

あぁ, 確かにラッパーを作るにしても Array でやるのがお手軽ですね.
(Array の中に入れるのも一種のラッパーと考えて)
これは 良いアドバイスをいただきました.
感謝ですm(_ _)m
++を+=のようにシンタックスシュガーとして実装する手もあったんじゃないだろうか。
ていうか、これだけシンタックスシュガーてんこもりの言語なのに、
++だけ気に入らないのか。
928デフォルトの名無しさん:04/06/22 00:05
>>928
へえー。そうなのかぁ。
930889:04/06/22 11:37
>>924
すみません. またしても見落としていました. お返事をいただいていたのですね.
了解です. 私の理解で良かったのですね.
diff だったのか. 気がつきませんでした(^^;

>>928
>10に「1増えろ」というメッセージを送っても意味無いんですよね.
なるほど. 分かりやすいです.
++が無いことよりも, >>897
>(2)整数オブジェクトはその値それ自身によってアイデンティティを定義されているわけ。つまり、7と8は別のオブジェクト。
が, ことの本質っぽいですね.
モデル的にどう説明してるのか抜きで実装の観点からみると、
結局fixnumは効率のために即値になっていて、変数には
オブジェクトへのポインタではなくて、値+これはfixnumだという
印が入ってるだけなのよね。
932デフォルトの名無しさん:04/06/22 12:59
だな。整数型はオブジェクトでなくて即値という側面もある。
Windows上もクソも、RubyはOS非依存じゃん
RDってそろそろ標準添付にしてもいいんじゃないの
amstd/rbparamsとかいうしょうもないパッケージに依存しない形にしてさ
>>933
.NETのクラスをそのまま利用したいってことだろ。
今あるクラスだけではなく将来新しいクラスが提供されても自動的に使えるようにしたいと。
>>934
作者がやる気ないからな>RDtool
いちおう
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/38903
を適用すればamstd非依存になるはず。
ポータビリティの面からすると、Pure Rubyでやれるところに意味があると思うんだけどねぇ

一体.NETの何にそんなに惹かれるのか わからん
>>936

なんで適用したものを配布しないのだろうか
RDToolをWindowsで使いたいってときに、この面倒くささはたまらんね。
バイナリも誰も、難しすぎて作れないのかどうなのか。win32版配布してないし。
Rubyの標準ドキュメント形式といわれているくせにこのていたらくぶりはなんだろうか。
誰も面倒見ないってことはRDは形式としては良くないってことに気づいちゃったのかな

漏れは悪くないと思うんだけど
まぁ、あの((の連発とか、そんなに見やすいとはいえんな

分かった RDは捨てる
現状、 Ruby のライブラリとか書いた場合に、
ドキュメントはどんな形式で書いておくのがおすすめですか?

海外のライブラリとかだと、 Web 上にあがってるドキュメントは、
Smalltalk のクラスブラウザみたいなフレームのページになってることが多いですが、
あれも元ファイルは何か特殊な共通フォーマットで書かれてるんでしょうか?
>>942
RDOC
>>943
ありがとうございます。これはいいっすね。
ドキュメント作成なんて、商用のちゃんとした
プロジェクトじゃないとほとんどやらないしね。

そういう市場を狙っていないRubyには本来不要なものかも知れないけど、
やっぱりマニアのおもちゃとしてははずせない仕様だね。

コメントとドキュメント関連の文法・仕様はそろそろ全言語統一して欲しい。
> 全言語統一して欲しい

非現実的

無茶いうなよ
>>939
RDtoolのバイナリってどんなもんだ?
一応UMLが統一ドキュメントなのでは?
>>947
バイナリというのは間違いだった
raccはコンパイルいるけど、これは配布されてる。

しかし、rdtoolにmake要るってところで、どうも
最近のLinuxディストリには入ってないのも多いんじゃないかしら
>>946
コメント開始記号とコメント内で使うドキュメント用の
タグなり記号なりを統一すればいいだけじゃね?
それで無理が出るのってネタで作られた言語くらいだろ。
共通のツールで処理できるようになればjavadocやらRDやら再発明しなくていいし。
RDって使ったこと無いんだけど、もしかしてPerlでも使えたりするのか。
>>950
本気で言ってるとすればあなたはとてもおめでたい方ですね。
夢を見るのもほどほどにな。
パラダイムとパラダイスは紙一重。
重要さが世間に認められれば成らんとも限らんよ。
RPGツクールのHP見てきた。
Rubyっぽいマクロでかなり細かく制御できるっぽい。

やべぇちょっと欲しくなってきたよ。
956デフォルトの名無しさん:04/06/23 05:46
>>945
>コメントとドキュメント関連の文法・仕様はそろそろ全言語統一して欲しい。
.NETならXMLDocで統一されている上にNDoc通せばいろんなフォーマットに出力できるのにね。
相変わらずオプソプロジェクトって多様性と非効率性を混同してるよね。
>>955
スレ立つたびに宣伝レスするのやめれ。
958デフォルトの名無しさん:04/06/23 07:57
>>957
そだねURL書いてないのはよくないよね。

RPGツクールXP体験版、ダウンロード開始!!
ttp://www.enterbrain.co.jp/digifami/index.html

『Ruby』を『RPGツクール』専用にカスタマイズ
した言語『Ruby Game Scripting System(以下、『RGSS』)』が採用
>>958
スレ立つたびに宣伝レスするのやめれ。
while True
 if "foo" =~ /bar/ ...
という行は毎回正規表現をコンパイル?してるんですか?
それとも最初に一度だけですか?
前者だとしたらオブジェクトを明示的に生成して使いまわしたほうが速くなるんですか。
% time ruby -e '1000000.times do if "hoge" =~ /foo/ then end end'
ruby -e '1000000.times do if "hoge" =~ /foo/ then end end' 0.89s user 0.05s system 104% cpu 0.898 total

% time ruby -e 'r = /foo/; 1000000.times do if "hoge" =~ r then end end'
ruby -e 'r = /foo/; 1000000.times do if "hoge" =~ r then end end' 1.06s user 0.08s system 102% cpu 1.105 total
正規表現が固定なら1度しかコンパイルしないし、下手に変数に入れる
よりそのまま書いたほうが速いってことになるのかな。
963960:04/06/23 15:22
わざわざありがとうございます。
rubyでは最適化してくれるんですね。
コンパイラな言語で正規表現オブジェクトを毎回作ろうか
あらかじめ作って変数に代入しようか悩んでいたところで
ふと疑問に思ったので聞いてみました。

パターン文字列をキーにハッシュにオブジェクトをぶら下げておこうかな・・・
>905の話を読んでだが、、、、
ドキュメントの整備と、あと他の人が作ったライブラリなどの取り扱いを考え
て欲しいな、と思う。例えばRAAとか。
perlではppmがあるけど、phpにも似たものがあってこれは便利。rubyにも同じ
ような仕組みがあったら良いなと思う。pythonのライブラリやschemeならば
SRFIとか。
簡単なインストールというだけではなくて豊富なライブラリがある事で安心感
すら憶える。スクリプト言語らしい環境が整う。
オープンソースなのだから誰が資金的な援助を考える前に、そうした草の根
で作ったライブラリをもっと活用する"仕組み"が必要ではないだろうか。

>907
の意見は私は反対。phpは糞とは思わない。phpの概念はある意味stdioを介すcgiとは
異なるし特殊だから始めはこの習慣を理解するのには困難だろうけれど、
Webアプリケーションの立場からすると非常に面白いと思う。それとデータベース
との連携がとてもよい。これは宣伝(marketing?)の効果かもしれないけれど。
よくLAMP(Linux,Apache,MySQL,Php)と聞く。
php5になってからはコードはJava風にも書けるようになった。完全なオブジェクト指向になった
のでphp5では大規模なシステム開発例が出てくるかもしれない。
eRubyがphpのコンセプトに近いですね。
http://www.loveruby.net/w/OptimizingRubyProgram.html
http://www.notwork.org/~gotoken/mag/cmagazine/gokudo/8th/
似た話としてはこのへんかな。けど 1.8 でだいぶ状況が変わった気がする。

>いつでも通用する鉄則
必見。それにせっかくの LL なんだし、我慢できる範囲の遅さは無視して
よいかと。
>>964
PHPがクソなのは埋め込み言語な点ではなく安易な言語仕様。
参照渡しの不完全な実装方法とか
関数名が大文字小文字区別しないとか
ファーストクラスの関数オブジェクトがないとか
配列とハッシュが混ざってるとか
行き当たりばったりで同じよーなのがいくつもある配列関連の関数群とか
可変引数関数の実装方法とか…
>>966 は PHP 仕事で相当苦労してる香具師と見た。

漏れもなんだよう、 Ruby で仕事してえよう・・・
PHP って Ruby と正反対だよなぁ。
言語が悪くても環境はよさそう。インストールも楽そうだし。

ところであまり PHP 使わないからよく知らないんだけど、
Ruby + mod_ruby + eRuby + Ruby/DBI でPHP と機能的に同等に
なれるもの?
969デフォルトの名無しさん:04/06/23 19:42
for ループで1から120までの整数を出力する。二重ループは使わない。
24の倍数を出力した直後に改行を入れる。
それぞれの数値は4桁(あるいは空白+3桁)の幅で出力される。

for i in ????
???
end

このプログラムを教えていただけないでしょうか。。本当にわからなくて・・


>>969
宿題は自分でやろうな
971デフォルトの名無しさん:04/06/23 20:23
すいません・・どうしてもわからないんです・・。
1.for ループで1から120までの整数を出力する。二重ループは使わない。
2.24の倍数を出力した直後に改行を入れる。
3.それぞれの数値は4桁(あるいは空白+3桁)の幅で出力される。

1.だけのプログラム, 1.2.だけのプログラム。1.2.3.を満たしたプログラム
と順番に拡張しながら作っていけばいいよ。で、どこが分からないんだ?
973デフォルトの名無しさん:04/06/23 20:33
>>968

drubyで簡単にアプリケーションサーバ立てられるところがよいと思う
クラスタリングも自由自在
ウェブ層の分離ができているとテストしやすいしメンテナンスしやすい
Javaよりはるかにによいと思うよ
さすがにインタプリタがJITコンパイラよりいいって事はないよ
>>974
それは「いい」の基準によると思うけど。
処理速度しか頭に無くない?
>969 Rubyだと 「1から120までループ」のような処理に for 文はあんまり使われないような
マジで?
978969:04/06/23 20:50
実は全然わからないのです・・
for i in 1 . . 120
@はでいいのでしょうか??
どの記号を入れればいいのかも全然わかりません・・
いいかどうか聞く前に自分で試してみろよ、と。
学校でruby教えるの?
981969:04/06/23 20:59
rubyを学んでるのですが、先生の作ったテキストなので、何が何だかさっぱり。
ABの意味が全然わからないので、試しようもなくて・・
今まで貰ったテキストがあれば出来るでしょ
ここは宿題スレじゃないから煽られないうちに移動した方がいい
それくらい教えてあげればいいだろ。
お前みたいなへそ曲がりがRubyコミュニティの評判を貶めていることに気づけよ。
>>983
そういいながら教えないお前はちんこでも曲がってるの?
>>969

for i in 1..120
printf "%4d%s", i , i%24==0 ? "\n" : ""
end

こんなんでいいのかな。
全然面白くも楽しくもないな。
授業中寝てた分をここで補講してやる必要はないな
987969:04/06/23 21:21
>>985
ありがとうございます。
クラスメートに質問スレでは983のように煽ると答えが出てきやすいと
教わったのですがうまくいきました。
>>987 こっちの方がお勧めだ。
for i in [false]
 a = Array.new(5) {|i| Array.new(24){|j| i*24 + j + 1 } }
 s = a.map{|i| i.map{|j| '%4d' % j }.join('') }.join("¥n")
 print s
end
989969:04/06/23 21:34
皆さんありがとうございました。。私が本物の969です。
私のせいでご迷惑かけてすいませんでした。。
D言語の組み込みスクリプトとしてサポートされたら面白いだろうな
他のスクリプト言語が既にポーティングされてるらしいけど、愛称はこっちのが良さそう
疑問が2つあるのだが、
1. どっかの学校では Ruby で授業があるのだろうか。
2. その学校では Ruby でわざわざ for を使わせてるのだろうか。

1.だけだと羨ましいが、2.も込みならそんなでもないな。
ここ最近forなんて使ってないな・・・
おれforのが好きだなイテレータって字面が醜い
言語依存で教える方がきもいだろ
言語依存のない言語の関発キボンヌ
~$ruby -e '(1 .. 120).each { |v| print sprintf("%03d ", v); puts if v % 24 == 0 }'
for をありがたく使ってるうちはまだ子供
inject を使いこなすようになればズルムケ
レスだけみると教育には向かない言語だなとわかる
WSHとか使ったほうが良かったんじゃねーのかなw
inject が好きだが、2つのブロック引数の
どっちがどっちだかなかなか覚えられないのがつらい
ム板で丸付き数字使うな。
しかし、こんなしょーもないレスでこのスレも終了か。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。