Ruby初心者スレッドPart4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/01/22(日) 20:02:29Ruby Home Page
http://www.ruby-lang.org/ja/
#過去スレ
Ruby初心者質問スレPart1
http://pc5.2ch.net/test/read.cgi/tech/1100534824/
Ruby初心者質問スレPart2
http://pc8.2ch.net/test/read.cgi/tech/1107799347/
Ruby初心者質問スレPart3
http://pc8.2ch.net/test/read.cgi/tech/1125587131/
#本スレ
Rubyについて Part 18
http://pc8.2ch.net/test/read.cgi/tech/1133988248/
#関連スレ
RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/
【最高言語】 Rubyist Magazine創刊 【ルビま!】
http://pc8.2ch.net/test/read.cgi/tech/1094825807/
0159151
2006/02/01(水) 14:07:03よくわからないのでもう少しお願いできますか?
別の Thread としてではなく、Tk のタイマーを使うということでしょうか?
TkAfter のプロセスとして select を指定し、一定時間ごとにタイムアウトありで呼ぶという理解であってるでしょうか。
0160デフォルトの名無しさん
2006/02/01(水) 14:21:51つか、157で
>GUI のループの中で socket からデータを得る一般的な書き方ってどんなでしょう。
と書いてるから、ループの中でsocketに対してselectしときゃいいんじゃ、と思っただけなんだが。
一定時間ごとにタイムアウトありで、というのはその通り。
0161151
2006/02/01(水) 14:42:58なるほどと思ったのですがそのやり方がわからないので、また調べてみます。
現状、Thread を廃止し、タイマーを使って select を試してみたところ 151 の症状は出なくなりました。
どうもありがとうです。
0162デフォルトの名無しさん
2006/02/02(木) 19:21:37という課題が出ました。
互いに素というのは作れるのですが、後半部分ができません。
だれか教えてください。お願いします。
0163デフォルトの名無しさん
2006/02/02(木) 19:24:12#関連スレ
RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/
0164デフォルトの名無しさん
2006/02/03(金) 09:59:56arr.push(arr.delete(obj))
とすると思うんだけど、arr のサイズがかなり大きい場合、
もっと高速に出来る方法が無いかな、と思っているんだけど、どうかな?
細かい条件は、
* arr のサイズはかなり大きくなることを仮定すべき
* arr 中の各オブジェクトには、絶対に重複は無い
* arr 中に obj は必ず存在する
* 結果的に「該当のオブジェクトの順序を最後尾にする」という事が
効率的に、かつ高速に実現できるのなら、単独の Arrayだけでなく、
他の補助用のオブジェクトを併用しても良い
(つまり、そのために補助用に Hashなどを使っても良い)
また、事前に arr にデータを入れる時点(Array#push)で、何かの工夫があってもよい。
という事なんだけれども。
0165デフォルトの名無しさん
2006/02/03(金) 15:30:150166デフォルトの名無しさん
2006/02/03(金) 15:42:00日本語化パッチを探しているのですが、なかなか見つからないので…
0167デフォルトの名無しさん
2006/02/03(金) 15:44:36どこを日本語化したいの?
0168デフォルトの名無しさん
2006/02/03(金) 16:00:49プログラムもほぼ無知な初心者ですみません
とりあえずver1.8.4を落としたのですが、エディタも含めた中身が全て英語だったので何がなにやら…
(初心者インストールガイドの情報が1年前のものなのか、書かれている内容とリンク先のファイルが違ったりしていたので…
今はスレタイにある公式サイトを見ながら進めてます
0169デフォルトの名無しさん
2006/02/03(金) 16:01:14これを見て思い出したんだけど、Array#rotate はどうなったんだよ!
0170デフォルトの名無しさん
2006/02/03(金) 16:01:40「エディタ」って何?
つーか、何を落としたの?
0171デフォルトの名無しさん
2006/02/03(金) 16:07:30ttp://rubyforge.org/frs/?group_id=167&release_id=4153
ここの"1.8.4-16 preview2"というファイルです
エディタは、このファイルに同封されていたSciTEというテキストエディタ?です
0172171
2006/02/03(金) 16:41:43どうもお騒がせしました
0173デフォルトの名無しさん
2006/02/03(金) 16:50:150175デフォルトの名無しさん
2006/02/03(金) 23:37:330176デフォルトの名無しさん
2006/02/04(土) 00:43:500177デフォルトの名無しさん
2006/02/04(土) 01:04:440178デフォルトの名無しさん
2006/02/04(土) 01:05:26ローカルで試せ。
0179デフォルトの名無しさん
2006/02/04(土) 01:14:240180デフォルトの名無しさん
2006/02/04(土) 02:09:05Net::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数を取得したいのですが
このスクリプトで取得できる値と実際にブラウザ
0181デフォルトの名無しさん
2006/02/04(土) 02:10:49実際にブラウザ(IE: 6.0.2800.1106)で検索した場合の値が違うのですが
どうすれば同じ値を取得できますか
0182デフォルトの名無しさん
2006/02/04(土) 02:38:57Cookieも一緒に送信したら一緒になったよ。
理由は分からんけど…。
0183175
2006/02/04(土) 02:49:00途中で切れるぞ?
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>(略)
0184151
2006/02/04(土) 09:19:13require "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 使うときはスレッド使うなってこと?もうやだ。
0185デフォルトの名無しさん
2006/02/04(土) 09:55:59arrの要素をキーにして、そのindexを値としたハッシュを使えばいいんじゃね。
・・・と思ったけど、arr.delete(obj)したときに、objより後ろにあるやつのindexをすべて更新しなきゃいけないから、だめだめだな。
思うに、配列を使っている限りはだめなんじゃないか。
arr.delete(obj) をするときに、どうしてもO(N)の時間がかかる(探索にO(N)、削除にO(N))。
Priority Queueとか使えるんだったら、そっちのほうがいいと思う。
これなら探索にO(logN)、削除にO(logN)だからかなり早くなるとは思うよ。
ただし要素間で大小比較ができないといけないから、164の要件にあうかどうかわからんが。
つか、Rubyの話題じゃないな。本スレかMLできけば、学者さんがヒントくれると思う。
0186デフォルトの名無しさん
2006/02/04(土) 11:23:45きちんとしたSSLページをローカルに用意できる人間がこの世にどれだけいるっていうんだ
0187デフォルトの名無しさん
2006/02/04(土) 11:39:51インストールできるだろ?
0188デフォルトの名無しさん
2006/02/04(土) 11:50:52ttp://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
0189デフォルトの名無しさん
2006/02/04(土) 11:58:14https://〜〜〜 なサイトのファイルを取ってきたいってだけなら
標準添付のnet/https.rbでできないかい。
postもできんじゃねーの。やったことないけど。
0190123
2006/02/04(土) 12:32:07みなさんのところではこういう現象はおこらないのでしょうか・・・
0191デフォルトの名無しさん
2006/02/04(土) 19:35:32mechanize でも使え。
http://rubyforge.org/projects/wee/
0193デフォルトの名無しさん
2006/02/04(土) 21:09:28http://www.geoffreyarnold.com/
ここにGEM_PATHがどうのとか書いてるけど,
これじゃない?
0194123
2006/02/04(土) 22:31:34環境変数GEM_HOMEを設定することで動作するようになりました。
設定ファイルはインストール時のみ有効でアプリケーションの実行時には参照されないみたいです。
なんともまぎらわしい仕様ですが、これで先に進めます。
ありがとうございました。
0195デフォルトの名無しさん
2006/02/05(日) 21:23:33-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にしないといけない気がします。
どうなんでしょうか??
よろしくお願いします。
0196デフォルトの名無しさん
2006/02/05(日) 21:58:11ま変わらないよ(KCODEじたいは設定されるので文字列や正規表現に影響を与えるが)。
それと、 UTF-8 の場合、 ASCII 文字に関しては1byteずつなので、別に何ら
問題はない。UTF-16 あたりとごっちゃにしてない?
ただし、 Rails はデフォルトでは UTF-8 を吐こうとするので、きちんと設定
しないと Shift-JIS などの文字列を表示させることはできない。 Rails をや
るという前提であれば、可能ならぜんぶ UTF-8 で書くのが無難。
0197デフォルトの名無しさん
2006/02/06(月) 02:04:29Linux はOK。
One-click ruby installer 1.8.4preview2 + ActiveTcl8.4.12 もOK。
cygwin は手元に環境がないので確認できず。
動かしているバイナリの native-thread サポートはどうなってます?
0198デフォルトの名無しさん
2006/02/06(月) 02:28:54””のほうが美しいのに。
0199デフォルトの名無しさん
2006/02/06(月) 02:38:21今さらという気もするが、Tk.after(1,proc{anime}) を
Tk.after(2000, proc{anime}) として約2秒間隔の繰り返しにすると
原因がわかるのではないかという気が…
(貼ってあるものに間違いがなければだが)
0200デフォルトの名無しさん
2006/02/06(月) 02:40:030201デフォルトの名無しさん
2006/02/06(月) 05:07:11ん?自分では普通に"〜"で囲んでますよ。
'〜'で文字列を囲めることがご不満?
0202デフォルトの名無しさん
2006/02/06(月) 05:17:39意図的にそうして、俺ルールなプラシーボでミス防止とソース見易くしてる。
0203デフォルトの名無しさん
2006/02/06(月) 06:00:03この辺個人の好みが出るよな
どっちをメインに使っても実用では大差ないだけに、特に
ちなみに俺は、ハッシュのキーやファイルパスなんかはたいていダブルクォート
画面に表示する文字列は全部ダブルクォート、で使い分けてる
0204デフォルトの名無しさん
2006/02/06(月) 07:11:47で、どっちがシングルクォートなんだ?
0205デフォルトの名無しさん
2006/02/06(月) 09:11:590206デフォルトの名無しさん
2006/02/06(月) 10:21:430207デフォルトの名無しさん
2006/02/06(月) 10:34:250208デフォルトの名無しさん
2006/02/06(月) 12:58:12なるほど。自分では逆にしてます。原則的にはダブルクォートで、
変数展開やエスケープシーケンスを無効にしたい時だけシングルクォート。
何となく、ダブルクォートの方が文字列っぽい気がして。
0209デフォルトの名無しさん
2006/02/06(月) 13:11:28…お陰で等号を=と書く癖が治りませんorz
0210デフォルトの名無しさん
2006/02/06(月) 13:12:27コメントであるはずの#を流用するのが気に食わんとか。
#{〜}には何でも入るのが結構好みだがやりすぎてワケワカメになること多数
0211デフォルトの名無しさん
2006/02/06(月) 13:22:45なんかプログラミングの方向性として邪道っぽくね?
埋め込まずに + で足していったほうがよくね?
0212デフォルトの名無しさん
2006/02/06(月) 13:30:25自分では多用する方です。好みや慣れによりけりでしょうね。
Perlの変数展開に慣れてる人には違和感が少ないでしょうし。
>>210
確かに程度問題ですよね。
複雑になるようなら>211のように書き方を変えることもあります。
0213デフォルトの名無しさん
2006/02/06(月) 13:38:16+ はto_sの山を築かないか?
0214デフォルトの名無しさん
2006/02/06(月) 13:43:49多分、こんな感じか?
環境が手元にないからテスト出来んが。
def collect
a=[]
self.each{|i|a.push(yield(i))}
a
end
0215デフォルトの名無しさん
2006/02/06(月) 14:05:00文字列と足す時は暗黙の型変換すればよくね?
0216デフォルトの名無しさん
2006/02/06(月) 22:03:15良くない。
0217デフォルトの名無しさん
2006/02/07(火) 01:27:070218デフォルトの名無しさん
2006/02/07(火) 03:24:290220デフォルトの名無しさん
2006/02/07(火) 08:16:41ノ
0221デフォルトの名無しさん
2006/02/07(火) 08:32:13レシーバが「書式に与えるデータ」ではなく
「書式そのもの」を表すのが微妙。
ワンライナでたま〜に使う程度か
0222デフォルトの名無しさん
2006/02/07(火) 13:55:12たいていは sprintf だね。
0223221
2006/02/07(火) 14:25:01みたいな書き方って無いの?
個人的には「データを書式にそって並べる」って書きたい。
0224デフォルトの名無しさん
2006/02/07(火) 14:59:22下記のような書き方はありますね。
'%b %b' % [ 13, 10 ]
自分でメソッドを追加すれば下記のようにも。
class Array
def format( string )
string % self
end
end
[13, 10].format('%b %b')
0225デフォルトの名無しさん
2006/02/07(火) 15:13:05Array#pack と同じような方向性か。
0226デフォルトの名無しさん
2006/02/07(火) 16:45:14あってもいいかも。
0227デフォルトの名無しさん
2006/02/07(火) 17:04:19最近何でもこっちに書き過ぎっぽくね?
本スレがネタ不足に陥り気味な感じだと思うかも
0228デフォルトの名無しさん
2006/02/07(火) 17:12:38なんで無いのかよくわかんない。もしかしてすでにある?
["A", "B", "C"].hoge(puts %3%3%2)
CCB
>>227
「初心者が疑問に思うこと」ではあると思う
0229デフォルトの名無しさん
2006/02/07(火) 17:25:31Enumeratorみたいなやつ?
RubyにはEnumerableモジュールがあるけど
これは「導入先のクラスにeachが定義されていること」を前提に作られてる。
ブロック付きメソッド呼び出しが簡単に出来るRubyは
要素を取り出す部分を各クラス(のeach)に完全に任せられるようになったという事では。
0230デフォルトの名無しさん
2006/02/07(火) 17:28:55ブロックパラメータで処理する意識が強い Ruby だと、
行数に拘らなきゃ、無意識にそっちを使ってしまうな。
いや、んなものイラネとかいう話じゃなくてね。ただのチラシの裏。
0231230
2006/02/07(火) 17:29:440232デフォルトの名無しさん
2006/02/07(火) 18:00:49[["A","B","C"]].each{|arr| print arr[2],arr[2],arr[1]}
CCB
専門用語はよくわからんが、
配列に直接ブロックがくっつくことができるといろいろ便利そうだとは思った。
0233デフォルトの名無しさん
2006/02/07(火) 18:33:10['A', 'B', 'C'].values_at(2, 2, 1).each {|x| print x }
とかじゃね?
0234デフォルトの名無しさん
2006/02/07(火) 19:02:550235デフォルトの名無しさん
2006/02/07(火) 19:07:59"#{|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",
}
0236デフォルトの名無しさん
2006/02/07(火) 19:32:280237デフォルトの名無しさん
2006/02/07(火) 19:40:550238235
2006/02/07(火) 20:06:56リテラルの中にまたリテラルを書くのがちょっと嫌かなあ。
0239デフォルトの名無しさん
2006/02/08(水) 00:37:580240デフォルトの名無しさん
2006/02/08(水) 04:24:07その場合はやっぱし
"%04d %-10s : %s"%[num, name, data] しかないだろ
おれには "#{|04d|num} #{|-10s|name} : #{|s|data}" より見やすく感じる
0241デフォルトの名無しさん
2006/02/08(水) 05:01:15"#{'%04d'%num} #{'%-10s'%name} : #{'%s'%data}"
この例に限っては>240の方が普通だけどね。
0242デフォルトの名無しさん
2006/02/08(水) 05:33:04じゃなくて
string%array
だと見辛いなあ
0243235
2006/02/08(水) 05:35:00引用符の中に引用符がある気持ち悪さと、
#{ } の展開の中でさらに String#% の展開が行われてるという煩わしさが嫌。
あと、 "%04d %-10s : %s"%[num, name, data] は、
見易さよりも変更時の対応付けのミスが気になっていて、
変数が多くなってくると変数の増減があった場合に
どの % がどの変数に対応しているかがワケワカになりそうで嫌。
0244デフォルトの名無しさん
2006/02/08(水) 07:22:530245デフォルトの名無しさん
2006/02/08(水) 08:14:570246デフォルトの名無しさん
2006/02/08(水) 08:53:28Best way to learn Ruby programming language?
http://answers.yahoo.com/question/index;_ylt=AuPhCegaYj1uxuEdXYVnQr5_zqIX?qid=1006020704969
0247デフォルトの名無しさん
2006/02/08(水) 12:27:230248デフォルトの名無しさん
2006/02/08(水) 14:23:560249デフォルトの名無しさん
2006/02/08(水) 14:25:590250デフォルトの名無しさん
2006/02/08(水) 16:00:130251デフォルトの名無しさん
2006/02/08(水) 16:15:54Ruby本体としては日本語と適当なUnicodeの何かが使えればそれでよくね? って感がなくもなく
0252デフォルトの名無しさん
2006/02/08(水) 22:05:41matz自身が未踏ソフトウエアの予算でI18Nを検討したはず。成果物を探したら?
0253デフォルトの名無しさん
2006/02/09(木) 05:32:12File.open("filename").each {|line| 処理}
この直後ファイルは自動的に閉じてくれますか?開きっぱなしですか?
0254デフォルトの名無しさん
2006/02/09(木) 06:13:490255デフォルトの名無しさん
2006/02/09(木) 06:21:440256253
2006/02/09(木) 09:17:54直にブロックをつけてprintしてみたら変なアドレスみたいなのが表示されちゃいました。
>>255
そういうやりかたもあったんですか。
繰り返しが終了した後には"filename"のファイルは閉じられているのですか?開かれたままですか?
0257デフォルトの名無しさん
2006/02/09(木) 09:47:59もしくは、
File.open("filename"{|fio| fio.each{|line| 処理 }}
とか。
254 が言ってるのは後者の方のような用法。
>256
閉じられるよ。
0258デフォルトの名無しさん
2006/02/09(木) 10:35:50回答どうもです!
参考までに聞きたいんですが、
file = File.open("filename")
file.each {|line| 処理1}
file.rewind
file.each {|line| 処理2}
みたいにやった場合どこで閉じられてどこで開かれるのでしょうか?(無意味なコードで恐縮ですが)
もしくはfileという変数に格納したかどうかで変わったりしますか?
■ このスレッドは過去ログ倉庫に格納されています