スレタイ間違えた…吊って来る Пδorz
まぁ、乙
>3 生` そして乙
より汎用的ですばらしいタイトルだと思ったよ
`mycmd`.each_line でmycmdが存命中でもリアルタイムにeach_lineのループをまわすことってできないですか? 普通にやるとプロセス終わるまで溜め込んでますよね?
コンソール上で、対話的にパスワードなんかのセンシティブな情報を入力させるとき、 STDIN.gets だとコンソール上に入力内容が表示されてしまいます。 コンソール上に表示させずにキーボードから1行入力してもらうのに 良い方法はないでしょうか?
print "password: " system("stty -echo") begin passwd = STDIN.gets.chomp ensure print "\n" system("stty echo") end
ところでWindowsなんですけど、とか言いたくなる回答だな。
スクリプトを実行させたときにコンソールを表示させないことって出来ますか? rubyのバージョンは ruby 1.8.4 (2005-12-24) [i386-mswin32] です。
>>2 RRRWiki自体がなくなってるから、そのruby-cvsへの
リンクは削った方が良さそう。
>>15 ありがとう。rubywってこのためのものだったんだ。
>>12 標準で getpass が欲しいところだな。需要は結構あると思うんだけど。
20 ではないけど…。
>>11 のは Windows じゃ動かないですよ。
C:\>ruby passwd.rb passwd.rb:2:in `system': No such file or directory - stty -echo (Errno::ENOENT) from passwd.rb:2 password: C:\>
> password: aaa と、入力した文字列が表示されてしまうます。
>>10 Win9x系だと以下で出来る。
def getpass_win9x
print "\x1b[8m" # 文字を透明にする
k = gets
print "\x1b[0m" # 元に戻す
return k
end
元に戻さないと黒いままになるから
実際は例外処理して元に戻す方が良いかな。
で、Win2000やXPはやり方がさっぱり分からん…
Python の getpass.py を見ると、 Windows の場合は msvcrt module を、 Macintosh の場合は EasyDialogs.AskPassword とかいうのを使っているみたいだけど、 俺にはさっぱり意味がわからない。
UNIX や Cygwin のように getpass(3) がある環境ならこんな感じでいけるかな? #include <ruby.h> #include <pwd.h> #include <unistd.h> static VALUE rb_getpass(VALUE self, volatile VALUE prompt) { Check_Type(prompt, T_STRING); return rb_str_new2(getpass(RSTRING(prompt)->ptr)); } Init_getpass() { rb_define_method(rb_mKernel, "getpass", rb_getpass, 1); }
出来ません… require 'tk' def anime @cw.delete("tag") for i in 0..39 for j in 0..79 if @c[i][j,1] == "*" TkcRectangle.new(@cw,j*5+100, i*5+100, j*5+104, i*5+104, "fill" => "darkgreen", "tags" => "tag") end end end for i in 0..39 @d[i] = " "*80 for j in 0..79 end end for i in 0.. 39 @c[i] = @d[i] end Tk.after(1,proc{anime}) end @rw = TkRoot.new{title("Lifegame")} @cw = TkCanvas.new(@rw, "width" => 600, "height" => 400, "background" => "lightpink") {pack} TkcRectangle.new(@cw, 100, 100, 500, 300, "fill" => "white", "width" => "2") @c = Array.new; @d = Array.new for i in 0..39 @c[i] = " "*80 end
@c[ 3][0,40] = " ** " @c[ 4][0,40] = " * * " @c[ 5][0,40] = " ** * " @c[ 6][0,40] = " ** * " @c[ 7][0,40] = " * *** * " @c[ 8][0,40] = " ** ** * " @c[ 9][0,40] = " ** * " @c[10][0,40] = " * ** " @c[11][0,40] = " * " anime Tk.mainloop
実はやり方はわかってるんだが、人に頼る一方で適当なこと言うな、という程度のつもりだった。 真面目に調べさせてしまってなんかスマン。
>>22 WinXPでmswin32版のrubyでは
>>11 が動くみたい。
C:\Temp>ruby -v
ruby 1.8.1 (2003-12-25) [i386-mswin32]
C:\Temp>ruby
print "password: "
system("stty -echo")
begin
passwd = STDIN.gets.chomp
ensure
print "\n"
system("stty echo")
end
puts passwd
^D
password: ←ここで"12345678"と入力したが表示されず
12345678
別口でcigwinでも入れてんじゃネ?
cygwin、ね。ほぼそれで間違いあるまい。
テキストファイルのそれぞれの行の先頭に行番号を挿入するには、どうすれば良いでしょうか?
ruby -ne 'puts "#$. #$_"' /path/to/file
>>36 それだとファイルに挿入したことにならないぞ。
シェル上から/path/to/fileにリダイレクトしたらファイル壊れるし。
それにputs使ってしまったらオリジナルファイルにあった改行コードを引き継げない。
ん? 元のファイルを上書きたいのか?初めからそう書け。 ruby -ni.bak e 'puts "#$. #$_"' /path/to/file 改行コードをどうこうしたいなら$/をいじりなさい。
>>36 >>37 >>38 35です。どうもありがとうございます。
>改行コードをどうこうしたいなら$/をいじりなさい。
勉強してみます。
5桁で0でパディングしたいのですが、これだけ教えて下さい。今のところ、こんな感じでしか書けないので。
while gets
printf("%05d: ", $.)
puts $_
end
ほいよ。 ruby -ni.bak -e 'puts "%05d #$_" % $.' 10.gp
>>38 puts じゃなくて print とかにすれば改行コード保存されるよね。
10.gpじゃなくて/path/to/fileね (汗)
35です。入門者なので、マニュアルと睨めっこしているところですが、頑張って ruby 書けるようになりたいです。どうもありがとうございました。
a=[1,2,3] として、a.size と a.length の違いって?
同じ
初心者スレではワンライナで答えるのやめようぜ #$とか禁止
>>46 そう思う人が、非ワンライナで#$とか使わない回答もしてあげればいいだけかと。
初心者相手の言動としては不適切でないかい。 回答は個々が独立して初心者向けに適当であるべきだと思う。
質問の仕方にもよるわな
質問があまりに初歩的すぎたのかも知れませんが、ワンライナでの書き方、参考になったです。
>>46 >>48 なんで不適切なのか、私を含めた初心者のために説明してもらえませんか?
まあまあ、臨機応変にいこうよ。
当人がいいならいいんじゃね?
こういうこともあるので、
>>47 に同意。
>>28-29 お願いします。lifegameを表示させたいのですが、
まわりの部分しか表示されません。。
どこが悪いのでしょうか??orz
"0x80000000" を 32bit 符号付整数と解釈して -2147483648 に変換したいんですけど どうすればいいですか? "0x80000000".hex だと 2147483648 になってしまいます。
58 :
前スレ951 :2006/01/25(水) 03:29:03
前スレが流れてしまったので再度質問させて頂きます Cookieの受け渡しをCGIクラスを使って行いたいのですが enctypeをmultipartにすると動作しません どこが間違っているのでしょうか? 環境: Windows 2000 ruby 1.8.2 (2004-12-25) [i386-cygwin] AN HTTP Daemon Version 1.42n -- require "cgi" cgi = CGI.new cookie1 = CGI::Cookie::new({ 'name' => "name", 'value' => ["value"], 'expires' => Time.now + 1000 }) cgi.out({"cookie" => [cookie1]}){""} print "Content-type: text/html\n\n" p cgi.cookies['name'] print <<EOF <html> <body> <form action=#{File.basename(__FILE__)} method=post enctype=multipart/form-data> <input type=submit value=multipart> </form> <form action=#{File.basename(__FILE__)} method=post enctype=text/plain> <input type=submit value=text> </form> </body> </html> EOF -- ※少し修正
>>58 cgi.pmがそういうものです。multipartの処理を自分で書き足すか、他使いましょう。
>>57 str = "0x80000000" とすると、例えば、
[str.hex].pack('l').unpack('l')[0]
とかでどないだ。
>>59 Rubyでも cgi.pm 使ってるのか? おぬしは。
そういう動作になる理由が「cgi.pmと同じ結果になるようにcgi.rbを作ったから」ってことだろ。
CGI.pm じゃない?
そういえば、モジュールの大文字小文字ってバラバラだよな。 全部小文字とか先頭1文字だけ大文字とか統一してくれれば書くの楽なのに。 あるいは大文字小文字関係なくファイル読み込むとか。
モジュールやクラスの命名規則については [ruby-list:12517] あたりかな。 ファイル名は全て小文字で単語間は '_' 、だと思うけど、どっかで議論されてたっけ? RoR のファイル名の命名規則がまた変態的だったような。
議論っていうか、逆らう必要なんか全然ない規則だしなあ、それ
>>60 おぉありがとうございます。uint32としてpackしてsint32として取り出すって
ことですね。
>>67 sint32としてpackしてsint32として取り出してるんだけどな。
まあ、packする方は32bit幅ならなんでもよくて、unpackするときに決まる。
>>64 FileUtilsはなんでFileutilsじゃないんだろうと思ったことはある
>>69 file utils だからだろ,きっと.新語を作る気は無い,と.
>>64 win32apiとwin32oleはホントなんとかしてほしい。
>>71 じゃあTempFileとかKConvとかにしろよ!!!!11!!
Cgi.newじゃなくCGI.newじゃないと動かないのもムカつくお年頃な俺をなんとかしてくれ
ERBが全部大文字なのもやだ。お前はERbだろう。
いや最後1文字だけ小文字ってのもそれはそれで統一性がないとか俺は文句言いそうだが(w
>>73 そう、お前は全く正しい。
さあ、 ruby-list へ Go だ!
75 :
58 :2006/01/26(木) 11:26:26
>>59 ありがとうございます
cgi.rbの代わりでNarf、Rweb、(Nora)があるのがわかりました
バージョンが低いのが気になるけども頑張って勉強してみます
"これが定番だからこれ使っとけ"みたいなのがあったら教えてください
自分で処理を書くのは俺には厳しいです。 ごめんなさい
>>75 enctype="multipart/form-data; boundary=hoge"
にしたら動いたけど。
78 :
デフォルトの名無しさん :2006/01/27(金) 01:44:04
79 :
58 :2006/01/27(金) 06:50:09
>>76 おおっ、ホントだ。
デフォルトのboundaryの値に問題がある???
>>77 そんなにあるんですか…。
複数行にわたる文字列を、1行ずつに分割するにはどうすればいいですか。 str.split(/$/) だと、改行文字の前で分割されてしまいました。 str.split(/\n/)だと、改行文字が消えてしまいました。
>>80 str.to_a.何でそれでいいかは,str.each {|s| p s} っていうことで.
Enumerable#to_a ね.
>>80 splitを使うなら str.split(/^/) かな。
>>81 ,82
String#to_a、String#split(/^/) のどちらもうまく動作しました。
どうもありがとうございました。
httpでgifやjpegをダウンロードするスクリプトが組みたいのですが、
下記の方法ではうまくいきませんでした。テキストファイルであれば
問題ない様ですが、画像などのファイルではファイルが壊れて
しまいます。どこが問題か教えていただけないでしょうか。
環境はWinXP、Riby1.8.4 i386-mswin32です。
require 'net/http'
require 'uri'
uri = URI.parse("
http://www.google.co.jp/intl/ja_jp/images/logo.gif ")
f = File.open('logo.gif', 'w+')
Net::HTTP.start(uri.host, 80) { |http|
http.request_get(uri.path) { |response|
response.read_body { |body|
f.puts body
}}}
f.close
>>84 Windows環境でバイナリファイルを出力するなら、
File.openの引き数を「'w+b'」にしてバイナリモードにするのでは?
>>85 ありがとうございます。
'w+'を'w+b'にして実行してみましたが同じでした。
'w+'でも'w+b'でも、IrfanViewなどの壊れた画像ファイルを
表示可能なViewerで見ると、サイズは正しいのですが、絵と
しては壊れたものが表示されます。テキストエディタなどで
無理やり開いてみると、最初のヘッダ(の一部分?)は正しい
様です。
f.putsよりf.writeのほうがよさげな希ガス
88 :
84 :2006/01/28(土) 19:28:31
>>85 >>87 ありがとうございました。
'w+'->'w+b'とf.puts->f.writeを両方変更することにより、
うまくいきました(片方だけではだめでした)。
しばらく、この手のプログラミングから離れていたので、
改行文字やテキスト・バイナリの処理の事がすっぽり
抜け落ちていました・・・。
つか、過去に出てた記憶があるネタだな。 しかも、それも誘導されてた記憶がある。
「print使うよりputsがよい」ってのもどっかで聞いた 「print "〜\n" 使うより puts "〜" のほうがよいっていうか若干マシ」の略なんだと思うが略され方が危険だ
むしろ「どういう状況のために」が略されているのがよくないんだろう。
92 :
デフォルトの名無しさん :2006/01/28(土) 23:01:53
python で if __name__ == "__main__" に相当するものは Rubyにありますか?
用途によるが if __FILE__ == $0 じゃね?
>>88 あぁ、ごめんなさい。
putsを使ってることに気付いてませんでした。
95 :
デフォルトの名無しさん :2006/01/29(日) 08:56:30
正規表現で複数行のマッチを行いたいのですがうまくいきません。 以下の例の#2の行で{}まで対応させたいのですがどこが間違ってるでしょうか。 例 text = " main() { } " p text.grep(/main\(\).*?/m) # 1 p text.grep(/main\(\).*?\{.*\}/m) # 2 結果 ["main()\n"] []
grepはEnumerableだから、文字列に適用すると1行ずつ取り出してマッチをチェッ クする。したがって複数行マッチしようにも出来ない。 ふつうに文字列で正規表現マッチさせるなら match とか scan とかを使うべし。 text.scan(/main\(\).*?\{.*\}/m) # => ["main()\n{\n}"]
文字列からクラスオブジェクトを取得するにはどうしたらいいですか。 例えば "String" から Stringクラスオブジェクトを取得するということです。 JavaでいうとClass.forName()にあたるものです。
>>98 そうじゃなくて "Array" から Array を、"File" から File を取得するということです。
>>98 だと "Array" からも "File" からも String が取れてしまいます。
よくわかんないけど eval("Array") #=> Array でよくない?
Kernel.const_get("String")
>>100 evalはなんでも実行してしまってちょっと危険なので、今回は避けたいです。
>>101 それでいけそうですが、モジュール名も含めた場合はエラーとなりました。
Kernel.const_get("File::Stat") #=> NameError
>103 102のリンクから辿ってruby-list:40030を見れ。 "File::Stat".split(/::/).inject(Object){|c,name| c.const_get(name)} # => File::Stat ちょっと面倒だな。
105 :
95 :2006/01/29(日) 15:51:33
ありがとうございます。 > 96 引き続き質問ですが gsubも同じことなんですね。 置き換えを行いたいときはどうすればよいでしょうか。
いや gsub は Sring のメソッドだからふつうに行けるよ。
File.open( "test.dat", "r" ) do |file| file.each do |line| a,b,c,d = line.chomp.split( /<>/ ) end end ファイルから読み込む際、a,b,c,dそれぞれ配列の形で読み込みたいのですが、 どうしたらいいでしょうか?Arrayをいろいろ試してみたのですがうまく行きません・・・
> a,b,c,dそれぞれ配列の形で読み込みたい の意味がわからん。 どういう入力ファイルだったらどうなって欲しいという例をキボン
分かりにくくてごめんなさい。 a<>..<>..<>.. b<>..<>..<>.. c<>... とあって、a[0]にa,a[1]にb...となって欲しいのですが・・・
110 :
sage :2006/01/29(日) 17:12:05
x = 0 Thread.start{ while true x = x + 1 end } gets print x 期待の動作: xが無限ループ中で加算され続ける。 コンソールから入力を受けると、その次点でのxの値が表示される。 問題: xが198以上の値にならない。なぜでしょう? 環境:ruby 1.8.4 (2005-12-24) [i386-mswin32] ruby -le 'print defined?(Thread)' → constant
上げてしまいました。すみません。
rubyのスレッドは、Cレベルで停止してしまう処理について無力です。 つまり、メインスレッドがgetsで待っている間、サブスレッドも停止しているのです。
ちなみに、これはWindows版のみの症状。 UNIX版を使えば期待した動作をする。
>>104 そういうことですか。どうもありがとうございます。
inject()はわかりにくいので、愚直にeach()のほうをつかいます。
>>102 「これを思い出した」じゃなくて「これを読め」と書いてあるとうれしいです。
ただのオフトピかと思った。
>>109 その説明でもわからん。
A1<>A2<>A3<>A4
B1<>B2<>B3<>B4
C1<>C2<>C3<>C4
とあったとき、
arr1 = ['A1', 'B1', 'C1']
arr2 = ['A2', 'B2', 'C2']
arr3 = ['A3', 'B3', 'C3']
arr4 = ['A4', 'B4', 'B4']
にしたいということ?
arr Array.new() arr[1]=[A1,B1,C1,...] arr[2]=[A2,B2,C2,...] arr[3]=[A3,B3,C3,...] arr[4]=[A4,B4,C4,...] としたいです。何度もすみません。
…2chのスレのdatを1レスごとに配列にしたいとかつまりはそういうことか? arr[レス番] = [ 名前, メール欄, 投稿日, レス内容 ]
はい、そんな感じです。
arr = [] File.open( "test.dat", "r" ) do |file| file.each do |line| arr.push(line.chomp.split(/<>/)) end end
なるほど!出来ました。ありがとうございます!m(_ _)m
>>103 Rails環境なら、
"File::Stat".constantize
だけでOK
122 :
110 :2006/01/29(日) 22:31:02
>>112 >>113 ありがとうございます。
windows版はthread関係の動作がunix系と異なるという情報は
持っていましたが、内容を理解していませんでした。
今後は気をつけたいと思います。
RubyGemsについてです。
システムにインストールされているrubyとgemを使って、ホームディレクトリ以下にGemsのパッケージをインストールしようとしています。
http://docs.rubygems.org/read/chapter/11#page56 ここを見て ~/.gemrc を設定し、
% gem install rake
Attempting local installation of 'rake'
Local gem file not found: rake*.gem
Attempting remote installation of 'rake'
Updating Gem source index for:
http://gems.rubyforge.org Successfully installed rake-0.7.0
Installing RDoc documentation for rake-0.7.0...
となり、インストールは正常に終了したようです。
しかしいざrakeを実行するとエラーが出ます。
% ./rake
/usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:204:in `report_activate_error': Could not find RubyGem rake (> 0) (Gem::LoadError)
from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:141:in `activate'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:37:in `require_gem_with_options'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:31:in `require_gem'
from ./rake:17
どうすれば正しく動作しますか ?
% ruby -v
ruby 1.8.2 (2004-12-25) [i386-freebsd6]
% gem -v
0.8.11
>>121 それ、気持ち悪いなあ。Stringクラスにもたせる機能じゃないだろ。
ふつーにユーティリティ関数じゃだめなんだろうか。
まーそれは好みだな。別に気持ち悪くない。
これ、邪道でしょうか。 class String def &(s) self + s.to_s end end
邪道とは言えないけどオススメは出来ない 組み込みクラスの再定義は、読む側からすると戸惑いのもとになるから 使うなら、きちんと明記しておいた方がよさそう
>>127 これ、よく言われるけど、グローバルスコープの(Kernelクラスの?)
関数を定義するのと同じことじゃないのかと思うんだけど、
そういう解釈は間違ってる?
>>128 いいんじゃない?
人に迷惑かからなければ、好きなようにソース書いて。
いや、そういうコメントがほしいんじゃなくて 組み込みクラスの再定義が推奨されないのは知っているのだが、 そこだけ取り上げられるのはなんでだ?と。コードの見た目で 言うならObjectクラス(だよね?)のメソッドを定義するのと 似たようなもんじゃないのかと思うんだけど。 こっちも推奨しないって言ってくれた方がすっきりするってこと。
その辺は誰もが分かってるので、誰も何も言わない。
>>126 「&」という名前にしなければならない理由は?
もし違う名前でいいなら、そのほうがいいと思う。
ASK = "ask"
NUM = "0"
while NUM != "3"
while ASK != ASK.upcase
puts "もっと大きな声で話してくださいな。"
ASK = gets.chomp
end
if ASK == "BYE"
puts "はぁ…?"
NUM = (NUM.to_i + 1).to_s
ASK = gets.chomp
else
puts "いやぁ、"+(1950+rand(22)).to_s+"以来ありませんよ。"
NUM = "0"
ASK = gets.chomp
end
end
puts "ハイさようならー。"
----------------------------
ttp://www1.tf.chiba-u.jp/~shin/tutorial/index.rb?Chapter=06 「BYE」と3回連続で入力しなければ終了できないようにしたいのですが、
「BYE」→「BYE」→「fweajijifuji」→「BYE」→「fweajijifuji」
で終了してしまいます(他のパターンで終了してしまうことも…)。
もしよろしければ助言をいただけないでしょうか。
それと「warning: already initialized constant 〜」
という文面がよく出るのですが、これは仕様なんでしょうか。
・「変数」は小文字で始まります ・「定数」は大文字で始まります。 ・「定数」に二度以上代入するとワーニングが出ます
先生!できました! STDIN.inject(0) {|num, line| case line.chomp when "ASK" puts "いやー、" + (1950 + rand(22)).to_s + "年以来ないねー!" 0 when "BYE" if num < 2 puts "はぁ〜?" num + 1 else puts "ハイさようならー" break end else puts "は?! もっと大きな声で話しておくれ、坊や!" 0 end }
いきなり inject 使いこなすような子は生徒と認めません!
caseの使い方もやらしいな
inject自体は別にいいんだけど、その使い方ははっきりいって下手糞だな。 条件分岐の末端末端でinjectの返り値を書くことが「暗」に求められてるため、 バグを生みだすリスクばかりが大きくなる。
ループ構造だってのも見て全然わからんしな というかそのへん含めたただの嫌がらせだろう(w
変数を大文字で書いちゃうような人にはRubyコミュニティは冷たい
141 :
デフォルトの名無しさん :2006/01/31(火) 18:33:42
Rubyでエロゲ作るっていったらどの程度の質のまで作れる? ファミコン並みか? ガッコでRuby習ってんだが、全然使えんと思う
143 :
133 :2006/01/31(火) 20:35:41
ask = "ask" n = [0] while n[0] != 3 while ask != ask.upcase puts "もっと大きな声で話してくださいな。" n[0] = 0 ask = gets.chomp end if ask == "BYE" n[0] = n[0] + 1 if n[0] != 3 puts "はぁ…?" ask = gets.chomp end else puts "いやぁ、"+(1950+rand(22)).to_s+"以来ありませんよ。" n[0] = 0 ask = gets.chomp end end puts "やったできたー!"*50 puts "助言ありがとー!"*40 puts "ありがとー"*30 puts "がとー"*20 puts "とー…"*10 puts "変数は小文字じゃなきゃだめとかホント助かりました。"
…模範解答とか「あとは組み立てるだけでOKなヒント」とかないんだな、
>>133 のページ。
>>143 を見たら多分泣くぞ。
count=0 ask='' while ask=gets.chomp if ask == 'BYE' then year=(1950+rand(21)).to_s puts "いやー、"+year+ "年以来ないねー!" count = count + 1 else puts "は?! もっと大きな声で話しておくれ、坊や!" count = 0 end if count == 3 then exit end end
あ、exitってまだ使ったら駄目?
>>145 そこまで書いて
while count < 3
という発想がなぜ出ない
「永遠にループ+脱出条件」のほうがいいと思う俺は古い人間なんだろうなあ。 この場合、countでループ作るのってなーんか意味違う気しねえ?
149 :
133 :2006/01/31(火) 21:40:18
>>144 え…もしかして、こういう「答え」は書かないほうがよかったってパターン?(汗
150 :
133 :2006/01/31(火) 22:06:37
…ではないか。文脈からして。スマソ
require "tk" a = TkText.new{pack} Thread.start do while line = gets a.insert 'end', line end end Tk.mainloop 上のプログラム実行中、Tk のテキストウィジェット内の文字列を マウスでドラッグして選択すると、それ以降 gets が 入力を取りこぼしてしまうようです。 (普段 state 'disable' しておいて書き込み時のみ 'normal' にしても同じ) どのように書けばいいでしょうか?
152 :
127 :2006/02/01(水) 00:30:06
>>128 >>130 俺的には両方とも推奨しないけど、それはさておき
トップレベルで関数を定義した場合には、レシーバを省略したメソッドのように
書けるからじゃないかな。この書き方はRubyでは自然な書き方。
>>131 「誰もが分かってる」というほど簡単な話でもないと思うが
なによりここは初心者スレだ
>>141 つRuby/SDL
エロゲ程度なら好きなだけ作れる
>>132 'hoge' + a.to_s + 'hage' + b.to_s + ...
といった時に
'hoge'&v&'hage'&b&...
と短く書けるかな、と。
記号一文字なら何でも良かったんですが
分かり易い事と、String#&というメソッドが無いようでしたので。
(ruby 1.8.4 (2005-12-24) [i386-mswin32])
…format()やprintf()がしっくりこないだけかも。
>>153 "hoge#{a}hage#{b}" じゃダメなのか
>>154 出来ました。式展開て文字列化ちゃんとしてくれるんですねorz
式展開の中にto_s書いてた自分が恥ずかし…
157 :
151 :2006/02/01(水) 12:02:04
>>156 書き忘れてました。cygwin の ruby1.8.4 と tk8.4 です。
最初は socket から gets していて動作が変だと気付き、
最小の構成があのプログラムになり、再現性100%です。
unix だとそのままで動くのでしょうか…?
GUI のループの中で socket からデータを得る一般的な書き方ってどんなでしょう。
159 :
151 :2006/02/01(水) 14:07:03
>>158 よくわからないのでもう少しお願いできますか?
別の Thread としてではなく、Tk のタイマーを使うということでしょうか?
TkAfter のプロセスとして select を指定し、一定時間ごとにタイムアウトありで呼ぶという理解であってるでしょうか。
>>159 つか、157で
>GUI のループの中で socket からデータを得る一般的な書き方ってどんなでしょう。
と書いてるから、ループの中でsocketに対してselectしときゃいいんじゃ、と思っただけなんだが。
一定時間ごとにタイムアウトありで、というのはその通り。
161 :
151 :2006/02/01(水) 14:42:58
あ、GUI ループそのものに指定するのか…。 なるほどと思ったのですがそのやり方がわからないので、また調べてみます。 現状、Thread を廃止し、タイマーを使って select を試してみたところ 151 の症状は出なくなりました。 どうもありがとうです。
162 :
デフォルトの名無しさん :2006/02/02(木) 19:21:37
a,bが互いな素であるときaxをbで割ったあまりが1になるようなxを1つ出力するプログラムを書きなさい。 という課題が出ました。 互いに素というのは作れるのですが、後半部分ができません。 だれか教えてください。お願いします。
配列 arr の要素 obj を、arr の最後尾に入れ直す場合、普通は arr.push(arr.delete(obj)) とすると思うんだけど、arr のサイズがかなり大きい場合、 もっと高速に出来る方法が無いかな、と思っているんだけど、どうかな? 細かい条件は、 * arr のサイズはかなり大きくなることを仮定すべき * arr 中の各オブジェクトには、絶対に重複は無い * arr 中に obj は必ず存在する * 結果的に「該当のオブジェクトの順序を最後尾にする」という事が 効率的に、かつ高速に実現できるのなら、単独の Arrayだけでなく、 他の補助用のオブジェクトを併用しても良い (つまり、そのために補助用に Hashなどを使っても良い) また、事前に arr にデータを入れる時点(Array#push)で、何かの工夫があってもよい。 という事なんだけれども。
しかしArrayである必要があり、独自クラスでは駄目、と?
英語がダメだとRubyを扱うのは難しいのでしょうか 日本語化パッチを探しているのですが、なかなか見つからないので…
>>167 プログラムもほぼ無知な初心者ですみません
とりあえずver1.8.4を落としたのですが、エディタも含めた中身が全て英語だったので何がなにやら…
(初心者インストールガイドの情報が1年前のものなのか、書かれている内容とリンク先のファイルが違ったりしていたので…
今はスレタイにある公式サイトを見ながら進めてます
>>164 これを見て思い出したんだけど、Array#rotate はどうなったんだよ!
>>168 「エディタ」って何?
つーか、何を落としたの?
172 :
171 :2006/02/03(金) 16:41:43
済みません、自己解決できました どうもお騒がせしました
Rubyのプログラムが、Rubyじゃなくて英語で書かれてると思ってたのかな??
174 :
171 :2006/02/03(金) 16:54:44
>>173 それに近い感じです
日本語を一切受け付けないものだと思ってました
175 :
デフォルトの名無しさん :2006/02/03(金) 23:37:33
open-uriってsslにpostできる?
まず試せ。
SSL関連で変な失敗したら鯖管に目つけられて通報されるかもしれないだろ!!!11!1
ドキュメントが無いって最悪だな。ruby最悪
require 'net/http' Net::HTTP.version_1_2 # おまじない word = "test" Net::HTTP.start('www.google.com', 80) {|http| response = http.get("/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&num=1&q=#{word}") response.body =~ /swrnum\=(\d+)/ p $1 } GoogleのHIT数を取得したいのですが このスクリプトで取得できる値と実際にブラウザ
# 途中で送っちゃった。 実際にブラウザ(IE: 6.0.2800.1106)で検索した場合の値が違うのですが どうすれば同じ値を取得できますか
>>181 Cookieも一緒に送信したら一緒になったよ。
理由は分からんけど…。
183 :
175 :2006/02/04(土) 02:49:00
どうにもopen-uriは糞という結論になったので、http-aceess2を使ってみたが
途中で切れるぞ?
getもマトモにできんとはどういうことだ?何の嫌がらせ?
$ ruby -r nkf -r http-access2 -e '
> url="
http://pc8.2ch.net/test/read.cgi/tech/1133988248/ "
> html=HTTPAccess2::Client.new.get(url).content
> puts NKF.nkf("-Sex",html).split("\n")[-3..-1]'
<dt>257 :<font color=green><b>デフォルトの名無しさん </b>(略)
<dt>258 :<a href="mailto:sage"><b>デフォルトの名無しさん </b>(略)
<dt>259 :<a href="mailto:sage"><b>デフォルトの名無しさん </b>(略)
184 :
151 :2006/02/04(土) 09:19:13
うーん。 require "tk" a = TkLabel.new{pack} TkText.new{pack} Thread.start do num = 0 while true num += 1 a.text = num end end Tk.mainloop 上のプログラム実行中、テキストウィジェット内でマウスをドラッグすると それ以降、ラベルウィジェットの更新がされなくなります。 (alive? で確かめるとスレッド自体は生きてる模様) 環境は cygwin です。unix な人、上のプログラムが大丈夫か確かめてもらえませんか? #Tk 使うときはスレッド使うなってこと?もうやだ。
>>164 arrの要素をキーにして、そのindexを値としたハッシュを使えばいいんじゃね。
・・・と思ったけど、arr.delete(obj)したときに、objより後ろにあるやつのindexをすべて更新しなきゃいけないから、だめだめだな。
思うに、配列を使っている限りはだめなんじゃないか。
arr.delete(obj) をするときに、どうしてもO(N)の時間がかかる(探索にO(N)、削除にO(N))。
Priority Queueとか使えるんだったら、そっちのほうがいいと思う。
これなら探索にO(logN)、削除にO(logN)だからかなり早くなるとは思うよ。
ただし要素間で大小比較ができないといけないから、164の要件にあうかどうかわからんが。
つか、Rubyの話題じゃないな。本スレかMLできけば、学者さんがヒントくれると思う。
>>178 きちんとしたSSLページをローカルに用意できる人間がこの世にどれだけいるっていうんだ
別にローカルなら自作自演なルート証明書も作れるし、 インストールできるだろ?
つーか一式ダウンロードできるよ。
ttp://hunter.campbus.com/ これもっつーか、これ恐ろしいパッケージ。
「Apache, MySQL, PHP + PEAR, Perl, mod_php, mod_perl, mod_ssl, OpenSSL, phpMyAdmin,
Webalizer, Mercury Mail Transport System for Win32 and NetWare Systems v3.32,
JpGraph, FileZilla FTP Server, mcrypt, eAccelerator, SQLite sowie WEB-DAV + mod_auth_mysql.」
ttp://www.apachefriends.org/de/xampp-windows.html
まあ、SSLサイトの何が必要なのかってので自作証明書で充分かどうかってのは変わるかも。
https:// 〜〜〜 なサイトのファイルを取ってきたいってだけなら
標準添付のnet/https.rbでできないかい。
postもできんじゃねーの。やったことないけど。
190 :
123 :2006/02/04(土) 12:32:07
誰か 123 がわかる人いませんか。 みなさんのところではこういう現象はおこらないのでしょうか・・・
192 :
180 :2006/02/04(土) 20:57:39
>>182 そうかCookieか!
助かりましたありがとう
デフォルトの国によってフィルタがかかるのかいな?
193 :
デフォルトの名無しさん :2006/02/04(土) 21:09:28
194 :
123 :2006/02/04(土) 22:31:34
>>193 環境変数GEM_HOMEを設定することで動作するようになりました。
設定ファイルはインストール時のみ有効でアプリケーションの実行時には参照されないみたいです。
なんともまぎらわしい仕様ですが、これで先に進めます。
ありがとうございました。
195 :
デフォルトの名無しさん :2006/02/05(日) 21:23:33
Rubyの$KCODEと-Kオプションについて質問です。 -Kオプションはスクリプトの解析段階からの文字コードを変更することになるので スクリプト自体を、その文字コードで書いておかないといけない。 一方、$KCODEは、スクリプト解析後に影響がでてくるため、 スクリプト自体は、単なる1byteの羅列として認識されている。 正規表現を用いる場合のマッチの仕方、Stringの一部のメソッドのみに影響を与える。 このように理解したのですが、これでいいでしょうか?? で、困っているのは、Railsで$KCODEを"u"に指定しようとして、混乱しています。 $KCODEを"u"にすると、スクリプト中のStringやRegexpをUTF8で書きたいので、 スクリプト全体をUTF8に書き換えようとしましたが そうすると、StringやRegexp以外のスクリプトの部分のASCII文字が、2bytes単位になってしまうけど $KCODEで指定しているから、スクリプト解析時はNONEで解釈し、1byte単位で解釈してしまい、 解釈できませんよね。 結局、Rubyにおいて、-Kuでなく、$KCODE="u"とした場合、 1.スクリプトは、どの文字コードで書くのか?? 2.スクリプトをShift-JISなどで書いた場合、StringやRegexp部分のみUTF8にしないといけない気がします。 どうなんでしょうか?? よろしくお願いします。
何か誤解がある気がするが、 -K で何を指定しようが String はバイト列のま ま変わらないよ(KCODEじたいは設定されるので文字列や正規表現に影響を与えるが)。 それと、 UTF-8 の場合、 ASCII 文字に関しては1byteずつなので、別に何ら 問題はない。UTF-16 あたりとごっちゃにしてない? ただし、 Rails はデフォルトでは UTF-8 を吐こうとするので、きちんと設定 しないと Shift-JIS などの文字列を表示させることはできない。 Rails をや るという前提であれば、可能ならぜんぶ UTF-8 で書くのが無難。
197 :
デフォルトの名無しさん :2006/02/06(月) 02:04:29
>>184 Linux はOK。
One-click ruby installer 1.8.4preview2 + ActiveTcl8.4.12 もOK。
cygwin は手元に環境がないので確認できず。
動かしているバイナリの native-thread サポートはどうなってます?
198 :
デフォルトの名無しさん :2006/02/06(月) 02:28:54
文字列を’’で囲むというのが気に入らない。 ””のほうが美しいのに。
>>56 今さらという気もするが、Tk.after(1,proc{anime}) を
Tk.after(2000, proc{anime}) として約2秒間隔の繰り返しにすると
原因がわかるのではないかという気が…
(貼ってあるものに間違いがなければだが)
200 :
デフォルトの名無しさん :2006/02/06(月) 02:40:03
木村カエラ的な?
>>198 ん?自分では普通に"〜"で囲んでますよ。
'〜'で文字列を囲めることがご不満?
変数を展開したい時だけ " を使ってるな。 意図的にそうして、俺ルールなプラシーボでミス防止とソース見易くしてる。
>>198 この辺個人の好みが出るよな
どっちをメインに使っても実用では大差ないだけに、特に
ちなみに俺は、ハッシュのキーやファイルパスなんかはたいていダブルクォート
画面に表示する文字列は全部ダブルクォート、で使い分けてる
>203 で、どっちがシングルクォートなんだ?
205 :
デフォルトの名無しさん :2006/02/06(月) 09:11:59
だれか、collectメソッドをRubyで書いてみて。
collect(コレクト)
krkt
>>202 なるほど。自分では逆にしてます。原則的にはダブルクォートで、
変数展開やエスケープシーケンスを無効にしたい時だけシングルクォート。
何となく、ダブルクォートの方が文字列っぽい気がして。
Delphi出身の私はシングルのが文字列っぽく感じるな …お陰で等号を=と書く癖が治りませんorz
"#{val}"を多用する流儀かどうかでも違う気がするぞ。 コメントであるはずの#を流用するのが気に食わんとか。 #{〜}には何でも入るのが結構好みだがやりすぎてワケワカメになること多数
#{ }の変数展開は最初凄く嫌だった。 なんかプログラミングの方向性として邪道っぽくね? 埋め込まずに + で足していったほうがよくね?
>>211 自分では多用する方です。好みや慣れによりけりでしょうね。
Perlの変数展開に慣れてる人には違和感が少ないでしょうし。
>>210 確かに程度問題ですよね。
複雑になるようなら>211のように書き方を変えることもあります。
>>205 多分、こんな感じか?
環境が手元にないからテスト出来んが。
def collect
a=[]
self.each{|i|a.push(yield(i))}
a
end
>>213 文字列と足す時は暗黙の型変換すればよくね?
to_str知らんのか?
emacsで、Ruby専用のoutline-modeって使ってるひとおるん?
219 :
203 :2006/02/07(火) 03:37:50
String#% 使う人〜 ノ
私はformat派かな レシーバが「書式に与えるデータ」ではなく 「書式そのもの」を表すのが微妙。 ワンライナでたま〜に使う程度か
String#% は、たまに使うけど、常用はしないなあ。 たいていは sprintf だね。
223 :
221 :2006/02/07(火) 14:25:01
[13, 10].format('%b %b') みたいな書き方って無いの? 個人的には「データを書式にそって並べる」って書きたい。
>>223 下記のような書き方はありますね。
'%b %b' % [ 13, 10 ]
自分でメソッドを追加すれば下記のようにも。
class Array
def format( string )
string % self
end
end
[13, 10].format('%b %b')
それはちょっと欲しい気がするな。 Array#pack と同じような方向性か。
Array#join も同じ系統だね。 あってもいいかも。
何かこの話題も初心者スレっぽくねー気がするな… 最近何でもこっちに書き過ぎっぽくね? 本スレがネタ不足に陥り気味な感じだと思うかも
最初にeachを見たとき、「配列を順番に適用する」というメソッドが絶対にあるだろうと思ったんだけど。
なんで無いのかよくわかんない。もしかしてすでにある?
["A", "B", "C"].hoge(puts %3%3%2)
CCB
>>227 「初心者が疑問に思うこと」ではあると思う
>>228 Enumeratorみたいなやつ?
RubyにはEnumerableモジュールがあるけど
これは「導入先のクラスにeachが定義されていること」を前提に作られてる。
ブロック付きメソッド呼び出しが簡単に出来るRubyは
要素を取り出す部分を各クラス(のeach)に完全に任せられるようになったという事では。
each で回しちゃうからなぁ。 ブロックパラメータで処理する意識が強い Ruby だと、 行数に拘らなきゃ、無意識にそっちを使ってしまうな。 いや、んなものイラネとかいう話じゃなくてね。ただのチラシの裏。
231 :
230 :2006/02/07(火) 17:29:44
リロードすれば良かった orz
ヤターデキタヨー [["A","B","C"]].each{|arr| print arr[2],arr[2],arr[1]} CCB 専門用語はよくわからんが、 配列に直接ブロックがくっつくことができるといろいろ便利そうだとは思った。
何がしたいのかよく分からんが、values_atとeach使って ['A', 'B', 'C'].values_at(2, 2, 1).each {|x| print x } とかじゃね?
以前言ったことあった気もするけど、 #{ } でフォーマット指定したいことがよくある。 "#{|04d|num} #{|-10s|name} : #{|s|data}" あと、こんなのとかも欲しかったり。 "%{num} %{name} : %{data}" % { :name => "foo", :num => 123, :data => "bar", } "%{|04d|num} %{|-10s|name} : %{|s|data}" % { :name => "foo", :num => 123, :data => "bar", }
"#{"04d"%num} #{"-10s"%name} : #{"s"#data}" で良くないか?
良くないな。"#{"04d"%num} #{"-10s"%name} : #{"s"%data}"だ。
238 :
235 :2006/02/07(火) 20:06:56
ん? "#{"%04d"%num} #{"%-10s"%name} : #{"%s"%data}" だよね? リテラルの中にまたリテラルを書くのがちょっと嫌かなあ。
そのリテラルってどういう意味?
ダブルクォーテーションの中にダブルクォーテーションがあるのが嫌なんでしょ その場合はやっぱし "%04d %-10s : %s"%[num, name, data] しかないだろ おれには "#{|04d|num} #{|-10s|name} : #{|s|data}" より見やすく感じる
sprintf系のフォーマットは別にシングルクォートでも書ける筈だが… "#{'%04d'%num} #{'%-10s'%name} : #{'%s'%data}" この例に限っては>240の方が普通だけどね。
string % array じゃなくて string%array だと見辛いなあ
243 :
235 :2006/02/08(水) 05:35:00
>>240 引用符の中に引用符がある気持ち悪さと、
#{ } の展開の中でさらに String#% の展開が行われてるという煩わしさが嫌。
あと、 "%04d %-10s : %s"%[num, name, data] は、
見易さよりも変更時の対応付けのミスが気になっていて、
変数が多くなってくると変数の増減があった場合に
どの % がどの変数に対応しているかがワケワカになりそうで嫌。
forkする時だ。
+ で繋いじゃえ。
none.
Ruby の M17N ないし I18N の今後の展望についてまとまったドキュメントがあれば教えてください。
あ、えーと、もしなければこの場でまとめていただけるとありがたいです。
今後の展望自体がないんじゃないのか。
Ruby2.0に乞う御期待ってとこだと思う Ruby本体としては日本語と適当なUnicodeの何かが使えればそれでよくね? って感がなくもなく
>>248 matz自身が未踏ソフトウエアの予算でI18Nを検討したはず。成果物を探したら?
質問です。 File.open("filename").each {|line| 処理} この直後ファイルは自動的に閉じてくれますか?開きっぱなしですか?
openに直にブロック付けなきゃ駄目でね?
IO.foreach("filename"){|each| ...}
256 :
253 :2006/02/09(木) 09:17:54
>>254 直にブロックをつけてprintしてみたら変なアドレスみたいなのが表示されちゃいました。
>>255 そういうやりかたもあったんですか。
繰り返しが終了した後には"filename"のファイルは閉じられているのですか?開かれたままですか?
File.read("filename").each{|line| 処理 } もしくは、 File.open("filename"{|fio| fio.each{|line| 処理 }} とか。 254 が言ってるのは後者の方のような用法。 >256 閉じられるよ。
>>257 回答どうもです!
参考までに聞きたいんですが、
file = File.open("filename")
file.each {|line| 処理1}
file.rewind
file.each {|line| 処理2}
みたいにやった場合どこで閉じられてどこで開かれるのでしょうか?(無意味なコードで恐縮ですが)
もしくはfileという変数に格納したかどうかで変わったりしますか?
>>258 openをブロック付きで呼んだら
ブロックが終わるときに閉じられる。
openをブロック付けないで呼んでたら
file.closeかgcでfileが回収されたときにファイナライザで閉じられる。
ブロック付きの動作が知りたいなら、ブロック無しの代替コードを書いてみればいいと思う
261 :
253 :2006/02/09(木) 11:05:35
>>259 なるほど!納得です。ありがとうございました。
I18Nが行なわれると、メソッド名やクラス名も日本語にできるのですね。 はげしく期待します。
I18Nが行われるとメソッド名やクラス名もアラビア語やロシア語にできるのですね。 はげしく期待します。 読みにくいソースを書けると思うと興奮で眠れません
こらこら
emacsにおける、rubyの為のoutline-minor-modeって用意あるの?
Windowsでファイルをコピーしたいので FileUtils.cp を使ってみたのですが、 コピー元のファイルが Read only だと更新時刻を合わせるときにアクセス違反になってしまいます。 更新時刻を(出来れば属性も)維持したいのですが、簡単に解決できる方法はありますか? エラーメッセージ C:/Ruby/lib/ruby/1.8/fileutils.rb:503:in `initialize': Permission denied - def.txt (Errno::EACCES) 環境 Windows2000, ruby 1.8.2 (2004-12-25) [i386-mswin32] コード require 'fileutils' s='abc.txt' # read only file d='def.txt' FileUtils.cp s,d,:preserve=>true
268 :
184 :2006/02/11(土) 02:41:39
>>197 どうやらcygwinのtk8.4がよくないようで、Activetcl1.8.4ならOKでした。
Ruby 自体は cygwinのでもnativeなバイナリのでも問題ないようです。
お返事おそくなりましたが、試してもらってありがとうです。
>>266 outline じゃないが、folding-mode とかはどうよ。
folding-mode-marks-alist を適当な値に設定すれば、多分便利になると思う。
>>267 xcopy をキックしてみる。
system("echo F | xcopy /Q /Y /X /K #{s} #{d}")
または、コピー前にread only を落として後で戻すとか。
st = File.stat(s)
FileUtils.chmod(0600, s)
begin
FileUtils.cp s,d,:preserve=>true
ensure
FileUtils.chmod(st.mode, s)
FileUtils.chmod(st.mode, d)
end
なんかいまいちだなぁ。
271 :
267 :2006/02/11(土) 19:38:28
>>270 回答ありがとうございます。
実は私もはじめ xcopy を呼んでいたのですが、2000個くらいコピーすることもあるので
なんとなく効率が悪いような気がして、他に良い方法がないか探しています。
後者の方法を参考にさせて頂きますが、送り元ファイルを弄りたくないのでこうしてみました。
st=File.stat s
FileUtils.cp s,d
FileUtils.chmod(0600, d)
File.utime st.atime,st.mtime,d
FileUtils.chmod(st.mode, d)
これでしばらく運用してみます。ありがとうございました。
Cygwin 版だとうまくいくね。バグなのかな?
i386-mswin32環境ではファイルがread-onlyでもatime等の変更は許容するように手当てするのが正しい気がする。 といってもまだ確かめてないが。
バグというか、どうあるのが正しいというか。 まあ、疑問に思えばruby-devへ。
どうあるのが正しいかは明らかで、疑問の入る余地も無いでしょ。 UNIX や Cygwin と同じに挙動になるべき。
なんでそう言い切れる? 「Windowsはそういうものだからそれでいい」という解だってありえるでしょ。
Cygwin と win32 とで挙動が違うのはまずいでしょ。 Windows はそういうものならばそうリファレンスマニュアルを変更すべき。
システムコール通りの動作、ということでは
FileUtils のメソッドセットを見て、 「システムコール通りの動作」を想定するのは不可能だと思う。 FileUtils のどのメソッドがどこでどのシステムコールを利用しているかなんて ユーザからはわからないわけだし、 FileUtils は、システムコールレベルの挙動の差異をできる限り隠蔽しているべきだと思う。
そうだな スクリプト言語の目的の一部には可用性ってのも含まれるだろうしな
そういう議論を、ここでやんないで ruby-dev でやれば?
めんどくさい
んじゃ、せめて本スレで
こういうことに疑問を持つのは初心者だけだからこのスレが適当
昨日からrubyを始めた初心者です rubyでクリップボードを利用したくてwin32-clipboard-0[1].3.1.zipを 落としたんだけど展開したあとどこに置いたらいいの? どこに置いても↓これ・・・ a.rb:1:in 'require': no such file to load -- win32/clipboard (LoadError) 環境はWinXP,ruby-1.8.4-i386-mswin32です
>>287 とりあえず、require "c:\full\path\to\win32\clipboard" とでもすれば?
さらにヒントとしては ruby -e "p $:"
>>287 Cコンパイラある?
あるなら、ruby extconf.rb して (n)make
それとも、バイナリもその名前なのかなあ
290 :
287 :2006/02/14(火) 11:03:05
レスありがとうございます
>>288 require "c:\full\path\to\win32\clipboard"にしてみましたが同じような
errorがでました。
ruby -e "p $:" の結果は
C:/Ruby/lib/ruby/site_ruby/1.8
C:/Ruby/lib/ruby/site_ruby/1.8/i386-msvcrt
C:/Ruby/lib/ruby/site_ruby
C:/Ruby/lib/ruby/1.8
C:\Ruby\lib\ruby\1.8/i386-mswin32
・・・↑ここかな?
>>289 nmakeするとエラーになるんでなさそうです・・・すみません
292 :
287 :2006/02/14(火) 11:38:27
>>291 インストーラタイプというのがあるんですね。早速試してみます。
試してから結果書けよ…
まあクリップボード程度なら直接API呼んでもなんとかなるけどな
295 :
287 :2006/02/14(火) 11:59:26
>>291 できました!!
カスタムでclipboardだけインストール可能で、
C:\Ruby\lib\ruby\site_ruby\1.8\i386-msvcrt\win32\
にclipboard.soが作成されました。
自作プログラムも一応動きました。
require "win32/clipboard"
include Win32
text = Clipboard.data
text = text.gsub(" " , "")
Clipboard.empty
Clipboard.data = text
ありがとうございました。
暗号化ライブラリを探しているのですが RAAでLibrary/Cryptgraphを検索すると、プロジェクトが20もあり どれを使うのが適切なのかよく分かりません。 これがオススメ!というものはありますか? ちなみに暗号化するのはUTF8のテキスト、というかiniファイルで できれば pure ruby のライブラリが望ましいです。
無駄に 20 もあるわけじゃなくて用途に応じて適切なものを選んで使うべきで、 何を何から守るために暗号化するのか、どのくらいの強度が必要かとか、
298 :
296 :2006/02/16(木) 05:53:58
とりあえず rubycryptlib が使いやすそうだったので
試しに導入して Blowfish + CBC を使ってみたのですが
なぜかCBCが3回に2回ぐらいエラーを吐きます。
crypter = Crypt::Blowfish.new('testkey8')
crypter.encrypt_file("test.txt", "test.txt.crypt")
crypter.decrypt_file("test.txt.crypt", "test.txt.decrypt")
CBCを使わずにencrypt_blockを使えば正常に復号できるのですが……
何か勘違いをしているのでしょうか?(バージョンはmswin32の1.8.4です)
>>297 絶対に見られないように暗号化したいわけではなくて
簡単に見られないようにしたい程度なので
強度は特に必要ないです。
ROT13/47にキーが付いたようなものがベスト。
ROT13/47にキーが付いたようなもの??? そんなわけわからんもんは自分でつくれ。
300 :
デフォルトの名無しさん :2006/02/16(木) 14:32:58
Unicodeから韓国語の文字コードのKSに変換できるライブラリとかないですか?
iconvでできなきゃできないんじゃね KSの正式な通称が何かしらんけどEUC-KRやKSC5601はできるみたいよ
303 :
301 :2006/02/16(木) 15:30:20
試してから結果書けよ…
NetNewsの昔から延々嘆かれてたことだから仕方ないな(w
306 :
デフォルトの名無しさん :2006/02/17(金) 04:00:49
> irb irb(main):001:0> 1 => 1 irb(main):002:0> 2 => 2 irb(main):003:0> 3 => 3 irb(main):004:0> と実行した時、一つ前の結果(3)、二つ前の結果(2)・・・を参照することは出来るでしょうか? また、mysrc.rbを実行して実行が終了したらメモリの内容をそのままにirbに制御を移すことは出来るでしょうか?
> cat foo.rb puts "foo" > irb -r foo foo irb(main):001:0>
> cat socket.rb puts "socket" > irb -r socket irb(main):001:0>
ハッシュのキーの先頭を「ハッシュのキーなんだ」と思うために 文字列の先頭を常に大文字で書こうとするのってどのくらい変?
>>310 そばつゆだと思ったらコアップガラナだった
記法を俺内で統一しておく、というのは悪いことじゃないと思う。 大文字小文字がちょっとでも違ったら読めないんだし。 ハッシュ使うたびにきちんとキーの語句確かめろってのはまあそうなんだけどさ。 クラス名やメソッド名の問題と一緒だろと言われればそれもまあそうなんだけど。 なんでもアンダースコア区分の小文字派な俺。 単語ごとにキャピタライズして書くのは前置詞の扱い悩むので苦手。 Ruby的にはどう書くのが好ましいってことになってるん?
そのくらいは自分で勉強してくれ。ま、実際に書いてみりゃ、すぐにわかるよ。
YAML の設定でキーを CamelCase にするのは結構普通な希ガス。
>>315 特定の作法はRubyでは書きにくいから使わなくなっておのずと一本化、ってのはRubyではあんまないと思う
変に癖ついちゃうだけなんじゃないかな
コーディングルールか?
釣りかもしれんが念のため書いておくと、大文字から始めるのは定数な。
釣りかもしれんが念のため書いておくと、ハッシュのキー文字列の話な。
作法?に関する質問なんですが def shuffle(arr)とか def decorate(s) "\""+s+"\"" endといった 基本的なArray, Stringといったクラスのユーティリティメソッドを自分で書いたとき 普通どこに定義するもんなんでしょうか。 MyNameモジュールなどにまとめて記述するものでしょうか。
>>310 ハッシュのキーとして使うなら、文字列ではなくてシンボルを使ったらどうでしょう?
hash = { :one=>1, :two=>2, }
面白いがスクリプト公開したら変なポリシーだって怒られそうだな
私は ModuleName CONSTANT_NAME variable_or_method_name って感じ
釣りかもしれんが念のため書いておくと、ハッシュのキー文字列の話な。
>>319 それだ!
なんでこんな言葉忘れてるんだ俺は orz
コーディングスタンダートともいうな
require 'tk' num = 0 while num < 3 TkButton.new { text 'button' command { p num } }.pack num += 1 end Tk.mainloop 上記のプログラムだとどのボタンを押しても「3」が出力されてしまいます。 それぞれ「0」「1」「2」を出力するようにするにはどう書けばいいでしょうか?
require 'tk' num = 0 while num < 3 TkButton.new { text "button#{num}" command { p text } }.pack num += 1 end Tk.mainloop とすると、ボタンに応じた内容が出力されたよ。 numのスコープの問題だと推測する。
素直に 3.times do |num| end でも良い。
while常用してる入門書は燃やしてよし
339 :
335 :2006/02/19(日) 18:41:12
スコープの問題か…。 実際にはtext項目に別の文字列を指定したいし、 commandももう少し複雑だし、動的にボタンを作りたいので そこだけ関数形式にしようと思います。 ありがとね。
340 :
335 :2006/02/19(日) 18:43:12
require 'tk' def b(x) TkButton.new { text 'button' command { p x } }.pack end num = 0 while num < 3 b(num) num += 1 end Tk.mainloop 一応解決策を張っておきます。
これでいいんじゃ? require 'tk' num = 0 while num < 3 TkButton.new { text 'button' num2 = num command { p num2 } }.pack num += 1 end Tk.mainloop つうか >numのスコープの問題 というRubyのスコープに問題があるかのような書き方すな。 他の言語でも大抵同じ動作だ。
342 :
335 :2006/02/19(日) 20:37:12
>>341 あ、new の引数ブロックに tcl に渡す以外の式が書けるとは知りませんでした。
参考になります。ありがと。
erbを使って、%w[ a b c ] から、"a/b/c" と言う出力を出したいのですが、 うまい方法は、無いでしょうか? % %w[ a b c ].each { |x| <%= x %>/ % } だと、最後に'/'がついてしまいますし、 % a = %w[ a b c ].collect { |x| % x % }.join( '/' ) <%= a %> だと、美しくありません(たとえば、"a.html/b.html/c.html" に変えようと すると文字列の足し算や"#{x}"が必要になる)。
<%= %w[ a b c ].join("/") %>
今Rubyお勉強中だけどひとつのファイルに ##!! forのサンプル for i in 0..10 puts i ##!! timesのサンプル 3.times{|i} puts i } ##!! end とかやって カーソルがある##!!ではさまれた領域を切り出して実行するエディタマクロ作ったら サンプルのファイル散らばらなくなってめちゃ快適。 頭良すぎね?
>>345 天才!!!!!!!!!!!!!!!!!!!!!!!!!!
>>345 神!!!!!!!!!!!!!!!!!!!!!!!!!!
名前つけようぜ。
「いい感じに」
「Rubyスクリプトを」
「部分実行する」
の頭文字を取って
“irb”
というのはどうだろう
irbはコードがためらんないからうんこ
bash: $ for str in 1 2 3 4 5 > do > echo $str > done 1 2 3 4 5 $ ← ここでCtrl-P $ for str in 1 2 3 4 5; do echo $str; done irb: irb:0> [1,2,3,4,5].each do |str| irb:1* puts str irb:1> end 1 2 3 4 5 => [1, 2, 3, 4, 5] irb:0> ← ここでCtrl-P irb:0> end このへんがうんこ
readline じゃ難しいのかな? Zsh なんかはどうやってるんだろう?
>>353 zshはreadline使ってないよ。独自に実装してる
awk '{print $1+$2}' input.txt を ruby でワンライナで書くとどうなんの? input.txt は一行に空白で区切られた 2つの数が入ってるとして。
inf-rubyって使ってないけどどうなの?
>>358 -a autosplit mode with -n or -p (splits $_ into $F)
-e 'command' one line of script. Several -e's allowed. Omit [programfile]
-Fpattern split() pattern for autosplit (-a)
-l enable line ending processing
-n assume 'while gets(); ... end' loop around your script
-p assume loop like -n but print line also like sed
[tips] $ cat a.tmp
1 2
3 4
5 6
7 8
9 10
11 12
[tips] $ ruby -lane 'print $F[0].to_i + $F[1].to_i' a.tmp
3
7
11
15
19
23
[tips] $
361 :
デフォルトの名無しさん :2006/02/22(水) 17:52:49
RDEでスクリプトを実行すると、そのファイルのあるディレクトリで実行されちゃうんだけど、 カレントディレクトリを別の所に指定して編集中スクリプトを実行するにはどうすればいいの。
>>356 listbox.yscrollbar(TkScrollbar.new.pack(:side=>:right, :fill=>:y))
Rubyってやる意味あるの?
むしろやらない意味がない
わかりました、Pythonにします。
オナニーってやる意味あるの?
むしろやらない意味がない
わかりました、フェラにします。
女とやる意味ってあるの?
お、初心者スレのイメージダウン捏造に必死だな
UTF-8で保存したファイルを-Ku付きで実行させたのだけど 文字化けが原因でundefined local variableうんぬんで起こられちゃう。 調べてみるとBOM付きUTFって形式で保存してあったみたいで、 これをUTF-8Nにしたら通ったわけですが、Rubyって こういうもんなんですか?
Rubyに限らず結構そういうもん。
バイトオーダーマークはつけてはいけない。 UTF-8(って何)だとエディタが認識しやすいという理由だけでついてるようなもん。 そのエディタ以外でもその文書を使いまわそうと思ったなら、BOMはつけてはいけない。 んだがWindowsのメモ帳でつくんだよなああああああ
>372 >373 どうもありがとう。すっきりしました。
>んだがWindowsのメモ帳でつくんだよなああああああ そのくせBOMるとvbsがエラーを吐くんだよな
気を利かせてちょこっと避けて通ってくれてもいいじゃんね
ちょ、さすが Windows だなw 久々に笑った
MicrosoftはUnicodeを理解してるのか?
他のどのベンダよりも理解してるだろ。最初の提案グループの一員なんだし。 UTF-8とかを理解してるかどうかは知らん。
今からrubyかpythonを勉強したいのですが どっちか選ぶとしたら やはりrubyの方がおすすめでしょうか?
両方
そらこのスレで聞いたらお勧めになる罠。 出来ることに大差はないんで どっちか選んでしっかり覚えとけ。
ここは、流れからしてあえてPythonだな。
最近また、明ら様な釣りをしてる奴が出没してるから、適当に流しとけよ。
Railsを触ってみたくて、Rubyはじめたんですが みなさんはRubyで何を作ってるんですか? Rails以外の使い道が知りたいです。
>>380 日本人開発の内輪ローカル言語Rubyと
全世界のコミュニティと企業に支持され発展し続けるPythonでは
将来性の点で勝負にならん。何も迷うことはない。
>>385 マジレスすると他の言語じゃなくてこの言語だからできるってのは
今どきのスクリプト言語なら基本的にはない。それは Perl だろうが
Ruby だろうが Python だろうが同じこと。ただ使いたいライブラリが
揃ってるとかアプリにすごく魅力的なものがあるとか、割と日本語の
資料が揃ってるとか、あと書きやすいとか読みやすいとかそういう
理由で選ばれる。個人で使う分には。
仕事の場合は前任者が Perl だったから Perl とか、そんな程度で決まる。
まれに言語のために仕事を変える人が出てくる。そんな感じ。
あと、Ruby 使ってるからって何かを作ってるとは限らないよ。
Pythonよりは日本語資料があるのでRubyにした。 Lispよりは書籍があるのでRubyにした。 Perlよりは…Perlの勉強するとモジュールのへんで眠くなるのでPerl以外を選んだ。 Linuxサーバとか常用してないとスタートダッシュする気起きないだろうなとも思う。
portupgrade にしか Ruby を使っていない (そもそもそれは使っているとは言えない) 俺様が来ましたよ。
portupgrade で Ruby がインスコできればいいのに。
クラスの継承を行ったとき、スーパークラスで使ったインスタンス変数って 継承クラスでは使えない?? スーパークラスでは"@ooo"とかでインスタンス変数を使いたいとするじゃん。 んで、initialize関数で初期化したとするよね。 で、継承クラスで、新たにさらに別のクラス変数を初期化するために initialize内で"@ppp"を初期化したとする。(ここのなかでは@oooは初期化しない) このとき、継承クラス内だとinitialize関数の再定義を行うことになっちゃって、 スーパークラスで初期化した"@ooo"が使えなくなっちゃう訳で。 スーパークラスで初期化するだけで継承クラスの中でも 同様に初期化された同じクラス変数が使いたい場合、 スマートなRubyプログラマならどう解決するんだろう? 初心者かつ、OOP自体不慣れで悪いが、エスパー回答キボンヌ。
>>393 super
ちなみに、「クラス変数」と「インスタンス変数」は別物。
ほんとだー。ミス…orz ここでは {"クラス変数"=>"インスタンス変数"} で読み替えてくださいです。まじゴメン。。
速攻レスありがとう。 なるほど、スーパークラスの同名のメソッド呼び出しするsuper使えばいいのか。 …ふむふむ。ということはー。 class A_super def initialize @value = "test\n" end attr_accessor :value end class B_inheritance < A_super def initialize @arr = [] end attr_accessor :arr end ……どこでsuper使うんだろ…orz やっぱり分からん、再び教えてたもれ。 実はここちょっとリファレンスとか読んでみてもわかんなかったんです。
class B_inheritance < A_super def initialize super @arr = [] end attr_accessor :arr end とか。
initializeをintializeとtypoしてたというのは秘密の方向で。。。 でもお陰で解決したよ。ありがとう。
protected
なんかまるで初心者質問スレッドみたいな流れだな
おお
>>400 よ まじれすされてしまうとはなさけない
> 省略可能な第二引数には File.fnmatch に指定できるフラグと同様のフラグを指定できます。 > このフラグを指定することでマッチの挙動を変更することができます。
glob 一発じゃ無理でしょ。そういうパターンはない。 zsh じゃあるまいし。 entries に FileTest.directory? で reject すればいいんじゃない?
>>404 すいません見落としてました・・・
ただそれ以前に
Dir.glob("c:\\*.*").each{|f|
puts f
}
が動きません・・・
>>406 そういう時は "c:/*.*" にしてみるんだ!
ところで、拡張子つきのファイルしかいらないんじゃなければ、
"c:/*" の方がいいよ。
rescue で Timeout::Error が捕捉できなくてどうしたことだろうと思ったら rescueは Interupt が捕捉出来ない仕様になってて、 TimeoutError は Interupt のサブクラスなのね。 補足するにはどうしたらいいの?教えてエライ人。
409 :
408 :2006/02/24(金) 16:42:59
自己解決しました。 error_typeを省略せずに書けば委員ですね。
pack 文字列の説明で e, E, g, G が機種依存となっているけど、 例を見ると依存してなくないですか?
例の場合には依存してないように見えるだけ。例が悪いのは別の話。
なるほど。 一応調べてみましたが、 [ruby-dev:4327] から [ruby-dev:4599] で eEgG が導入され、 メジャーな環境ではそこそこ互換性があるけど、いまひとつ、って感じでしょうかね。
RSS Parser って Atom には対応してないの?
RSSだしな
ぬう
Rubyでjpegとか、gifとか操作できんもんなのかね。
>>416 つ RAA - Library / Graphics
ふーむ。 できたらPureRubyで画像のリサイズしたいんですが…
なににつかうの?
いやー、もしあればさ、Ruby Readyなcgiサーバーで、 PureRubyの画像掲示板が設置できるじゃん。 それって、なんかいいよなって思ったの。
漏れも16x16のたくさんのビットマップを横方向に連結したい・・・
フォトコラージュでもやるんかな。
>422 WindowsのBMP(DIB)なら何となくコードのイメージは湧く。 作れ言われたら2日くらい掛かりそうだがby毛の生えた素人orz
RMagicかな。
名前からするとImageMagicに依存してそうなもんだけどなー どうなんだろ
って綴り間違ってるからぐぐりにくかったのかな?
Ruby.NETだか.NETへのブリッジライブラリ使うと Bitmapとかいじり放題なのかね。
RMagickはPureRubyではなさげ
PureRubyで画像リサイズとかすごく重そう。
なんでも自力でやりたがるPerlで一般的でないってことは そもそもの処理が重いってことだろうからな
RMatickはImageMagickを含んでいるげ
あーなんか、解決したぽい。オレんとこのホスティングサービスしてくれてるサーバーは、ImageMagickはいってるっぽ。 なるほどね、RubyからImageMagickマニュピレートするのか。 英語ドキュメンテーション読むのめんどいな。明日にしよっと。dクシ。
いや、それ普通だろ。 入ってなかったら入れれば良いんだし。 日記は自分のブログでやるなり、それ系のスレに移ってくれ。
んだな、ありがとん。正直すまんかった。
ImageMagickは、つい「いめーじまじっくく」と読んでしまう・・・
ApolloのListViewで行ごとのフォントの色を変えるには、 どうすればいいんですか?
OwnerDraw
いやちがうべ
5GBの0で埋まったファイルを高速に作るのってどう書けばいいですか?
>>445 UNIX like な環境なら dd を system か何かで呼べば良いだろうけど、他でも
動くように Ruby で書こうとしたら、素直にファイルを開いて書き込むしか
無いんじゃないか。
コレでいけない? Windows とかだとデカすぎてダメかもしれないけど。 File::open("hoge", "w") { |f| f.truncate(5_000_000_000) }
449 :
デフォルトの名無しさん :2006/03/01(水) 05:54:13
Amritaについて質問 ----------------- include Amrita tmpl = TemplateText.new <<END <table> <tr id=tr1> <td id=td1></td> <td id=td2></td> </tr> </table> END data = { :tr1 => [ {:td1=>"1_1", :td2=>"1_2"}, {:td1=>"2_1", :td2=>"2_2"} ] } tmpl.expand(STDOUT, data) ----------------- こんな時に<tr>の属性を条件付で変えていきたい場合は どうすりゃいいの? :trに配列を連想してしまってるのでAmrita::aメソッドが使えないよね?
dirとfileを統一的に削除できないの?
>>450 FileUtils::rm_r, FileUtils::rm_rf あたりはどう?
>>450 Pathname#unlink はどう?
puts "x = " x = gets.to_i puts "y = " y = gets.to_i puts "x + y = ", x + y このようなコードを実行すると、 5 (←入力数値) 5 (←入力数値) x = y = x + y = 10 といった具合に、文字列の出力するタイミングが意図したものにならないんですが・・・。 どうすればいいのでしょうか。
put を print に汁
・puts は出力あとに改行が自動的に差し込まれる。複数の引数を与えると、 引数ごとに末尾に改行を追加する。したがってこういうケースでは print の方が適切 ・getsの前に puts の結果を確実に出力させたければ、 $stdout.flush を差し込むとよい
Process::daemon バックポートされないかなー
多重ループからのbreakしたくなったらdefに切り出してreturnしろって事なのかもしかして
>>458 組み込み関数→catch、throw、raise
それ例外処理なんじゃ… インタプリタのオーバーヘッド全体から見るとそう重くないのかな
例外処理はエラー制御の為だけにあるものじゃないし そもそもcatch、throwに至っては リファレンスに多重ループ脱出の例として載ってる程。 多重ループ脱出だけが目的なら基本的にはcatchかな。
>>461 Ruby の catch, throw は例外処理じゃないぞ
整数を1だけインクリメントするとき、みなさんどうしてるんですか? ++i ができないことに、今日きづきました。 i += 1 と書くの?? ++iができないのはどういう宗教的理由からなのん?
fuck you 散々がいしゅつ ++はやらん
Pythonもできないので、Pythonianにも聞いてみてください
つうか整数をインクリメントすることなんてあんまないだろ
いちいち蒸し返すなと
>>464 ループするならRangeクラスとか。 (0..10) のやつ。あれこんな書き方だっけ?
Rubyを簡単に利用できるDLLとかってないですか? RubyEval(const char *scripts, RubyResult *result) 一個ですむようなの。
471 :
デフォルトの名無しさん :2006/03/03(金) 14:09:09
そこまで簡単(そう)にできるならDLLにまとめておいて欲しかった・・・ とかいっちゃ駄目ですか?
>>472 駄目ではないのですが、言い出しっぺの法則という言葉を御存知でしょうか?
この言葉、凶器だよな
「伽藍とバザール」読んでたら、 「問題を発見する人 と 問題を解決する人 は 別の場合がほとんど」 って書いてあったぞ。 個人的にも、言いだしっぺの法則はあんまりうまく機能しないと思う。
有名アプリに組み込まれたらユーザーベースも拡大しそうだな。
組み込み Ruby ってスレッドセーフなんだっけ?
スレッドがそもそもマルチプロセッサ非対応だったりしてあんまり好きじゃないんだが。
>>475 「言い出しっぺの法則」って、言われた人間が言った
人間に及ばないと思っている場合は「できねーやつは
黙ってろ」にしか聞こえないんだよな
まぁ実際黙ってろの意味で使う人もいるんだろうけど
2ch語みたいなもんかねぇ
身内で使ってる分には微笑ましいって感じ
fj語かと思ってた。
> 言われた人間が言った人間に及ばないと思っている場合は これが、まず無い。
>>476 風博士に組込まれたとかなんとか噂を聞いたけど。
つまり風博士が有名なアプリだと主張したいのか? RGSS の方がまだしもメジャーという気がするなあ。
で、DLLはマダー?
るびまのコード添削をよんでみたんだけど、みんなあんなの書けるようになるの? Cの凄いマクロを見ているような印象を受けたんだけど
>485 つ [msvcrt-ruby18.dll] え? 仰せの通りDLLですが何か? w
488 :
デフォルトの名無しさん :2006/03/05(日) 00:46:55
rubyでE4Xを扱うにはどうしたらいいんでしょうか?
E4X って ECMAScript for XML のこと?
>>489 そう、それです。
どっかのサイトで使えるっぽい記述見たのですが、
ライブラリらしきものも見当たらないので…。
>>486 >みんなあんなの書けるようになるの?
Ruby使い続けて早数年経つけど
向上心がないので最低一人は書けまへんw
もともと簡潔に書けるからそんなに気合入れて
文法やライブラリ駆使して詰め込まなくても便利に使えてるよ。
るびこのコードを見てがっかりした件
>>487 +rb_eval_string_protect()かな。
msvcrt-ruby18.dll のライセンスってどうなるの? GPL? (((( ;゚Д゚)))ガクガクブルブル
ruby windows版には、GPLって書いてあるけど、 LEGALみると、regex.[ch]:だけが、LGPLみたいだなあ・・・
鬼車にすりゃ全て解決?
鬼車は正規表現エンジンだけだろ。RubyそのもののバックエンドがGPLって話。
502 :
500 :2006/03/06(月) 10:56:41
>>501 >>498 を見て、 regex にひきずられたせいで GPL なのかなと思ったんだけど、違う?
503 :
500 :2006/03/06(月) 10:57:29
>>501 というか、「Rubyそのもののバックエンド」ってどういう意味?
Rubyライセンス(?)に従って、msvcrt-ruby18.dllのソースだけ 確保しておけばいいんじゃない?
メソッドのoverloadってないんですか? 単一のdef foo(*arg) で個数、タイプによって分岐?
了解です。 def foo end def foo(arg) end とoverloadを期待して並べてもエラーが出ませんが これはただの再定義なんですね。
510 :
497 :2006/03/06(月) 18:25:09
作者たんに問い合わせたら、msvcrt-ruby18.dll は、GPLだって。 独自ライセンスはグレーという判断でGPLにしたらしい。 DLLだけ使うなら、鬼車使わなくても、自分でコンパイルすれば、 独自ライセンスが適用できるからおkっぽいです。 ちょっと作ってみようかと思います。
511 :
486 :2006/03/06(月) 20:20:09
>>491 便利に使えてるか ちょっと安心した
>>495 Smalltalk読めないんだけど勉強してでも読む価値ある?
内容がわからないんだけどイディオム集かな? 言語指定されてるから
Smalltalk 知らなくても読む価値あると思う。
514 :
497 :2006/03/06(月) 23:23:19
訂正 >独自ライセンスはグレーという判断でGPLにしたらしい。 独自ライセンスは、一部コードでライセンス違反という判断でGPLにしたらしい。
>>512-513 面白そうだな、読んでみる。 サンクス。
今読んでるdRuby本読み終わってからだけど
しかしコード添削がCの難解なマクロっぽいと感じることの解決になるのかな
>>507 個人的には初期値でやる方が好き。
def foo(arg=nil)
if arg then
たびたび世話になってます。 Rubyというより、Unix初心者なのかもしれんが、 Rubyから外部アプリケーションを利用するとき、 io = IO.popen("/usr/bin/hogehoge cmd_option_A cmd_optionB","r") みたいな感じでIOオブジェクト生成して、 外部コマンドからの戻り値はioに書き込まれるものとして扱うという理解でOKなん? もしそれでよかったとしてね、 外部コマンドをコマンドリテラルでRubyスクリプトの文脈中に書いてるものを見つけたんだけどさ、 たとえば上の例でこんな感じ。 io = `/usr/bin/hogehoge cmd_option_A cmd_optionB` 問題なく起動するんだけど、 1.上で扱った場合との違い 2.1.とかぶるけどメリットデメリットは? ってのが疑問なんだけど。 激しく初心者ですまん…
>>517 前者はパイプだから、コマンドが終了していなくても、パイプに書き込まれればそれを読むことができます。
後者はコマンドの出力結果を受け取っているから、コマンドが終了しないとその出力を受け取ることができません。
コマンドの実行が一瞬でおわる場合は後者でまったく問題ありません。
しかしコマンドがずっと起動しっぱなしのようなものの場合、前者でないとその出力を読むことはできないでしょう。
例えばWebサーバのログを見たい場合、前者のほうがおすすめです。後者ならWebサーバが終了しないと出力を受け取れません。
以上です。お役に立ちましたでしょうか。
ノリが違ったかな。 なるほど。ありがとうございます。 つまりこういうことかな 前者はパイプを開くから、パイプを閉じるか、開いたパイプの先のサブプロセスが終了したらサブプロセスが終了するが、 それまでは出力結果がずっとIOオブジェクトに書き込まれる。 後者は、サブプロセスが閉じるのをずっと待つ。それまでは出力結果が受け取れない。 だからメリット・デメリットは、 サブプロセスを監視したいときは、ちゃんとIOオブジェクトを生成するのが吉 サッと書きたいときは、コマンドリテラルでまとめちゃったほうが楽 でいいのかな。
わかってるとは思うけど、 > io = `/usr/bin/hogehoge cmd_option_A cmd_optionB` ここで返ってくるのは IO オブジェクトじゃなくて文字列データね。 なので、 read したり close したりする手間もかからないのもメリットのひとつかな。
うんうん、そうだな、なるほど、ありがとう。
io = `/usr/bin/hogehoge cmd_option_A cmd_optionB` つか、これって IO 関係なくないか?
流れを読もうや
ライブラリの末尾に書いた if $0 == __FILE__ ... end というコードはifが不成立の時、削除されますか?
削除はされないと思うが、評価されない。
メガネははずしたほうがいい。
このメガネの時代に何を言うんだね、きみは
怒るでしかし
やっさんキターー
髪は下ろしたほうがいい。
つまんないからもういいよ
息子が逮捕されていたね
*,?のワイルドカード処理するクラスありますか?
>>536 Dir.glob('*.html') かな。
ファイルのリストではなくStringに対して判定をしたいです。 if Wildcard.match("foo*", "foobar") then ... といった感じで
正規表現使え。
File.fnmatch
定数の違うクラスを生成するクラスはつくれますか? またはクラス変数でもよかったのですが、サブクラスで定義しても、他のサブクラスから参照されちゃうので…
541 1行目の意味が良く解らん 例えばどんな感じ?コード例を出してみて
543 :
541 :2006/03/10(金) 06:22:42
コード例ですか…難しいですね。 Class Base … end
544 :
541 :2006/03/10(金) 06:23:40
すいません、間違って途中投稿しちゃいました。 Class Base … end def
orz なんかJaneの調子わるい。。 class Base … def xx ;end def yy ;end end def Base.zz(zz) … end over=Base.zz(abc) 上のようにすると、変数overに下のクラス(Over)が生成されて、 over.newでしたのOverクラスのインスタンスが生成みたいな 感じです。 class Over < Base Const="abc" end 別に定数にこだわってるわけじゃないんですが、Baseから複数サブクラス をつくりそれぞれで同名かつ別の変数を使いたいのでクラス変数ではだめなので…
546 :
デフォルトの名無しさん :2006/03/10(金) 08:17:08
rubyが「型がない」と言われる意味がわかりません % awk 'BEGIN{a=3;b="3";print a/2,b/2}' 1.5 1.5 % ruby -e "a=3;b='3';puts a/2,b/2" -e:1: undefined method `/' for "3":String (NoMethodError) yadamon% ruby -e "a=3;b='3';puts a/2,b.to_i/2" ~/ruby 1 1 つまり「型がない」ってどういうことなの? ポリモーフしまくればすなわち型がなくなるってことなの?(+メソッドとか) web上で見られる説明があったら教えて
ゴミがついたな。7行目は以下ね % ruby -e "a=3;b='3';puts a/2,b.to_i/2"
単に変数に何でも入れられるってだけで、型がないってのはちょっと違いますよ ruby -e"a = 1; p a; a = 'hoge'; p a"
>>546 「型がない」というか「変数には型がない」けど、
オブジェクト自体には型 (というかクラス) がある。
変数は、オブジェクトのあるアドレスを格納する場所と覚えればいい?
>>545 やりたいことがよくわからないんだが……
要するに定数のオーバーライドがしたい、ということ?
それだけならこう書けばいいと思う
class Base
CONST = 10
def getCONST
return CONST
end
end
class Over < Base
CONST = 500
end
ただし Over.new.getCONST で500ではなく10が返ることに注意
どうしても自然にオーバーライドしたいなら定数ではなくメソッドを使うべき
>>550 そう表現してもいいけど、一般的には「オブジェクトを参照する」っていうんじゃないかな。
C から来たひとは README.EXT.ja あたりを読んでみるのもいいかも。
サブクラスでオーバーライドができて スコープがクラス (とサブクラス) とインスタンス、 なクラス変数が欲しいとしょっちゅう思うのは俺だけじゃないはず。 @@@class_instance_variable な感じで Ruby 3.0 あたりでよろしく。> Matz
555 :
デフォルトの名無しさん :2006/03/10(金) 11:37:23
>>545 インスタンス複数つくりゃいいだけのような気もするが。あとファクトリ作るとか。
とりあえずなんかデザパタ本でも読んでみれば。
なんかそのまんま
ttp://d.hatena.ne.jp/sshi/20051111/p1だな 。
evalでもできるが。
class Base
def Base.zz1(arg)
eval(<<-DEFCLASS)
class Over1 < self
Const="#{arg.to_s}"
end
DEFCLASS
Over1
end
def Base.zz2(arg)
module_eval(<<-DEFCLASS)
class Over2 < self
Const="#{arg.to_s}"
end
DEFCLASS
Over2
end
end
>>545 ぜんぜん意味わからん。やりたいことはこれなんだろうけど、
>別に定数にこだわってるわけじゃないんですが、Baseから複数サブクラス
>をつくりそれぞれで同名かつ別の変数を使いたいのでクラス変数ではだめなので…
クラスインスタンス変数じゃだめなのか?これならサブクラス間で違う値になるし、値はクラスごとに1つなので同じクラスに属するインスタンスなら同じ値を共有できる。
class Parent
@value = nil
def self.value
@value
end
def self.value=(v)
@value = v
end
end
class Child1 < Parent
@value = 'foo'
end
class Child2 < Parent
@value = 'bar'
obj
p Child1.value #=> "foo"
p Child2.value #=> "bar"
またインスタンスメソッドから参照するときは self.class.value とself.class.value= で参照できる。
>>556 みたいにクラスインスタンス変数を使うとして、
これを継承&オーバーライド可能なようにできないかな?
o = find puts o?o:"not found" を↓みたいには書けませんか? puts o??"not found"
違った ○ puts find??"not found"
お望みのものは || 演算子ですか? puts find || "not found"
>>560 まさにそれです。ありがとうございます。
if a or b then
はそういう理屈で動いてたのか・・・
テキストフィルタでなやんでます。 #元テキスト adbasdfasdfa asdfasdfa adfafafdadfaf <AAA> asdfasdfasdf asdfasdfas asdfasdfa </AAA> asdfasdfasd asdfasdfadsfaf asdfadsafa #フィルタ後テキスト adbasdfasdfa asdfasdfa adfafafdadfaf <ol> <li>asdfasdfasdf <li>asdfasdfas <li>asdfasdfa </ol> asdfasdfasd asdfasdfadsfaf asdfadsafa 上のようなフィルタ処理をスマートに書く方法なんですかね。 if文とフラグをつかった汚いのしか思いつきませんorz
if文とフラグで十分のような…。でも書いてみる。 s.gsub(%r|<AAA>\n(.*)</AAA>|m){|e| "<ol>\n" + $~[1].gsub(/^/, "<li>") + "</ol>"}
>>563 そんなの、「if文とフラグ」で悩んでるような初心者がわかるわけないやん。
解説つけるか、初心者でもわかるようなコードにしようや。
input = <<END
adbasdfasdfa
asdfasdfa
adfafafdadfaf
<AAA>
asdfasdfasdf
asdfasdfas
asdfasdfa
</AAA>
asdfasdfasd
asdfasdfadsfaf
asdfadsafa
END
li = ''
input.each_line do |line|
case line
when /^<AAA>$/
puts "<ol>"
li = '<li>'
when /^<¥/AAA>$/
puts "</ol>"
li = ''
else
print li, line
end
end
>563 %r|<AAA>\n(.*?)</AAA>|m じゃないかな。 まあ AAA が入れ子になってたらどっちの方法もだめですが。
irb> puts Dir.glob('/**/*') しまっ カリカリカリカリカリカリ
glob glob /glCb | glQb/ ━ 【名】【C】 (クリーム・泥(どろ)などの)かたまり.
モジュールををあるクラスにMix-inさせたとき、 モジュールメソッドをそのクラス内部から呼び出すにはどうすればいいのん?
>>569 逆になぜ呼びだせないのかよくわからないのだが、オマエがどんな状況を
想定しているのかもう少し詳しく教えていただければ光栄に存じます。
Hoge::Fuga というクラスのメソッドをCで書こうと思って、 rb_define_class("Hoge::Fuga", rb_cObject) と書いてみたんだが、どうも間違っているらしい。 正しくはどうかくの?
>>571 Hoge クラスかモジュールは定義済?
Segmentation faultが起こるのですが、何故ですか(つД`) ruby 1.8.4 (2005-12-24) [i386-mswin32] * xxxx.c void Init_xxxx(){ VALUE cImg = rb_define_class("Img", rb_cObject); rb_define_method(cImg, "test", test, 1); } static VALUE test(VALUE self, VALUE s) { FILE *fp; if (fp = fopen(RSTRING(s)->ptr, "wb")) { fclose(fp); // <- ここでSEGV } return Qtrue; } * test.rb Img.new().test("hogehgoe.txt")
知らんがな(´・ω・`)
>>571 Hogeはクラスで、定義済みです。
わかんないこといっぱいで挫折しそう。
>>575 fugaClass = rb_define_class_under(hogeModule,"Fuga",rb_cObject);
じゃない?あんま詳しくはしらんけど
やべえ自己解決してしまった、くだらない文法上のミスだった。スマソ。
578 :
569 :2006/03/11(土) 18:46:14
>569デス >577の通りデス… (´・ω・) HN書き込む前に途中で送ってしまった…
Net::HTTPResponseって複数行にまたがるHTTPヘッダに対応してないですかね?
580 :
573 :2006/03/11(土) 23:19:25
win32.h の #define fclose(f)rb_w32_fclose(f) #undef fopen #define fopen(p, m)rb_w32_fopen(p, m) をコメントアウトしたら普通に動作するようになったんだけどまずいですかね。
ruby-listをおすすめする。devかも。
win32ヘッダらへんにあったと思うけど、openとかのマクロウザイよなー。 fstreamのopenとかと置き換わって、意味不明なエラーでて悩んだよ。 あんなのあんなところに書くなよと。
せんせいしつもん。 array1.each{|f| puts f } とかでよく見る f って何かの頭文字?
違うと思う 単に短すぎる変数名ってだけかと 普通はそれ File.open( hoge ) { |f| f.puts } って使う例じゃないかな。 Array#each でほんとに f を使ってる とすると、それは相当ダメだと思う
585 :
デフォルトの名無しさん :2006/03/12(日) 09:25:12
中身がfilepathとかfで始まるもの(を期待してる)かもしんないじゃん。 floatのつもりとか。 まあ普通は何かのオブジェクトならx,y,zとか。 インデックスならi,j,k、IO#each_lineだとlとかlineがわかりやすいと思うよ俺は。
ブロックを表すのに do end と { } の2種類あるのはなぜ? 結合度の違いがあるのは知ってるけど、なぜわざわざ2種類用意する必要があったのでしょうか。 個人的には、最初に do end が用意されていたけど、1行で書くときは見づらいから あとから { } も使えるようになったのかなと推測してます。正しい?
>>585 オレはあんまりいい習慣じゃないと思うんだよな。
巷に出回ってる Ruby コードのこの辺の書き方。
まぁ十分にブロックが小さければ見りゃ分かるじゃん
てことなんだろうけどさ。
初心者にはすすめないな。
>>586 >結合度の違いがあるのは知ってるけど、なぜわざわざ2種類用意する必要があったのでしょうか。
結合度が違うから。&&もandがある。
>>583 factor(要素)の頭文字。とにかく配列の要素を枚挙して使用するってことね。
プログラムの説明やテストの時に使われることが時々ある。
それ自体は別にいいんだけど、この手の「マジックキャラクタ」は
入門の文書なんかにも平気で使われることがあるのが問題。
本当は手を抜かずにstrとかlineとかもうちょっと内容に即した
具体的な文字列にするように教育したほうがいいと思う。
「中身には文書の行が入るので line にしておきます」とか啓蒙した解説を見たことがない。
f.puts の f は file handle の f かと思われ。
これもせめて io のほうがいいと思うんだけどなあ。
ウワーシュウキョウロンソウボッパツダーミンナニゲロー
>>586 いつもくっついてくれるのは便利だが
いつもくっつかれるのも不便だから
普通、配列の要素は element だけどね
デフォルトイテレータキボンヌ [1,2,3].each{puts i}
Groovyのitだね。
@_ みたいな「ブロックに渡された内容」を表す組み込み変数1個増やせばいいじゃん
それ、とiterationをかけてあるような何気にうまいネーミングだな
rubygemsのインストールについて質問です。 rubygems-0.8.11.tgz をとってきて tar xzf rubygems-0.8.11.tgz cd rubygems-0.8.11 sudo ruby setup.rb でインストールしました。そのあと sudo gem install -r rake とやって、Rakeがインストールされたんですが、 ruby -e 'require "rake"' とすると -e:1:in `require': no such file to load -- rake (LoadError) というエラーがでてきます。rake --help は問題なく実行できるので、Rakeのインストールは成功していると思います。 で、質問なんですが、 ・rubygemsのインストールは sudo ruby setup.rb だけでいいの? ・rubygemsでインストールしたライブラリをスクリプトから使うには、requireじゃだめなの? の2点です。 環境:fedoracore3, ruby1.8.4 どなたかお助けを。
598 :
597 :2006/03/12(日) 13:52:02
>>597 自己レス。
ruby -r rubygems -e 'require "rake"'
とすればいいみたいです。
・・・が、これだとRakeをsetup.rbでインストールしたときとgem installでインストールしたときとでスクリプトを書き換えなければいけないってことですか?
つまり、rubygemsでインストールされたときはスクリプトに require 'rubygems' を付け加えなければいけないってことになるんでしょうか。
require 'rubygems' # rubygemsでインストールされた場合
require 'rake'
:
:
なんかいやだなあ。みなさんどうされてますか。begin rescue end で囲っちゃうのがいいんでしょうか。
kconvが半角カタカナも全角カタカナに変換してしまうのはどういうポリシーなん?
>>599 ポリシーとかじゃなくて、
NKF モジュールが何も気にせず nkf のデフォルトを採用しちゃったのが敗因だろうね。
nkf -m0 -x -e とかにすべきだったんだろうけど、
後方互換性でいまさら変えれないのではないかと。
nkf は、ネットワーク上で安全に交換できるような文字列に変換する、
というようなポリシーで作られているのに対し、
Kconv には純粋にエンコーディング変換だけが求められていて、
そのへんの齟齬が問題だよね。
ああ、そうだ、 1.9 からはそのへん直して欲しいなあ。
>>599 それに気づいてからはKconvは一切使ってない。非推奨と言われようが代わりにNKFを使う。
変換先の文字セットに半角カタカナが無いならともかく、あるのに変換してくれないのはとても困る。
っていうかしばらく気にせずに使ってたところある日データベースに一切半角カタカナが無いのに気づき、
そのときは一次情報も保存してなかったので再変換したくてもできなくてひとりで大笑い。
まあ掲示板のレスだったからよかったけどにゃ。変な仕様だ。
半角ネタ初めて知った ……書き直そ orz
>598 rubygems は標準で読みにいくサーチパスとは違う独自の場所にインストール するから(管理を容易にするため)、 rubygems 自身を require するなどの手 段を取らないと無理。 実際問題としては、 gem を使ってる環境では gem が入っている前提で書いちゃ うし、 gem を使っていない環境で rake とかは使ったことがないので、とく に気にしたことはないですね。 混在させたいんなら、 LoadError を rescue するしかないと思うけど。
605 :
デフォルトの名無しさん :2006/03/12(日) 16:50:10
RubyGemsが入ってる環境では環境変数にRUBYOPT='-rubygem'とするのが礼儀だと思うが。 gemsで入れたかどうかなんてアプリ側で気にすることじゃない。
文字列の前後のスペースを削除するメソッドないの? " foo bar "[\S(.*\S)?] みたいなの
>>603 結構有名な問題点だと思ったんだけどなあ。
tDiaryが半角カナ対応してないとか、それにまつわるフレーム?とか。
マニュアルのStringとArrayとHashとEnumerableの4つのとこは 絶対に一通り読んでおいたほうがいいな スクリプト考えるときの効率がぜんぜん違う
Ruby始めたころって標準のメソッドの存在を知るだけで データ構造とか自作メソッドの役割とかが思いっきり変わっちゃうことがあるよね。 3メソッド計20行くらいあったものが1メソッド5行で書けたりする。
文字列中の ' を \' に置き換えたいのですが、 gsubを以下のように使うと、 irb(main):021:0> "'aaabbb'".gsub("'","\\'") => "aaabbb'aaabbb" となってしまいます。 何が起こっているのでしょう? で、どうしたら上手く置き換えられるのでしょうか?
ふと思ったんですが、ブロックってオブジェクトじゃないんでしょうか?
「trap::\の影響」へのリンクが目立たないのが原因なのかな? 個人的には sub(pat, rep), sub!(pat, rep), gsub(pat, rep), sub!(pat, rep) は リファレンスマニュアル上で初心者から見つけにくい場所 (隠しリンクとか) にして欲しい。
>613 Procクラスのインスタンスだけど、それがどうした?
edn
620 :
597 :2006/03/12(日) 20:23:05
>>604 ,605
どうもありがとうございます。
RUBYOPT='-rubygems' は知りませんでした。
RubyGemsのREADMEにはそんなこと一言も書いてないよー。
隠しリンクって、正気で言ってるのか? ちゃんと書かれているものを、読まない奴が悪いだけだろ。 つか、まともな人まで大混乱するし、ぜってーアリエネw
いっそのこと、sub と gsub の第2引数を取るパターンは obsolete にしてはどうか
623 :
デフォルトの名無しさん :2006/03/12(日) 20:41:59
RubyGemsって現状あまり初心者向けじゃないよな… 日本語のドキュメントもそんなに数が無いし Windows9x系だとインストールに苦労するし
>>621 > ちゃんと書かれているものを、読まない奴が悪いだけだろ。
そんなことはありません。
これだけ同じ質問が何度も繰り返されているのは読まない奴のせいではないはずです。
隠しリンクはもちろん本気では言ってないですが、
そうしてもらいたいと思うくらい同じ質問が繰り返されていてうんざりしているわけです。
ブロック付きしかなくても誰も困りませんし、
まともな人なら混乱しませんよ。
>>622 「AWKとかで使われてるsub/gsubって便利だよね」って理由だろうからなあ
変換文字列無くしてしまうのはなんかsub/gsubっぽくないっていうか
sub/gsubって名前でなくていいじゃんみたいな
\の問題はよく考えればわかるというか一度ハマれば懲りて避ける(w
まぁ確かに、単純に gsub('aaa', 'bbb') とかするのにブロックをいちいち付けるのはめんどくさいから obsolete にするのは行きすぎかもしれないけど、「第2引数に \ が含まれていたら警告を出す」というのは 悪くない線ではないかと思ったけどどうだろう。
>616 ブロックはつねに Proc クラスのインスタンスなわけじゃないぞ。 yield を使うようなブロック引数は Proc じゃなくて構文要素。
>>626 わかってやってんだよ、って人にはうざいでしょうね。
あと、第2引数がリテラル文字列じゃない場合とか考えるとどうなるんでしょうね?
629 :
ヽ(´ー`)ノ ◆.ogCuANUcE :2006/03/12(日) 22:28:14
>>629 もう一度言います。
これだけ同じ質問が何度も繰り返されているのは読まない奴のせいではないはずです。
たとえば、
>>611 に「あなたはまともな人ではない」と言えますか?
>>630 >>606 のような「マニュアル読めば一発」な質問が頻出していることは何かを示唆していないだろうか
632 :
613 :2006/03/12(日) 22:39:04
>>627 > ブロックはつねに Proc クラスのインスタンスなわけじゃないぞ。
ですよね〜。なんとかブロックをProcにしないで扱えないか、いろいろと
試していたんですが、どうにもエラーの壁に阻まれてできなかったもんですから。
もしや、オブジェクトじゃないんじゃないかなぁ〜と。どうもです。
>>631 いや、それはそれ、これはこれで違うと思いますよ。
sub, gsub については「以前」から同じ質問を数十回は見てきていますし。
>>630 その理論だと何でもそうなるよな。
荒らしも犯罪者も戦争も親の金盗むのもダブルドリブルもな。
その為にgsubに注釈付いてるんだろ?
良い案があるなら編集に参加してみなよ。
>>634 > 良い案があるなら編集に参加してみなよ。
ええと、本当に私が編集に参加して良いと思っていますか?
636 :
611 :2006/03/12(日) 23:03:17
この流れだとまともな人じゃないことになっちゃうのかな。 初心者スレッドって書いてあったので、FAQを聞いても 許してもらえるかと思ったのですが。 612さんどうもありがとう。
>>635 世間を知らなすぎるようだから揉まれてみるのも経験だろう
はっきり言って君の考えは机の上以外では意味をなさない
なんか思ったんだけど、 Rubyのマニュアルかっこわるくね?気のせいかな?
落とし穴があるんだったら、「落とし穴注意」って看板を作るより 落とし穴を埋めた方が健全だと思うけどなぁ
>>636 > この流れだとまともな人じゃないことになっちゃうのかな。
そんなことはないですよ。気にする必要はありません。
同じ罠にはまった大勢のうちの一人でしかありません。
>>639 落とし穴の広さと深さと埋めるために必要なコストを算出して
なおかつコストを負担してくれたならすぐにでも取り掛かると思う
埋められないからこその注意書き
とりあえず注意の部分を赤字にするに一俵
とりあえず注意の部分を先頭にするに一票
subやgsubをRubyが読み込んだ時点で おどろおどろしい音楽つきでどくろマークつきの警告文が表示されるようにすればよい
おきのどくですが じーさぶ1に ばっくすらっしゅがありました おきのどくですが じーさぶ2に ばっくすらっしゅがありました おきのどくですが じーさぶ3に ばっくすらっしゅがありました
patternが文字列の場合はreplace中の置き換えをやめるとか
>632 いや、あなたがどういう状況を想定しているのかわからんけど、メソッド呼出 しにつけられたブロックなら、ふつうにブロック引数で受けることはできると 思うぞ。 def m1 yield() end def m2(&b) b.call() end m1 { puts "in m1" } m2 { puts "in m2" } どっちもやること自体はいっしょ。ただし前者のケースでは、ブロックはオブ ジェクトとしては扱われていないってだけ。 何か誤解してそうなので念のため。それとも、もっと何かややこしい状況?
>>646 新たな落とし穴を作る必要はないだろう。
>>644 どくろマークを表示させるのが難しそうだなぁ。
>>648 いや、そこは逆転の発想だよ。
ありとあらゆるところに穴を掘れば、最終的に穴は穴じゃなくなるだろ?
そろそろスレ移動しようか。
ruby.exe自体のパスをrubyスクリプト内で取得する方法がありましたら教えてください。 要するに,'c;\ruby\bin\ruby.exe' のような文字列を取得したいのです。
ruby -r rbconfig -e "p Config::CONFIG['bindir']" 不満なら、Win32API使ってGetModuleFileNameでも呼んだら。
653 :
651 :2006/03/13(月) 01:58:59
>>652 うまくいきました!ありがとうございます!
初心者です Rubyは赤いのに3倍速くないのは何故ですか?
赤いのに3倍速いというのは事実ではないからです 3倍速いというのはシャアの戦いぶりを見て恐れた者たちの感想であり いくらなんでも実際に3倍の速度で動いたらモビルスーツがもちません
そうなのか。 3倍速く動かしても大丈夫なように作ってあるから赤くしてるのかな〜と思った。 初心者が動かしたら3倍遅くなる、と。
機体を赤く塗っても中の人がニュータイプでない限り意味がない罠 ニュータイプの存在を信じれば、の話ですが。
はいはい、アムロアムロ。 ところで、Mix-Inで質問。 ClassのInheritはまさに継承するから、superで親クラスの同名メソッド呼び出せるけど、 ModuleのMix-Inは単純にそのメソッドをIncludeされたクラスに追加するだけだから、 同名のメソッドがIncludeされたクラスにあったら、IncludeされたModule内部のメソッドは オーバーライドされるしかないってことでおk?
Includeされた、Moduleにあったら、だったな。
>>658 やっぱり super で呼び出せるだろ?
>>658 ancestorsの順に従って、superで親メソッドを呼び出せる。
662 :
デフォルトの名無しさん :2006/03/13(月) 17:25:48
ApolloがLazarusに対応するのはいつごろになるでしょうか?
既に起動しているインタプリの変数(オブジェクト)を、 新たに別に起動したインタプリタから弄ることはできますか?
……dRuby?
binary2.0の技術をつかえば(ry
RDEから,Cygwin版Ruby[/bin/ruby.exe]を呼び出して使用しています。 CygwinはEUCでセットアップしてあります。RDEの文字コードもEUC/LFに設定してあります。 この環境で,以下のスクリプトを実行しました。※ gyokuroは文字列を形態素に分解します。 require 'gyokuro/gyokuro' gyokuro = Gyokuro.new('本日は晴天なり。') puts gyokuro.collect { |morpheme| morpheme.origin_yomi } #=> ['ホンジツ', 'ハ', 'セイテン', 'ナリ', '。'] 結果は,正しく形態素解析されましたが,コンソールウィンドウの出力がはげしく文字化けしてしまいます。 形態素解析はEUCの辞書に基づいて行われているので,正しく分割されているということは コードはEUCでrubyに引き渡され,EUCでgyokuroで処理され,EUCで出力されたのだと思われますが, コンソールウィンドウはそれをSJISとして表示しようとするので,文字化けするのではないかと思われます。 試しにputsする文字列を.tosjisしたら,正しく表示されました。 しかしputsのたびにいちいち.tosjisを置くのはわずらわしく思われます。 コンソールウィンドウの表示だけeucをsjisに変換するようなことはできないでしょうか。
668 :
デフォルトの名無しさん :2006/03/13(月) 23:20:50
すいません質問なのでageます。
コンソールの方を euc-jp で表示するように変更すりゃいいんじゃないか または nkf なり何なりにパイプして出力を変換するとか
poderosaでcygwinにシェル接続
ck
>>669 回答ありがとうございます。
RDEの文字コードの設定ですが,エディタ部分は設定メニューでEUCに変更できるようですが
コンソールウィンドウの部分は,ひととおりメニューを見た限り,設定することはできないようです。
(見落としていましたらすみません)
nkfを介してコンソールウィンドウに出力できるなら,願ったりですが
なにかいい方法がありますでしょうか
>>670 poderosa, ckというのは,確かいずれもcygwinに接続できるターミナルエミュレータというやつですね
後日ためしてみようと思って,ブックマークだけつけておいたのですが,
実のところ私はUNIXの経験がほとんどなく,telnetもろくに使ったことがなかったり
(というかどういうものなのかもあまりよくわかってなかったり)します。
cygwin版のRubyを使う場合は,RDEなどよりもそうしたツールを使う(覚える)べきなのでしょうか。
putsとかの一番根っこのルーチンにコンバータかますとかできそうな気がしないでもないけどやり方は知らん
require 'kconv' module SJIS_OUT def putss(str) puts str.tosjis end end $>.extend(SJIS_OUT) putss "日本語" みたいなのを考えてみようとしたが、うまくいかないねぇ。 $>.putss "日本語" とすればうまくいくんだけどなんでだろう? リファレンスの組み込み関数のputsを見るとこれでよさそうだけど。 (Programing Rubyだと、$>じゃなくてSTDOUTとなってるが、これでも同様)。
逆に、なんでそれでうまくいくと思ったのか知りたい。
>>674 そのやり方だと、putssメソッドがSTDOUTにしか定義されてない
最近の TeraTerm は Cygwin に使えるよ。
680 :
667 :2006/03/14(火) 01:53:20
とりあえず exec "ruby " + ARGV.join(" ").tr("\\", "/") + "| nkf -s" というスクリプトをnkfs.rbとか適当な名前で保存して,これをスクリプト登録で マクロとして使うことによって,出力をsjisに変換してコンソールウィンドウに表示することができました。 でも起動時オプションとかちゃんと引き渡してないから,いろいろ問題が生じるかも。。 あとデバッグするときとかの問題もあるか。 回答してくださったみなさん,ありがとうございました。 今回はRDEからの操作が目的でしたが,どのみち標準のbashの代わりのコンソールは 必要だと思っていたので,教えていただいたものをいろいろためしてみます。
irb が無いと怒られます。。 別途用意する必要があるのですか? $ rpm -qa | grep ruby ruby-libs-1.8.4-1.fc4 ruby-mode-1.8.4-1.fc4 ruby-1.8.4-1.fc4 ruby-devel-1.8.4-1.fc4
682 :
681 :2006/03/14(火) 05:06:55
す、すいません 探したらちゃんとirbのパッケージありました。。 irb-1.8.4-1.fc4.i386.rpm
683 :
658 :2006/03/14(火) 06:56:36
>660-661 なるほど、dクス。
原さんともあろう方があんな質問をするとは。 ruby-lang.org のインストールのページにも書いてるのに。
685 :
デフォルトの名無しさん :2006/03/14(火) 13:44:59
正規表現について質問です "abcd axcd"という文字列があったとして /a.+c/で"abc""axc"とマッチされますが "axc"だけマッチさせたい場合どのように書けばよいでしょうか?
そこで axcを抜き出す条件は何さ
>>685 /a.+c/でマッチするのは "abcd axc" だよ
690 :
674 :2006/03/14(火) 13:54:58
691 :
デフォルトの名無しさん :2006/03/14(火) 13:59:33
返答ありがとうございます わかりづらかったですね。すいません "あああ〜〜〜いいい〜〜〜ううう" #〜〜〜はなんの文字でも良い という文字列を抜き出したいんですが "〜〜〜あああ〜〜〜〜〜〜〜〜〜うううあああ〜〜〜いいい〜〜〜ううう〜〜〜" という場合最初の"あああ"から最後の"ううう"でマッチしてしまうので "あああ"と"ううう"の間に"いいい"がある場合だけ!としたいのです こんな感じなんですが頭悪い説明ですいません・・・
よけいわかりづらい
>>690 > では、「無印」puts の本体に定義するにはどうしたらいいんでしょうか?
自分で「Kernel#puts の説明に」って答え書いてるじゃん。
Kernel に定義するんだよ。
/ああああ[^う]*いいい[^う]*ううう/ こうしたいのか? あと後ろが選ばれるためにもひとつ条件いるが
>>691 一発でマッチしなきゃならんのかい?
2段階に分けて処理することもできるんだけど
696 :
674 :2006/03/14(火) 14:04:59
orz。昨日も試したはずなのに、寝惚けてたみたいです。 require 'kconv' module Kernel def putss(str) puts str.tosjis end end
def puts(str) super str.tosjis end とかはあえてしないか
>>694 >>695 マッチできれば何段階でも構わないのですが何分初心者なもので
いまいち使い方がピンとこないのです
こういうことができるんだろうなとは思うのですけど・・・
というわけでここまでヒントをいただければ後は自分でできると思います!
ありがとうございました!
さすがに副作用がでかそう
どーいう時に明示的にKernelモヂュールを指定する必要があるのか いまいちわからん
701 :
674 :2006/03/14(火) 14:22:55
>>691 str="〜〜〜あああ〜〜〜〜〜〜〜〜〜うううあああ〜〜〜いいい〜〜〜ううう〜〜〜"
str.match(/.*(あああ.*いいい.*ううう)/)
puts $1 # "あああ〜〜〜いいい〜〜〜ううう"
>>701 それだと
あああ〜ううう〜いいい〜ううう
も拾う。まあ元質問者の意図がわからないからなんとも言えないが
>>698 初心者だから分けることをオススメするんだがな
複雑な正規表現にいきなり挑戦せずに簡単なこと
だけを組み合わせて処理する方が分かりやすいだろ?
リファレンスマニュアルの case の説明の else の部分が恐ろしく貧弱だな。 あと、リファレンスマニュアルのトップページで、「目次」を上の方にしてくれないかなぁ。 一旦、スクロールするのが面倒だよ。
705 :
デフォルトの名無しさん :2006/03/14(火) 16:37:58
むしろどうマッチしてほしいか、なんていうピンポイントな話じゃなくて 何をするための処理なのか具体的に書いてくれるとそもそももっとマシな方法があったかもしれず。
俺なら「〜〜〜〜ううう」で区切って配列にしてから中身を考えると思う 確かに目的を教えてもらったほうがいいな
まあ質問者の意図は、最長一致の原則を回避するにはどう書けばいいか、だろうけどな
>>704 自分でTOPページつくればどう? Ruby使って静的にでも動的にでも。
>>707 たぶんね。
.+? と (?=) を使えばたいていなんとかなる。
/a.+?c/でいいんでないの?
【積年の】旦那にしてる密かな仕返し【恨みじゃー】
http://human5.2ch.net/test/read.cgi/ms/1141694640/ 8 名前:可愛い奥様[] 投稿日:2006/03/07(火) 11:05:23 ID:8dtluKkp
夫の歯ブラシで洗面所の排水溝掃除。
洗面所をビショビショに汚した罰だ。
20 名前:可愛い奥様[age] 投稿日:2006/03/08(水) 00:40:17 ID:pRrk6A21
前に頭きた時あって
1度だけ歯ブラシで肛門カキカキしちゃった
22 名前:可愛い奥様[] 投稿日:2006/03/08(水) 01:27:12 ID:gU5mHc7J
よかった。どこのお宅も同じようなことしてて。
24 名前:可愛い奥様[] 投稿日:2006/03/08(水) 01:36:35 ID:SSSFsTqE
そうそう、ヘンなモノはダンナのお皿へ直行だよね。
41 名前:可愛い奥様[] 投稿日:2006/03/08(水) 11:55:18 ID:sjj+/60Q
見てるだけで気が晴れるな!
皆さん、頑張ってね!
42 名前:可愛い奥様[sage] 投稿日:2006/03/08(水) 20:33:51 ID:Ju2N1s7+
年金分割が楽しみじゃのう
63 名前:可愛い奥様[] 投稿日:2006/03/10(金) 08:55:20 ID:qLfJYpJR
家族で密かにはぶっている。
男性は肉体が汚く、精神が美しい傾向がある。(気に入らない相手に肉体的攻撃を加える⇒精神的攻撃も加える男は猛者)
女は肉体が美しく、精神が汚い傾向がある。(気に入らない相手に精神的攻撃を加える⇒肉体的攻撃も加える女は猛者)
女は隠れて悪事をする。気に入らない女子を便所でボコったり、便器舐めさせたり、男の友人を使ってレイプ、仲間外れにしたり。陰口、嫉妬。
女は対人関係において、この汚い性格を隠そうとするため、外面が非常によくなる。(猫かぶり)
男性諸君は外面に騙されないように気を付けて下さい。
>>710 それだと先の "abc" にマッチしちゃうからダメっていう話ではないかと。
scan(/a.+?c/)[1]
/#{str}/といった具合に文字列を正規表現に変換する時、 strの中に大文字が含まれない時だけ//iを付けたいんだけど、 \[WSDAZBG]とかみたいなメタキャラを誤認しないように どうしたらいい判定ができるでしょうか。
>>714 こんな感じでどう?
re = Regexp::compile(Regexp::escape(str), !/[[:upper:]]/.match(str))
str = "\\Abc"の場合には/\Abc/i
str = "Abc"の場合には/Abc/
としたいのです。
>>716 すいません、違うようです。
>>717 間違ってんのは、あんたの日本語だと思うが。
Regexp::compile(str, str.include?("\\"))
多分 "\\ABC" は /\\ABC/ になって欲しいんだろう
外人か?日本語おかしいんだけど。
もう誰の日本語を疑ってるのかすらワケワカ
確実に、それは私でないということです。
>>717 無理せずそのまま書けば?
if str=="\\Abc"
/\Abc/i
elsif str=="Abc"
/Abc/
end
724 :
723 :2006/03/15(水) 00:11:50
ゴメンナサイワタシバカデシタ
何言ってるんだか理解できてないけど、 Regexp.escape(string[,kcode]) Regexp.quote(string[,kcode]) あたりが質問者が欲しい回答なんでないの?
エスパーがいっぱい
エスパーじゃないよ。 ツンデレだよ。
728 :
デフォルトの名無しさん :2006/03/15(水) 09:22:03
ツンデレエスパー幼女 なんだ魔美くんか
どうしてもendもう一個入れないと駄目? for i in 1..10 if i == 5 begin puts "i==5" rescue puts $! end end
for i in 1..10 if i == 5 begin puts "i==5" rescue puts $! end end
if のブロックはbeginで始まらない。(省略可能な)thenからendまで。 begin〜endは、例外処理をするためのブロックを新規に作ってるってこと。
>>729 その例なら単に
puts "i==5"
でいいじゃないか。
ポカーン
>>732 ここまで的外れなレスは久しぶりに見たな。
Rubyを勉強しようかと思ってるんだが インストーラはどれが良いのか分からん(´A`) とりあえず何でも良いのかな? OSはWinXPSP2
おれの経験からすると、windowsはwin32版が一般的。 unixぽい環境で使いたい人はcygwin版を使ってる。
740 :
739 :2006/03/15(水) 15:47:23
うーむ。無駄に混乱させるか。
>>738 のActiveScriptRubyで全く問題ないよ。
736の知識次第だと思うんだが、雰囲気的にASRがいい気がする。
混乱が象徴的だな
だな。いかにも UNIX 発 OSS って感じでイイ!
2chのWindowsユーザー向けの導入周りの情報まとめたいんだけど どっかいいWikiはないものか。出来ればPukiwikiで。
>>737-741 ありがとう
ASRをインストールする事に決めた(ムービーあるし)
まさかインストーラ選びで躓くとは思ってなかったよ・・・orz
>>741 まったくの素人さんでつ
これからガンガリマスヨ(`・ω・´)
>>744 「できればPukiwikiで」って言いいつつ他のWikiを探すのはなぜ?
それはともかく、FreeStyleWiki等の方がいいのではないだろうか
Pukiwikiの文法はrdと同じくらいかそれ以上に取っつきにくい……と思う
個人的にはWifkyとかHikiとかRevisionistWikiとかオススメ
特にHikiにはRubyソースコードを色つきで表示してくれる機能がある
できれば本家のインストールのページに反映させて欲しいような。
そこでMoinMoinうわなにをするやめ(ry
>>746 pukiwiki の文法がとっつきにくく感じるのはたぶん
ヘルプや整形ルールのページがあまりにうざいからではないか?
>>744 2chのレスをコピペしただけの「マトメ」は読みづらいし検査されないしすぐ時代おくれだから。もうやめて。
ニャー速のVIPまとめみたいにブログに書いてろよ。それよりWikiBooksに書いたほうが役に立つ。
ないよりあった方が良いでないかい? 747の言う通りになるのがベストだとは思うが。
反映すればいいんじゃねえの?
過去ログが保存されるだけでもありがたい。
バージョンを "$Version ほげほげ$"みたいに書くのはなんでですか?
CVSのマニュアル嫁
むしろRCSかと。
>>46 はさっさとワンライナ、$を使わない
>>35 の回答を早く提出するように。
758 :
755 :2006/03/15(水) 23:58:33
わかりました。さんきゅーです
ActiveScriptRubyは外部ツール(Chasenとか)使うのがめんどいと聞いてCygwinにした しかしCygwinでDartsやChasenやRuby/ChasenやGyokuroを入れる方がはるかにめんどかったという罠 ASRでもWin32API経由でChasen使えるしな
その前のレンタル日記サイトでも探せよ
Darts ってこれのことか?
http://chasen.org/~taku/software/darts/ 普通に configure && make && make install するだけだったが
# 不要なので DESTDIR で別の場所にインストールして、速攻で捨てたけど
もし足りないものがあっても、cygwin なら簡単にネットインスコで入るだろ。
ChaSen とやらは、Wiki に、ソースからのインストールが丁寧に説明されてるじゃん。
INSTALL や README もあれば、configure --help もちゃんと書かれてるし。
他は面倒なので調べてないが、どう見ても、単に Linux の流儀を知らないだけ。
あれで文句を言ったら、作った人が可哀想過ぎだ。
オプソをいじって勉強したいならUnix使えよ。Debianとかパッケージング豊富だし。 WinでやるならせめてCoLinuxじゃないと。
cygwin はものによってうまくいったりいかなかったり するんで、単に使いたいだけならバイナリのないものには 手を出さない方がいいよ。あれは Linux 知らない人が雰囲気を 味わうためか、仕方なく Windows を使っている人のためにある
二つのPath文字列を与えて相対パスを求める スマートな解法がありませんでしょうか カレント aaa/bbb/ccc/ddd.txt ターゲット aaa/www/zzz/yyy.txt 相対パス ../../www/zzz/yyy.txt なんにもアイデアがうかびませんorz
標準のライブラリでやるとこうか。 require 'pathname' a = Pathname.new('aaa/bbb/ccc/ddd.txt') b = Pathname.new('aaa/www/zzz/yyy.txt') puts b.relative_path_from(a.parent) 本スレでも Pathname の話題が出てたが、確かに記述性が悪いなw
Pathname も使えるね。 require "pathname" Pathname::new("aaa/www/zzz/yyy.txt").relative_path_from Pathname::new("aaa/bbb/ccc/ddd.txt")
すまん、かぶった。
>>769 relative_path_from の引数はディレクトリなので、それだと
../../../www/zzz/yyy.txt になるようだ。
ありゃ、ホンマや。重ね重ねスマソ。
>>765 current = "aaa/bbb/ccc/ddd.txt"
target = "aaa/www/zzz/yyy.txt"
relative = [current.reverse.split(/\//), "\003", target.split(/\//)].flatten.join("/").sub(/(.*)\003\1/, "/\003/").gsub(/[^\/]*\/(?=.*\003)/, '../\1').sub(/\/..\/\003/, '')
773 :
765 :2006/03/16(木) 18:34:39
まずった。試しもせんで書いたらあかんな。 relative = [current.split(/\//).reverse, "\003", target.split(/\//)].flatten.join("/").sub(/(.*)\003\1/, "/\003/").gsub(/[^\/]*\/(?=.*\003)/, '../\1').sub(/\/..\/\003/, '')
orz
Path.relative(base,target) にすればいいがなもう
Pathname オブジェクトって文字列みたいに扱えるのな。 良く分からないから、なんか不思議だ。
Pathnameってとても便利でいいんだけれど
PStore等の引数に与えると正しく扱われないことや
Ruby1.8以上でないと使えないのが割と困る
あとString#to_pathがないのは不自然だと思った
>>776 772-773のことを言ってるのなら、それはPathnameじゃないよ
Pathnameオブジェクトを文字列のように扱うことはできない
Pathname.new('./test.txt').split #=> エラー
Pathname.new('./test.txt').to_s.split #=> ['./test.txt']
PStore の引数に使えないのは、+ 演算子が String と挙動が違うからか。 + の挙動は String に合わせて、/ とかをこの動作にした方がいいと思うけど。 今は、必要なところでは適宜 String にする方がいいかな。 puts Pathname.new('foo/bar') + '.txt' # => "foo/bar/.txt" puts 'foo/bar' + '.txt' # => "foo/bar.txt" class Pathname alias append_child + def + (other) return self.to_s + other end def / (other) return self.append_child(other) end end puts Pathname.new('foo/bar') + '.txt' # => "foo/bar.txt" puts Pathname.new('foo/bar') / '.txt' # => "foo/bar/.txt"
あ、Pathname の中で + 使ってるから、迂闊に挙動変えちゃ駄目だな(´・ω・`) スマソ
queueってないんですか? Queueって普通のデータ構造として使っていい物?
Array がまんま queue として使えない?
ArrayってFIFOが速くなるような工夫があるの?
783 :
781 :2006/03/17(金) 11:07:27
あ、そんな速いのが要るのか。すまん。
日本語が文字化けして出ねぇ(´A`) ぐぐったら先頭行に#! ruby -KsとつければOKと書いてある。 #! ruby -Ks puts 'だめぽ' puts 'orz' って事だよね?日本語だけ化ける(´ω`) WinXP、ASR1.8.4.0で作業してます 低レベルな質問すまん
>>782 ないけど十分な早さは出るはず
それでも速度が欲しいなら、自分で拡張ライブラリを書くしかない
>>784 それは shebang で起動する場合にしか有効じゃないと思う
sjis で書いているなら起動を ruby -Ks script.rb にしる
> それは shebang で起動する場合にしか有効じゃないと思う んなこたあない。
>>784 それであってる。786は無視してよろしい。
ただ文字化けと言われても。 どう設定してどう入力したらどう表示されたの
>>784 スクリプトの文字コードが Unicode ってことはないよね?
791 :
784 :2006/03/17(金) 13:29:09
>>786-790 ありがとん
>>790 の言う通り文字コードをUTF8からSJISにしたら直りました・・・
ごめんなさい(ノд`)
どっかの記事を勘違いして
日本語=UTF8で保存するもんだと思ってました・・・orz
おさわがせしました
base = "c:/windows/" path = "./data/text.txt" pt = Pathname.new(base) + path puts pt, pt.cleanpath base = "c:\\windows\\" path = ".\\data\\text.txt" pt = Pathname.new(base) + path puts pt, pt.cleanpath なんじゃこりゃー c:/windows/./data/text.txt c:/windows/data/text.txt c:\windows\/.\data\text.txt c:\windows\/.\data\text.txt
そんなん File.join 使えよ。そのためのものだろ。 base = "c:/windows/" path = "./data/text.txt" p File.join(base,path) "c:/windows/./data/text.txt" …あれ?
>>793 リファレンスマニュアルくらい見れ。ちゃんと仕様通りに動いとるやろ。
>>792 DOSISH 対応ってもそこまであまねく対応してるわけじゃないんでしょ。
"/" で我慢すりゃええやん。
>>793-794 「相対パスやドット混じりの文字列でも綺麗なパスに組み立ててくれる」という類の
面倒を引き受けてくれる便利メソッドであろうという期待はあるな、確かに。
まさかほぼ機械的にjoinしてるだけだとはお天道様も気づくめえ。
マニュアル通りだけどな
Dir.globって内部でリスト作ってからイテレータが動き出すみたいで profile取るとこんな感じでとても遅い。 time seconds seconds calls ms/call ms/call name 42.24 13.91 13.91 20503 0.68 2.54 Array#each 17.38 19.64 5.73 1 5726.00 32937.00 Dir#glob もっと高速なファイルリスト列挙クラスないですか?
動き出してからは速いんじゃない? Find とか Pathname#find あたりとか。
それ、ボトルネックはリストを作るところじゃなくてマッチするファイルを探 索するところじゃないの。内部にリストを作らずにインクリメンタルに実行す ることはできるけど、それで高速化するわけではないよ。 たとえば Dir#each や Find.find なんかを使えば、内部のリストを構成せず にイテレータを使える。だがおれの手元の環境では Dir#each の方が遅かった。
/ をトラバースしたいとかだと、リスト作る時点でメモリがスワップして遅くなる、 なんてのはありそうだけどなー。
Find.find使ったらそこそこ速くなりました。 今度はKernel.catch(throw/catchの事か)が浮上してきましたが。 これフラグ等をやりくりして取っ払うと速くなりますかね。 % cumulative self self total time seconds seconds calls ms/call ms/call name 23.09 12.65 12.65 26691 0.47 2.69 Array#each 19.64 23.41 10.76 13345 0.81 3.96 Kernel.catch 13.31 30.71 7.29 2045 3.57 5.05 Dir#each
えーっと、ちょっと検索したけどよーわからん…orz 今ruby 1.8.4で、cgiで受け取ったフォームフィールドのデータとかに、 半角カタカナが含まれた場合、どう扱われるのん?
どんなCGIかによる
送信元のフォームの HTML がどういうのか (文字コードとか) とかも詳しく。 そして、 WebProg 板へ。
dクス。誘導されます。そんな板あったんだね。気づかなかったわ。
ポカーン。WebProg板にRubyプログラミング関連スレが見当たらないんだが…
前はなんかあったけど堕ちたのか
げ、ホントだ。すまんかった。
携帯電話は例外なくshift_jisでフォームを送ってくるとかいうのは見つけたんだが…。 cgiが動的に生成したhtmlは、charset:euc-jp formから送信されたデータをcgiオブジェクトから取得したとき、 たとえばtextareaに半角カタカナが入力された場合、それを取得するとどうなるんだろう? が質問。 これで、ちゃんとした質問になってるのかな。
そのまま入ってるよ。 それをどうするかは自由
>>808 いやいやむしろこちらこそ神速レスありがd
>>810 するってーと、eucjpで半角カタカナってこと?
フォームデータを何でエンコードするかはWebブラウザ依存なんじゃないかな
>>812 送られるときのは<FORM enctype="なんとか">の仕事で基本はURLエンコード。
URLエンコードされる前の文字コードは決まってないと思われ。たぶんブラウザ依存。
デコード後の文字列から推測するしかないんじゃないかな。
で、SJISの半角カナとEUCの漢字の区別がつかないんだよね
>>763 Windowsってあれか、cygwin動かすのに必要なやつ?
Rubyとwin32oleを利用して、シェルエクステンションを作りたいのですが やり方がよく分かりません。 クラスIDだのCOMインターフェースだのの話は少しずつ理解してきたんですが 機能を呼び出すことはできても、機能を追加することができない状態です。 どなたかご教授をお願いします……。 あるいは、もしかするとRubyのみを使ったシェルエクステンション作成は不可能?
TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
>>817 ググって一個目のを見たけどRubyだけじゃ無理だな。
要はあるインタフェースを持ったDLLを作らなきゃいかんので、Rubyだけでは当面無理。
C++とMFCでやるのが普通な気がする。
なんでMFC?ふつーはATLっしょ。
テキストファイルをパースするライブラリってありますか?
racc
例えばこのようなクラスがあったとする。 Class Hoge def initialize @hoge = 0 end def one @hoge = 1 end end これのテストを書くのはどうやればいいの? hoge = Hoge.new hoge,oneを実行すると、インスタンス変数の@hogeが1になるけど、 それを確認する為のテストを記述するのは 別のクラス(class HogeTest < Test::Unit::TestCase)だよね?
値が取得できないってことは、それはテストするに値しない項目なんじゃないの?
>値が取得できないってことは、それはテストするに値しない項目なんじゃないの? んなこたない。 けど、Rubyでprotected/privateなテスト項目は書けない書かないというのはFAQ
830 :
826 :2006/03/19(日) 18:49:43
>>829 テストしたい事柄はpublicにしろって事?
FAQという位だから、どこか詳しい説明でもある?
値返せばいいと思うんだけど
>>826 instance_evalつかえばok
p hoge.instance_eval('@hoge') #=> 1
あるいは、テストのときだけアクセッサを追加してやるとか。
require 'test/unit'
class Hoge
attr_accessor :hoge
end
class HogeTest < Test::Unit::TestCase
def test
hoge = Hoge.new; hoge.one
assert_equal(1, hoge.hoge)
end
end
unit test は外から見てどう振舞うかをチェックするための物だから、
外から見えないものをチェックする必要はない、という立場も納得できる。
そうでないと、
>>826 の例だとデータ構造を変えるようなリファクタリングする時に
テストまで書き換えなきゃいけないし本末転倒じゃ? みたいにね。
それはさておき、
>>826 の one() をテストしたいなら、
instance_eval でインスタンス変数を覗けばいいんじゃまいか。
>>829 > Rubyでprotected/privateなテスト項目は書けない書かないというのはFAQ
Ruby に限った話じゃないよね。
C で check 使ってテスト書くけど、泣く泣く static 外しとります・・・
>>829 >Rubyでprotected/privateなテスト項目は書けない書かないというのはFAQ
そんなうそを書かないでください。おねがいします。
Rubyはなんでも動的なので、protected/privateなメソッドも実行時にpublicに返ることができます。
これをつかえば、テストスクリプト中でだけメソッドをpublicにしてやることができ、テストも問題なく実行できます。
class Hoge
public :foo # fooメソッドをpublicにする
end
>>826 はインスタンス変数にアクセスする場合だからpublic/protected/privateとはあんまし関係ないけど。
せんせー! 可視性によって動作が変わるようなメソッドだったらどうするんですか!?
テスト中に違うクラスになったら、本来テストしたいクラスはやっぱりテストできないんじゃ……?
ヒント __send__
>>836 可視性が影響するテストが終わった後に public にすれば良いのではなかろうか。
>>828 exerbのコアはコンパイルしましたか?
841 :
828 :2006/03/20(月) 02:52:25
>>840 いえ,普通に exerb-3.3.1.tar.gz から setup.rb でインストールしただけです。
exerbのコアが 1.8.2 で,実行環境が 1.8.4 だから問題が生じているのでしょうか。
ということは,exerbの 1.8.4 コアを作れば解決する可能性があるわけですね。
そのコンパイル手法がまとめてあるサイトなどがありましたらご紹介ください m(__)m
842 :
828 :2006/03/20(月) 02:55:44
追記:MinGW や Visual Studio 2005 は持っています。
>>836 >せんせー! 可視性によって動作が変わるようなメソッドだったらどうするんですか!?
どんなメソッドだよ。まったく思い浮かばないから例をあげてみてくれ。
つか、なんでこんなありそうもないものを持ち出すのかね。そこまでして自分が正しいと主張したいのか。
毎日が春休み
冷静な私も気になるから、どんな例が挙げてみてくれ給へ。無論、有用そうなものをね。
Ruby初心者スレッドPart4:846: parser error, unexpected 挙げて
せめて隔離スレに移動する気はないのかね
そもそもここが隔離スレ。
YARVというものでRubyの処理速度が上がるという記事を見たのですが これはどういう仕組みでRubyを高速化するのでしょうか。 一応ググってみたのですが、私にはYARVのHPに書かれている内容が理解できませんでした。 コンパイラーという単語が出てきたのでRubyのプログラムを機械語に置き換えて高速化するのかなと思ったのですが… 将来的にRubyの処理速度がC言語に近づくということなのか非常に気になります。
>>851 もう少し、何が理解できなかったのか、どういう仕組みか知るためにどんな努力ができるのか具体的に。
どういう説明をすればあなたが満足するのか、あいまいで見えないです。
今日もまた Hash#mergeとHash#updateを まちがえた
>>851 インタプリタによる実行と仮想マシンによる実行の違いから入って、
仮想マシンの高速化技術について学んでから読み直してみれば?
>>851 高速化の理屈は俺もよくわかっていないが
とりあえず「Rubyのプログラムを機械語に置き換えて高速化する」わけではない。
なぜかというと、そもそもruby自体が
スクリプトを読み込むときに内部表現へとコンパイルしているから。
YARVではそのrubyの内部表現を、さらに別のYARV特有の内部表現へと
コンパイルしている、というだけ。
あんま詳しくないので、突っ込みなどあればお願いします>他の方
よーするに1.xとは別設計別実装のRuby処理系でしょ。 既存の処理系のどこをどう高速化したとかいう話じゃないと。
今のrubyは、スクリプトを内部表現にするといっても、構造的にはほとんど元の ソースコードのまま、言い方をかえれば抽象度が高い状態で保持するが、 YARVはもっと細かいレベルまで分解し、仮想機械の機械語に変換する。 そのままだと大して速くならないが、ある程度は最適化を施すので、一度変換された 命令は元のrubyよりは高速に実行できる(ことが多い)。
いやいや、仮想機械の機械語に変換するだけ、で速くなるよ。 逆にそのある程度は最適化施す、ということをやっても大して速くはならないよ。 最適化施すいうても、動的なRubyではやれることは少ないから。
859 :
851 :2006/03/21(火) 23:43:25
>>852 プログラム初心者なので、Rubyの基本的な用語や使い方を少し知っている程度です。
YARVに書かれていることが理解できないというより
理解する気になれなかったので、基礎学習をある程度終わらせてからリトライしようと考えています。
ただ、素人の私がプログラムを学んで感じたRubyの弱点は処理速度なので
それが改善される可能性があるなら魅力的な話だと思い、概略だけでも知りたいと思ったので質問しました。
YARVによってRubyが
○どういう原理で
○どれほど高速になるのか
それが知りたかったのです。
860 :
852 :2006/03/21(火) 23:54:47
>>859 >ただ、素人の私がプログラムを学んで感じたRubyの弱点は処理速度なので
素人のあなたが他のどの言語と較べて、どういう処理に関して感じたのですか?
○どういう原理で
残念ながら、自称「初心者」「素人」には理解不能でしょう。
○どれほど高速になるのか
処理によりますが、数倍〜数十倍のオーダーと思われます。
さらにそんな乱暴な概論だけで言うなら、処理によっては遅くなることもありえます。
(っていうのは実装に依存するという意味なので、YARVに関したことじゃないけど。)
初心者スレでこんなこというのもなんだけどw,「初心者です」でぐぐれ
>>851
> いやいや、仮想機械の機械語に変換するだけ、で速くなるよ。 なんでなの? 今の Ruby だって、当然、機械語に翻訳してるよね。 VM 用の機械語だと、何で速くなるのか分からないなぁ。
>>858 は
>>857 に対して「いやいや」と言ってるのかと思ったんだけど……
wikipedia を読むに、Ruby は単純な実装なので遅いということ?
どーも処理が遅いとおもったらRubyだけで仮想メモリ600MB使ってたぜコノヤロー
>>862 今のRubyは機械語に翻訳しているわけではないよ。
スクリプトを解釈して逐次実行している。
で、最適化もなしに、仮想機械の機械語に変換するだけで、
そんなに速くなるとは思えないんだけど、どうなんだろう?
>>851 YARVで高速になる理由は主に3つあります。
・木構造をやめて命令(バイトコード)の配列にすること・・・
現在のRubyは、プログラムを内部で木構造に変換し、木構造をたどりながら実行します。
YARVは、その木構造を(簡単にいえば)命令の配列に変換して実行します。
基本的には、木構造をたどるよりは配列にアクセスするほうが速いので、YARVのほうが高速になります。
・バイトコードにすると高速化のテクニックを流用できること・・・
C言語などのコンパイラで研究された高速化のための細かなテクニックが、バイトコードインタプリタにも流用できます。
詳しくはコンパイラの本を買って「最適化」に関する章を読んでください。
・CPUのネイティブコードに変換する機能をもっていること・・・
JITやAOTコンパイラを使うことで、Rubyのプログラムの一部をネイティブコードに変換しているようです。
YARVでどこまで実現しているかはよくしらないけど、JVMはJITでかなーり高速化されました。
YARV(というかバイトコードインタプリタ)にして速くなる理由は主にこの3つです。特に前2つは重要。詳しくは、中の人のプレゼン資料を読むとよいでしょう。
http://www.atdot.net/yarv/youth_2004_sasada_final.ppt ただ、Rubyは最適化しにくい(高速化することをほとんど考慮されていない)言語なので、YARVにしたところでPHPやPythonより速くなるかどうかは微妙です。
ベンチマークではかなり高速化されたという結果がでてますが、それがWebアプリなどでもそのまま反映されるとは限りません。
Rubyを使うなら、ほかの言語との速度比較でもんもんするより、「自分にとって必要な速度(受け入れられる速さ)でうごけばそれでよい」と割り切ることをおすすめします。
個人的には、YARVがネイティブスレッド対応らしいので、高速化よりもそっちのほうに期待です。
あと、1プロセスで複数インスタンスが作成できるようになるようなので、Webアプリではこっちのほうがうれしいと思います。でもCGI環境じゃ使えません。残念。
以上です。お役に立てれば。
> ・CPUのネイティブコードに変換する機能をもっていること・・・ ほんと?
>>868 プレゼン資料32ページ目から引用
>AOTコンパイラ
>・RubyプログラムをCプログラムに変換
>・命令記述を変換して貼つけ(テキスト処理)
>・ほぼすべての命令に対応
現在のYARVがどこまでやっているかはしらん
流れをぶった切ってすみませんが,質問です。 input = '\x95\xB6\x8E\x9A\x97\xF1' # Shift-JISでの"文字列"に相当 print unescape(input) # => 文字列 という,unescape という関数を作りたいのですが,今は def unescape(input) eval("\"#{input}\"") end として使っています。 しかし,これでは,evalを使っているため, unescape('"; print "hoge"; "') などとすれば,任意のコードが実行できてしまいます。 もっと安全な代替法があれば教えて下さい。
iconvかnkfかjcodeかkconvあたり
>>870 こんなのはさすがに直球過ぎるか・・・
def unescape(input)
input.gsub(/\\(?:x([0-9A-Fa-f]{2})|(.))/) { ($1) ? [$1].pack("H2") : $2 }
end
質問です。 引数の数が違う同名のメソッドは定義できますか? できないのであれば、どのように実装したらスマートですかね。 引数のかずでcase文とかしかおもいつかないのですが…
876 :
870 :2006/03/22(水) 19:47:32
>>872 なるほど,メタ文字の解釈を自前で実装してしまうわけですね。
ありがとうございました。
>>873 こういうのはどうよ、とRuby初心者が提案してみるテスト。
def overload(args, pattern)
if pattern.kind_of? Integer
return if args.length != pattern
elsif pattern.kind_of? Array
return if args.length != pattern.length
pattern.each_index do |i|
return if !args[i].kind_of? pattern[i]
end
else
raise ArgumentError, "pattern = Integer | Array"
end
yield *args
end
def hoge(*args)
overload args, [Integer, Integer] do |x,y|
return x + y
end
overload args, [String, String] do |x,y|
return x.to_i + y.to_i
end
overload args, 3 do |x,y,z|
return x + y + z
end
end
pathnameとかもそうだけどその手の便利ラッパーは 高速化が必要になると真っ先に削らなきゃならなくなることが多いので なんとなく敬遠してしまう。 使い分けるのは脳がもったいないし。
便利ラッパーを削ってできる高速化なんぞ焼け石に水。 ラッパーの実装が相当まずいなら別だけど。 ……というのが LL way だと思う。
>>879 pathnameが気になるほど速度を要求するのなら
拡張ライブラリpathname.soを実装するのが正解だと思う
1000回くらいpathnameを呼ぶプログラムなのかもしれないじゃないかー
883 :
851 :2006/03/22(水) 23:49:00
>>860 ,861
自分の位置付けを明確にしたほうが良いと思ったので
あえて「初心者」と使ったのですが、余計な言葉だったようですね。
それはともかく、返信ありがとうございました。
2D画像の高速描画を試した時に、Rubyの処理速度に対して不満を感じたのですが
実際に他の言語と比較したわけではありません。
あるいは、インタプリタ言語がスクリプトをその都度解釈して実行している、という解説が
私に「Rubyは遅い」という印象を持たせているのかもしれません。
>>867 返信ありがとうございます。リンク先のプレゼン資料も全て見ました。
ほとんど全ての単語を調べながら見ることになったのですが、YARVを理解する良いキッカケができました。
Ruby関連の書籍には意識が向いていたのですが、これからはコンパイラの書籍にも意識を向けようと思います。
「自分にとって必要な速度(受け入れられる速さ)でうごけばそれでよい」
という言葉にモヤモヤが晴れた気がします。本当にありがとうございました。
Singletonってextendじゃなくてinlcudeして利用するんだな extendのが正しいんじゃないかと思うんだけどどうなってんの
exerbを使って、スクリプトをexeファイルに変換して実行するとき このexeファイルの存在するディレクトリパスを 確実に得る方法ってありますか? (例:c:\ruby\test.exeを実行した場合、カレントディレクトリに関わらずc:\ruby\を得る) exeファイルと同じ場所にあるファイルをオープンするようにしたいのですが……
Exerb 使ったことが無いから知らないが、Dir.pwd では取れないの?
>883 わかってるかもしれないけど、 Ruby も含めて最近のスクリプト言語はプログ ラムをその都度解釈実行してるわけじゃないよ。
>>883 一般に動画処理やゲームの様なリアルタイムの処理が要求される分野では
Ruby含むスクリプト言語は向かない事が多い。
適材適所。高速処理なら素直にコンパイラ使った方が良いよん。
Array#delete_if って破壊的なんだな。 Array#reject は無いし。ちょっと、混乱した。 ひょっとして、結構グダグダだったりする? コピーとってから処理するのが定石なのだろうか。
enum.map{|x| x.some_method}.max を、map で新しい配列を作らずにやる方法はありますか? 1.9 だと enum.max_by{|x| x.some_method}.some_method と出来るみたいですが、 DRY に反するので出来れば避けたいです。
>>891 inject を使ってゴニョゴニョやれば出来るけど、おとなしく map を使うのがいいと思う。
>>891 max = 0
enum.each{|e| v = e.some_method; max = v if max < v}
enum.each_with_index {|e,i| v = e.some_method; max = v if i == 0 || max < v; max }
enum.inject(0) {|max,e| max < (v = e.some_method) ? max = v : max }
あんまり簡単にはできないみたいだな。
Enumerableに自分でメソッドを追加したほうがいいかもね。
>>890 > Array#reject は無いし。
あるよ。
正確には Enumerable#reject だけどな。
みんな ri とか ReFe とか irb の help とか使わんのかね?
なんかキモイ アピールが足りない どっちか、あるいは両方が理由じゃないか? 使われないのは
いや、名前がまずそう(食べものに見えない)からだと思う。
おいしそうな名前をよろしく!
>>896 いろいろあってどれを使えばよいのかわからん。
どれが良いの?
あとインストール方法教えて。
902 :
885 :2006/03/23(木) 15:26:46
>>886 Dir.pwdで取得できるのはカレントディレクトリなので
別の場所から実行した場合にうまくいかないのです
>>889 ありがとうございました!
というか、doc/class.ja.rdに書いてあったんですねorz
>>896 「コマンドラインが苦手」
「WindowsにはHTML版リファレンスがあるから」も追加で
>>884 >Singletonってextendじゃなくてinlcudeして利用するんだな
>extendのが正しいんじゃないかと思うんだけどどうなってんの
たしかに。singleton.rbはクラスメソッドを追加するようになっているから、includeよりextendのほうが自然だ。
まあ module_eval とか駆使すれば include でもクラスメソッドを追加できるとは思うけど、なんか直感的じゃないな。
すみませんが、https接続関係での書き方を教えてください
ログインするページ → ログイン情報入力 → 会員メニューが表示
(フォーム)
この会員メニューを取得したいのですが、どんなコードを書いたら良いのでしょうか。
たとえば
require 'net/http'
include Net
hobj =
HTTP::new (ログインするアドレス)
hobj.start
hobj.post('form.asp', 'userid=xxxx')
hobj.post('form.asp', 'pass=yyyy')
とやればよいのか、その後のページ変移はどうフォローすればよいのかサッパリで。
参考となるコードとか何かありました教えてください。
>>902 HTML Help って使いにくいと思う
タブブラウザみたいに使えないし
>>904 君の質問内容はhttpsと全然関係ない。
君の書いてるコードはそもそもhttpsになってない。
POSTの仕方もおそらく間違ってるが、そんな調子ではそもそもPOSTでいいのかどうかも信用できない。
サーバ側でどうセッションを管理するのかわからないから与えられた情報だけでは回答できない。
こんなところか。
とりあえず、ログインページの仕様を明確に説明するとか、セッションがどう管理されるのかを説明するとか、何がどうhttpsなのか説明するとか、そのあたりからだね。
>>906 勉強不足という事ですね、まぁその通りなんですが。
やりたい事は
フォームにuserid,passwordを入力して、変移した画面を取得したい、
とそれだけなんです。
ですが、ネットワーク関係はさっぱりなのでどんな所から勉強したらよいのか
という基本そのものからわかってないのが現状ですorz
>>907 まずは「HTTP」から自力で勉強しよう。基本がわかってないなら基本から。
まだRuby系スレに質問するレベルでないことは確かだ。
とりあえず、require するファイルが参考になる
>>907 Rubyの本でなおかつCGIを取り扱ってるものを読むべき
参考にするなら Ruby で書かれた RSS リーダなんてのが よいんじゃまいか あるのかどうか知らんが
>>826 late replyだけど、privateなインスタンス変数を参照するには、Object#instance_variable_get というのが使えるよ。
以下、マニュアルから引用:
------------------------------------
instance_variable_get(var)
ruby 1.8 feature
オブジェクトのインスタンス変数の値を取得して返します。
var にはインスタンス変数名を文字列か Symbol で指定しま す。
インスタンス変数が定義されていなければ nil を返します。
class Foo
def initialize
@foo = 1
end
end
obj = Foo.new
p obj.instance_variable_get("@foo") # => 1
p obj.instance_variable_get(:@foo) # => 1
p obj.instance_variable_get(:@bar) # => nil
http-access2使えば少しは楽じゃないかな cookieの実装に難ありだけど
pem作るの面倒だから結局OpenSSL::SSL::VERIFY_NONEでほげほげlきdjf;あぇいj
require 'http-access2'
client = HTTPAccess2::Client.new(nil, 'UserAgent')
client.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE
res = client.get('
http://foobar.com/ ')
p res.header
puts res.content
res = client.post('
https://foobar.hoge/login.hoge ', {'id'=> 'foo', 'pass' => 'bar'})
>>913 904>>の質問内容はhttpsと全然関係ない。
>>910 和書ならほぼ2冊しかないような。そんな限定しなければもっといい本もあるだろう。
>>911 意味わかんね。なぜにRSSリーダ?
しかし、標準のインストール状態でhttps使おうと思うと、1.8.2以降になるのかな?
サーバ側が親切な実装ならセッションとの関連づけはURLにセッションキーを付けて送ってくるとかして可能な限り保ってくれると思うが。 というか、認証してすぐの1画面が欲しいだけなら、単純にURLにパラメタひっつけて送信すれば次の画面の内容までは返してくれるだろう。 その先を取りに行くのにはCookieとかは欲しいだろうけど、とりあえずそうではないんだろ?
foo.rbの先頭の設定部分を切り出して foo.cfgってファイルにして require "foo.cfg" ってやるとそんなファイルねーって怒られるんだけど .rb, .so以外は指定できないんですか? require "foocfg.rb" なら問題ないみたいですが。
>918 できない。 rb や so でない独自のファイルを読み込むときは load を使うのが普通。
require は .rb .so 以外は認めない仕様。 設定ファイルの読み込みだけなら load 使ったら良いかも。 requireと違って、拡張子の自動補完もしないし 同じファイルでも無条件に読み込む。 扱いにはちょっとだけ注意が必要かもね。 …ただ、設定ファイルを開発者以外が触る場合は ちゃんと設定ファイル読み込みの処理を書くべき。 Ruby プログラムとして解釈出来るなら文字通り何でも実行出来てしまうからね。
>>918 どちらかといえばfoocfg.rbにリネームすることをオススメしたい
Rubyスクリプトであるということがはっきりするし
>>922 それだと、ライブラリとしてのrubyスクリプトと、設定ファイルとしてのrubyスクリプトがごっちゃになってしまう。
だからfoo.cfgにしたんだと思う。PHPだと.php以外の拡張子にするのはよくやってるしね。
とはいってもrubyとPHPでは仕様が違うので、ここはあきらめて foo.cfg.rb に一票。
foo_config.rb がいいな
open して eval が、いやなら YAML にしちゃうかな、今なら 速度が気になるなら YAML を読んで Marshal#dump タイムスタンプを比較して YAML が更新されてたら そっちを読む こんな感じか
.foo.rb
RDEみたいに大掛かりなのじゃなくて Winでデバッガに特化したGUIデバッガない?
>>927 ない。コマンドラインでdebug.rb使うか、RDEのデバッガ機能だけを使う。
RDEは大掛かりっていうほど大掛かりじゃないと思うけどなー。Eclipseなんかと比べると。
>>927 同意
RDEなんてまさに大掛かりじゃないGUIデバッガが欲しい人のためのツールのように思われる
debugger.rbに、GDBと互換の外向きのインターフェースがあればいいのに。
if cond ... end Ruby って cond が false や nil 以外は true として処理するんですね。 気になる人って結構居そうな気がする。
何をいまさら。
boolでtrue, false, nilの三値もてるとか気持ち悪かったりするけど それはそれである意味合理的だし郷に入ってはで慣れるしかない。
>>935 nil は bool じゃないと思うが。
boolってなんだ?
即レス会場はここですか?
939 :
デフォルトの名無しさん :2006/03/24(金) 22:43:50
>>937 今後のために一時的に蓄えておくこと、
もしくは遊戯や競技のために大量の水をためておく構造物のことです
>どういう仕様だったらいいと思う? 初心者スレでいちいちこんなレスつけるなよ。
942 :
デフォルトの名無しさん :2006/03/25(土) 00:30:36
>>940 たぶん933は、0とか""とかも偽として扱って欲しいんだろう
俺は今の実装のほうが良いと思うが
>>942 俺は0が偽の方がしっくりくるな
今の実装はどの辺が利点なの?
利点っていうか、0 は Numeric なんだから false と等価になるわけない的な何か
945 :
933 :2006/03/25(土) 01:32:28
>>940 うろ覚えですが、C# や Python だと bool しか受け付けなかったような?
個人的な意見ですが、そちらの方式の方が明瞭でで、
Ruby の方式は便利だけど Perl に近くて少し見通しが悪いかなと感じました。
余談ですが、「プログラミング C#」の P256に以下の様な記述があります。
> C# 言語設計者たちは、あいまいなコードが仕様されることを防止すると共に、
> if ステートメントの基本原則を尊守しようとしていることがわかります。
946 :
933 :2006/03/25(土) 01:39:11
そういえば、matz って lisper でしたっけ? non-nil 的な嗜好かな。まぁ、どっちでも良いか。
1は1がある -1は-1がある 0は0がある もちろん0も偽にはならない ってことだよね? いいのかな
Cは0に意味を持たせすぎた。 CがそうだからRubyも倣えという主張があるなら それには首肯しかねるな。
>948 >945-946を見る限り、933はむしろboolean原理主義者に見えるが。 (論理値が期待されるところにはtrueかfalseか、そのいずれか帰着される式以外あってはならない)
Rubyの源流はPerlなんだけど、 元のPerlが0や"0"を偽として扱うことによっていろんな弊害を産んでいたから、 Rubyではfalse,nil以外偽と扱わないようになったんだと覚えてる。 例えばwhile($dest = $src){ .... みたいな制御構文で、 $srcが何かのタイミングで"0"になったらいきなりループ抜けてしまったり、とか。
よくあるいちゃもんとその答えとして早くまとめるんだ
>>951 Perlでも "0" は偽じゃないよ。と、突っ込んでみる。
C:\> perl -e "print '0'?'true':'false'" false
955 :
940 :2006/03/25(土) 11:57:28
>>945 Rubyは、厳密さよりも簡潔さを優先しているから、boolean以外のものも受け付けるようになっている。そっちのほうが簡潔に書けるからね。
あとは慣れの問題じゃないかな。Rubyの仕様に慣れると、if文の条件式にいちいち obj != null とかつけるのがすげー面倒くさく感じるようになる。
Perlだと0や""も偽として扱うようになってるけど、これはちょっと困るよね。C言語はアセンブラみたいなもんだから0を偽とする仕様はわかるけど(ほかに偽となるような適当な値がないので)。
あと「条件式は必ずboolean」という仕様だと、
obj = obj1 || obj2 || obj3
tmpdir = ENV['TEMP'] || ENV['TMP'] || '/tmp'
という記述ができなくなるので、おれ的には反対。
>>941 おもしろくないっていわれたからって、つっかかってくんなよ
>>955 初心者スレだと予想される答もありきたりでおもしろくなさそうだろうからじゃないか?
Perl の真偽値の仕様は、あれはあれで便利なんだけどな。 defined() を使わないといけないところで忘れるというミスを誘発しやすいが。
んでRubyはちょうどよいと
んだな。 obj ||= "defaultvalue" みたいな記述が便利だ
>>959 PHPでそれやって真偽値になってショボーンってなった。
||= はPerlから
Perl でそれやると 0 が上書きされて(´・ω・`)ショボーン
perl の defined-or (//=) ってまだつかえんのか。
>>963 どんな機能なのだろう。
便利であってもへんてこな文法なら導入にはちょっと〜。
>>963 nil と false を区別したいときなんてほとんど無いからなあ。
>>963 5.8.x でも patch 当てたら使えるけど、基本的には Perl6 の機能だからね。
Ruby は Object#nil? あるから要らんよね。
>>964 || や or は真偽値のチェックをするけど、dor(defined-or) 演算子は
undef (Ruby だと nil) かどうかをチェックする。// と err だな。
$n = some_op() or 5; # some_op() が偽を返したら 5 を代入
$n = some_op() err 5; # some_op() が undef を返したら 5 を代入
上の最後のは Ruby だとどう書くんだろう。こうかな? foo = defined?(bar()) ? bar() : 5 ?で終る述語を三項演算子に使うとなんかカッコワルイ...
n = (v = some_op()).nil? ? 5 : v うーん、素直に二行に書いた方が良さそうだな。 まぁ何でも一行に詰め込むような言語でもないし、いいんじゃね? n = some_op() n = 5 if n.nil?
その場合なら n = (v = some_op()) ||= 5
右辺で初出のローカル変数は NameError だから、 一般的には defined? でテストしないといけない気がしたのだな。
そろそろ次スレの準備だけど、なんか書いておくことある? 個人的には、リンク先とかは2以降に書いて、1には質問するときの諸注意とか、スレのローカルルールみたいなのを書いた方がいいと思う。 あと初心者スレなんで、既出の質問とか似たような質問もOKとしてあげたい。たとえ回答が「XXを読め」だけだとしても。だめかな?
>>971 > あと初心者スレなんで、既出の質問とか似たような質問もOKとしてあげたい。
せめてスレ内検索くらいはして欲しいと思うのだが、そこまで甘やかす必要、ある?
と思ったが、まあどうでもいいや。 とりあえず、テンプレよろ。
テンプレ 初心者そっちのけで毎度毎度のループ議論に突入禁止
話は変わるが今日の夕食はうどのテンプラのようだ
>>973 いいんじゃない?気が向いたやつが「
>>999 をよめ」とか回答するだけで。
テンプレ、PHP質問スレを参考にしてみた。
---
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは2以降。Ruby on Railsの質問はWebProg板のRailsスレで。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・ぐぐる
・マニュアルで探す
http://www.ruby-lang.org/ja/man/ ・FAQを読む
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(なるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
>977
> 「
>>999 をよめ」
p res[999] # => "埋め\n"
「Ruby hotlinks 五月雨版」 リンク切れてるな。
そういやどっかDATとかとってるとこは無いの? 検索してるとときどきアンカーのマウスオーバーで2ちゃんブラウザみたいに ポップアップが出てくる javascript が仕込んである過去ログサイトもあったりする ああいうのがないと過去ログ探しにくいかもね
にくちゃんねるにある程度残ってない?
985 :
977 :2006/03/27(月) 04:41:13
986 :
977 :2006/03/27(月) 05:21:55
Q. どうしてRubyは〜がないの? A. Python使いましょう。
Q. RubyはRailsなしでも動きますか?
A. Railsなしでは(稟議が通らずプロジェクトが)動きません。
えっ? Rails and/or Ruby業務で使ってるところあるの?
毎日仕事でRubyばっか。今日もRubyUnitで単体テスト書かなくっちゃ。
RubyUnit … くっ。釣られんぞー。
むしろ「RailsはRubyなしで動きますか?」だろう
phpであきれたけどな。 strpos()だったか文字列検索で、見つかったら文字の位置を返すんだが、 先頭で見つかって0番目の位置返してくると、if文で偽となるんで難儀した。 見つからなかったときのFALSEと区別つかん・・・ 結局、php4で追加された === が使えるようになるまで、いちいち回避してた。
>>996 元ネタは ruby-talk:186016
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。