Thread.new乙
Rubyの会のサイトはIEで表示がおかしくなる貴重なサイトだな
スレ統合するんじゃなかったっけ
無職なんですがRuby覚えたらご飯食べれるようになりますか?
>>6 可能性がわずかにはあるかも。開発にRubyを使う案件って稀みたいです。
C++など他の言語で開発する際に、支援ツールをさくっと作るには便利ですよ。
私もそれでかなり重宝してます。
こっちはこっちで需要あるから
別に統合しなくても良いと思うよ
同感。
前スレも3ヶ月で1スレ消費程度に需要があったし。
……MW 祭りやらスクリプト爆撃の影響が、かなりある気がするけど。
>>10 MW版Rubyの進捗状況が気になって同氏のWikiを拝見しようと思ったら、
サーバが落ちてました...。一時的なダウンなのかな?
割と頻繁に落ちてますね。
なお、進捗なんてないのでいちいち見る必要はなさそうです。
13 :
デフォルトの名無しさん:05/02/09 20:44:56
本人が落ちてます。
だから 2ch のカキコが止まったのか。
長文ですみませんが、教えてください。
文字列を外からあたえて、それに応じてインスタンスを
作成する方法に関してです。以下では、簡単のために、
ClassAと ClassB の二つにして説明します。
class ClassA
def initialize
end
def out
puts 'AAAA'
end
end
class ClassB
def initialize
end
def out
puts 'BBBB'
end
end
(1)引数で ClassA もしくは ClassB という文字列を与えて、
二つを使いわけることを考えます。
もちろん、場合分けして明示的に書けば可能です。
(次の記事に続きます)
(2)しかし、場合分けせずに、そのままやろうとすれば、
以下のようにeval を使うことになります。
(ここももっと良い方法があれば教えてください。)
str = ARGV.shift # 引数として ClassA を与える
eval('x = ' + str +'.new')
eval('x.out' ) # << ==== (*)
(3) 質問は(*)の行に関してですが、
(Q1) evalを使わないとエラーになるのは何故でしょうか。
(Q2) x を使った作業が以下に延々と続くとした場合、
逐一evalを使用するのがうっとおしい。
何か回避策があるでしょうか。
以上です。よろしくお願いします。
おお、ありがとうございました。助かりました。
結城さんのデザインパターン本(Javaによる)を読みながら
rubyに引きなおして考えています。そのなかでの疑問でした。
教えていただいたスレッドによると、FAQのようですが、
かずひこさんもすぐには思い付かなかった様子ですので、
サンデープログラマとしてはちょっと安心もしてます。<grin>
勉強になりました、感謝します。
(Q1)の関係でbindingというのも知りました。
>>17 クラス名があらかじめ列挙できるなら
hash = { "ClassA" => ClassA, "ClassB" => ClassB, }
klass = hash[ARGV.shift]
obj = klass.new if klass
クラス名があらかじめわからない場合は、この方法は使えないけど。
Ruby製2chブラウザのエンジン部分ってない?
Windows だと MySQL/Ruby も Ruby/MySQL も
/tmp/mysql.sock がなくて経由できなくて使えないのだが、そういうものなの?
>>24 ありがとん。
つか、普通に 127.0.0.1 で逝けたのね orz
ちゃんと設定すれば hostname でも可能なのかもしれない。
Ruby/MySQL の方は MySQL の方のバージョンが高くて駄目ぽ。
あとは地道におぼえていこう......
'Ruby' -> ['Ru', 'ub', 'by']
みたいに String を bigram に分割したいのですが、
どう書くのが普通なんでしょうか。
下のメソッドみたいな1文字ずつに分割しといて後で2つくっつける方法よりも、
2文字マッチさせて1文字ずらす方法の方が効率よさそうに思うのですが
うまくコードが書けません。
def bigram(str)
prev = nil
str.scan(/./).inject([]) do |result,ch|
result << prev+ch if prev
prev = ch
result
end
end
s="ruby"
(0..(s.size-2)).collect{|i| s[i..i+1]}
#=> ["ru", "ub", "by"]
s="るびぃ"
下のコードだと、"."や".."がディレクトリということで、
「File.openできません」と言われます。ensureではだめなの
でしょうか?
dir = Dir.open(".")
begin
dir.collect{|f| [f]}.each do |fname|
begin
file = File.open(@dir + fname, "w")
while line = file.gets
print line
end
file.close
rescue
file.close
raise
end
end
ensure
dir.close
end
通常ファイルだけ open すれば。
Dir.foreach('.') do |fname|
next unless FileTest::file?(|fname|)
fp = File.open(@dir + |fname|, "w")
...
end
ミスった。
Dir.foreach('.') do |fname|
next unless FileTest::file?(fname)
fp = File.open(@dir + fname, "w")
...
end
Dir.entries(".").select{ |fname| /^\.{1,2}$/ !~ fname }
33 :
デフォルトの名無しさん:05/02/27 09:35:41
初心者です。
a[1,2,3,4]
a[1,0] = 6
a == [1,6,2,3,4]
最後の評価がtrueにならないのはなぜですか?
a = [1,2,3,4]
の誤りですた
>>30-32 ありがとうございます。nextとFileTestを組み合わせるのが、
私には理解しやすかったです。(まつもとさんのruby本では、
FileTestの記述が少ないですね。)
obj.eql?をオーバーライドして呼び出すと以下の警告が出てしまいます。
parenthrsize argument(s) for future version.
理由がよくわかりません・・・
>>33 何がしたいのか分からんが
a = [1,2,3,4]
a[1,0] = 6
p a
>>36 将来問題が出る可能性のある書き方をしているから。
というか、実際のコードを出さない理由がよくわかりません・・・
関数の引数を括弧で括るとか
>>38 失礼しますた。
class Point
attr_reader :x,:y
def initialize(x,y)
@x = x
@y = y
end
def eql? other
self.class == other.class and
@x == other.x and
@y == other.y
end
end
p1 = Point.new(1,1)
p2 = Point.new(2,3)
p1.eql? p2 # 警告
p1.eql?(p2)
>>40 をコピペしても警告出ないんだけど、それはともかく
括弧の省略が重なった時に出るんじゃないの?
$ ruby -e 'p p 0, 1'
-e:1: warning: parenthesize argument(s) for future version
0
1
nil
p(p(0,1)) なのか p(p(0),1) なのか曖昧なので、
(今のところ前者と解釈してるけど)今後はこの書き方はやめようね、と。
>>43 puts p1.eql? p2
とやってました。
puts(p1.eql?,p2)とputs p1.eql?(p2)
が近い将来曖昧になりえるということですね。
どうもありがとうございました。
SJISの文字コードのテキストファイルの中身を全てコンソールに表示する
プログラムを書く場合エンコードの指定とかってできますか?
1行目を #!/usr/bin/ruby -Ks
もしくは $KCODE = 's' を指定する
で、駄目?
>>44 > puts(p1.eql?,p2)とputs p1.eql?(p2)
> が近い将来曖昧になりえるということですね。
もともと曖昧なので「これからはそういう書き方はヤメロ」といわれてるのだよ。
>>45 SJISの文字コードのテキストファイルの中身を全てSJISの文字コードのコンソー
ルに表示するだけなら、エンコードの指定って関係ないはずだが。
IO.foreach("inputfile"){|line| print line}
write(File.read("inputfile")) でいいじゃん。
良いのか?
print なら解るが。
>>52 違いっていうか、 Kernel#write ってそもそもあったっけ?
>>52 ソースを確認してないけど、
print, puts, putc, << ここら辺は内部で write が呼ばれてるんだっけ?
でも、
>>45 で「コンソールに表示する」と書かれてるから、
>>49 のままでは使えないと思っただけ。
$stdout.write(File.read("inputfile")) なら解る。
ズレたこと言ったのならゴメンよ。
print LF->CRLFに変換される
write 変換なし
改行コードの変換はbinmode次第であって、メソッドによって変わるわけではない。
で、正解は?
IO.foreach("inputfile"){|line| print line}
IO.foreach("inputfile", &method(:print))
$stdout.write(File.read("inputfile"))
STDOUT.print nil
STDOUT.write nil
とか。あとprintは$_、$,、$\を使う、戻り値がprint => nil、write => 出力できたバイト数、とか。
宿便が出てすっきりした気分
つまりwriteイラネってこと?
open("inputfile"){|f| $>.write(f.read(1048575)) until f.eof?}
C言語のi++はRubyではどう書くの?
i+=1
i = i.succ
なんでInteger#succ!がないんだろ
Fixnumがmutableだから
>>66 1.succ!ってやったら1==2になっちゃうなんてのはイヤだろ?
Fixnum が immutable な Ruby があったなら、こんな FAQ が発生することはなかった?
X Fixnumがmutableだから
O Fixnumがimmutableだから
X Fixnum が immutable な Ruby
O Fixnum が mutable な Ruby
つられて間違ってしまった・・・orz
mutableかどうかじゃなくてsingletonの話だって言ってるだろ!!!
バカか。mutableの話だ。
Cで1++ってやったら1==2なんのか?あ?
バカか。mutableかどうかじゃなくて即値かどうかの話だって言ってるだろ!!!
もうすっかり春らしくなってきたな
>>65 アリガd
i.succ!って書いてしまった100万人目の初心者でした
77 :
デフォルトの名無しさん:05/03/09 06:25:27
p "『".gsub!('a','A')
がうちの環境ではnilになるのですがどうしてですか。
コードはEUCです。
gsub! は破壊的に変更し、変更がなかったら nil を返します。
str = "『"
p str.gsub!('a','A') #=> nil
p str #=> "『"
str = "abc"
p str.gsub!('a','A') #=> "Abc"
p str #=> "Abc"
対して gsub は、変更した文字列を返し(変更されなかったらコピー)、
元の文字列はそのままです。
str = "『"
p str.gsub('a','A') #=> "『"
p str #=> "『"
str = "abc"
p str.gsub('a','A') #=> "Abc"
p str #=> "abc"
素早い回答、ありがとうございます。
やってみたら、本当ですね。
!のあるなしでかなり違うのですね。
初心者バレバレです。精進します。
それが人に教えを請う態度かアアン?
仮に漏れがバカだとしてバカでも知っている常識すら知らないことを威張るなよ低能が。
>>79 !が末尾についているメソッドは、ついていないメソッドと同等の効果があっ
て自身を変更する。戻り値については nil だったりいろいろ。
なので、戻り値は考えないで自分自身を書換える場合は gsub! などを使い、
自分自身を書換えずに戻り値を使いたい場合は gsub を使う、とかいう風に使
いわけるといいよ。
といっても、文法的に決まってたりとかいう事ではぜんぜんないので、そのメ
ソッドが自分自身を本当に破壊的に変更するかどうかはあらかじめ確認しとい
た方がいい(Array#rejectあたりが典型例)。
質問です。
>>1 のページのチュートリアルは何故あんなにセンスが悪いんすか?
foo! は foo とくらべてより破壊的。
だからといって foo が破壊的でないとは限らない。
もう単なる一山幾らの煽りになっちゃってるな。
喋れば喋るほど知能の低下を如実に現してる。
こーいうのが偉そうに喋ってたのかよw
相手してた奴が恥ずかしいなw
ある説が「間違っている」というのは、その説の結論が正しくないということではありません。
その説が結論に至る過程が正しくないということです。
ですから、結論を肯定することも否定することもその説が正しいかどうかの検証にはなりません。
理論というものは例で補強されるものではなく理屈で補強されるものです。
例などはなくても考え方の筋道が通っていれば正しいのですし、
逆にいくら例があっても筋道の通っていない考え方は間違いなのです。
なお誤解のないように付け加えておきますが、「例を示す」というのは筋道の通った考え方の一つです。
例を示さなくていいとか例を示してはいけないというわけではありません。
例を示しさえすればいいというのが間違いなのです。
>>86 完璧に同意。
そして理論というものはトップダウンにかくと分かりやすいものなのだが、
その理論の入り口にいる時にはトップダウンに抵抗を感じるもの。
そのことがマニュアルやチュートリアルをかくことを難しくしているのだと思う。
こういう時は「目的」や「例」などをふんだんに使いながら低い所から登って行くしかない。
やっぱRuby使うやつって特に変なの多いな。
目糞鼻糞を哂うとはこのことだな
String.inspect の挙動が最近変更になったせいで、以下のようなスクリプト
が動かなくなったんですが、良い解決策ありませんか?
「erb使え」ちゅうのは無しで。
str = '"a" = #{a}'
s = "12"
puts eval( str.inspect )
以前の結果、"a" = 12
現在の結果、"a" = #{a}
>>90 s="12" は、a="12" の間違いです。
>>90-91 puts eval(str.inspect.gsub(/\\(?=#[$@{])/n, ''))
inspectとevalはできるかぎり逆変換になることが期待されるので、
今のほうが本来意図された動作。
ごめん、nオプションはナシ。
>>92 いや、inspectにはそんなことは期待されてない。
evalしたいならString#dumpを使うのが正しい。
それ以外は92の言ってる通り。
dumpはStringくらいしかないじゃん。
>>94 でも inspect にそんなことを期待している人は意外と多い罠。
97 :
baka:05/03/11 22:43:31
TeX2pageで作られたHTMLファイルから元のTeXソースを作りたいのですが、
そんなことできるソフトなさそうなので自分でちゃっちゃっとスクリプト書こうと思っています。
といってもあまりノウハウがないので、なにか参考になるページあったら教えてください。
TeX2pageのソース。
で、Rubyはどの程度書けるわけ?
小泉首相が感動するぐらい書けるけどそれが何?
逆に聞くけど、お前はどの程度なわけ?
100 :
baka:05/03/12 00:01:08
Rubyはあまり描けないっす。ってかTeX2pageってCで書かれてますよね?
汎用的なのだと難しいから、ひとまず今変換したいやつだけ変換できれば良いので。
ちょっとRAAを覗いてみます。Rubyコミュニティってなんとなく感じ悪い…
ソース読まないんだったら、簡単な.のを吐かせてから個別の結果を
調べるのがよいとおもわれ。
>>103 またそういう感じの悪いことを言うんだからもう。
105 :
デフォルトの名無しさん:05/03/16 21:30:01
rubyの cgi.rb, cgi/session.rb 関連で、PEARのAuthのような仕組みを
探しているんですが、googleで "ruby cgi auth", "ruby pear auth"
などと検索してもいまひとつ見つかりません。
どなたかご存知の方は教えてください。
まず「PEARのAuthのような仕組み」というのを説明してくれると話が早いかも。
107 :
105:05/03/17 10:00:48
PEAR は RAA だろ
シリアルキー解析集「ALTEA」
大好評発売中!
http://openuser10.auctions.yahoo.co.jp/jp/user/dancexxx1960? 市販SOFTやオンラインSOFTのパスワード集です。
オークション関係から画像・OS・表計算・CAD・・・・etc
国内・国外のあらゆる分野のSoftを解析済です。
これを初めて手にされた時には、驚愕される事でしょう。
そして・・・手当たり次第にインストールを始める筈ですw
パソコンをご使用の方なら、必ず!満足されると思います。
解析結果のデータベースには15,000点を越えるパスワードが入ってます。
このパスワード集から検索するだけで、登録や制限解除が出来てしまいます。
シェアウェアを購入して、正規登録したのと同じ状態になります。
余りにもデータが多すぎる為、辞書引のようなパスワード検索SOFTで提供します。
シェアウェア以外にもパッケージ版をVectorなどでオンライン販売してるSOFTにも
多数対応しています。これらをダウンロードして無期限に試用する事も可能です(^^;
WindowsXPやOfficeなどのCDキー(プロダクトキー)ジェネレーターを使えば複数のパソコンに
インストールする事も可能です。デスクトップとノートPCなど2台以上持ってる場合は特に有効ですね。
オンラインSOFTを購入した経験は有りますか?
ありとあらゆる分野の優れたSOFTが、数多くありますよね。
しかし、ほとんどが試用期間や機能制限をして、「気に入ったら購入してください」です。
もう少し使いたいが使用期限切れで、削除・・・再インストールを繰り返していませんか?
hallo効果もよくみかけるな
名前空間としてのモジュールにどんな名前をつけたらよいか悩んでます。
たとえば、クラスFooを定義したとします。
class Foo
...
end
そのあとで、やっぱ名前空間をわけようと思って、モジュールFooを作りました。
module Foo
class Foo
...
end
end
ここで、モジュール名とクラス名とを同じにしてしまいました。でもちょっと気持ち悪い。
こんなとき、どんなモジュール名(またはクラス名)にしたらいいでしょうか。
よい命名ルールがあれば教えてください。
Javaならパッケージ名には小文字を使うので、悩まなくてすむのですけど。
package foo;
class Foo
...
end
名前空間わけれてねーじゃん
>>116 機能を表す名前が1つしか思いつかないため、なやんでます。
module Visitor
class Visitor
...
end
class FooVisitor < Visitor
...
end
class BarVisitor < Visitor
...
end
end
じゃあそれでいいじゃん
混乱しないならそれでいいのでは?
別に気持ち悪くはない。
>>117 こういうのはケースバイケースなので、一例として。
> module Visitor
> class Visitor
外側のmoduleがメインになって内側のclass表にでない、
サブクラスも外部からしか使わないってんなら、
Visitor::BaseとかVisitor::Abstractにして、
class ForFoo < Base; end
class ForBar < Base; end
なんてするかも知れない。
なんとかVisitor,なんとかVisitorと繰り返すのは好みじゃないし。
本当些細な事なんですが、Rubyって書き方の自由度が高いためか、
エディタでの色分けが不完全だったりするのが多いですよね。
皆さん何でRubyを書いてるでしょう・・・?
普通にemacsとかじゃないのかな。
普通にxyzzyとかじゃないのかな。
普通にRDEとかじゃないのかな。
普通にVimとかじゃないのかな。
俺メモ帳
hidemaru
俺チラシの裏
K2EditorとNoEditorを気分もしくは作業環境に応じて。
さらに作業環境が変わるとvimになったりするが。
>128
Ruby for チラシの裏うpきぼんぬ
>>121 アンケートはそろそろこのへんで終了してよろしいでしょうか?
ed
133 :
121:2005/03/24(木) 03:35:17
下らない事に付き合ってもらい、ありがとうございました(´-`;)
下らないわりにsageとるやんけ。
↑sage と書いても別に下がりはしないことも知らない2ch初心者
136 :
デフォルトの名無しさん:2005/03/26(土) 12:27:35
もういいですから。
>>138 2ちゃんねらに高度な読解力を要求する勘違い
あるディレクトリにあるwavファイルとそれをlameでmp3にしたファイルとの
サイズ比を計算するスクリプトを作ってみた。> ruby a.rb directory
一応目的の結果が得られるのですが、ハッシュのキーソートの部分やら
もっと簡潔に出来ないでしょうか?
wfsize = {}
mfsize = {}
ARGV.each { |dir|
dir = dir.sub(/\\$/, "")
Dir.glob(dir + "/*.{[wW][aA][vV],mp3}") { |f|
bf = File.basename(f, ".*")
if /\.wav$/i =~ f then
wfsize[bf] = File.stat(f).size
else
mfsize[bf] = File.stat(f).size
end
}
}
wfsize.to_a.sort { |a, b|
String(a).upcase <=> String(b).upcase
}.each { |w|
printf "%-40s圧縮率:%3d%%\n", w[0], Integer(mfsize[w[0]]) * 100 / Integer(w[1])
}
>>140 > Dir.glob(dir + "/*.{[wW][aA][vV],mp3}") { |f|
へぇ。こんなんできるんだ。
> wfsize.to_a.sort { |a, b|
> String(a).upcase <=> String(b).upcase
> }.each { |w|
> printf "%-40s圧縮率:%3d%%\n", w[0], Integer(mfsize[w[0]]) * 100 / Integer(w[1])
> }
wfsize.keys.sort_by {|e| e.upcase }.each {|bf|
printf "%-40s圧縮率:%3d%%\n", bf, mfsize[bf] * 100 / wfsize[bf]
}
>wfsize.keys.sort_by {|e| e.upcase }.each {|bf|
>printf "%-40s圧縮率:%3d%%\n", bf, mfsize[bf] * 100 / wfsize[bf]
>}
そうそ、この部分をハッシュのキーそのままで使いたかったんだよね。
試行錯誤しても出来なかった・・・
すごく直感的に処理できている。勉強になりました。ありがと
それとsort_by は1.6では使えないんだね。
143 :
デフォルトの名無しさん:2005/04/02(土) 20:15:23
だいぶ長いこと使っていたのに、こんな初歩的なことがわからなくて愕然。
お願いします、教えてください。
Cygwin上で、ruby 1.8.2 を走らせておりますが、次のような
スクリプトを書いたときの挙動が理解できません。
#!/usr/bin/ruby
p str = 'this'
p "#{str}"
p #{str}
2、3行目では "this" と表示してきますが、4行目は長さゼロの
文字列のようです。これはどうしてですか?素人考えでは、これも
"this" ときていいんじゃないかと思うんですが。どうなんでしょう?
ちょっと待って、それコメントだから
145 :
デフォルトの名無しさん:2005/04/02(土) 20:27:40
>143 の男デス。
問題を簡潔に書こうとしすぎて、スクリプトを削っていったらコメントになっちゃった。
すいません。
実はこれを、正規表現の中に埋め込んで、/#{str}/ と書いていたんだけど、
どういうわけか、マッチするはずの文字列にマッチしてくれない(すっごい簡単な
文字列だから、絶対マッチするはずなんですけど)。
というようなことでした。うーん、もう一回スクリプトを検討してみますが。
148 :
デフォルトの名無しさん:2005/04/03(日) 15:06:26
149 :
デフォルトの名無しさん:2005/04/04(月) 13:55:45
初歩的な質問なんですが、以下のようなことがしたいです
ar = ["a", "b", "c"]
ar.each {|x| print x, "は配列arの添え字", XXXX, "の要素 " }
#=> aは配列arの添え字0の要素 bは配列arの添え字1の要素 ...
ブロック内で今処理されている配列の添え字を知りたいのですが、
良い方法はないでしょうか。for i in 0...ar.size を使えば目的は達成
できるのですが、あんまりきれいじゃないと思ったので。
>>149 そういう時にはeach_with_indexをどうぞ。
151 :
149:2005/04/04(月) 14:32:26
>>150 ar.each_with_index {|x, i| print x, "は配列arの添え字", i, "の要素 " }
で、できました。Mix-inとかあまり分かってないのでリファレンスきちんと読んでみます
ありがとうございました。
visualu rubyを使っています。
コモンダイアログで、ファイルを複数開きたいのですが、
def open_clicked
fn=SWin::CommonDialog::openFilename(self,[ ["ログファイル","*.txt"]])
end
みたいな感じですが、これだと一個しか開けません。
OFN_ALLOWMULTISELECTを指定するらしい、ということまではわかったのですが、
どのように書けばよいのでしょうか?
>>152 その辺はswin/vrubyでは定数宣言されてないようだ。
まともなサンプルではないが
require 'vr/vruby'
require "swin"
RFactory=SWin::LWFactory.new SWin::Application.hInstance
mw=RFactory.newwindow(nil)
fn=SWin::CommonDialog::openFilename(mw,[ ["ログファイル","*.txt"]], 0x80000 | 512)
とりあえずOFN_EXPLORER | OFN_ALLOWMULTISELECTと同意。
MinGWのcommdlg.hから値をとりました。
vrubyみたいにWStructというモジュールを定義してその中で定数宣言しとけば良い。
ruby/Gtkをやり始めたが、サンプルがGtk用でGtk2用でない。
しかもAPIがごそごそ変わっています。
情報があまりないので、苦労しています。
たとえば、
Gdk::LINE_SOLID
がGtkでは、使えていたのにGtk2では、
Gdk::GC::LINE_SOLID
でないとだめになった。こんなことどこにも書いていない。
どこかに、Gtk2の(特にGdk)のAPIがまとめてないでしょうか。
>>155 ご教示ありがとうございます。
そこも、見ましたが、ドキュメントがまだ整備されていません。
初心者なので、整備に参加することも出来ず手をこまねいています。
APIもGtk2のみです。ソースを見てもわからずお手上げです。
158 :
デフォルトの名無しさん:2005/04/09(土) 16:57:46
まったくの初心者ですが変なとこで詰まりました。お教えください。
実は、2重ループをしたくて、
j=0;k=0
while k<5
while j<3
p j,k
j=j+1
end
k=k+1
p k
end
というようなプログラムでwhileを2つ使ったのですが
内側のループが一回しか実行されません。
rubyでは、ゆるされない表現なのでしょうか。
>>158 ゆるされる表現だと思いますがjの初期化位置が違うのではないでしょうか
160 :
デフォルトの名無しさん:2005/04/09(土) 17:06:08
>>159 ありがとうございます。
恥ずかしい限りです。
ちょっとスレッドを試していたのですが
挙動がわかんないのでご教授願いたく・・・
require 'net/http'
target = "localhost"
path = "/"
h = Net::
HTTP::new(host=target)
p h
p h.get(path)
Thread.start{
h = Net::
HTTP::new(host=target)
p h
p h.get(path)
}
このコードで一回目はちゃんと200で帰ってくるのですが
スレッドの中のは結果をとってきてくれません。
スレッド中で例外が発生した場合はそのスレッドは死んじゃうとの記述があったので
p h.get(path) rescue p $!
にしてもどうも補足してくれなくて・・・
ちなみに環境はruby 1.8.1 (2003-12-25) [i386-cygwin]です
>>161 Thread.start{
h = Net::
HTTP::new(host=target)
p h
p h.get(path)
}.join
ということでなくて?
これならスレッドが終わるまえにスクリプトが終わってる
>>162 ・・・なるほど
joinしないと作ったスレッドが終わる前にメインスレッドが
終わってしまうということですね。
ありがとうございました。
/^/と/\A/ の違いがよくわからないです。
>>164 リファレンスマニュアル見てもわからんの?
前者は行頭に、後者は文字列の先頭にマッチ。
たとえば "a\nb\nc\n" なら、
前者は "a" の前と "b" の前と "c" の前にマッチするが、
後者は "a" の前にしかマッチしない。
167 :
デフォルトの名無しさん:2005/04/27(水) 00:06:13
Rubyではどんなに大きな数字でも扱えるってホントですか?
嘘です
ほんとです
$ ruby -e 'p 1.0/0.0'
Infinity
∞は数字じゃないと思います。
最大の数字であるところの 9 は普通に扱えます。
恋するプログラム買った。
コクったりしてくれますか。
>>173 お。どんな感じです?近所の書店には未入荷でして。
ネットで予約した方が早かったかな?
>>175 今37ページでオブジェクトの解説してます。
ruby初めてだけど、他の言語知ってるなら
充分理解できるようにわかりやすくかかれている感じ。
それより先は読んでないからまだ何とも言えないです。
所で、実行ファイルってrb形式のヤツですよね?
実行するとアクセスが拒否されましたってダイアログが出て実行できないんだけど
これは何故なのか…
>>176 付属のCD-ROMの収録内容かな?実行環境はLinux?Windows?
Windowsなら、拡張子でRubyインタプリタを関連付いてますか?
あとは文字通りで、何かのアクセス権がないから?
手元にあれば試してみるんだけどなぁ。
これってMargarine?それとも柳葉魚?
>>177 winです。
付属のサンプルもですけど、多分ruby全体がダメだと思います。
なんなんだろうか…
アンインストールして入れ直してみるかな
「恋するプログラム 〜Rubyでつくる人工無脳」
という本か。SSTP とか懐しいな。
面白そうだ、俺も買ってみよう。
>>176 ファイルのプロパティを開いて 読み取り専用のチェックを外す
とよひとおもふ
まさかCD-ROM上のファイルを実行しようとしてないよな
HDDにCPしてから
>>181 で、初めて実行可能になるきがするが
そういえば最近恋してないなぁ。
二次元でならいつも恋してる
……あ、最近ギャルゲもエロゲもあんまりやらなくなったなぁ´`,、(´∀`)´`,、
俺は三次元だぜ!
まきまきかわいいよまきまき。
なにこのキモスレ…
rubyistはみんな キモイのさへ(へ´∀`)へ
rubyでレジストリの操作って出来ますか?
windowsの表示をクラシックモードにしたりをrubyでやりたいのですが
出来ますでしょうか?
190 :
デフォルトの名無しさん:2005/04/30(土) 11:08:53
ruby/tkに関して質問があります。
例えば、次のようなスクリプトを実行したとします。
rubyのバージョンは1.8.2, Tkのバージョンは8.3.5, OSはLinuxです。
--- ここから ---
#!/usr/local/bin/ruby -Ke
require 'tk'
font = TkFont.new({'size' => '12'})
scr = TkScrollbar.new.pack('fill' => 'y', 'side' => 'right')
txt = TkText.new('font' => font).pack('expand' => 'true', 'fill' => 'both', 'side' => 'right')
txt.yscrollbar(scr)
Tk.mainloop
--- ここまで ---
このとき、TkTextウィジェット内での日本語入力は可能で、同じTkText内でのコピペも問題ありません。
しかし、例えばこのプログラムをふたつ立ち上げて、一方のTkText内の日本語を他方にコピペすると
文字化けしてしまいます。
なにか解決方法はないでしょうか。よろしくお願いします。
>>190 Linux上のruby 1.8.2、tk 8.4.9で試したところ、
プログラム間でのコピー&ペーストで文字化けしません。
他のプログラムとの間でも同様に文字化けするのでしょうか?
クリップボードを監視変更するようなプログラムが動作していませんか?
192 :
190:2005/04/30(土) 15:06:52
>>191 >他のプログラムとの間でも同様に文字化けするのでしょうか?
問題となっているプログラムを仮にAと呼ぶと
mlterm -> mlterm: OK
mlterm -> A: NG
A -> mlterm: NG
A -> A : OK
ただし、別の新しいプロセスとして立ち上げたものをA'とすると
A -> A': NG
です。
>クリップボードを監視変更するようなプログラムが動作していませんか?
XfceのClipboard Managerが動いていましたが、
これを落としても文字化けしました。
print '能'
このプログラムで"が閉じられていないというエラーが出ます。
ちなみにlinuxでは動作しますが、win32だと駄目です。
KCODEの設定をしても駄目みたいです。
こういうことって結構あるのですか?
194 :
デフォルトの名無しさん:2005/04/30(土) 19:04:59
スレ違いかもしれませんが、質問させて下さい。
rdindex (1.2.2) を使いたいと思っているのですが、
インストールに失敗します。
$ ruby setup.rb config
とすると、~/.rdindex がないと言われるので、
{package_root}/dot.rdindex をコピーして続行しました。
$ ruby setup.rb setup
とすると、
{package_root}/rdindex-1.2.2/bin/rdindex/rdindex:2:in `require': No such file to load -- rdindex (LoadError)
と怒られます。
どうやらパッケージ内にこのファイルが無いようにも思えます。
({package_root}/setup/rdindex.rb はインストール用?)
正常に使用できるようにするには、どの様にすれば良いでしょうか?
>>193 print "能\"
とでもしてください。
多分、
print "ソ"
print "表"
あたりでも同じ事が起こると思う。文字コードの問題かと。
196 :
190:2005/04/30(土) 20:34:33
>>191 tcl/tk-8.4.9をインストールしてrubyもリビルドして試したところ
文字化けしませんでした。
8.3.5に拘る理由もないので、この機会にバージョンアップすることにします。
ありがとうございました。
>>193 $KCODEは実行の際に関係する設定だから。
その問題はパースの際の問題なので
Rubyの引数に-Ksするかスクリプトの一番上に#! ruby -Ks
として解決。
ローカル変数を作るにはどうすればいいですか。
例えば下のブロックの中に tmp というローカル変数を作りたいのですが
どのように書けば良いでしょうか。
tmp = 1
… {
# ここ
}
print tmp
ブロック外で初めてローカル変数を使ったら、
当然、そのスコープでのローカル変数になるから、
素直に、ブロック外かブロック内のどちらかの変数名を変更するか、
別の種類の変数などを利用していく方が、自然じゃないかな。
# for はちょっと特殊なので気をつけよう
もうrubyは全部グローバル変数と思って変数名を管理しとかないと
悲惨な結果になるような気がしてきた。
>>199 Rubyの仕様上、ムリ。違う変数名にしろ。
というか、こんなことできる言語って他にあるか?
>>202 C++だとネストしたブロック内で同名の別変数を使えますね。
そういう言語に慣れてると混乱するかも。
今回の事例だと、変数名を変えるのが無難かも。
あるいは、該当部分を別のメソッドに分割するとか。
似たような言語のperlも、 { } と my宣言を使って
名前に関係なく自由に変数のスコープを記述できるな。
class A
def initialize
@x = "xxx"
end
class B
def initialize
p @x
end
end
end
A::B.new
class A の @x を class B のメソッドから参照するには、どうすれば
207 :
デフォルトの名無しさん:2005/05/02(月) 13:20:19
["a=1" "b=2" "c=3"]
こういうオブジェクトを e = {"a" => "1", "b" => "2", "c" => "3"}
みたいなハッシュに変換したいんですが
どう書けばいいんでしょ?
3時間ほど悩んでます
>>207 とりあえず、こんな感じ?つっこみ歓迎。
def to_hash( array )
hash = Hash.new
array.each do | x |
if /(.+)=(.+)$/ =~ x
hash[ $1 ] = $2
end
end
return hash
end
x = ["a=1", "b=2", "c=3"]
p to_hash( x )
>>207 p ["a=1", "b=2", "c=3"].inject({}) { |r,e| k,v = e.split(/=/, 2); r[k] = v; r }
あ、もうちょっと短くできるかな。
p ["a=1", "b=2", "c=3"].inject({}) { |r,e| r.store(*e.split(/=/, 2)); r }
211 :
207:2005/05/02(月) 13:46:51
ども
両案とも、あっさりうまくいってしまいました
>>208 正規表現使う案はさすがに思いつかなかったです(わら
>>209, 210
injectは知らなかったです、勉強になりました。
ありがとう
>>209 うぁ、injectを忘れてました。まだ頭が1.6系...。
それにsplitで十分かつすっきりしますね。ううむ、まだまだだなぁ。
私も恋するプログラム買いました。人口無脳を作ってどんどん機能を
追加していくという流れで、配列、条件分岐から、正規表現、GUI、
webサービス、マルコフ辞書までと幅広い内容です。
ひとつ気になる点としては、作者が死んじゃってることくらいです。
>>213 遺稿になっちゃったんですね。
こういう書籍を書ける人が...もったいないなぁ。
215 :
デフォルトの名無しさん:2005/05/03(火) 09:39:26
Rubyで、BASICのEND文と同じことができる命令ってありませんか?
プログラムの実行を強制的に終了させる命令。
それが無理なら、せめてプログラムの末尾にGOTOさせたいんだけど、そんな命令もない。
まったく不便な世の中になったもんだ。
exit
218 :
デフォルトの名無しさん:2005/05/03(火) 15:48:19
今日から始めたのですが、大量ファイルからの入力 → 抽出データのリスト化出力
などのサンプル | リファレンス が載ってるところはないでしょうか
219 :
215:2005/05/03(火) 18:24:10
>>216-217 ありがd(涙)
CGIの書き込みチェックに使いたかったんです。
raiseでムリヤリ例外を発生させてrescue節に飛ばす方がなんとなくRubyらしくてイイですね。
exitは初めて知りました・・・まだまだ知らないことばかりです;
慣れると、以前は GOTO しか無かった不便な世の中だったもんだ、と思えるようになるよ。
221 :
218:2005/05/04(水) 13:59:58
リファレンスの添付ライブラリに色々ありました。
スレ汚してすいませんでした。
すいません、おまいらはソースの編集はどうしてるのですか?
秀丸とかterapadとかrdeとかいろいろあるけど、
どれでやってますか?
WZ
xyzzy
ごくまれにviとcat
xyzzyのrubymodeみつかんね
乱数の分布をとるようにしたいのですが、
a = Array.new(10, 0)
for i in 1..100
case rand(10)
when 0; a[0] += 1
when 1; a[1] += 1
when 2; a[2] += 1
when 3; a[3] += 1
when 4; a[4] += 1
when 5; a[5] += 1
when 6; a[6] += 1
when 7; a[7] += 1
when 8; a[8] += 1
when 9; a[9] += 1
end
end
このやり方だとrand(100)とかrand(1000)にすると、
when 0; a[0] += 1 をたくさん書かないといけません
何かスマートな方法がないでしょうか?
よろしくお願いします
randから返ってきた値を添字にしないのは何故?
>>232 そんなレス付ける暇があったらコードで示してやればいいのに。
性格悪い奴だな。
a[rand(10)]+=1
Perl の tarball 眺めてたら、 t/japh/ なんてのを見つけた。
Ruby にも test/jarh.rb きぼんぬ。
>>237 どの言語でもsampleの中って骨董品ばかりじゃない?
>>233 そんなレス付ける暇があったらコードで示してやればいいのに。
性格悪い奴だな。
241 :
デフォルトの名無しさん:2005/05/08(日) 12:48:04
ふと Test::Unit でもはじめてみようかと試したのですが、
Rubyって拡張子が cgi だと require できないのでしょうか。
もしそうなのであれば、拡張子が cgi のファイルをテストするいい方法はどのようなものでしょうか。
ていうかphpみたいに拡張子.rbにしてもうちょっと自己主張すればいいのに。
>>241 require "hoge.cgi"
でいけない?
244 :
デフォルトの名無しさん:2005/05/08(日) 13:32:36
シングルクォーテーションもダブルコォーテーションもだめでした。
現在は、ファイルをコピーして拡張子を rb にのものに置き換える処理のあとに require しています。
もうひとつ質問なのですが、
コンソールでは動くテストケースなのですが、
eclipse の RDT で動かそうとすると、
"起動中" 中に内部エラーが発生しました。
java.lang.RuntimeException: Unable to execute interpreter: -I "C:\data\workspace\ws1\calendar" -I "testunit" -- "No file specified in configuration" testunit/test_calendar.rb 6789 false TCMyCalendar
というエラーが出て、実行されません。
6789 という数字に覚えがないのですが、このエラーを回避するにはどうしたらよいのでしょうか。
245 :
デフォルトの名無しさん:2005/05/08(日) 13:44:10
6789行目?
テストしたいだけなら、外部呼び出しの exec 等で良いんじゃない?
*.cgi って Ruby 以外なんでもアリなんだから、
ライブラリをロードする require が *.rb, *.so 限定な方が自然だろう。
> ていうかphpみたいに拡張子.rbにしてもうちょっと自己主張すればいいのに。
どゆいみ?
勘違いじゃなければ、httpd 側の設定の話な気がする。
247 :
デフォルトの名無しさん:2005/05/08(日) 14:03:03
配列の処理で
「ある条件を満たす要素以降の要素」に対して
処理をしたい時はどうすればよいのでしょう?
Cで書くなら↓のような感じなのですが
eachを使うと条件を満たした行しか得られないようなので・・
for(i=0; i<MAX-1; i++){
if(array[i] == 条件)
for(j=i; j<MAX-1; j++){
したい処理
}
}
}
>247
泥臭くやると
array[ array.index(条件) ... array.length].each { |e|
# eに対して「したい処理」
}
かな。だれかエレガントな解キボンヌ
start = array.index(条件)
end = array.length
for x in start..end do
したい処理
end
もしくは、
array[start, end].each do |item|
したい処理
edn
とか?
あ、すまん edn > end
あと end = array.length にて end 使ったらマズい悪寒 orz
ブロックの終端以外の end は fin にでも書き換えてくれ
251 :
247:2005/05/08(日) 14:45:18
252 :
247:2005/05/08(日) 14:45:44
sage忘れスマソ
253 :
デフォルトの名無しさん:2005/05/08(日) 17:00:20
あるクラスのインスタンスメソッドから、
同じクラスのクラスメソッドを呼ぶときってどうしていますか?
・AruClass.classmethod()
・self.class.classmethod()
これ以外の方法はあるのでしょうか?
オブジェクトのリファレンスか別名を作る方法はないでしょうか?
例えば hash[:a][:b][:c] に x という別名を作って、
x にvalueを代入すると hash[:a][:b][:c] にも代入される、みたいな事を
したいのですが。
255 :
254:2005/05/08(日) 18:16:18
= で出来ました。
>>253 なぜそれ以外の方法が必要なのか述べよ(250字)
>>256 クラス名を書くのはクラス名が変わったとき(あってはならないが)めんどい。
self.class だと長い。
せめて class って直接書いて構文エラーにならなければいいのになぁ。
>>257 > せめて class って直接書いて構文エラーにならなければいいのになぁ。
予約語だしなぁ。
それにclassを認めるとdefもifもwhileも…とか出てきそうでイヤ。
rubyは変数に型宣言が無く、ミッスクインをサポートしてるのに
なぜ継承があるのでしょうか?
型宣言の有無と継承の有無はほとんど無関係じゃないかな?
mix-inがあれば継承がなくても実装の共有は可能になるが、通常の親子関係が
コーディングの助けになる場面もあるわけで(kind_of?)、無理に継承を排除する
必要もないということかと。
継承がないと、mix-inも各インスタンスごとにいちいちextendしなきゃならな
いわけだが。
>>244 requireだと拡張子.rbや.soを補おうとしているからと思われ。
load "hoge.cgi"してみるとか。
263 :
デフォルトの名無しさん:2005/05/13(金) 06:47:55
class Person
def name
return @name
end
def name=(name)
@name = name
end
def hello
print "俺は" + @name + "だ"
end
end
alex = Person.new
alex.name = "アレックス"
alex.hello
ツクールXPに入ってるRubyのマニュアルの
インスタンス変数の項目の例文なんですが、
5行目の(name)が
変数としてのnameなのか関数としてのnameなのか教えてもらえないでしょうか?
264 :
263:2005/05/13(金) 06:52:31
連レスですいません。
プログラム自体初心者なもので、自分の質問が的確な質問かどうかも
わからない状態です。
的外れな事を質問していたらすみません。
instans って何だよ instance だろ。attr_writer だろ orz
寝惚けとる
1.8.3 の preview は何まで出るんだろうか……
267 :
263:2005/05/13(金) 08:04:20
>>265 レスありがとうございます!
class Person
def name
return @name
end
def name=(name)
@name = name
end
def hello
print "俺は" + @name + "だ"
end
end
alex = Person.new
alex.name = "アレックス"
alex.hello
(name)内のnameが変数としてのnameなら、234段目のnameメソッドはなんの為にあるんでしょうか?
234段目を消しても、ちゃんと動くので、もう混乱してしまって・・・
以下マニュアルより転載。
>この例では @name というインスタンス変数を用意し、name、name= というメソッドを使って
>オブジェクトの外からアクセスできるようにしています。このようなメソッドをアクセサと呼びます。
無知な質問を何度もすみません;;
268 :
デフォルトの名無しさん:2005/05/13(金) 08:17:00
>>265 参考URL先で理解できました。
ありがとうございました、後スレ汚し失礼しました。
269 :
デフォルトの名無しさん:2005/05/22(日) 09:21:17
>>267のname=メソッドがどんな処理をしてるのか、どなたか詳しく解説して頂けないでしょうか?
271 :
デフォルトの名無しさん:2005/05/22(日) 10:12:02
>>270 うはぁ・・・めちゃくちゃわかりやすい・・・
理解できたと思いますTДT)大感謝です。
name = の空白は関係なかったんですね。
迷惑ついでに答え合わせしていただけるとありがたいのですが
処理の流れとしては、
Personクラスを作成、@nameを定義。
Personのインスタンスalexを作成。
"アレックス"を引数に指定してname=を呼び出し。
仮引数nameに"アレックス"を受けてそのまま@nameに代入。
helloを呼び出して、表示。
・・・という感じであってるでしょうか?
`@nameを定義' ってのが、ちょっと違和感があるな。
initialize 内で初期化してるなら、まだ解るけど。
p alex.name を追加してみれば解ると思うが、
name メソッドを使用した時に @name が返り値となるように設定している。
全然利用されてないけど、その本の別の場所で使ってるのかな?
正直、その例文だけみると、初心者だと少し混乱するものしょうがない駄目サンプルな気がする。
#
>>265 で、かなりヒントを込めたつもりだったんだけどなぁ orz
274 :
デフォルトの名無しさん:2005/05/22(日) 17:24:14
>>272 む、
def name
return @name
end
はこの例文ではやっぱり使われてなかったのですね。
この部分だけ消しても動いたので、どういうモノなのか微妙で
恐らく return @name と書くだけでnameメソッドを呼び出さなくても@nameが定義されるんだろうと解釈してました。
丁寧でわかりやすく、本当にありがとうございました。
もっと勉強してなるべく人に頼らないで済むよう頑張ります!
誰かrasp知っている方いませんか??
宿題です
おまけにマルチです
おそらく同じ学科の別の人ですね
いったい何%の人がそんな戯言を信じると思う?
質問:
あるディレクトリのなかの、
すべてのファイルの名前、
すべてのディレクトリの名前を出力するには
Rubyでならどう書く?
`ls -a`
284 :
デフォルトの名無しさん:2005/05/28(土) 07:09:10
標準のLoggerとLog4Rとどっちがいいですか?
xmlで出力先とかレベルとか設定できますか?
282が言ってるのが「ディレクトリの下のファイルをすべて再帰的に」なのか
「1段だけ(ディレクトリがあってもその中を見ない)」なのかわからんが、
前者なら
require 'find'
Find.find('/path/to/directory') { |f| puts f }
後者なら単に
puts Dir.entries('path')
>>282 Dir.foreach(path) do |each_file|
puts each_file
end
>>284 Logger の方が使い方は楽。
ログのローテーションや YAML/XML で設定ファイルを書きたいなら log4r。
詳しくはサイト読めばわかるけど、例としてはこんなん。
require 'log4r'
require 'log4r/configurator'
Log4r::Configurator.load_xml_string(DATA.read)
logger = Log4r::Logger['bar']
logger.debug('test')
__END__
<log4r_config>
<outputter name="file" type="FileOutputter">
<filename>foo.log</filename>
</outputter>
<logger name="bar" level="DEBUG" trace="true">
<additive>false</additive>
<outputter>file</outputter>
</logger>
</log4r_config>
<code>
ゴミ箱.捨てる(path)
</code>
のように、
消去したいディレクトリのパスだけ入力すれば、そのディレクトリの中味を全部消し去ってくれるようなモジュールって、ある?
>>287 FileUtils::rm_r とか?
289 :
デフォルトの名無しさん :2005/05/28(土) 09:30:38
rubyって、Cから呼び出したりCを呼び出したりできますか?
例えばC側をコンパイルしなおさずに、
外部のrubyスクリプトを書き換えてC内の変数を弄る、とか
逆にCからrubyスクリプトで書いた関数を実行する、とか。
>>290 組み込っていうんですか。ありがとうございました。
292 :
デフォルトの名無しさん:2005/05/28(土) 09:56:18
>>286 サンクス
ちょうどlog4rのサンプル探してたのよ
>>288 >FileUtils::rm_r
さんきう! いやー似たようなものつくろうとしたけど夜中3時間粘ってやっぱりめんどくさくなった(^^;)
すごいうれしい機能盛りだくさん。おしえてもらえて助かりました!
Rubyはprivateメソッドを書けるようにすべき
private def foo
end
これは気持ち悪いでしょ
private
def foo
end
--
def foo
end
private: foo
気持ち悪い、という主観的な意見は、なんで気持ち悪いと思うのかを
説明してくれないと、賛同も反対もできないよ?
二つ目のはC++と同じスタイルなわけだが。
297 :
デフォルトの名無しさん:2005/05/29(日) 01:11:48
RDindexをLinux Zaurus SL-C300にインストールしようとして
RAAからダウンロードしたものを
$ tar xvzf rdindex-1.2.2.tar.gz
$ cd rdindex
$ cp dot.rdindex ~/.rdindex
$ ruby setup.rb config
とすると
setup.rb:643 warning: parenthesize argument(s) for future version
.....
setup.rb: config done.
となり、警告がちょっと気になりつつ。。
$ ruby setup.rb setup とすると
setup.rb:643 warning: parenthesize argument(s) for future version
...
/home/zaurus/rdindex-1.2.2/bin/rdindex/rdindex:2:in `require': No Such file to load -- rdindex(LoadError)
と言われたのでダメだろうなぁと思いつつ、パスのとおっているところにrdindex-1.2.2のsetupディレクトリにあるrdindex.rbを置いて再度configからやり直すと
setupのあとに
/opt/QtPalmtop/lib/ruby/site_ruby/1.8/rdindex.rb:4: undefined superclass `InstallerHook' (TypeError)
となります。
一応、手順通りに行ったつもりですが、他になにか行うべきことは何でしょうか?
rubyのバージョンは1.8.0(2003-08-04)[arm-linux]です。
>>297 > setup.rb:643 warning: parenthesize argument(s) for future version
これはsetup.rbが古いだけなので、新しいsetup.rbで上書きすればOK。
気にする必要はないけど。
> パスのとおっているところにsetupディレクトリにあるrdindex.rbを置いて
それはインストール時に読まれるファイルだから、コピーする必要はない。
> 一応、手順通りに行ったつもりですが、他になにか行うべきことは何でしょうか?
> rubyのバージョンは1.8.0(2003-08-04)[arm-linux]です。
bin/rdindex/rdindexでrequire 'rdindex'してる割には、lib/PATHCONVだけで
lib/rdindex.rbがないな。
パッケージングミスだと思う。
299 :
297:2005/05/29(日) 15:11:04
>>298 レスありがとうございます。
> パッケージングミスだと思う。
rdindex1.2.2のリリースから一年近くパッケージングミスのままということは
以下のいずれかなのでしょうか…
1.rdindexを使っている方はいない
2.1.2.2より以前のものを使用中
3.rdindexに代わるメソッド名の補完、メソッドの説明をしてくれるものを使用中
昨日、Rubyの256倍魔道編を読んで便利そうだと思い、是非ともEmacsにこんな機能を
と思ったのですが、現在主流と思われるメソッドの補完、説明を行ってくれるemacs-lispが
あれば教えてください。
300 :
297:2005/05/30(月) 00:11:53
とりあえずrdindex-1.1.9をダウンロードしてきて使えるようにしてみました。
rdindex.elでエラー出力(警告)を破棄するようにして、
bin/rdindex内でRDの開始を判断するところをいじって、なんとかEmacsから使える
ようになりました。
ただ、結構適当にいじってしまったので余分なものまでインデックスにはいっちゃってる
ような気が…
wc -l ~/ruby/rdindex.dat が
1.6のマニュアルでは2016行、1.8のマニュアルでは4391行となりました。
通常に使える方、このぐらいの量であってるでしょうか?
301 :
デフォルトの名無しさん:2005/05/30(月) 01:17:30
メソッドを定義したいのですが、返値はどこに書けばいいのでしょうか?
昔はreturnを書かない下の例のほうが高速と言われていたんだけど、最近は違うのかな。
1.9だと単純なのは同じになる。
$ ruby -rNodeDump -e 'def foo;return "a";end'
NodeDump V0.9
NODE_DEFN: method 10577 (foo)
NODE_SCOPE:
NODE_BLOCK:
NODE_ARGS: count = 0
additional default values:
NODE_STR: "a"
$ ruby -rNodeDump -e 'def foo;"a";end'
NodeDump V0.9
NODE_DEFN: method 10577 (foo)
NODE_SCOPE:
NODE_BLOCK:
NODE_ARGS: count = 0
additional default values:
NODE_STR: "a"
305 :
デフォルトの名無しさん:2005/05/30(月) 11:59:13
結論としては、JavaかPHPを覚えた方がマシ、と。
そんな当たり前のことをいまさら理解されても困る
これだからRuby厨は
Python ならまだしも Java か PHP はどうかと思う
PHPは最もつぶしが利かないからな
タイマーってありますか?
$thread = Thread.new{
Timer.new(5){ $thread.run }
なんか処理
$thread.stop
}
とすると5秒ごとに$threadが実行されるような
そのコードでは何をしたいのかまったくわからんけど、
loop {
Thread.new{
なんか処理
}
sleep 5
}
ということ?
それとも、5秒ごとにスレッドをちょっと動かし、ちょっと動かし、としたいのかな?
>>310 それだと処理に掛かった時間分5秒からズレます。
厳密に言えば、Threadの生成にかかる時間だけずれるけど、
そういう厳密な話をRubyでやりたいわけもなさそうなので省略。
他の言語(例えばC+pthreadとかjavaとか)でやりたい事を軽く書いてもらえる?
310の言う通り、何が望みなのかよくわからない。
ひょっとしてタイマ割り込みみたいな感じ?
316 :
309:2005/05/30(月) 21:43:05
例えば
5〜10分(不定)掛かる処理を1時間ごと(毎時0分等)に繰り返すとかです。
loop {
$st = Time.now
なんか処理
sleep 60*60 - (Time.now - st)
}
これと同じことをもっとスマートに書けませんか?
>>309は間違えてました。すみません。
$thread = Thread.new{
Timer.new(5){ $thread.run }
loop{
なんか処理
$thread.stop
}
}
>310で合っていると思うけど……
だよなぁ
>310以外の何を求めているのか。。
スマートに、ってのがポイントなのかな。
つまりcrondもどきをrubyで書くってことになるんだろうか。
誰か作ってなかったっけ?
HKEY_CURRENT_USER\Control Panel\Desktop
の中のWallpaperStyleの値を参照したり変更したりを
win32/registryにて試みているのですが、さっぱり出来ません。
どのように書けばいいのでしょうか?
参考までにご教授ください、よろしく願いいたします。
今はどう書いてて、何がどうできないの?
参照もできない?
それとも変更しても表示が変わらない?
後者なら更新を通知する必要がありそうな気がするけど。
みんなわかっててとぼけてるんだよな。
まあ面白いからよしw
rubyのみでパケット送信時のソースIPアドレスを
嘘つくことは可能?
ネットワークの実験してるんですが
いちいちIPアドレスとMACアドレス変更するのが
面倒なんですが。
出来るのなら何かヒント教えてください。
可能
ruby初心者です。簡単な数当てゲームを作ろうとしているのですが、
試行回数を記録しようとすると、「undefined method `+' for nil:NilClass」などと言って怒られます。
どうすればよいのでしょうか?
srand
val = rand(100)
callcc{|$input|}
print "値を入れてください> "
$charange += 1
n = gets.to_i
====長いので、下に続きます=========
===上の続きです=====
if n > val
puts "もうちょっと小さい値です"
$input.call
elsif n < val
puts "もうちょっと 大きい値です"
$input.call
else
printf "正解です。試行回数: %d回", $charange
end
> $charange += 1
$charange が初期化されてないんじゃね?
綴りも変だけどな
ちゃーらんじ
細かいことは気にしないでやろうぜ…
気になるがw
質問からレスまで2分かかってないのも気になる
うむ
バグの原因発見するだけなら2分もかからんだろう
c/migemoのAPIリファレンスってないの?
>>336 C/migemo はただのCのライブラリなんで、このスレはスレ違いかと。
「Ruby の 拡張ライブラリとして C/migemo を使いたい」という話なら
doc/README_j.txt の API リファレンスを参考にどうぞ。
素直にオリジナルの Migemo を使うのが楽だと思うけど。
Rubyで書くとき、ひとつのメソッドの行数って平均どのくらい?
ついでにひとつのクラスにどのぐらいメソッド詰め込んでる?
こんな場合はこれぐらいと教えてもらえると、より興味深い。
時と場合によります
[1,2,3].each{|i|
print "[", i, "," if i.first?
print i, "]" if i.last?
print i, "," if i.middle?
}
結果
[1,2,3]
こんな感じの書き方は出来ないですか?
うーん、具体的な用途によっていろいろだと思うけど、その程度なら、
puts "["+[1, 2, 3].join(", ")+"]"
かな。
もう少し具体的に、最初と最後だけ識別したい時は
[1...-1]で真ん中だけ取り出すか、
each_with_indexを使って i==0で判定するか、
をやると思う。
[1,2,3].p
>>340 sep = "["
[1,2,3].each do |i|
print sep, i; sep = ","
end
puts "]"
という書きかたも、あることはある。
>>340 "[%s]" % [ [1,2,3].join(",") ]
>>344 一個だけのときはこうしちゃうなあ。
"[%s]" % [1,2,3].join(",")
"#{[1,2,3].join(",")}"
>>346 結果の文字列を[と]で挟むのを忘れるぞ。
何のために文字列に入れたんだか。
http://www.rubycgi.org/cgi_explanation/2-7.htm 上記URLのサンプルを動かして、適当に書き込んでから
ブラウザで「更新」すると
最後に書き込んだメッセージがもう一度投稿されてしまいます。
これを防ぐ手段として、「#ファイルの書き込み」の一つ下の行を
> if senddata && log[0]!="#{senddata}\n"
のように書き換える方法があると思いますが
幅が利かないので、出来れば log[0] との比較はしたくありません。
そこで input["senddata"] の方を nil にしてしまいたいんですが
その方法を教えてもらえませんか?
>>339 ここはメトリクスのないインターネッツですね
[1,2,3].inspect
>>341 繰り返しの最初なのか最後なのかを判定する方法を用意してくれる言語もあるけど(Velocityとか)、Rubyはそういう方法は用意されてないので、自分で頑張るしかないです。
a = [1, 2, 3]
last = a.length - 1
a.each_with_index do |n, i|
if i == 0
print "[", n, ","
elsif i == last
print n, "]"
else
print n, ","
end
end
こじんてきには
>>343がおすすめ。
>>351 [1,2,3] と表示させる方法を
>>341は質問質問しているわけじゃない。それがわかっててそんな回答するのは、いけず。
>>344-345 というか、何も表示されないだけど ( % についてのWarningはでる)
354 :
353:2005/06/06(月) 23:19:40
ごめん
p とか print つけてなかった orz
>>348 > 幅が利かない
ってどういうこと?
> そこで input["senddata"] の方を nil にしてしまいたいんですが
> その方法を教えてもらえませんか?
それってブラウザが勝手にやってることなんじゃないかと思うけど。
tDiaryじゃ一度redirectさせてreloadしても再送しないようにしてるみたい。
サービスパックのバージョンを取得するために以下のようなスクリプトを書きました。
とりあえず動いているのですが dwOSVersionInfoSize = 148 の部分と、
最後の szCSDVersion を文字列にする部分をもっときれいに書く方法はないでしょうか。
require "dl/import"
require "dl/struct"
module Kernel32
extend DL::Importable
dlload "kernel32"
typealias("TCHAR", "unsigned short")
OSVERSIONINFO = struct [
"DWORD dwOSVersionInfoSize",
"DWORD dwMajorVersion",
"DWORD dwMinorVersion",
"DWORD dwBuildNumber",
"DWORD dwPlatformId",
"TCHAR szCSDVersion[128]",
]
extern "BOOL GetVersionEx(OSVERSIONINFO*)"
end
ver = Kernel32::OSVERSIONINFO.malloc
ver.dwOSVersionInfoSize = 148
Kernel32::getVersionEx(ver.to_ptr)
puts ver.szCSDVersion.pack("s128").unpack("a128")[0][/^[[:print:]]+/, 0]
357 :
348:2005/06/08(水) 12:21:37
>>355 >幅が利かない
このソース、「掲示板」ってことになってますが
これを実用レベルの掲示板にするには、発言以外にも、
名前やら時刻やらを一緒にログファイルへ保存する必要が出てきますよね?
2005/06/08 12:00 山田 > よう!
↑
こんな形で。
こうなると単純に != しただけでは判定できなくなるし、
かと言って、名前(山田)と発言(よう!)で部分検索しても
2005/06/08 12:05 山本 > 『山田 > よう!』って随分軽いな!
というような、一部コピペの発言も拒否してしまうし・・・。
ってことで、あまり幅が利かなさそうだなあと思いました。
>input["senddata"]
仰るように、ブラウザの仕業みたいです。
クッキー使えばどうとでもなるんでしょうが、まったく分からないので、
二重投稿防止のためだけにもう一つ別のログファイルを用意して、
それで何とか対処することにしました。
正しいかどうかわかりませんが redirect って言うのは、
bbs.cgi→a.html→bbs.cgi みたいに一旦別のページに飛ばすって意味であってますか?
【幅が利・く】勢力や発言力がある。はぶりがよい。「町内で―・く人」
RubyのDoxygenに対応するツール(フォーマット?)はRDでいいんですか?
ちょっと調べてみたんですが書式の説明はあっても実際のクラスやメソッドにどう説明をつけて
どうドキュメントを生成すればいいのかがよく分かりません。
そのあたりの説明が載っているサイトがあったら紹介してもらえないでしょうか。
rdoc
MF
364 :
デフォルトの名無しさん:2005/06/09(木) 02:58:20
ここで質問していいのかわからないのですが、ActiveRecordについて質問です。
次の1.と2.の手順は、重複しているような気がします。
1.MySQLでデータベースを作っているとき、
subarticle_id INTEGER REFERENCES SUBARTICLES (id),
こういう風にカラムを作成することで、subarticle_idという外部キーとsubarticlesデータベースのidを関連づけられますよね。
2.また、ActiveRecord::Baseを継承してクラスを作るとき、belongs_toや、has_manyなどを使って、改めて関連についてのメソッドを追加しますよね。
これって、重複していますよね。
これはつまり、MySQLレベルでのREFERENCES以降の文は、必要ないということになるのでしょうか??(あるいは、書いてはいけない??)
MySQLレベルでは、別に二つのtebleを関連づけなくても、ActiveRecordレベルで関連づけさえすればいいということでしょうか??
ちょっと、SQL初心者で言ってることがわかりにくいかもしれませんが、よろしくお願いします。
365 :
357:2005/06/09(木) 06:02:09
>>359 ありがとうございます。
そっちも参考にしてみます。
関連付けは制約だからなあ・・・
Win32API全部宣言したWindowsモジュールクレクレ
>>364 MySQLって制約はただ書ける(シンタックスエラーにならない)だけで
実際には機能しないんじゃなかったっけ?
369 :
デフォルトの名無しさん:2005/06/11(土) 00:41:28
Rubyの機能に関して、意見を言うには、メーリングリストに入るしかないのでしょうか??
ちょっとしたことなので、メーリングリストでいうほどでもないようなことなのですが。。
変更を取り込んで欲しいなら、MLでいうのが一番確実。
日記とかこことかで言ったことが採用されることもないじゃないが、
大体は一度MLで議論されることになる。
371 :
デフォルトの名無しさん:2005/06/11(土) 02:19:55
外部コマンドで、tar -zxvf hoge.tgz として、
その展開したディレクトリを保存するっていうのを、Rubyから行うには
どうすればいいでしょうか??
>>371 tarを実行するには `tar -xzvf #{filename}`
展開したディレクトリを保存するというのは、なんのことかよくわからん。
実行するだけなら
system("tar -zxvf hoge.tgz") とか
system(%w"tar -zxvf hoge.tgz") とか
終了を待たないなら
spawn(%w"tar -zxvf hoge.tgz") とか
出力一行ごとになんかするなら
IO.foreach("|tar -zxvf hoge.tgz")とか
IO.popen(%w"tar -zxvf hoge.tgz") do |tar|
tar.each do |line|
end
end
とか、やりたいことに応じてやり方もいろいろあるわけだが。
展開した時点で保存されているものだと思う。普通は。
374 :
372:2005/06/11(土) 15:19:58
なるほど。 system("tar -zxvf hoge.tgz") なら、
コマンドを実行されて、その終了も待ってくれるんですね。
ありがとうございます。
Ruby/tk でさ、バインドしたメソッドの引数の与え方を
任意に変えたいんだけど、どうするのがいいのかな?
例えば、Canvasに点を打ちたい場合に、
Canvasにフォーカスされてたらマウス入力から
Entryにフォーカスされたらx,y入力からとか
詳細はしょりますが
$focus = TkVariable.new
canvas.bind('FocusIn', proc{$focus.value = 'canvas'})
entry.bind('FocusIn', proc{$focus.value = 'entry'})
button(:command=>proc{$focus.wait; create_point})
def create_point
if $focus == 'canvas'
...
else if $focus == 'entry'
...
end
end
みたいなやり方しかないのでしょうか?
Ruby/Tkというか、Ruby初心者なので、良い方法あったら教えてくださいませ
Ruby/Tkは詳しくないんだけど、こういうのはどう?
create_point = proc{}
by_mouse = proc{...}
by_entry = proc{...}
canvas.bind('FocusIn', proc{create_point = by_mouse})
entry.bind('FocusIn', proc{create_point = by_entry})
button(:command=>proc{create_point.call})
>>376 おお!
サブルーチンへのリファレンス(Ruby的にはなんて言うのかな)
を使うんですね
この方が美しいですね
Thx!
>377
>サブルーチンへのリファレンス(Ruby的にはなんて言うのかな)
Ruby的にはProcオブジェクトでつ。多分
イテレータ?
380 :
375:2005/06/12(日) 01:57:00
>>378 Procオブジェクトへのcallメソッド呼び出しってことで
納得デス
この3日間Rubyでアプリのプロト作ってますが
よいツールですね、マジで
型が無いのとスコープがわかりづらいのに初めはちょっと
違和感がありましたが
感動しきり
Ruby本買って真面目に取り組みマス
UDPの送信ポート固定したいんすけど
Ipv4ならバインドすれば出来るんですが
#!ruby -Ks
require 'socket'
include Socket::Constants
udp = UDPsocket.open()
udp.bind("192.168.1.23",2323)
udp.send( "test", 0, '192.168.0.3', 2323 )
Ipv6だと要求したアドレスのコンテキストが無効です。
っていわれます。指定の仕方が間違ってると思うんすけど
わかりません。教えてください。OSはXPです。
#!ruby -Ks
require 'socket'
include Socket::Constants
u = UDPsocket.open(AF_INET6)
u.bind("fe80::820:5dff:4e86:fb41",2323)
u.send("test", 0, "ff3e::1", 2323)
>>380 感動するのは最初のうちだけ
限界が見えてくると色々と不満も(ry
mswin版でファイルを実行してその終了を待たずに次の処理に進むにはどうすればいいでしょうか?
startでは一瞬プロンプトが出て気持ち悪いです。
>>383 ruby.exeと同じディレクトリにrubyw.exeってのがありませんか?
rubyw.exeを使えば、コマンドプロンプトを表示することなく実行できますよ。
但し、標準入出力が必要なスクリプトには使えませんので、ご注意を。
385 :
381:2005/06/12(日) 09:09:57
どのインターフェースからでていくか指定したら
いけた。
u.bind("<Ipv6アドレス>%6",2323)
Rubyしか知らないmacユーザーからの質問です。
書いたプログラムと、その出力結果をみなさんどのように確認されながら作業されていますか?
私は、いつもmiというエディタをつかって作業をしています。
www.mimikaki.net
Rubyの実行結果をショートカット1つで出力・表示できるところが、とても気に入っています。カスタマイズによってはPerlもHTMLもおなじように出力できます。
しかし、そういったことができるエディタというのは他にもあるのでしょうか?
寡聞にして知らず、お伺いをたてる次第です。
是非ご意見を。
Windowsしか知らないRubyユーザーの俺では全く力になれんな!
気に入ってるんならそれ使ってればいいんじゃ?
>>386 Mac板で聞いたら。つかマクロ組めるエディタならなんだって出来るだろ。
Winにはfreeride,sciteつうのがrubyのインストール時に勝手についてきたが。
RubyつかってるRPGXPって仕様ではムービー(mpegとか)の再生ができないんですけどシステムいじくってなんとかしてムービーを再生するという方法はないでしょうか。
RPGをプレイするウインドウに表示できなくても別窓に表示して再生が終了するとムービーの窓が消えるとか。
とにかくRPGXPでムービーを再生する
>>392 イベント一覧にはないし、enterbrainのFAQにもそのイベント項目は2003まであったけどXPにはない
とあります
そこをRGSSで・・・・
自己解決しました
なんでうまくいかなくて、どうやったら解決したのか、を書いてほしいなあ。
wmv形式のやつを拡張子を無理やりwmaにして、BGMとして読み込ませたらできました。
以下どう読むとどうなるか
BGM→繰り返し再生
ME→いったっきりで繰り返さない
SE→繰り返さない、mapのBGMはとまらない
>393
もう解決したんだからアレだけど、2003っていつからXPより古くなったんだ。
2000→2003→XPじゃないの?
399 :
デフォルトの名無しさん:2005/06/13(月) 20:56:15
401 :
デフォルトの名無しさん:2005/06/13(月) 21:39:44
>>399 ツクール厨のためにRGSSスレも立ててくれよ
もうこんなやりとりうんざりだ
>>401 RPGツクールXP買ったけどインスコしてない俺に言わせれば、分割するまでもない。
別にレス多くないし。
>>401 初心者スレなんだからガマンせい。ガマンしたくないなら
ひとりでもツクール厨の上陸を許したらひどいことになるよ。
こういうのは水際で防がないと駄目。
ツクール房がなぜ、ツクール房と呼ばれるのかというと、
彼らは、Rubyスクリプトレベルの質問と、ツクールAPIレベルの質問の区別がつかず、
同じ場所で聞いているからだ。
ツクールスレをゲーム製作の板にたてるべきだな。
お前らウザいけど見逃してやるから
今のうちにちゃんとローカルルールを決めて
それを徹底させて二度とこのネタで議論しないように。
というわけで言いっぱなしで逃げずにちゃんとまとめとけ。
>>408 なにを訳の分からんことを言ってるんだ?
なんかすぐ話が逸れるな。
どうせどうわけても駄目な奴は駄目なので、ツクール厨が来て馬鹿なこと
聞くたびに思う存分叩けばいいんじゃないの?
>>406 たしかあったはずだが。
dat落ちしたか?
「Rubyではじめるオブジェクト指向プログラミング入門」みたいなのってある?
>>412 "恋するプログラム〜Rubyでつくる人工無脳"はいかが?
好みによりけりですが、序盤は入門編といった内容です。
>>413 あの本の著者ってもう死んでるらしいね
内容もあんまし良くなかったな
初犯の著者紹介で死去というのは
壮絶なデビューだな
遺稿を出版するなんてそんなに特異なことでもないような。
ruby1.6でtimeが1970年以前は使えないみたいだけど
これは1.8からtime.c持ってきて、とかいうような単純な方法では無理?
なぜ1.8そのものを持ってこない?
>>417 それはOSとかの話になる。
TimeはOSなどとのやりとりに使うtime_tのラッパーであって、time_tは
1970/1/1 00:00:00 GMTを基準にすることになってるので、負の値を許す環境
でないと無理。
外部の日付とかをちゃんと扱いたいならDateとかDateTimeを使うべき。
すいません。質問があります。
20AB年C月は何日あるか
って調べる関数とかないのでしょうか?
ruby -rdate -e 'p Date.at(20AB, C, -1).day'
ああごめん、書き間違えた。
2000年って閏年だったんだよね?
428 :
デフォルトの名無しさん:2005/06/18(土) 01:51:46
これからrubyを使っていこうと思っていますので、
宜しくお願いいたします。
>>426 原則4で割り切れる年はうるう年
ただし100で割り切れて400で割り切れない年はうるう年ではない
そんなの誰が決めたんだよ
適当なこと言うな
てきとう(‥タウ)【適当】
(形動)
ある状態・目的・要求などにうまくあうこと。ほどよくあてはまるさま。ふさわしいさま。相当。「適当な大きさにきざむ」
(2)その場を何とかつくろう程度であること。いい加減なこと。また、そのさま。
「―にはぐらかす」「―なことを言う」
Ruby2.0ではleapyear?の標準サポートが望まれる
$ ruby -rdate -e 'p Date.today.leap?'
false
$ ruby -rdate -e 'p Date.new(2000,1,1).leap?'
true
>>437 Ruby2.0 では Year クラスの標準サポートが望まれる。
newしないと判定できないってかっこわるくね?
>>440 いや、 Year::leap?(2005) としたいだけです・・・
厨房時代、担任がすっとぼけたことを言って、生徒が突っ込むと
「センセてきとー」→「ふむ、適していて当たっていると」
「センセいいかげーん」→「良い加減だと」
と切り返されっぱなしだったのを思い出したよ>431
>>441-442 $ ruby -rdate -e '[2000,2004,2005,2100,2400].each{|y|
puts "#{y} is #{Date.leap?(y) ? "" : "not "}leap year"
}'
2000 is leap year
2004 is leap year
2005 is not leap year
2100 is not leap year
2400 is leap year
なんでみんなnewしてんの?
新し物好きだから。
あたらしいことはいいことだから
ケコーン orz
訪れた人のIPをひたすらずらずら表示し続けるCGI運用してるサイトってない?
ありますよ
451 :
デフォルトの名無しさん:2005/06/18(土) 22:45:54
だったらさっさと教えろよ気がきかねーな
名前欄に fushianasan と入れてみ
fushianasan
Arrayクラスにメソッド(map_with_index)を追加し、Apache + mod_ruby上でそ
れを呼ぶと、`undefined method'と怒られるんですが、これってmod_rubyの制
限ですか?
普通のCGIやコマンドラインではちゃんと実行できるんですが。
455 :
454:2005/06/19(日) 19:01:31
456 :
デフォルトの名無しさん:2005/06/20(月) 11:52:16
コマンドラインからRubyで以下のことをやりたいです。
あとPerlでもコマンドラインで実行できればお願いします。
Linuxのawkではできたのですが、友人のcygwinで実行できないらしくて
■入力ファイル=1.lst
NAME,TITLE,DT,DD
NAME2,TITLE2,DT2,DD2
NAME3,TITLE3,DT3,DD3
■awkコマンド
awk 'BEGIN{FS=","}{print "<dt title=\"" $2 "\"><a name=\"" $1 "\">" $3 "<\/a><\/dt><dd>" $4 "<
\/dd>"}' 1.lst > 2.lst
■出力ファイル=2.lst
<dt title="TITLE"><a name="NAME">DT</a></dt><dd>DD </dd>
<dt title="TITLE2"><a name="NAME2">DT2</a></dt><dd>DD2 </dd>
<dt title="TITLE3"><a name="NAME3">DT3</a></dt><dd>DD3 </dd>
例えばこんな感じでしょうか?Linux版のRuby 1.8でしか確認してませんが。
ruby -F',' -a -p -l -e '$_ = %Q(<dt title="#{$F[1]}"><a name="#{$F[0]}">#{$F[2]}</a></dt><dd>#{$F[3]}</dd>)' 1.lst >2.lst
>457
すばやい回答ありがとうございました。大変勉強になりました!
>>247 極めて遅レスだが、自称エレガントな例
f=true #フラグをループの外のスコープで定義
array.delete_if{ |x| f &&= !(条件) }.each do
したい処理
end
delete_unlessがあればいいのに。。。 こっちがわかりやすいよね。
f=false
array.delete_unless{ |x| f ||= (条件) }.each do
したい処理
end
delete 系は破壊的なメソッドだから array を壊れちゃうのがまずい。
247のCのはヘンなんだが、最初に条件を満たした要素から
最後まで each で処理するんであれば、248-249 のようにやるべき。
自分なら
array[(array.index(条件)..-1].each { 処理 }
かな。
# filter、take、drop、take_if、drop_if とかいった関数的なメソッドがあればいいんだけど。
462 :
460:2005/06/21(火) 15:48:06
なるほど。delete_ifも破壊系なんですね。
それじゃ修正してこれでどうでせう?
f=nil
a.map{ |x| x if (f ||= (条件)) }.compact.each do
したい処理
end
a.each do |x|
if 条件..true
したい処理
end
end
間違えた。
trueじゃなくてfalse。
465 :
460:2005/06/22(水) 00:21:13
>>461 の方法も、おおなるほど、と一瞬思いましたが、
array.index(条件)
の (条件) ってどう指定したらいいんでしょう?
>>464 脱帽です。勉強になりました。
これからrubyを始めたいのですが、ruby ver1,8,3のインストーラー付き
を配布しているサイトはどこでしょうか?
osはXP home です。お手数かけますがよろしくお願いいたします。
公式サイトくらい見てほすぃ…
つかそもそも1.8.3はプレビュー版しか出ていないんでは?
ないだろう、1.8.3のインストーラなんて。
ごめんなさい。
1,8,2でした。。。
>>466 >>469 バージョン番号の区切りはカンマじゃなくてピリオドにしないと。
というのはさておき、Rubyはいいですよぉ。がんばって。
One-clickの1.8.3preview1版って出てなかったっけ、まだ。
テ、テ、テテンポラリファイルって、なにずら?
Fixnum.new(8)
ってできないんですね。newメソッドがないとサブクラス
作れないんですけど、こうなっているのは
Fixnum(というかNumeric)のサブクラスを作る必要性
がないからってことなんでしょうか?
即値として実装されているFixnum,TrueClass,FalseClass,NilClass,Symbolの
サブクラスは作れないが、Numericのサブクラスは作れる。
lib/{complex,matrix,rational}.rbあたりが実例。
>457
awkみたいな処理ってこうやって出来るんだ・・・
知らんかった。awkのスクリプト書き直して勉強してみるか・・・
>>476 オプションを使えばループや表示を省略できるので、
ワンライナーには便利ですね。
もっとも、凝り始めると目的を忘れて熱中しちゃいますが...。
479 :
デフォルトの名無しさん:2005/06/23(木) 20:13:12
環境 ActiveScriptRuby
スクリプトが作動するカレントディレクトリより下位のフォルダ
の外部コマンドをディレクトリを移動せずにオプション付きで実行し、
パイプを生成したいのですが、どう書けばよいですか?
スクリプトが動作するフォルダはfoo、外部コマンドはfoo\bar\baz\bin.exe
読み込みファイルはfoo\bar\baz\abc.conf
path = "foo\\bar\\baz\\"
out_p = IO.popen("#{path}bin.exe -option #{path}abc.conf", 'r+')
こんな感じでやってみたんですが、実行できませんでした。
コマンドプロンプトから実行したらなんかエラーが出てたりしない?
481 :
デフォルトの名無しさん:2005/06/24(金) 16:04:21
オプションで入力レコードセパレータを指定する【-0数字】なんですが
どの文字がどの数字に対応しているか知りたいです。
コマンドラインで簡単にわかる方法ありませんか?
>482 知らなかった〜。ありがとうございました!
低レベル演算(アセンブラレベルみたいな計算)ってRubyで出来る?
普通に計算すると
1 - 5 = -4
ってなっちゃうけど
1 - 5 = 251
みたいに計算したい
>>484 1 - 5 = 252 じゃないの? (1 - 5) % 256 で。
1の補数?
一言でいうとできない
488 :
484:2005/06/24(金) 18:36:16
>>485 スマソ。思いっきりボケていました…orz
>(1 - 5) % 256
で出来ました
489 :
479:2005/06/24(金) 22:49:28
実行をn秒停止させるみたいなことを実現させるのに簡単な方法はありますか?
sleep
492 :
490:2005/06/24(金) 23:20:15
sleepだったのか…
waitで探していた…orz
>>489 そのエラーメッセージには、479のコードにはない先頭の\があるように見えるのは気のせいか?
写し間違い?
でないなら、パスが通ってないとか、コマンド名を指定した文字列のミスとかじゃないの。
494 :
479:2005/06/25(土) 00:09:35
>>479 それ全然相対パスじゃないし・・・
ドライブレターがないという意味では相対なのかもしれないが
うーん…
irbsh[00:56](main):029:0> p RUBY_PLATFORM
"i386-mingw32"
irbsh[00:56](main):030:0> p RUBY_VERSION
"1.8.3"
irbsh[00:56](main):027:0> IO.popen("\\windows\\system32\\route"){|io|puts io.read}
Manipulates network routing tables.
ROUTE [-f] [-p] [command [destination]
……以下略。……
irbsh[00:58](main):034:0> IO.popen("\\dummypath\\command -opt \\foo\\bar"){|io|puts io.read}
Errno::ENOENT: No such file or directory - \dummypath\command -opt \foo\bar
from (irbsh):34:in `popen'
from (irbsh):34
from :0
irbsh[01:02](main):038:0> IO.popen("c:/windows/system32/route print"){|io|puts io.read}
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
ということで、コマンドが見つからないせいではないか。
ちゅかバッチファイルにするのはとりあえずやめて、問題を切り分けようよ。
popenしてdirだけするテストとかさ。
そもそも`\foo\bar\baz\bin.exe -option \foo\bar\baz\abc.conf'は動くの?
497 :
479:2005/06/25(土) 12:21:17
間違えた
>>479は
path = "\\bar\\baz\\"
out_p = IO.popen("#{path}bin.exe -option #{path}abc.conf", 'r+')
こうでした
path = "bar\\baz\\" にするだけで動くんじゃないの?
初回の質問から内容を間違っていたのでもう一度最初から
環境 ActiveScriptRuby
スクリプトが作動するカレントディレクトリより下位のフォルダ
の外部コマンドを、ディレクトリを移動せずにオプション付きで実行し、
パイプを生成したいのですが、どう書けばよいですか?
スクリプトが動作するフォルダはfoo、外部コマンドはfoo\bar\baz\bin.exe
読み込みファイルはfoo\bar\baz\abc.conf
sample1.rb
---------------------------------------------------------------
path = "bar\\baz\\"
out_p = IO.popen("#{path}bin.exe -option #{path}abc.conf", 'r+')
----------------------------------------------------------------
ruby sample1.rb
sample1.rb:7:in `popen': No such file or directory - bar\baz\bin.exe -option
bar\baz\abc.conf (Errno::ENOENT) from sample1.rb:7
写し間違いがおおくてすいません(これで完璧なはずorz)
これ実行するとどうなる?
path = "bar\\baz\\"
p Dir.pwd
p Dir.glob("#{path}bin.exe")
あ、わかった。
さては、スクリプトをカレントディレクトリ以外に置いて実行してるな?
で、path はスクリプトからの相対ディレクトリなんだろう?
だとしたら、これでどうだ?
path = File.expand_path("bar/baz", File.dirname(__FILE__))
out_p = IO.popen("#{path}/bin.exe -option #{path}/abc.conf", 'r+')
502 :
499:2005/06/25(土) 21:07:44
>>500 ruby sample1.rb
"C:/Documents and Settings/ユーザー名/foo"
[]
です
>>501 この方法で動作しているようです。読み込みファイルが読み込みできない
ようですが、パスにスペースが入っているからだと思います。
>>502 スペースか。そりゃ君が悪いよ。
path = "bar\\baz\\"
out_p = IO.popen(%Q("#{path}bin.exe" -option "#{path}abc.conf"), 'r+')
IO::popen([cmd, arg1, arg2, arg3], "r+") とかできたらいいのにね。
1.9ならできるけど。
掲示板をつくってるんですが、ruby には、PHPのstrip_tags みたいなのって
あるんでしょうか。
ないとしたら、正規表現で<....>みたいなのを除去するってことで、ひとまず
セキュリティ的にOKなんでしょうか。
初心者で申し訳ないのですが、アドバイスをお願いします。
ここって教えてくん丸出しな質問とかにもまじめに答えて上げた方が良いの?
答えたかったら答えりゃいいし、答えたくなかったら放っておけばいい。
好きにしてくれ。
>>506 strip_tagsに相当する機能が標準添付のライブラリには無いような。
htmlsplitというライブラリがRAAにありますが、これは該当しないかな?
"<〜>"を単純に除去する程度で良ければ、
String#gsubなどで実装してしまっても良いのではないでしょうか。
あとはCGI::escapeHTMLで記号類を変換しちゃうとか。
510 :
デフォルトの名無しさん:2005/06/27(月) 23:58:54
Rubyにおいて何でもかんでもObjectであることはわかった。
一部を除いて演算子もメソッドであることはわかった。
が、Arrayクラスのhoge[10]とかの
"["と "]"はメソッドなのかがわからない。
メソッドならオーバロードできると思うけど、、
もしかして、Arrayの[]記法は非メソッドですか?
Hushも同様にわからない。
>510
リファレンスマニュアルに書いてあるけど
Array#[]もHash#[]もメソッドでつ。
以下、しょーもないサンプル
class Hoge
def [](val)
"#{val} from Hoge"
end
end
hoge = Hoge.new
puts hoge['aaa']
ウサギ本見てみると "演算子メソッド" と説明されてた。(18.7.2)
513 :
510:2005/06/28(火) 00:43:35
>511
thxxxx!
たしかにリファレンスにメソッドであると明記してありますね。
ただ、オーバロードの仕方が書いてないし、
メソッド定義の記法が独特ですね。覚えにくいし想像しにくい。。
記号で始まるメソッド( + とか - とか ) のメソッド呼び出しは
. を省略できるというルールがあるから、
def +(val)
っていうメソッド定義は納得かつ覚えやすかったけど。。
配列だから[]でアクセスできるのは当然だと思うし、
オーバロードもできちゃうし(あんまり使わないかもしれないけど)、
仕様的には申し分ないです。ってか、rubyおもしろいな。
>512 演算子メソッドって何だよん。。
C++知ってるとoperatorうんたらのoperator書かなくてもいいってことか、と、とりあえず納得できる
(とゆーか漏れはそう納得した)んだが
Rubyの演算子メソッドってどこに起源があるんだろう? C++と共通のスーパー言語(って何だw)かな?
Smalltalk だともうちょっとメソッドっぽいというか演算子っぽくなくて、
1 + 2 * 3 が 9 になっちゃう (優先順位とか無い) よね。
ちょっと特殊なのは単項の+と-かな。
def +@
みたいに書く。
$ irb
irb(main):001:0> a=b="a"
=> "a"
irb(main):002:0> b << "b"
=> "ab"
irb(main):003:0> p a
"ab"
=> nil
こういうのってリファレンスマニュアルのどこに説明があるの?
そもそも、リファレンスマニュアルを補完するツールが irb 。し
>>517 $ irb
irb(main):001:0> a=b="a"
=> "a"
irb(main):002:0> b = "b"
=> "b"
irb(main):003:0> p a
"a"
=> nil
との違い。a=b="a"かa << "b"かどちらが作用してるのかがわからなかったから
>>517=520
リファレンスマニュアルをよく読めと言いたいところだが、確かにズバリ明記
されているわけではないな。 Ruby の本を読むと大概説明してあるんだが……。
b << "b" は b が参照するオブジェクトを破壊的に変更する。 a = b だから
a と b は参照先のオブジェクトが同じ。ゆえに a も変更される。
b += "b" にしてみたり、 object_id メソッドを使って調べてみたりするといい。
HTTPのGETをするときにRefererを送るにはどうしたら良い?
リファレンスのnet/httpの項見てもそれらしい記述無いし…
open-uriで出来るみたいだけどこれだと何故か途中で転送が切れる…orz
require 'open-uri'
arc = ''; open('
http://hoge.net/foo.dat', 'rb', "Referer" => '
http://hoge.net/'){|f|arc = f.read}
p arc.size
# => 2363
foo.datのサイズは6MByteくらいあるんだが…
>>525 手元ではそのopen-uriのでできたよ。
サイズも合ってたしApacheにログも残った。
527 :
525:2005/06/30(木) 18:45:36
え〜っ!?
require 'open-uri'
require 'net/http'
Net::HTTP.start('pc.watch.impress.co.jp', 80) {|http|
p http.get('/docs/2005/0630/pana.jpg').body.size
}
arc = ''; open('
http://pc.watch.impress.co.jp/docs/2005/0630/pana.jpg', 'rb'){|f|arc = f.read}
p arc.size
# => 32782
53
どうなっているんだ…il||li ○| ̄|_
528 :
526:2005/06/30(木) 18:53:24
>>527 ruby 1.8.2 (2004-12-25) [i686-linux]
32782
32782
529 :
525:2005/06/30(木) 19:08:18
あぁぁぁ… 。・゚・(ノД`)・゚・。
ruby 1.8.1 (2003-12-25) [i386-mswin32]
使っていたのが原因ですた
ruby 1.8.2 (2004-12-25) [i386-mingw32]
にしたら正常に動くようになりますた…orz
530 :
526:2005/06/30(木) 19:14:29
ついでにnet/httpを使う場合
リファレンスにあるようにヘッダーはハッシュで渡せる。
http.get(path,{'REFERER'=>'
http://localhost/'})
>>531 URLをGETしてレスポンスにして返してくれるクラスメソッド
正規表現で\x00みたいな文字コードもサーチさせるにはどうしたら良い?
/hoge\x00/
とか書いても引っ掛からない
>>533 後述の環境で試してみたら下記のような結果になりました。
こういうことではないのかな?
irb(main):002:0> /hoge\x00/ =~ "This is hoge\x00 for test"
=> 8
ruby 1.8.2 (2005-04-11) [i386-linux]
irb 0.9(02/07/03)
535 :
533:2005/07/01(金) 13:24:48
あれ?
やってみたら確かに引っ掛かる…何か寝ぼけていたのか…orz
トンクス
ファイルをテキストモードで開いてたからうまく読み込めてなかった
とかいうオチはあるっけ?
unixenとmsvcrtではそういう違いはないはず。bccwinとdjgppは今わからん。
あとはVMSくらいだが、これはとんでもなく違うんで、その程度の違いじゃ驚かんな。
538 :
デフォルトの名無しさん:2005/07/02(土) 13:33:00
>>538 ベタにはこうか。
print("1st: ", rand(10), ", 2nd: ", 10+rand(90), ", 3rd: ", 100+rand(900), "\n")
あと、個人的にだけど、配列の初期化は(10..99).to_aのほうが直感的な気がする。
ruby-mode.elで、%q|hoge#fuga|みたいなのがあると、
method(%q|hoge#fuga|)とかで対応する括弧の移動とか、
M-;のcomment-dwimがうまく働かないっす。
%q||でなく//でも同じ。
>>539 なんでこれが思い浮かばなかったんだろうか…
ありがとうございました!
cygwin の Ruby を使っています(ruby 1.8.2 (2004-12-25) [i386-cygwin])。
それで、Digest::MD5 クラスを使おうとしているのですが、
require 'digest/md5' とすると、
/usr/lib/ruby/1.8/i386-cygwin/digest/md5.so: dlopen,
Win32 error 126 - /usr/lib/ruby/1.8/i386-cygwin/digest/md5.so (LoadError)
from zzz.rb:2
というエラーが出てしまいます。一方、require 'digest/sha2'だとエラーは出ません。
これは自分の環境だけなのでしょうか…。
md5.soはちゃんとそこにあるの?
思い出は、いつもそこにあります、けど?
古いアルバムの中に隠れてた
>>543 はい、あります。どうやら実体は
(cygwinインストールディレクトリ)\lib\ruby\1.8\i386-cygwin\digest
にあるようなのですが(なぜ usr がパスに入っていないのかは謎です。
ls では /usr/lib/ruby/1.8/i386-cygwin/digest でリストできるので
そこであることは間違いないと思います)、そこにある md5.so を消すと、
zzz.rb:1:in `require': No such file to load -- digest/md5 (LoadError)
というものにエラーメッセージが変化します。ですから、ファイルが
ないという問題ではないようです。
ls -l でリストしてみても、
-rwxr-x---+ 1 xxxxx Users 6656 Jan 19 06:21 md5.so*
-rwxr-x---+ 1 xxxxx Users 15360 Jan 19 06:21 sha2.so*
とアクセス権は同じなので、その問題でもないようなのですが…。
cygwin が何かおかしいんでしょうかね…。何回か再インストール
してみたんですけど…もう一回やり直してみようかな…
547 :
546:2005/07/03(日) 12:57:28
>(cygwinインストールディレクトリ)\lib\ruby\1.8\i386-cygwin\digest
>にあるようなのですが(なぜ usr がパスに入っていないのかは謎です。
mount -f -s -b "(cygwinインストールディレクトリ)/lib" "/usr/lib"
でマウントされていました。
>>542 > Win32 error 126 - /usr/lib/ruby/1.8/i386-cygwin/digest/md5.so (LoadError)
126はERROR_MOD_NOT_FOUNDだな。そのmd5.soが必要としてるdllが見付からないんでは?
objdump -p /usr/lib/ruby/1.8/i386-cygwin/digest/md5.so | grep 'DLL Name'
を試してみ。
549 :
546:2005/07/04(月) 01:00:19
>>548 レスありがとうございます。
コマンドを実行してみたところ、
DLL Name: cygruby18.dll
DLL Name: cygcrypto-0.9.7.dll
DLL Name: cygwin1.dll
DLL Name: KERNEL32.dll
DLL Name: cygruby18.dll
と出ました。どうやら /bin ディレクトリが dll 検索パスに入っ
ていなかったのが原因のようです。…で、いったん Windows の環境変数 PATH に
値をセットしてエラーが出なくなるのを確認して、cygwin のサイトを見たら、
なんかデフォルトで PATH がそこに設定されるみたいなことが書いてあったので
Windows の設定から PATH の設定をなくして再度挑戦したら動きました…。
なぜ何も設定しなくても動くようになったのかはわかりません。
もしかしてcygwin インストール後に Windows 再起動が必要だった
りするのかも…(再度挑戦するまでの間に別の件でWindowsの
再起動をしています。ちなみにOSはXPです)。
直接的な原因はわからずじまいなのですが、動くようになって助かりました。
ありがとうございました。
550 :
546:2005/07/04(月) 23:47:49
気持ち悪いので、もう一回 Cygwin を再インストールしてみました。すると、
/usr/lib/ruby/1.8/i386-cygwin/digest/md5.so: No such file or directory - /usr/li
b/ruby/1.8/i386-cygwin/digest/md5.so (LoadError)
from zzz.rb:2
というエラーになりました。調べてみると、
cygcrypto-0.9.7.dll(とKERNEL32.dll)がありませんでした。
前回と今回でなぜエラーメッセージが変わったのか、前回にはな
ぜ cygcrypto-0.9.7.dll があったのか、それは謎ですが…、いろ
いろで調べていたところ、ruby とは別に openssl のインストール
が必要なことを知りました。そしてそれを入れてみたところ、見事
に動くようになりました。
お騒がせしてすみませんでした。ありがとうございました。
>>540 少なくとも今のEmacs添付のライブラリを使うかぎり、
そこまで対応するのは無理と思われ。
埋め込み式じゃない#は、quote以外ではエスケープすることを勧める。
>>550 wINDOWSではなにかあったらとりあえず再起動がデフォです(W
二つの文字列の先頭から連続する共通部分を抜き出すにはどうすればいいですか?
"This is a pen", "This is the pen"なら"This is "を返すようなの。
一文字ずつ比較するしかないような気が。
str1 = "This is a pen"
str2 = "This is the pen"
i = 0
i += 1 while str1[i] && str1[i] == str2[i]
p str1[0,i] #=> "This is "
555 :
デフォルトの名無しさん:2005/07/06(水) 11:43:51
rubyのオーバーヘッドをどれだけ減らすかがポイントなのか
>>556 rubyじゃ、頑張りすぎないことが大事なんだよ。
Rubyでベタなループ書く奴は敗北者
1. Rubyで不自然なコードを書く奴は敗北者
1.1 ベタなループを避けるために不自然なコードを書く奴は完全な敗北者
(例外) ネタとして楽しむのが目的な場合はこの限りでない
Rubyでカリカリにチューンを楽しむ俺がいる
今時のマシンじゃC/C++の場合ちょっとやそっと非効率な
コード書いても体感できることも少なくなってきている品
>>560 そのカリカリにチューンした例、見せてよ。是非!!
でかい(数MByte以上)StringオブジェクトをIOオブジェクトに見立てる事って出来ますか?
IO.pipeだとでかい文字列突っ込むとハングる(?)様だし…
ファイルからの読み込みとメモリ上のデータの読み込みのI/Fを一本化したいです
FileオブジェクトをStringオブジェクトに見立てるでも問題ないです
新規にクラスを定義すれば出来るけどもっと簡単な方法がないかなと…
564 :
562:2005/07/07(木) 16:31:23
>>563 ぐは…書き忘れスマソ
機能的にはまさに求める物ですが外部拡張は出来れば避けたいです…
staticにリンクすればいいじゃない
「外部拡張」って何?
>>564 避けたい理由を書かないと叩かれて終わりなわけだが。
あとStringIOは標準添付の拡張ライブラリなので普通は使えるはず。
RGSSか?
標準ライブラリ以外は全部糞
「標準ライブラリ」って何?
>>570 最初から付いてくるライブラリ。require して使えるもの全部。require しなくても使えるのは組み込み。
また俺定義か
「俺定義」って何?
前もこういう流れがあったなぁ。
>>571 >
>>570 > 最初から付いてくるライブラリ。
今は「標準添付ライブラリ」と呼ぶのが主流じゃないかな。
「俺的標準添付ライブラリ」これで良いだろ
んで話をもどすけど >564 にとって StringIO がダメな理由は拡張ライブラリだからなの?
物凄い富豪的な解決法なので実際の運用状況と応相談だが、Fileオブジェクトを read しちゃって String にするという荒技はあるかもしらん。
標準ライブラリの基準はそれなりに使えてメンテナが信用できるかどうか。
>>578 > 物凄い富豪的な解決法なので実際の運用状況と応相談だが、Fileオブジェクトを read しちゃって String にするという荒技はあるかもしらん。
逆だろ、したいことは。
> IO.pipeだとでかい文字列突っ込むとハングる(?)様だし…
>>562はdeadlockという言葉について小一時間調べてこい。
難しい話の最中にすみません。教えてください。
a = 'ああああ12いいいいい345ううう12ええええ3おお'
という全角文字列から全角数字が2つ以上現れる箇所のスタート位置を示す
配列を得たいのです。
このケースでは、[4,11,17] です。文字コードはSJISです。
a.scan(/[0-9]{2,}/)までは判ったのですが、あとが続きません。
教えてください。
>>581 こんなのはいかがですか?結果はバイト単位になりますけど。
a = 'ああああ12いいいいい345ううう12ええええ3おお'
positions = Array.new
a.scan( /[0-9]{2,}/ ) { positions << Regexp.last_match.begin( 0 ) }
p positions # => [8, 22, 34]
583 :
581:2005/07/09(土) 19:21:36
(1)582さん、ありがとうございます。なるほど、こりゃあいいです。
last_matchですか。勉強になります。
begin(0)はカッコがなくても、マッチの先頭のオフセットを返すんですね。
スタート位置付きのindexを使ってaから直接取ってくるのもあるかと
思ったんですが、なるほどですね。
(2)もひとつ教えてほしいのですが、
a.scan(/./s) do |item|
string_array.push item
end
みたいにして全角文字を含む配列を使おうとしています。
これに対応して、stringクラスで、全角文字を1と数えるような
indexはあるんでしょうか。byte単位で判定するから、そもそも無理ですか。
なにせ日本生まれのrubyですから、ひょっとしてそういうサービスもあるかと
思いまして。
RubyGemsってどういうものなのかが分からない……
どこか日本語で、RubyGemsについて解説してくれているサイトとかないだろうか?
>>583 具体的に何がやりたいのかがよく分からないので、何とも言えないが
とりあえずリファレンスでjcode.rb(添付ライブラリ)を調べてみると幸せになれるかも
585 :
581:2005/07/09(土) 23:35:31
jcode.rb の紹介ありがとうございます。
(日本語のtrなんかは使ったことありました。)
a.jindex('あ') と言う感じなものはなかったようです。
るびまになかったか?<RubyGemsの紹介
587 :
584:2005/07/10(日) 00:55:22
>>586 連載記事はあったけれど、開発の経緯しか書かないらしく
初心者向けの解説記事が掲載される気配はありませんでしたorz
>>
jcode.rbを使うならこんな感じ?
a[ 0, a.index( 'あいう' ) ].jsize
jcode.rbを使わない方法も即席で考えてみました。
a[ 0, a.index( 'あいう' ) ].scan( /./s ).size
>>587 ようやインストール方法を知りたいということ?
それともgemの中身の説明とかがほしい?
具体的に何を知りたいのか書いてもらえますか。
591 :
587:2005/07/10(日) 20:29:58
>>590 自分でパッケージを作るにはどうすればいいのか、が知りたいです。
592 :
581:2005/07/10(日) 20:45:49
588さん 色々とありがとうございます。勉強になりました。
不明な点がありましたら、また質問させてもらいます。
その節はよろしくお願いします。
gemって自動取り込み装置ですか?
わたしはwindows上でrubyを利用してますが、時々install.rbがうまくいかな
いことがあり、何でも自動でするのも良し悪しだなあと思うことがあります。
何をしているか要点だけ書いたメモが付いていて、代替的な方法があれば、
手でやっても良いなあ、と思うことがあります。
gem とかRailsとかが流行っているみたいですけど、自分の感覚を超えた自動
化って何か落ち着かない感じがあるんじゃないかと思います。出来上がりは
確かに時間はかからないようですけど、その仕掛けを納得するのが難しく、時
間がかかりそうに思います。
すみません、初心者の分際で。
593 :
デフォルトの名無しさん:2005/07/11(月) 02:02:22
WINDOWS上で、RUBYを使用しシリアル通信を行いたいのですが、
どうすればよいでしょうか?
ググッてみたのですが、分かりませんでした。
拡張子が.soとか.dllじゃないライブラリをロードしたいんだけどrequireではダメっぽいので
loadで実験しているんだけどエラーになる
test.rb
p $:
load "nkf.so"
#普通のライブラリがロードできないと話にならないのでnkf.soで実験
#=>
[〜, "."]
test.rb:2:in `load': ./nkf.so:1: Invalid char `\220' in expression (SyntaxError)
from test.rb:2
>dir
〜
2005/07/03 19:18 729,088 msvcrt-ruby18.dll
2005/07/03 19:19 119,808 nkf.so
2005/07/03 19:20 395,154 ruby.exe
〜
>ruby -v
ruby 1.8.2 (2004-12-25) [i386-mingw32]
何で…?
>>592 至極もっともな意見だと思う
しかしそれでも、雑多なライブラリをインストールする場合、その手間を省きたい場合はあるわけで。
「代替的な方法」を提示した上で、rubygemsやinstall.rbみたいな自動化にも対応してくれるのがベストかな
>>596 ほんとだ、require "nkf.so"なら正常に出来るのに……
load は ruby スクリプトを読み込むので、拡張ライブラリの読み込みは無理。
そのエラーは、拡張ライブラリを無理矢理 ruby スクリプトと解釈しようとしてエラーになっているんだろう。
普通に require 'nkf.so' ってやればできるはずだけど?
599 :
597:2005/07/11(月) 18:02:22
なるほど、そういうことか!
596ではないが、疑問が氷解した。ありがとう
あと、今気づいたんだが
>>596でrequireではダメっぽいって言ってるのは
もしかして拡張子を指定していないからでは?
requireで補完してくれる拡張子は、.rb/.dll/.soだけだったはず
600 :
596:2005/07/11(月) 19:04:54
>>598 そうなのか…
ということは拡張子が.rb/.dll/.so以外の物を読み込むことは不可能か…?
>copy /y nkf.so nkf.foo
>ruby
require "nkf.foo"
^Z
-:1:in `require': No such file to load -- nkf.foo (LoadError)
from -:1
今はもう.dllは探さないし、読み込むのもそれだけ。
いまは もう さがさない そのディーエルーエルー
603 :
593:2005/07/11(月) 22:30:37
>>595 ありがとうございます。これから試してみます。
>>600 何がしたいんだ?
> ということは拡張子が.rb/.dll/.so以外の物を読み込むことは不可能か…?
単にできるかどうか知りたいということだけなら、不可能でFA。
他にやりたいことがあって袋小路に入ってるんなら、本来の目的を書けばもう
ちょっと別の答えがあるかもしれない。
605 :
596:2005/07/12(火) 05:06:50
>>604 mingw/mswinのRubyの拡張の実体はDLLということなのでRubyのライブラリ以外の機能も一緒に実装したい
が、ライブラリ以外の機能を利用するアプリが特定の拡張子(.rb/.dll/soどれもNG)じゃないと認識してくれない
それぞれを分ければいい話なのだがファイルの数を出来るだけ増やしたくなかったので一緒に出来ないかと考えた
う〜ん…無理ならあきらめるべきか…どうしても必修な機能ってわけでもないしなぁ…
NTFS必須にしてハードリンク。
というか
>>596の話は初心者質問スレ向けとは思えないんで、
本スレに移動したほうがよくはないか?
どうせ答えるやつは同じなんだし。
609 :
596:2005/07/13(水) 02:03:58
>>607 まさにそのような感じのことをやっています
それで、Rubyスクリプトのデバッグ用の関数、クラスもプラグインに統合できないかなと
どうしても必要なわけではないので簡単に行かないようならあきらめます
>>609 > まさにそのような感じのことをやっています
> それで、Rubyスクリプトのデバッグ用の関数、クラスもプラグインに統合できないかなと
だとしたら
>>607のような構成にしない限り↓は不可能だと思うんだが。
> どうしても必要なわけではないので簡単に行かないようならあきらめます
なんか考えてることがずれてる?
612 :
591:2005/07/14(木) 20:24:06
>>611 おかげでgems理解の糸口がつかめた、ありがとう!
いつかちゃんと理解できたら、解説記事でも書いてみたい
symbolって、何に使うと有効なんでしょうか?
有効かどうかは価値観による
613じゃないけど、使用例見たいっす。
617 :
デフォルトの名無しさん:2005/07/16(土) 10:33:24
Cでexitのようなプログラムを終了させる関数はあるのでしょうか?
618 :
617:2005/07/16(土) 10:42:12
まんまexitでした
REXML について質問です。
e = REXML::Element.new( "new_element" )
e.text = "<<"
とすると
e.to_s # => "<<"
となってしまうのはバグですか。それとも仕様ですか。
& は自動的にエスケープしてくれるもんだと思っていましたが。
む。
e.text = "<<"
とすると
e.to_s # => "<new_element><<<new_element>"
の間違いです。すみません
>>621 new メソッドの引数 raw であいまいさを回避することはできました。
それでも 620 で書いた現象は腑に落ちませんが…。
どうもありがとうございました。
rtagsってもうないの? irb-toolsもRAAからなくなってるし。
624 :
でふぉるとぺーぺー:2005/07/20(水) 22:59:05
IPを文字位置から指定して、指定した文字数を表示させたいんですが、その手法が見つかりません。
だから配列を使って、以下のようにやってみました。"."で区切るってことをやりたいのですが、
Str = ("123.456.789")#IPと思って
array = Str(/"."/)
でarrayの[2]の中身を抽出したいんですけど(789の部分)、この書き方間違ってます?
789って文字を表示させたいんですよねー。
これで
print array[2]
ってやってもERRORでるし。
どうやったらいいのでしょう?
>>624 array = str.split "."
でどう?
626 :
& ◆1nX/btnIr6 :2005/07/20(水) 23:21:59
>>625 できましたー!!ありがとうございます!
d(゚Д゚)☆スペシャルサンクス☆( ゚Д゚)b
でもなんでダブルクォーテーションだけで良かったんですか?
仕様でしょうか?
正規表現リテラルとか
629 :
デフォルトの名無しさん:2005/07/21(木) 00:15:56
>>628 (・∀・)ほう
わかりました。ありがとうございます。(TдT)
630 :
デフォルトの名無しさん:2005/07/21(木) 01:54:30
ドウモ〜〜〜ッ!!お〜o(⌒0⌒)oは〜♪ハジメマシテ〜〜〜ッ☆☆(*⌒ヮ⌒*)
私は27歳のOLしてるのぉ〜〜〜っ♪(#⌒〇⌒#)キャハ
うーんとー、私メル友がすっごくすっごく欲しくってー、\(⌒∇⌒)/
探してたら(◎_◎)なんとっ!☆彡(ノ^^)ノ☆彡ヘ(^^ヘ)☆彡(ノ^^)ノ☆彡
素敵な掲示板♪を発見!!!!(^o^)//""" パチパチパチ
あやしい所とか…{{ (>_<;) }} ブルブルすごい数の掲示板がありますけど、
これ全部1人の方が管理しているんですか?(@@;)すごすぎ …
てなわけで、ついつい書いちゃったのらー(o^v^o) エヘヘφ(`∇´)φカキコカキコ♪
メル友に、なってくれるよねっ。(*^-^*) お・ね・が・い♪(* ̄・ ̄)ちゅ♪ッ
え?くれないのぉ〜?(;¬_¬)そんなのいやいや〜〜、ガ━━━*ワ)━━━ン
なってくれなかったら、( `_)乂(_´ ) 勝負! \(^o^)/
☆○(゜ο゜)o ぱ〜んち、☆(゜o(○=(゜ο゜)o バコ〜ン!!("※)=◯)`ο)・;'パーンチ
(>_<) いてっ!ダメ!! ゛o(≧◇≦*)oo(*≧◇≦)o″ダメ!!
(☆o☆)きゃ〜〜(@_@;)やられた〜〜(o_ _)o ドテッ ガ━━〔Ё;)━━ン!
(+_+) 気絶
631 :
デフォルトの名無しさん:2005/07/21(木) 11:22:03
threadで
Thread.start {
fh = open("| ping ***.**.***.***")
count = 0
while !fh.eof
if count <= 3 then
print fh.gets
count = count + 1
else
exit
end
fh.close
}
を実行したいのですけど、最後の"}"がsyntax errorになります。
何が間違っているのでしょうか??
インデントとかしなよ
whileに対応するendがないよ。
いや、ifに対応するendがないのかもしれんけど。
634 :
デフォルトの名無しさん:2005/07/21(木) 12:02:57
あ ほんとだw
寝不足が単純ミスにつながったー ( p_q)エ-ン
ありがとうございました。
インデントはあって、単に通常のブラウザではそれが表示に反映されてないだけなんだよ
&nbsp;使っとけ
>>632は適切にインデントすりゃ、すぐに問題解決するよってことだろ。
ここでの見栄えなんか関係なく。
適切にインデントしてても気づかない人は気づかない気もする。
インデントに8スペースも使ってると一瞬なんの言語だ? と思ってしまう。
>>640 いやだから、 Navi2ch なら
>>631 が適切にインデントしてたことがわかる、
って言ってるのに。
>>643 print fh.gets
count = count + 1
あたりはされてない
exit
もな。
なんでこんなくだらないネタばっかりレスが付くんだよ。
適切に…
Thread.start {
fh = open("| ping ***.**.***.***")
count = 0
while !fh.eof
if count <= 3 then
print fh.gets
count = count + 1
else
exit
(end) <抜けている
end
fh.close
}
こんな感じ?
>>646 ・誰でも参加できる単純なネタだから
・くだらないことに熱くなっちゃう人が紛れ込んでるから
インデントスタイル宗教論争がはじまる悪寒。
650 :
デフォルトの名無しさん:2005/07/21(木) 18:44:05
scan(re) の存在に気づかずに自分で
class String
def indices(arg, &block)
pos = 0
while not (pos = index(arg, pos)).nil? do
yield pos
pos += 1
end
end
end
"hogehogefugagufa".indices(/h./) {|a| p [a, $~] }
みたいなのを作ったんだけど、こう書くと$~が取得できないんだね。
スコープの関係上そうなるのは分かったんだけど、$~に値が入るように
書き換えることもできる?
$~ という変数名にこだわる必要がなければ、
yield pos, $~
で良いと思うけど。
652 :
650:2005/07/21(木) 21:41:50
>>651 ありがと。やるなら $~ にこだわりたいなぁ。無理なのかな。
自作クラスに正規表現を使ったメソッドつけるときに
ヤな感じになったりしそうなんだけど。
このスレの住民がpython使いでなくて本当に良かった・・・
俺、兼ねてますが……。
ともに初心者レベルだけど。
>>650 class String
def indices(arg, &block)
pos = 0
setter = eval("proc{|m|$~=m}", block)
while (pos = index(arg, pos)) do
setter.call($~)
yield pos
pos += 1
end
end
end
文字列関係のユーティリティって
Stringに突っ込むのが一般的なの?
657 :
650:2005/07/21(木) 23:48:52
>>655 なるほどねぇ。eval に第二引数とかあったんだ。
あと、nilがfalseで評価されるってのも言われるまで
忘れてた ノ(´д`*)
勉強になりました。
あとは、while not とか書かないで until って書こうよ、とも思ったな
rubyを初めて弄っていますが、
rubyからC++やJava, Perl, C#を扱うことはできますか?
可能ならサンプルもお願いします
>>659 できますが Ruby 初心者がサンプル見たくらいで扱いこなせる代物ではありません。
扱うって何だ?具体的に何がしたいんだ。
>>659 gonzui の langscan あたりが参考になると思います。
とか言ってみるテスト
初心者質問失礼します。
「恋するプログラム」を買ってきてrubyインスコしてrdeをダウンロードしてきて最初のサンプルを打ってみると、
ruby-1.8\bin\ruby.exe: No such file to load -- debug2 (LoadError)と出てしまうのですが、どうすればよいのでしょうか?
>>663 どっかからdebug2.rbというファイルを見付けてきて、
ruby -e "puts $:" で出て来るディレクトリのどこかにおく。
665 :
デフォルトの名無しさん:2005/07/22(金) 22:58:35
こないだ、初めてRubyGemsを使ったんだよね。
インストールしたのは RMagick-win32-1.7.0-mswin32 で
Rubyのバージョンは ruby 1.8.3 (2005-05-12) [i386-mswin32]。
インストールが終わって、サンプルスクリプトを実行したんだけど
`require': no such file to load -- RMagick (LoadError)
とエラーがでるんだよね。
ruby\lib\ruby\gems\1.8\gems\RMagick-win32-1.7.0-mswin32\lib を
$: に追加するとエラー出さずに動いてくれたから、RUBYLIB に上の
PATHを追加すればとりあえず正常に動くようになるとは思うんだけど
RubyGemsって、インストールする度にRUBYLIBにPATH追記しないと
いけない仕様なの?
それともインストールが完全に成功してなかったのかな。
>>666 他のgemパッケージをインストールしてみて、それもパス追記が必要ならRubyGemsがおかしい。
パス追記が必要でなければ、RMagickのgemパッケージがおかしい(or Windowsでテストしてない。)
668 :
名無しさん@Linuxザウルス:2005/07/23(土) 03:54:46
>>616 >俺はいつもハッシュのキーとして使ってるよ↓
そこで、(出力の時などに)キーでソートしたいときに困る訳ですよ。
結局to_sするはめに..
一般的にいうとソートしたくなる時が少ないのでは?
頻繁にソートするとなると、そーときはArrayでも使うだろうし。
to_iメソッドをオーバライドして文字列があれば
変換しないようにしたいんだけど、こんなエラーがでるのよ。
`to_i': super: no superclass method `to_i' (NoMethodError)
誰か助けて。
class String
def to_i
if /^-?\d+$/ =~ self
return super()
end
return self
end
end
foo = "-10"
p foo.to_i
エラーメッセージの通りだよ
Stringのスーパークラス(Object)にto_iメソッドは定義されていない
というか、オーバーライドするのなら return self だけで十分じゃないか?
class String
orig_to_i = instance_method(:to_i)
define_method(:to_i) do
if /^-?\d+$/ =~ self
return orig_to_i.bind(self).call
end
return self
end
end
673 :
670:2005/07/23(土) 12:03:59
>>671 ごめん。エラーの意味はわかったんだけど
なんでreturn selfだけで十分なのかわかんない。(´・ω・`)
>>672 ありがとう、あなたは私の恩人です。トム。
わからんメソッドだらけだからリファレンス読んでくる。
674 :
671:2005/07/23(土) 12:21:55
ああごめん、俺勘違いしてた
"300".to_iで"300"を返すようにしたいのかと思ったんだ
で、トムこと
>>672のコードでも上手くいくけど
こういう書き方もある↓
class String
alias to_i_original to_i
def to_i
if /^-?\d+$/ =~ self
return self.to_i_original
else
return self
end
end
end
675 :
トム?:2005/07/23(土) 20:17:43
そっちのが普通かも知れん。
ただ、aliasはローカルスコープじゃないから
二重三重に定義し直そうとするとはまる。
676 :
670:2005/07/24(日) 00:49:10
>>674 なるほどこれだと俺にも詳らかによくわかる。
ありがとう。トム。
>>666 オレもgemsはぜんぜん知らないんだけど、 require_gems てのがあるんじゃなかったっけか?
set RUBYOPT=rubygems
HTMLをツリー構造として扱えるライブラリってありますか?
html.each_childで子要素全てにアクセスできる、みたいな。
(htmlsplit.rbにツリー構成機能を足したような感じ)
REXMLでも同じ事はできるんだけれども、もっと軽くてシンプルなものを探してます。
自分で書いてみれば? 別の教えたとしても不満言われそうだしな。
htreeは?
日本語マニュアルがないから没
プログラム走らせているときに、どこの関数で何秒費やしたとか
詳細な情報を出力してくれるライブラリの名前なんだっけ。
前やったことあったきがするのであると思うんだけど。
raaで調べようかと思ったら、落ちてるし。
profile
おお。めっちゃサンクス。
686 :
679:2005/07/27(水) 00:28:20
>>680 「自分で書くよりまず既存の物を探せ」という親からの遺言で
>>681 こんなライブラリがあったんですね
教えていただいてありがとうございます!
結局は自分で書いてしまいましたが
そんなに難しいものか?
いい加減な HTML までフォローしようとすると、結構面倒な気はする。
入れ子がグダグダになってたり、閉じ用のタグが無くても良いものもあったりなどなど。
……というか、ライブラリあったのね。
昔、REXML ではダメポな HTML を処理しようとして、作りかけて投げた。
結局は、決め打ちで処理して良しとした。
690 :
679:2005/07/27(水) 11:06:17
691 :
679:2005/07/27(水) 11:08:54
すいません、途中で送信してしまったために文章がおかしくなってます。
正しくは
「htmlsplit.rb の機能に頼っているうえ
その場しのぎで書いたために、使い勝手に欠けるライブラリですが... 」
です。
>>688 他の人のソースコードを読むと参考になることが多いので。
>>690 多謝です。拝見いたします。
694 :
デフォルトの名無しさん:2005/07/27(水) 15:45:01
画像を定期的にWEBからダウンロードして指定のファイル名で保存するという
ツールを探していたところ
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1374332 >ruby -r "net/http" -e "Net::HTTP.get_print 'hostname','/yyy.mda'" > yyy.mda.savefile
という記載を見つけrubyをインストールして上記スクリプトを実行するところまで
辿り付きました。っが、ダウンロードする画像がすべて壊れてしまいます。
まだrubyについてこれから勉強していく前段階なので
自分の環境がおかしいのかこのスクリプトに何か足りないのかも分かりません。
お手数ですが、誰かこのスクリプト確認していただけませんでしょうか
ruby -r "net/http" -e "Net::HTTP.get_print 'ca.c.yimg.jp','/weather/1122445680/weather.yahoo.co.jp/weather/jp/images/satellite/img/jp_1.jpg'" > jp_1.jpg
>>694 ひょっとしてWindows?
だとしたら、Net::HTTP.get_print 〜 の前に、$stdout.binmode を入れてみて。
tagiter ってみんな使わないの?
>>696 試しにマニュアル読んでみたけど、使い方が今ひとつはっきりしなかった
RPG ツクールXP付属の
RGSSで、
外部プログラムである、IEをゲーム中から
起動するのはどうかけばいいですか?
あげ
とりあえず、大した必要もないのにスレをageず
きちんとsageてください
話はそれからです
というか、RGSSからIEを起動して何に使うんだ
>>700 こちらの希望のページを開かせようとおもって
あげ
execなんとか、をつかえばいいのか
夏真っ盛り
質問の仕方から覚えた方が良いな。
俺は RGSS だからといって冷たく当たる気は無いけど。
別スレ立てろと言ってた人の気持が、ちょっと分かった。
↓さて、次の質問の方どうぞー
{ '192.168.10.3', '192.168.2.1', '192.168.10.10', '192.168.9.100'}
というようなIPアドレスを格納した配列があるのですが、
これを昇順に並べて返すよい方法はないでしょうか? 上の例だと
{ '192.168.2.1', '192.168.10.3', '192.168.10.10', '192.168.9.100'}
となれば言いのですが。 一旦12ケタの数字に直すのが一番でしょうか?
1番がどうかと言われてもなぁ、好きにやったら良いかと。それで良いんじゃない?
他には 8bit ずつ処理するとか、2進数に戻すなど。
>>704 メールアドレス欄には「sage」とだけ書くこと。
余分な物を書くとageと同じ扱いになる。
>>706 splitなんかで12桁に戻すのがベストだと思う
他にいい方法もないだろうし
何故に split ……
>>706 並べ替え後の順序が間違ってない?
require "ipaddr"
ipaddr_list = ['192.168.10.3', '192.168.2.1', '192.168.10.10', '192.168.9.100']
p ipaddr_list.sort { |a, b| IPAddr::new(a).to_i <=> IPAddr::new(b).to_i }
というわけで早速既存のコードを全部 sort_by 使って書き直してみようと思ったけど、
Enumerable#sort_by! って無いのね?
Enumerable#sort! もないけどな。
あ、そういえばそうだね。
まあそっちは Array#sort! があるからあまり気にならないけど。
moduleに定義したメソッドは、includeするとインスタンスメソッドとして使用できますが、これをクラスメソッドにするにはどうしたらいいんだっけ?
なんかclass_evalとかinstance_evalとかを駆使した方法を見た覚えがあるのだが。。
>>718 evalなしでも実現できる。includeでなくextendを使えばいい
720 :
デフォルトの名無しさん:2005/07/29(金) 07:00:41
eclipse + rdt(eclipse rubyプラグイン) + cygwin rubyで開発してる人いる?
そうか、よかったな
pっていう変数に代入したくないな。
ディレクトリを指定して、ファイルの生成を行うシンプルな方法ってないだしょうか。
いまだ
File.open(file_name,"w").write(contents_body)
FileUtils.mv(file_name,dir_path)
みたいに作ったファイルをわざわざ一度移動させるのが、
なんかもっさりしとってめんどくさい。
>>725 下記のような方法じゃ駄目ですか?
File.open(dir_path + "/" + file_name,"w").write(contents_body)
`touch #{dir_path}/#{file_name}`
>>725 それ専用のメソッドを作るのが良いと思うよ
>>726 その方法だとディレクトリが存在しないときにエラーが出てしまう
>>728 >その方法だとディレクトリが存在しないときにエラーが出てしまう
・・・存在しなければ自動的に作ってしまうメソッドを組むしかないか。
でも、そんなメソッドがあると、コードのなかで混乱しそうだ。
「突然」作成されるディレクトリ。
やはり一度作成されたことを、明示的にコードのなかで記述しておいたほうが良さそう。
>>729 >やはり一度作成されたことを、明示的にコードのなかで記述しておいたほうが良さそう。
多少冗長でも、わかりやすいプログラム、
「プレゼンテーションとしてのコーディング」を意識する、ってとこでしょうか?
731 :
デフォルトの名無しさん:2005/08/01(月) 13:34:16
>>731 ごもっとも。ファイルの所在のことだけを示してたんで、
書き込んだ後のことは考慮してませんでした。
自分ではopenにブロックを渡して自動的にcloseするようにしてます。
>>728 最終的にファイルを配置するディレクトリは存在するものと思ってました。
そのディレクトリが存在しない場合も考慮するのであれば、
そもそものFileUtils.mvでも駄目ですよね?
対象ディレクトリの有無を検査するとかmkdirを実行するとかは、
ファイルを生成する前の処理しておくもんだとばかり...。
mvなら勝手にディレクトリ作ってくれるよ
>>731 GCのときに勝手にcloseするんでなかったっけ。
明示的に閉じた方が良いってのは分かるけど。
>>734 あれ?下記のいずれでもエラーになるんです。
ディレクトリを作らせる指定が必要?
ruby 1.8.2 (2005-04-11) [i386-linux]
FileUtils.mv( 'junk.dat', 'new-dir/junk.dat' )
FileUtils.mv( 'junk.dat', 'new-dir/' )
/usr/lib/ruby/1.8/fileutils.rb:590:in `rename': Not a directory - junk.dat or new-dir/ (Errno::ENOTDIR)
from /usr/lib/ruby/1.8/fileutils.rb:590:in `mv'
from /usr/lib/ruby/1.8/fileutils.rb:579:in `fu_each_src_dest'
from /usr/lib/ruby/1.8/fileutils.rb:861:in `fu_each_src_dest0'
from /usr/lib/ruby/1.8/fileutils.rb:861:in `fu_each_src_dest'
from /usr/lib/ruby/1.8/fileutils.rb:579:in `mv'
from -e:1
>>736 こっちで同じスクリプトを実行したら、1.8.1, 1.8.2 共にエラー無く動作したんだが……
もちろんディレクトリも自動で作ってくれた
なぜ
libcの仕様が違うんじゃないの、とか適当に勘でいってみる。
ビンゴでした。libcを変えてみたら自動で作ってくれるようになりました。ありがとうございました。
ということは結局、ちゃんとディレクトリの有無を確認するべきなんだな
それか、ルートディレクトリにしかファイルを生成しないようにしちゃうか。
これでいいだろ
`ruby -run -e mkdir -- -p #{dir_path}`
`ruby -run -e touch -- #{dir_path}/#{file_name}`
FileUtils.mkdir_p でどうでしょ
良いと思う。
つーか、元のお題がすっ飛んでる気がするが、気のせいか?
すっ飛んでるのはtouchとかいってる約一名。
このスレ見て初めてFileUtilsの存在を知ったんだけど
いろいろと便利な機能があるんだなぁ
installとかtouchとかmkpathとか、どことなくステキ
cgi.rb でさぁ、フォームフィールトの値を得ようとしてさぁ
cgi = CGI.new
cgi['hoge'].class
としたら String って返ってきたもんでさぁ
cgi['hoge'][2..3] とか cgi['hoge'][2, 2] などやってみたら nil になるワケよ。
むろん、文字列の数は範囲内だし、cgi['hoge'].length はちゃんと文字列数が返ってくる。
ワケワカンネ と思ってマヌアル見直してみたら、配列を返すとある。
もー、意味不明。久々にハマりましたよ。
みなさん WEBrick::CGI はお嫌いですか?
一目で使い方が把握できるマニュアルがあれば手を出すかも
hoge, = cgi['hoge']
っていう書き方がおすすめ。
>>749 好き嫌いじゃなくて単に知られていないだけでは。
質問ではないんだけれども
ちょっと一つ、このスレで聞きたいことがあるんだ
Ruby関連のドキュメントが不足してるってよく言われるけど
実際、どんなドキュメントが有れば便利なんだろう?
ライブラリの使い方とか?
>>753 俺の場合
・リファレンスマニュアルが所々書き方が曖昧なところある
→試してみないと動作がわからない
・組み込みに関する資料が少ない
・ライブラリの作り方に関して詳しい資料が少ない
755 :
ruby 1.8.2:2005/08/06(土) 14:43:00
■ YahooBB! 規制 ■
規制開始日,時,規制解除日,時,備 考
05.8.4,05:32:25,05.8.4,16:50:25,YahooBB218128★050804臨時地震アスベスト等マルチポスト報告★2
05.8.3,14:35:09,05.8.3,23:53:22,YahooBB221017★20050728 もてない男性板 嵐商事報告スレ 2
05.8.1,15:16:25,05.8.3,00:48:29,YahooBB218122★20050728 もてない男性板 嵐商事報告スレ 2
この場合、規制開始日時 と 規制解除日時の差をとって、
日時分秒に変換するには、どうすんの?
d1="05.8.4"; t1="05:32:25"
d2="05.8.4"; t2="16:50:25"
dtm1 = Obj.method(d1 + t1); dtm2 = Obj.method(d2 + t2)
sa = dtm2 - dtm1
puts sa.to_readable_format()
こんな感じで、読みやすい出力が欲しいです。
この時間を色々調べて、最長、最短の規制、発生頻度とか調べたい。
文字列から、時間オブジェクトは得られないの?
"2005-08-04 12:34:56".to_time みたいな。
require 'time.rb'
a="2005-08-04 12:34:56"
p Time.parse(a)
>>754 ライブラリの作り方の資料、あったらいいなぁ
ライブラリ向けのクラス設計のコツとかも知りたい
758 :
755:2005/08/06(土) 15:30:56
FreeBSDでCGIライブラリを使ってデバッグするとき
(offline mode: enter name=value pairs on standard input)
を終了するのに何を入力すればいいの?
^Zを送るとOSの処理の方が優先されてRubyがサスペンドしてしまう…(汗
^Dじゃなかったけ?
>>753 ドキュメントの数ではない。質だ。わかりにくいドキュメントがたくさんあってもないのと同じ。
あと、リファレンスマニュアルでのクラスの説明では、先頭にメソッド一覧をつけてほしい。
またどんなドキュメントにしたらいいかは、www.php.netを参考にしたらいいかも。PHPユーザから不満を聞いたことがないくらいだし、よくできてると思う。
cgi.rb でさぁ、フォームフィールドの値を得てさぁ、
cgi = CGI.new
cgi.each_pair{ |k, v| puts k + v }
なんてやってみたら例外発生しちゃうのな。
もー意味不明。Hash で格納してるんだよな?
p cgi してみたら #["hoge"] なんかあるんだが、これのせい?
またまた、ハマりましたよ。
…… WEBrick::CGI を試してみるか orz
>>765 CGI.new で生成されるオブジェクトは、あくまで CGI オブジェクトであって Hash ではない
なので each_pair というメソッドは使えない
each_pair を実行したいなら、 cgi.params.each_pair と書くべし。
767 :
デフォルトの名無しさん:2005/08/07(日) 11:40:56
まぁでも CGI#each_pair とかがあるといいのになぁと思うことはあるよね。
768 :
765:2005/08/07(日) 12:48:03
ありがとうです
漏れが未熟者でした orz
769 :
753:2005/08/07(日) 13:18:27
>>754 >>762-764 みんな意見ありがとう。超☆感謝
ちょっと考えてることがあるので
もし実現できそうになったら、ここで公開したいと思う
770 :
デフォルトの名無しさん:2005/08/07(日) 13:40:42
しかし、cgi.rb は、あらゆるところで、ボロクソ言われているな。
ベテランも使いにくい、初心者にも使いにくい、
いったい、なんだこれ?
Ruby2.0で刷新されます
きっと・・・
GCもRuby 2.0で刷新…
されるの?
Ruby2.0はmatzのライフワーク
775 :
デフォルトの名無しさん:2005/08/08(月) 01:19:59
Rubyを使い始めて3日のものです。質問させていただきます。
サンプルを参考に以下のように
require 'open-uri'
proxy_addr = 'bc-vip.atl2.corp.earthlink.net:8080'
open("
http://www.ruby-lang.org", proxy_addr) {|f|
f.each_line {|line| p line }
}
プロクシサーバを介してウェブファイルを取得しようとしているのですが、
invalid access mode bc-vip.atl2.corp.earthlink.net:8080 (URI::HTTP resource is r
ead only.)
c:/program files/ruby/lib/ruby/1.8/open-uri.rb:131:in `open_uri'
Press ENTER to close the window...
などというエラーが発生してしまいます。
どなたかプロクシを介したウェブページの取得方法を教えていただける方はいませんでしょうか。
よろしくお願い致します。
777 :
デフォルトの名無しさん:2005/08/08(月) 03:10:34
>>776 ありがとうございます。
確かに、そうですね。ただ、それでもうまくいきません。
undefined local variable or method `proxy' for main:Object
D:/My Documents/マイ ノート/Ruby/aa3/untitled1.rb:3
Press ENTER to close the window...
となります。他にご回答はありませんでしょうか?
>>777 proxy の前のコロン(:)はちゃんと入ってるか?
779 :
デフォルトの名無しさん:2005/08/08(月) 03:31:28
>>778 コメントありがとうございました。
require 'open-uri'
proxy_addr = 'bc-vip.atl2.corp.earthlink.net:8080'
open("
http://www.ruby-lang.org", :proxy => proxy_addr) {|f|
f.each_line {|line| p line }
}
とproxyの前にコロンを入れてみましたが、同じく
undefined method
と出てしまいました。
他に試すべき点はありますでしょうか?
よろしくお願い致します。
夏だな
783 :
デフォルトの名無しさん:2005/08/08(月) 11:46:34
本当に初歩的な質問ですいません。
手始めに、Linuxでエディタの作るバックアップファイルを削除するスクリプトを
つくろうと思ったのですが、対象ファイル(例えば、#hoge.txt#)を正規表現で補足
してくれません。内容は以下のようなもので、エラーの内容もよく分からないのです。
どなたか原因ご指摘下さい。
irb(main):001:0> str = "#hoge.txt#"
=> "#hoge.txt#"
irb(main):002:0> /^#.+#$/ =~ str
SyntaxError: compile error
(irb):2: unterminated string meets end of file
(irb):2: syntax error
from (irb):2
すみません。\エスケープで自己解決しました。
自分でいうのも何ですが、これはもうれっきとした夏です。真夏です
$ ruby -e '/#/'
$ ruby -e '/#$/'
-e:1: unterminated string meets end of file
-e:1: syntax error
BUGじゃね?
/\#$/
>>758 どうなんでしょう…。難しいことは分かりませんが、
下でうまくいきました。#はメタ文字?それとも全く意味が変わってる?
よくは分かりません。
irb(main):001:0> str = "#hoge.txt#"
=> "#hoge.txt#"
irb(main):002:0> /^\#.+\#$/ =~ str
=> 0
#は(少なくとも現時点では)正規表現のメタ文字ではないはずなので
エスケープしないとエラーが出るのはおかしい……と思う
多分本体側のバグだろう
とりあえず今のところは
>>787の方法でOK
仕様だ。#$/は#{$/}と等価。
ほんとに夏だな。すげー夕立もきたし。
>>789 こんな仕様があったのか・・知らなかった
791 :
デフォルトの名無しさん:2005/08/08(月) 16:55:14
>>782 >>780 本当にありがとうございました!
やっとうまくいきました。
今まではどこが駄目だったのか検証してみます。
質問です。
1.8.3はクリスマスまで出ないのでしょうか?
ruby_1.8の
ext/enumerator 以下が空なのはHEADで移動になったときの
cvs ci のミスなのでしょうか?
793 :
デフォルトの名無しさん:2005/08/09(火) 03:09:37
791です。
また質問させていただきます。
open-uriライブラリを使ってウェブサイトのHTMLを取得しても、カウンターが回らない現象が確認できたのですが、これは何故かどなた説明していただけますでしょうか。
よろしくお願いいたします。
open-uriライブラリを使ってウェブサイトのHTMLを取得しても、カウンターが回らないから
カウンタは普通、HTMLをそのまま読み込んだだけでは回らないようにできてる
796 :
デフォルトの名無しさん:2005/08/09(火) 05:41:45
>>794 >>795 そうだったんですか、ありがとうございました。
もう少し自分で調べてみますが、カウンターが反応するようにすることへの何かアドバイスがいただければ幸いです。
WebProgにRubyなCGIスレがあるよ
798 :
デフォルトの名無しさん:2005/08/09(火) 06:39:46
boostでpythonが組み込めるようですが
rubyも同じように組み込むことが出来るのでしょうか?
導入の手引きなどありましたら紹介してください
>>792 > ruby_1.8の
> ext/enumerator 以下が空なのはHEADで移動になったときの
> cvs ci のミスなのでしょうか?
cvs upのミス。-dと-Pをつけれ。
詳しくは cvs -H up
>>796 そもそものカウンターの仕組みを考えてみれ。
小学生の夏休みの自由研究にはちょうどいいくらいだろう。
>>801 access.logを解析してhtmlをupdateするdaemonが常駐してる
最近はSSIって話題にも上らないのか。
おまいらがちゃんと面倒見てやらないから ML に変なのが居着いちまったじゃねえかよ!
ML の人たち、本当にご苦労様です……
いちいち反応するからだよ。
807 :
デフォルトの名無しさん:2005/08/09(火) 20:05:44
ほんと、MLは丁寧な対応で感心する。
でもきっと内心はどろどろ。
とりあえず毎度々々バカみたいなテストメール投げんのだけはヤメレ。
こいつか
文字コードがEUCか否か判別したいんだけど何か良い方法ありますか?
NKF.guessはイマイチ上手く動かないようだし1.8.1以前と1.8.2以降で挙動が違うみたいだし…orz
>ruby -v
ruby 1.8.2 (2004-12-25) [i386-mingw32]
test.rb(euc-jp)
require 'jcode'
require 'nkf'
$KCODE = 'e'
p NKF.guess('あいうえお')
p NKF.guess1('あいうえお')
p NKF::EUC
p NKF::ASCII
#=>
5
2
2
5
よい方法なぞない。
EUCとSJISは絶対に判別不能な組み合わせが存在するから、
自動判別はあてにせず、文字コードを明示的に指定できるように
しておくべき。
[ruby-list:41013] では不足ということ?
うぅ、かぶった。「完全な方法は無い」けど「よい方法なぞない」はどうかと。
817 :
812:2005/08/11(木) 22:37:01
>>813 >自動判別はあてにせず、文字コードを明示的に指定できるように
>しておくべき。
判別機能を使用したいスクリプトはフォームからの入力をうけるCGIなので
入力されるコードを限定することは不可能なんです
イタズラ防止目的でEUC以外のデータが入ってきたらエラーを返すようにしようかと思っているのですが…
>>816 サンクス
NKF.guessってeuc-jpの判別精度はかなり悪いね…(汗
MconvはGPLみたいだし…
他のはどうやってLinux用バイナリを作るかって問題が…<実際動かす鯖はLinuxなので。自分はLinuxマシンはない
どうするか…orz
「JIS以外のデータが入ってきたら」「UTF-8以外のデータが入ってきたら」にしたら?
819 :
812:2005/08/11(木) 22:55:26
>>818 それだとバイナリデータをぶち込まれた場合に通しちゃいそうな気がしますが…
UTF-8とEUCは同じようなもんだろう。
JISのほうが条件はずっと絞られる。
EUC-JP で受けると Shift_JIS の半角カナを拾っちゃう。
"アイ"(sjis) ← "\xb1\xb2" → "渦"(euc)
だから、受け側を EUC-JP にするのは、結構最悪の選択肢だと思う。
(イタズラ防止目的なら特に)
「他の文字コードの入力を誤判定しないように」という目的なら、
受ける文字コードは、
1. ISO-2022-JP(ESC があるから間違えない)
2. UTF-8
3. Shift_JIS(ただし半角カナは捨てる←EUC-JP の入力を拾うから)
上から順番におススメ。
あと、
>>819 の「バイナリデータをぶち込まれた場合に通しちゃう」というのが
よく分からない。 文字コードの validate するなら通すはずがないと思うけど。
と、素人考えを書いてみましたよ……。
822 :
デフォルトの名無しさん:2005/08/12(金) 01:03:12
コンストラクタに引数を持つクラスを継承させたいのですが、
うまく作れません。例えば、
class Foo
def initialize(a)
@a = a
end
end
class Bar < Foo
def initialize(a, b)
super(a)
@b = b
end
end
bar = Bar.new("aaa", "bbb")
てな具合にやると「allocator undefined for Bar」と
エラーが出てしまいます。どうすれば良いのでしょうか。
>>822 それをそのままコピペして実行したらちゃんと動くけど。
最後に
p bar
をつけたら
#<Bar:0x402a5e30 @a="aaa", @b="bbb">
こうなった。
824 :
822:2005/08/12(金) 01:48:31
>>823 ですね。。。
本番プログラムは違う箇所でまちがっているのかな。
ご迷惑をおかけしました。せっかくなので、質問です。
new と initialize メソッドの違いが良く分からないのですが。
>>822 で initialize を new に変えても同じことですか?
>>824 オブジェクトの生成は誰がすることになるのか考えてみればどうだろう。
826 :
812:2005/08/12(金) 02:29:09
>>820-821 説明不足でスマン
文字コードの範囲内で化ける分には特に問題ないんです
CGIの最終的な出力先はメールなのですが露骨にバイナリなメールが送信されて万が一メーラーが
誤動作したりするのは出来れば避けたいので
def euc?(text)
text.gsub!(/([\xa1-\xfe][\xa1-\xfe])|(\x8e[\xa1-\xdf])|(\xa4[\xa1-\xf3])|(\xa5[\xa1-\xf6])|(\x8f[\xa1-\xfe][\xa1-\xfe])|([\x20-\x7e])|(\x0d|\x0a)/n, '')
text.size == 0
end
こんな感じでチェックさせる事にします。これで少なくとも変なコントロールコードとかエスケープコードが
送られるようなことはなくなるはず…
>>826 重箱の隅だけど、引数を破壊するのはどうかと。
>露骨にバイナリなメールが送信されて
???
つーかCGIでしょ?Hiddenで"あ"とかおくりゃーいんじゃないの?
830 :
812:2005/08/12(金) 04:08:15
>>827 あ、素で忘れてた…orz
今のコードじゃ問題ないのは確認したけどあとでコード使いまわしたときにはまる可能性はありそうなので
dupしておいた。
>>828 たとえばフォームの内容をJISに変換してsendmailでメールで送信する様なスクリプトの場合
文字コードのチェックを行わない場合フォームにバイナリデータを貼るとかしたらコントロールコードとかが
混じったメールが送信されたりしない?
スクリプトとかからやればバイナリファイルの中身をフォームの値として送り込むことも可能な気がするけど
バイナリをベタで送れるのか?
と思って、試しにバイナリ貼ったメールを送ってみようかと思ったが、ヤンクできなかった。
他のメーラをインストールするのマンドクセ。
鯖 postfix だし。
>>822 そのコードでは
> てな具合にやると「allocator undefined for Bar」と
このエラーがでるわけはない。
FooがDataのサブクラスとかなんとか、重要なところを書いてない。
Rubyって、皆さんどんなエディタ使ってHackしてますか?
コテハンだけあって、変わった人だな。
>>826 文字コード判別じゃなくて、単に EUC-JP かどうかがわかればいいのであれば、
Kconv::iseuc(str) なんてのがありますけど、もう解決しちゃってますかそうですか。
>824
newはクラスメソッド
initializeはインスタンスメソッド
クラスがnewでオブジェクトを生成した後オブジェクトは自身をinitializeで初期化する
>>835 あぁ、何を書いてるんだ...。>自分
もちろん834はemacs+ruby-modeの間違いでございます。
"el4r - EmacsLisp for Ruby"というプログラムが登場したので、
ますますemacsを使うことになるかも。
別に彼を責めるつもりはないが、なんであんな面倒なemacsを使うんだろう?
わたしはマカーだが、miで充分、事足りる。
俺はマカーだからこそemacsを使ってる。
UNIX/Linuxはもちろん、Windowsでも同じ使用感を得られるからね。
X11やWinのGUIは使いたくないし。
>>840 >俺はマカーだからこそemacsを使ってる。
>UNIX/Linuxはもちろん、Windowsでも同じ使用感を得られるからね。
そんなにいろいろOSを使わないとしたら、まーエディタぐらい好きなのを使えって。
秀丸でRUBYっていうのはあまり聞かないけれど。
[POWERBOOK-12:~] ****% ruby /Users/****/Sites/****/****.rb
というように、tcsh上から実行しようとすると、下記のように怒られます。
/Users/****/Sites/****/****.rb:3:in `require': No such file to load -- ****.rb (LoadError)
はて?
伏字にするなよ。特に /Users/ の後ろ。
ruby -e "p $:" の結果と LoadError の出ている ****.rb のパスを確認してみれ。
844 :
842:2005/08/12(金) 17:21:46
>>843 >伏字にするなよ。特に /Users/ の後ろ。
しつれい。こんな感じ。
---------
/Users/ownerName/Sites/cgi-bin/Ctr_test/logic/test.rb:9:in `require': No such file to load -- tool.rb (LoadError)
---------
tool.rb」は「test.rb」と同じディレクトリ「logic」に入っている。
---------
で、$:をpで確認してみた。あー、この環境変数の中に納められているpathのエントリしか実行しないのか。
---------
tcsh上から
ownerName% setenv RUBYLIB /Users/ownerName/Sites/cgi-bin/Ctr_test/logic
としたところ、無事実行できた。
---------
こんなタコな質問にヒントをありがとう
>>843
初心者以下な質問で申し訳ないのですが
rubyで日本語を入力するにはどうしたらよいのでしょうかORZ
何かソフトが必要なのでしょうか。
さすがに意味不明過ぎだw
もちっと、やりたいことを詳しく説明するか、
とりあえずアルファベットで良いから、サンプルスクリプトを貼ってごらん。
845ですが
>>846サンは、僕へ結ってくださっていらっさryのですおうか
人工無脳が作ってみたくて「恋するプログラム rubyでつくる人工無脳」という本を購入したのですが
print("ワンツー¥n")という分を練習なのですがその日本語が入力できないです。
半角英数しか表示されないので日本語が入力できません。
インストールもちゃんとできていると思うのですが。
プログラミングは以前にコボルをちょろっとやっていた時はXFERボタンと南下のボタンを押せば日本語に変換できたのですが
いろいろいじってみても日本語にならないです。
もしかして全部半角英数でやるべきなのでしょうか。
具具ってみてのですが見つからなかったと思います。探し方がおかしいでしょうかorz
> もしかして全部半角英数でやるべきなのでしょうか。
そんなことはないです。
というか XFER ってことは PC98 使いなのか?
環境が Windows なら南下(何か?)ってのは、大抵 Ctrl だと思うのだが。
FreeBSD かなぁ。それだと IME に依存するんでちと分からない。
そもそも、2ch に日本語で投稿できてるのだから、そういった話じゃないだろうけど。
ちなみに、それはコンソールで `ワンツー' が入力できないということ?
「恋するプログラム」なら irb での話かもしれないかな。
それは Ruby とは別問題の可能性が高いと思う。
一旦エディタでスクリプトを保存して、それを実行してみたら良いと思う。
>>848さん
レスありがとうございます。
環境はwinXPです。以前学校でcobolの授業で使ったpcがwin98でしたのでXFERボタンを使いました。言葉足らなくて申し訳ないです。
2ch含め、他のところでは日本語で入力できますが、irbとruby consol使うと言語バーも小さくなってしまって変換の仕方がわからないのですorz
メモ帳で日本語文章打ってコピペしたら入力できました。質問内容スレ違いっぽいかったですね、すみません。
丁寧に教えてくださりどうもありがとうございました。これからしっかり勉強して覚えようと思います○┓ペコリ
w2kだとALT+漢字で日本語入力できますよ。もっかい漢字キー押すと戻ります。
d:\temp>irb -Ks
irb(main):001:0> a="あいう"
=> "あいう"
irb(main):002:0>
学校の PC が PC98 系で Win98 が入っていて、
それを覚えていて、DOS/V 機でそれをしようとしてハマったという感じかな。
コンソールでもメモ帳と同じ方法で日本語モードに変わると思うけど。
しかし、Linux の VT ならまだしも、cmd.exe へコピペという発想が凄いな。
試してみたら、C-v ではなく右クリしたらコピペされた。ちょっとビックリ。
853 :
845:2005/08/14(日) 07:45:20
>>850-852さん
レスありがとうございます。
alt+半角/全角でキーで日本語入力できました!!
最後までコピペで乗り切るところでしたorz
紹介sいていただいたRDE使ってみようと思います。
感謝です○┓ペコリ
854 :
デフォルトの名無しさん:2005/08/15(月) 02:44:07
質問です。
Eclipse + RDT(Ruby Development Tools) 環境を準備しようとしているのですが、実行設定の画面で「An error has occurred. See error log for more details.」というエラーが発生してしまいます。しかしerror logがどこにも見当たりません。
DOJA(DoCoMoの携帯端末のエミュレータ)などは問題なくEclipseにインストールすることができました。
どなたかお分かりになる方いらっしゃいましたら解決方法をよろしくお願いします。
855 :
842:2005/08/15(月) 02:49:19
856 :
デフォルトの名無しさん:2005/08/15(月) 03:30:36
857 :
zaqdadc75de.zaq.ne.jp:2005/08/15(月) 03:30:53
正規登録
858 :
デフォルトの名無しさん:2005/08/15(月) 03:56:33
854です
>>855 プログラムする以前の問題だったので初心者板が適用かと思ってしまいました(笑)
error logとは「workspaceフォルダ\.medtadata\.log」というファイルだということがわかりました。
Rubyと関係しそうなメッセージは以下のようなものなのですが、
!ENTRY org.eclipse.ui 2 0 2005-08-15 02:33:43.734
!MESSAGE Warnings while parsing the commands from the 'org.eclipse.ui.commands' and 'org.eclipse.ui.actionDefinitions' extension points.
!SUBENTRY 1 org.eclipse.ui 2 0 2005-08-15 02:33:43.734
!MESSAGE Commands need a name: plug-in='org.rubypeople.rdt.ui', commandId='org.rubypeople.rdt.ui.edit.text.ruby.comment'.
!SUBENTRY 1 org.eclipse.ui 2 0 2005-08-15 02:33:43.734
!MESSAGE Commands need a name: plug-in='org.rubypeople.rdt.ui', commandId='org.rubypeople.rdt.ui.edit.text.ruby.uncomment'.
!SUBENTRY 1 org.eclipse.ui 2 0 2005-08-15 02:33:43.734
!MESSAGE Commands need a name: plug-in='org.rubypeople.rdt.ui', commandId='org.rubypeople.rdt.ui.edit.text.ruby.content.assist.proposals'.
!ENTRY org.eclipse.jface 4 2 2005-08-15 02:36:55.296
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jface".
!STACK 0
java.lang.NoClassDefFoundError: org/eclipse/ui/internal/dialogs/ListContentProvider
at org.rubypeople.rdt.internal.debug.ui.launcher.RubyEnvironmentTab.addLoadPathTab(RubyEnvironmentTab.java:65)
at org.rubypeople.rdt.internal.debug.ui.launcher.RubyEnvironmentTab.createControl(RubyEnvironmentTab.java:56)
パッと見わかる方いらっしゃいますか?
RDTの作者に聞くか、Eclipseスレで質問したほうがいいと思われ。
RDE を遥か昔に試したことがあったけど、また入れみようか。
FreeRIDE と MondrianRubyIDE って、どんな感じなのだろうか。
SS すらないと、面倒でちょっと試してみる気が起きない。
まぁ、ruby-mode で、あまり不満は無いから、使わないだろうけど。
861 :
デフォルトの名無しさん:2005/08/15(月) 10:39:02
あ、でもMondrian、相変わらず日本語使えねぇや。
862 :
822:2005/08/15(月) 21:43:42
>>825 さん,
>>824 さん、ありがとうございます。
initialize メソッドを使うようにします。
遅くなってしまって申しわけないです。
RDE1.00が神ツールになる予感・・
バグ落ちだいぶ減ったし、アイコンオシャレになったし
ネタだよな?
RubyWinのが安定してるし、それよかxyzzyのが使いやすい。
Meadow + ruby-mode で良いだろ
meadowは重い
xyzzyはなにげに印刷が便利
867 :
863:2005/08/17(水) 22:49:50
RubyWinにはいくつかの欲しい機能が付いてないし
xyzzyやMeadowは、Windowsに慣れた人間には使いづらい
とはいえ、どちらも個人の好みのレベルではある
正規表現マッチの時間を測ってみたら、下記のような結果になったのですが、
以下の仮説は正しいでしょうか。
a. コンパイルしたものを変数に入れたのを参照するよりもリテラルで書いた方が速い
b. 正規表現を定数から参照するよりもローカル変数から参照した方が速い
% /usr/bin/time ruby -e 'str = "hoge"; 1000000.times { /og/ =~ str }'
1.04 real 1.03 user 0.00 sys
% /usr/bin/time ruby -e 'str, re = "hoge", /og/; 1000000.times { re =~ str }'
1.22 real 1.22 user 0.00 sys
% /usr/bin/time ruby -e 'str, RE = "hoge", /og/; 1000000.times { RE =~ str }'
1.39 real 1.39 user 0.00 sys
% ruby -v
ruby 1.8.2 (2004-12-25) [i386-freebsd4]
b. は、正規表現関係無しに、ローカル変数の参照と定数の参照の問題に帰結できるんでは。
>>869 確かにそうかもしれないですね。
ふと思ったのですが、正規表現に限らず、一般的な話として、
ループなどで頻繁に参照する場合には、定数を直接参照するよりも、
一時的にローカル変数に入れてからそちらを参照する方が良い (速い) のでしょうか?
>>870 速いかどうかは詳しく知らないが、気になるのは
速い = 良い
が成り立つかどうかはケースバイケースだということ。
では
遅い = 良い
が成り立つケースを一つ上げてください。
>>870 一般に速度は
String以外のリテラル > メソッドスコープのローカル変数 >
ブロックスコープのローカル変数 > インスタンス変数 > 定数
グローバル変数はたぶん、メソッドスコープのローカル変数よりやや遅いかも。
>>871 それは十分条件だけど、必要条件じゃないな
ごめん、レス番間違った。
では
遅い = 良い
が成り立つケースを一つ上げてください。
878 :
デフォルトの名無しさん:2005/08/20(土) 01:46:11
お手軽に西暦→和暦をする方法があったら教えて下さい
和暦→西暦ならParseDateが使えそうなんですが…
出来れば標準で付いてくるライブラリで出来ると嬉しいです
便乗で質問
平成と昭和ってどこで切り替わるの?
昭和は最初も最後も一週間づつだけ。
可読性を悪くしてまで速くするぐらいなら
遅い=良い(遅い方がマシ)
と言えないだろうか?
細かな速度改善は Ruby のバージョンが変わると役に立たなくなるかもしれない
遅い方がマシ、なんて思った事ないなあ
遅い代わりに良い点があるかどうか、であって、
速度だけしか変わらないのなら速い方がいいに決まってる。
可読性が上がるとか、保守性が高くなるとか、そういうことなら
速度より優先しても良いとは思う。
というか
>>874がどれと間違えたのかが気になる。
さあ、おまえらどうやって知名度を高めればいいか考えようぜ。
では
遅い = 良い
が成り立つケースを一つ上げてください。
比べるなら
遅くて使い易い vs 速くて使い難い
だろ。
つか、スレ違い。
比較スレに行くなり、一生全て C でも使ってろよ。
仮にRubyが使いやすいとして、
Ruby並に使いやすいCが誕生すればそれでいいわけだよ
C並みに早いRubyでもいいんだよね
Cより遅いRuby処理系なんて見たことないんだが
gcc: 1984年開発開始
Ruby: 1993年開発開始
少なくとも gcc よりも Ruby の方が遅いですね
質問です。
ruby-mode.el ,inf-ruby.el,rubydb2x.elで
できるようになるのは何なのでしょう。
またそのキーバインドはどうなっているのでしょうか。
現在実行されているソースファイルがあるディレクトリを取得する方法があったら教えて下さい。
>>895 File::dirname($0)
でどうでせう
>>896 即レスthx
組み込み変数の方だったのか…組み込み定数の方探してた…orz
>>894 キーバインドの件は、調べたいモードでdescribe-bindingsをやってみるとか?
>>898 おお、こんな便利なコマンドがあったのか。
thx!!!
ary = ["foo", "bar", "baz"] を "foo\nbar\nbaz\n" にするにはどうしてますか?
パッと思い付いたのはこんなんですが、なんかイマイチなので。
ary.join("\n") << "\n"
ary.inject("") { |t, l| t << l << "\n" }
ary.map{|s| s+"\n"}.join
とかかなあ。
ary.join("\n") だけにしといて、末尾の改行は出力時の puts でやるとかかな。
x = ""; StringIO.new(x).puts ary とかはどうだ。
901のはじめのやつか、(ary + [nil]).join("\n") かなぁ
StringIOを使うのはputsの仕様(配列は要素ごとに改行される)に
依存しているのが何となく気に入らないけど、カコイイな。
自分でやるなら collect/map してjoinでやるだろうけど。
>>900 injectを使うなら、<<のところは+でいい。
題意とはズレるけど、
"foo\nbar\nbaz\n" を最終的にどこかに出力するんなら、
その時までずっと ary のまま持ってて puts するという手も。
Matzにっきが更新されないのはなぜですか?
更新されていないんじゃなくて、日がずれているだけ。
現在は約 12日遅れで更新中。そのうち追いつくでしょう。
>>907 よくわかりました
ありがとうございます
909 :
デフォルトの名無しさん:2005/08/24(水) 15:53:40
すいません。質問です。
簡単なスクリプトを作ろうと思っているのですが、例えば禁煙タイマーのようなものを
想定していただければそう遠くありません。
つまり、a時点とb時点を設定し、その間の時間差を求めたいのですが
irb(main):001:0> a = Time.now; b = a + 60 * 60 #a時点1時間後
=> Wed Aug 24 16:51:47 JST 2005
irb(main):002:0> p b-a
3600.0
=> nil
というので、時間差がsecでしか出てきません。これをある程度、月や週などのまとまった
単位を使って求めたいのですが何かよい方法はないのでしょうか?
もちろん、求めるだけなら簡単なのですが、ゴタゴタとコードを書くのが醜いと思ったので
質問とさせてください。
>>910 ありがとうございます。むぅ、難しそうなクラスですね。
Time.local(0, 1, 1, 1, 0, 0)時間を設定して経過時間足して、後はstrftimeでうまく
行きそうなことに気づきました。どうも、すみませんでした。ありがとうございました。
>>910 自前でメソッド用意すれば良い。そんなに複雑にならないかと。
ちなみに俺は、月変わりの処理などが面倒なので、
一旦、起算時に変えて、計算後また必要な形に戻してる。むしろ sec だらけ。
ちゃんと期待した値が返ってるから良いのかもしれないが、
b = a + 60 * 60 みたいに、Time + Fixnum オブジェクトみたいな形は、
Ruby 的に、かなり気持ち悪いと思うんだが……
XML ファイルを出力しようと思うんですが、
テキストを適当にエスケープするのにお手軽な方法があれば教えてください。
エンコーディングは UTF-8 だけに対応で構いません。
あえて安直にCGI.escapeElementとかCGI.escapeHTMLを使ってみるとか。
テキストを適当にエスケープするってどういう意味?
> → >
みたいなやつ?
それともCDATAセクションとかそーゆー話?
ぐは、実体参照書くと置き換えられるのか。
いや、 CDATA はいらないです。 #PCDATA というやつですかね。
なるほど、 CGI::escapeHTML とかでも十分そうですね。
そういえばと思って rss/utils.rb を見てみたら、同じようにやってますね。
vim を使っている皆さん、タグは利用されていますか?
先日 Exuberant Ctags を試したのですが、いまひとつでした。
Ruby と相性の良いものがあれば、ご教示ください。
まつもとさんが
「Perlの$_を流用したのは失敗だった。」
と言う記述を見かけたのですが、$_の何がまずいのでしょうか?
921 :
920:2005/08/25(木) 11:29:37
923 :
920:2005/08/25(木) 15:28:16
$_ がらみはライブラリに括り出すのは無理?
可読性が落ちるから美しくないのは分かるけど、
ワンライナーや短いフィルタだと重宝する時もあるから、廃止はつらい。
ライブラリになって、ワンライナーで毎回 -rxxx って指定するのも面倒っちゃ面倒だけど。
926 :
920:2005/08/25(木) 16:52:47
>>924 サンクス。
疑問点全てが氷解しました。
>>925 ライブラリに括り出すってのはどういうことをイメージしてる?
メソッドスコープからスレッドローカルのグローバルにして、
あとは勝手にアクセスさせるって話?
928 :
デフォルトの名無しさん:2005/08/26(金) 07:06:39
vrubyを使ってUTF-8のファイルを扱いたいのですが
VRTextやTRTreeviewにテキストを直接渡しただけでは文字化けしてしまいます
VRRichedit なら文字コードを自動判別してくれるようなのですが
Richedit以外のフォームでUTF-8の表示を行うにはどうすればいいのでしょうか?
SJISに変換してから渡せば?
NKF.nkf("-Ws", str)
>>929 日本語とアクセント記号付きの英字を同時表示させたいので
できればUTF-8のままで扱いたいんです
>>930 じゃあUCS2に変換してから渡せば?
NKF.nkf("-Ww16L", str)
932 :
925:2005/08/26(金) 18:16:14
>>927 スマン。$_ がメソッドスコープってこと知らなかったよ。
要は Regexp.last_match 関連($&, $1, ...)と同じ扱いなわけね。
そう考えると、別に $_ もそんなに悪くない気がしてきた。
(ユーザじゃなくて)Ruby を実装する側は
Regexp のマッチ → 本質的には一個のメソッド → 管理が楽
gets や readline → いろんなところで → 管理が大変
という違いがあるのかな?(StringIO#gets でも $_ は変更されるみたいだし)
正規表現の特殊変数もイラネ。
>>933 確かにないほうがRubyらしく、すっきりするなぁ。
Regexp.last_match[0] は長いよ
標準で、もちっとまからんかのぅ
単に match するだけなら
if (match = str.match(/re/)) ...
みたいに MatchData オブジェクトが返ってくるからいいけど、
gsub なんかだと Regexp.last_match 経由しかないもんな。
gsubがyieldするものをMatchDataにしちゃえ、って意見もあったが。
あと困るのがwhenでマッチさせたときだな。
> gsubがyieldするものをMatchDataに
MatchData#to_str を実装すれば過去のコードも救え……ないわな。やっぱナシか。
gsub(/[^\s-~]/) {|s| "%"+s[0].to_s(16)}
みたいのは救えない。
逆にこれを救ってしまうと変える意味がなくなってしまう。
940 :
928:2005/08/27(土) 04:13:05
>>931 utf-16の出力オプションをすべて試してみたんですが文字化けしてしまいます
ruby のバージョンは1.8.2(cygwin)です。
とりあえず特殊英字を使わなければsjisで表示ができるので今回はこれで我慢することにします
ありがとうございました。m(_ _)ノシ
>>941 Matz が UNIX USER 9月号で、
「邦訳が予定されている」と書いている。
訳本は高いんだよな……
1.8 対応のお薦めのリファレンス本みたいなのってあります?
refe
訳本は表紙のデザインがしょぼくなる
>948
原著も買う→原著の表紙を切り取って(or カラーコピー……これは著作権法の許容範囲……だよね? )
訳書にノリでペタリ→ウマー
著作権なんてものは、購入した「自分」が「自分に対して」行う限り、何しても良いのでは。
「自分」が「他者に対して」何かする時は、気をつけるべきだけれども。
class A
class B
end
end
とするのと
class A::B
end
とするのって何か違いがあるんでしょうか?
後者は class A が既に存在していなければ NameError
質問が悪かったようです。後者がこういう場合だと、違いはあるでしょうか?
class A
end
class A::B
end
そういうシンプルすぎる例は例にならないと思うが、
>>953はModule Aが既に存在していればエラー。
というのは前者もそうか。
ソースを見易くするのに役立つとか……
Aクラスに後付でA::Bを追加するときは後者になるわな。
最初からA、A::Bの構成が決まってれば前者。
とか云ってみるテスト。
>>941 ちょっと原著第2版をめくってみた。
Unitテスト, irb, RDoc, RubyGems あたりの記述がある程度しっかりなされてる感じ。
あと、WEBrickやSOAP、System Hookなんかについてちょろちょろと加筆してある。
組み込みクラスのリファレンスは1.8で追加されたものもしっかり網羅されていていいね。
ただ、標準ライブラリは簡単な例の記述にとどまっているので、過度の期待は禁物。
とはいえ、比較的新しい内容もここまでコンパクトに収まってるのはすごいけど。
翻訳を待つかどうかはともかく、リファレンスになるようなRuby本って最近少ないから、
買い換えても損はないかも。