Ruby初心者スレッドPart7
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/07/28(金) 18:09:59関連スレやURLは2以降。Ruby on Railsの質問はWebProg板のRailsスレで。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・ぐぐる
・マニュアルで探す http://www.ruby-lang.org/ja/man/
・FAQを読む http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(なるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
宗教的な話題は禁止します。
0002デフォルトの名無しさん
2006/07/28(金) 18:15:22# 本スレ
Rubyについて Part 22
http://pc8.2ch.net/test/read.cgi/tech/1147897915/
# 関連スレ
【Agile】Ruby on rails相談所 part2【DRY】
http://pc8.2ch.net/test/read.cgi/php/1151254378/
RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/
【最高言語】 Rubyist Magazine創刊 【ルビま!】
http://pc8.2ch.net/test/read.cgi/tech/1094825807/
0003デフォルトの名無しさん
2006/07/28(金) 18:18:280004デフォルトの名無しさん
2006/07/28(金) 18:18:31Ruby初心者スレッドPart6
http://pc8.2ch.net/test/read.cgi/tech/1147918197/
http://makimo.to/2ch/pc8_tech/1147/1147918197.html (予定)
Ruby初心者スレッドPart5
http://pc8.2ch.net/test/read.cgi/tech/1143403165/
http://makimo.to/2ch/pc8_tech/1143/1143403165.html
Ruby初心者スレッドPart4
http://pc8.2ch.net/test/read.cgi/tech/1137927749/
http://makimo.to/2ch/pc8_tech/1137/1137927749.html
Ruby初心者質問スレPart3
http://pc8.2ch.net/test/read.cgi/tech/1125587131/
http://makimo.to/2ch/pc8_tech/1125/1125587131.html
Ruby初心者質問スレPart2
http://pc8.2ch.net/test/read.cgi/tech/1107799347/
http://makimo.to/2ch/pc8_tech/1107/1107799347.html
Ruby初心者質問スレPart1
http://pc5.2ch.net/test/read.cgi/tech/1100534824/
0005デフォルトの名無しさん
2006/07/28(金) 18:34:49== Rubyを知る
Ruby Home Page
http://www.ruby-lang.org/ja/
== Ruby使用時の調べもの
Rubyリファレンス
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)
リファレンスのHTMLヘルプ版配布
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
# Windowsで便利
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
Programming Ruby - The Pragmatic Programmer's Guide
http://www.ruby-doc.org/docs/ProgrammingRuby/
# 好評書籍をWebで公開中、ただし英語
逆引きRuby
http://www.namaraii.com/rubytips/
0006デフォルトの名無しさん
2006/07/28(金) 18:36:55RAA - Ruby Application Archive
http://raa.ruby-lang.org/
RubyForge
http://www.rubyforge.org/
# 共にRubyのアプリやライブラリが検索できる
== Ruby関連のニュースや読み物
日本Rubyの会 公式Wiki - 日本Rubyの会Wiki
http://jp.rubyist.net/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
# コードレビューが好評
== いろいろRubyサイト
Matzにっき … Ruby作者の日記
http://www.rubyist.net/~matz/
Ruby hotlinks 五月雨版 … Ruby関連の日記やblog
http://www.rubyist.net/~kazu/samidare/
Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2
<rubyXML/>
http://www.rubyxml.com/
Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/
0007デフォルトの名無しさん
2006/07/28(金) 18:37:03rake cleanにデフォルトの削除ファイルを設定したいのですが、
デフォルトでは、*.bakなどが追加されています。
*.bakが削除されないようにしたいのですが、どうしたらよいでしょうか?
CLEAN = Rake::FileList["**/.hoge"]
では、*.bakがふくまれないのですが、
警告がでてしまいます。
0008デフォルトの名無しさん
2006/07/28(金) 19:02:060009デフォルトの名無しさん
2006/07/28(金) 19:05:56mswin32版1.8.4で、getsをsleep 0.1 while trueに変えるだけで、
CPU時間を浪費せずに正しく動作するわけだが。
お前さんはいったい何を使ってるのかね?
というか、そもそも、Thread.list.each{|t| t.join}もCPU時間を
浪費しないわけだが・・・
00107
2006/07/28(金) 19:18:48hogehoge/rakefile:6: warning: already initialized constant CLEAN
です。
ようするに、CLEAN定数で初期化ずみだからだと思うのですが・・・
CLEAN.new("**/.hoge")
とすればいいのかと思ったのですが、
undefined method `new' for []:Rake::FileList
といわれてしまいます・・・
0011デフォルトの名無しさん
2006/07/28(金) 19:24:58乙であります。
0012デフォルトの名無しさん
2006/07/28(金) 20:05:18よく知らないけど、CLEANってトップレベルで定義されてるの?
であれば、
class Object
remove_const(:CLEAN)
end
CLEAN = Rake::FileList["**/.hoge"]
で、警告も出ないと思う。
しかし、Rake::FileListには特定の要素を削除するメソッドがあったりしないか?
0013デフォルトの名無しさん
2006/07/28(金) 20:05:57CLEANが定数だからだね。警告は出るが、値としてはちゃんと変化している。
警告は気にしなければ、期待通りの動作になっているはず。
気になる場合だが、
http://rake.rubyforge.org/classes/Rake/FileList.html#M000122
CLEAN.exclude('*.bak')
してから、
CLEAN.include('**/.hoge')
などとすればいいのではないかと思うよ。
使ったことないからよくわからないが。
00147
2006/07/28(金) 20:14:54そうです。警告出るんですが一応動く。警告
exclude試しました。で上手くいきますね。
サンクスです。
0015前スレ989
2006/07/29(土) 00:13:07こんなにメリットが多そうな言語がなんで馬鹿にされてるのかなと思って。
でもRubyが出来ても就職にはそんなにメリットないというご指摘もあったので
もう少しPerlやPHPを頑張ってみようと思います。
0016デフォルトの名無しさん
2006/07/29(土) 00:21:05教科書のサンプルなぞれる程度の「実力」なんざ最初から無いほうがありがたい
とかいう話はプログラマ板で腐るほど出てるので覗いてみるといい
0017デフォルトの名無しさん
2006/07/29(土) 00:35:590018デフォルトの名無しさん
2006/07/29(土) 00:45:33>>15が就職までにいくつもの有用モジュールを作り上げる有名学生プログラマとして
その言語界で名を馳せるようになるかもしれないじゃないか
それくらいになれば趣味でLL使ってプログラミングしてますとか抜かしても一目置くぞ
てかそういう細かい話は板違いなんだってば
0019デフォルトの名無しさん
2006/07/29(土) 00:50:26板違いなら発言するな、馬鹿。
0020前スレ989
2006/07/29(土) 01:11:36みなさん作りたい物があって、
それにRubyが適しているから使っている感じなんですかね。
私も作りたい物があってプログラミングを勉強してるんですが、
やっぱりある程度、色々な言語が出来たほうが、
応用効くかなって、そんな事考える暇あったら、
どんどん実際に作ってみたほうがいいのかな。
0021デフォルトの名無しさん
2006/07/29(土) 01:17:170022デフォルトの名無しさん
2006/07/29(土) 02:18:20幼児じゃないんだからイヤイヤしても意味ないぞ
0023デフォルトの名無しさん
2006/07/29(土) 02:55:28便利だから使ってるだけだ。
0024デフォルトの名無しさん
2006/07/29(土) 06:39:54>それにRubyが適しているから使っている感じ
当たり前だ
セカンドショットもラフもグリーンも全部ドライバー使うような猿と一緒にするな
0025デフォルトの名無しさん
2006/07/29(土) 08:21:18誰かがその振りを受けないと若年層には理解出来まい。
0026デフォルトの名無しさん
2006/07/29(土) 09:02:24VB や Lisp のことを
暗喩しているのでしょうか?
0027デフォルトの名無しさん
2006/07/29(土) 10:45:500028デフォルトの名無しさん
2006/07/29(土) 10:53:17シューティングゲームをRubyで書く香具師もおらんだろうな
0029デフォルトの名無しさん
2006/07/29(土) 11:02:000030デフォルトの名無しさん
2006/07/29(土) 11:02:43まぁ、エフェクトバリバリのゲームとかは現状無理っぽいけど
0031デフォルトの名無しさん
2006/07/29(土) 11:11:12そりはひろゆきの趣味?
0032デフォルトの名無しさん
2006/07/29(土) 11:37:07教科書的にはPerlなんかのCGIをCで書き換えることはあまりワリに合わないわけなんだけど
2ちゃんねるの場合はCで注意深く作って速度を上げる手間対効果すら重要だったわけ
まあその割にはひろゆきがへんなのちょこちょこいれてるわけだが(w
0033デフォルトの名無しさん
2006/07/29(土) 12:54:40どんなにinputしても誰からも認めてもらえない。
(資格や学歴も含めて)outputしたものが全て。
いかに効率よくoutputするかを第一に考えて
必要なものだけinputするようにしろ。
就職負け組のニートが過去の反省を踏まえて言うんだから
間違いない。俺と同じ轍を踏むな。
天国へ至る道は地獄へ至る道を熟知することである−マキャベリ
0034デフォルトの名無しさん
2006/07/29(土) 13:01:41厳しいけど漏れもがんがる
0035デフォルトの名無しさん
2006/07/29(土) 20:49:06GNU cgiccやboostを活用すればコード量的にはむしろ減るわけだが。
あとはミドルウェアやライブラリの都合だろう。
PerlではOLEDBテンプレートは無理だし。
0036デフォルトの名無しさん
2006/07/29(土) 21:22:320037デフォルトの名無しさん
2006/07/29(土) 21:35:44「inputしすぎたのが原因でoutputが出来なかったので就職出来ませんでした」ってこと?
アホ?
0038デフォルトの名無しさん
2006/07/29(土) 21:37:47>>37、お前は>>33よりアホ
0039デフォルトの名無しさん
2006/07/29(土) 22:06:32お前がアホ。
37の意訳が違うというなら
「必要なものだけinputするようにしろ。」という一文が意味不明
0040デフォルトの名無しさん
2006/07/29(土) 22:09:35必要なものだけinputしろ?
こんな抽象的な文言、アドバイスにもならん。
それが必要なものかどうかをどう判断する?inputしないと大抵無理だろうが。
よって33がアホ
0041デフォルトの名無しさん
2006/07/29(土) 22:10:17もういいから
0042デフォルトの名無しさん
2006/07/29(土) 22:12:060043デフォルトの名無しさん
2006/07/29(土) 22:13:07「世間ではoutputされたものが全てとみなし、どれだけinputしたかは
評価しないので、何をoutputするのかを考えてinputしろ」
ってことだろ。
なにを一生懸命反論してるのやら。
0044デフォルトの名無しさん
2006/07/29(土) 22:18:50批判される思考形態ではあるが一面の真実ではある
0045デフォルトの名無しさん
2006/07/29(土) 22:20:43TOEIC730点以上とかを目指したほうがいいよ。
0046デフォルトの名無しさん
2006/07/29(土) 22:28:45ともあれ「Rubyを勉強してます」程度のことが就職活動で有利になることはない
面接の話のネタにはできるかもしれんがそれは別にRubyでなくてもいいな
0047デフォルトの名無しさん
2006/07/29(土) 22:30:070048デフォルトの名無しさん
2006/07/29(土) 22:38:400049デフォルトの名無しさん
2006/07/29(土) 23:51:040050デフォルトの名無しさん
2006/07/30(日) 00:02:32英語自体を本業にしたいなら、TOEICは900点超えないとダメだろう。
というかTOEIC程度の易しい英語テストで評価できるんだろうか。
よく知らんけど。
0051デフォルトの名無しさん
2006/07/30(日) 00:18:040052デフォルトの名無しさん
2006/07/30(日) 02:59:03まったくもっってまんこくさい
0053デフォルトの名無しさん
2006/07/30(日) 14:08:54統合してしまうアイデアに感心したのですが、
いっそのこと、ruby(と周辺ライブラリが)丸ごと一つのexeになってるインタプリタってありませんか?
要は、インストールも解凍もパスの設定もなんにも要らずに
ただフォルダにexeとスクリプトさえあれば動いてしまうような、そんなのが欲しいんですけど…
0054デフォルトの名無しさん
2006/07/30(日) 14:21:460055デフォルトの名無しさん
2006/07/30(日) 14:23:07Exerb
005653
2006/07/30(日) 15:01:23別に隠したいわけじゃないんですけどね
>>55
Exerbでもなんとかやりくりすれば似たようなことできそうなのは分かりますけど
既にだれかが作ってないかなぁと思って聞いてみました
0057デフォルトの名無しさん
2006/07/30(日) 15:03:35>要は、インストールも解凍もパスの設定もなんにも要らずに
>ただフォルダにexeとスクリプトさえあれば動いてしまうような、そんなのが欲しいんですけど…
をするために Exerb があるんだよ
exe only スクリプトさえ不要
005853
2006/07/30(日) 15:21:55ちょこっと動作を変えたいときとかexe単体だとどうにもならないんですよ(やりようはありますが…)
今のところ、元々のスクリプトで何かファイルを読み込んで expr する仕様にしておいて
exe化した後でも、外部のファイルを修正してメソッド上書きで凌げるようにはしています
そんなわけで統合型インタプリタのexe一本とスクリプト一本(とnotepad)さえあれば
イケるような環境があると嬉しいなぁと思ったわけです
なければないで、なんとかやりくりするんですけどね
0059デフォルトの名無しさん
2006/07/30(日) 15:38:27006059
2006/07/30(日) 15:40:490061デフォルトの名無しさん
2006/07/30(日) 19:07:35> うむー、Exerb で exe にしちゃうとスクリプトの修正が難しくなるわけで
> ちょこっと動作を変えたいときとかexe単体だとどうにもならないんですよ(やりようはありますが…)
exerbでバイナリファイル化するにしたって、
あとで置き換えたいファイルをexerbのレシピファイルから
外してしまえばいいんでない?
レシピファイルに記載されたファイルしかrequireできない、
ってことはないよね、多分。
006253
2006/07/30(日) 20:01:58ついさっき試してみましたができました
これなら main.rb を require するだけのスケルトンを作って
main.rb レシピから外すだけで、ほとんど外部に追い出すことができそうです
あとは、いろいろな用途に使えるように、付属ライブラリを列挙したレシピを作れば
目的のものなりそうです。既にそういうレシピが転がってると嬉しいんですけど…
いまそれができないかソースの書き換え中です
具体的にはIniParamクラスのinitializeメソッドをexeから外出しして
ユーザーが(rubyの知識が必要にはなるけど)カスタマズできるようにしたいです
それと後々の可能性を考えて、多言語対応が必要になる部分も外出しできるように修正中です
006353
2006/07/30(日) 20:06:45文章繋がらなくなっちゃってスミマセン
0064デフォルトの名無しさん
2006/07/30(日) 21:10:360065デフォルトの名無しさん
2006/07/30(日) 21:11:480066デフォルトの名無しさん
2006/07/30(日) 21:21:390067デフォルトの名無しさん
2006/07/30(日) 21:41:30全部スタティックにリンクされるがな。
0068デフォルトの名無しさん
2006/07/30(日) 22:01:16ASRにExerbが含まれるようになったから、そういうユーザが今後増えるかも。
そういう人達には>>67の方法は辛そう。
006953
2006/07/30(日) 22:17:49レスありがとうございます。ソレいいですねぇ、どなたか配布されてませんかね?
Windowsのアクセス権の都合上、cygwin版は使い勝手が悪くて
mswin32版を使わせていただいてるのですが、VisualStudioがないんでコンパイルできないんですよ
いま C:\ruby\lib\ruby\1.8 の rb と so をすべて Exerb のレシピに追加して
require File.basename(ExerbRuntime.filename).gsub(/exe/,'rb')
として実行時のファイル名と同じ .rb を実行する exe 作ったとこなんですが
upxで圧縮しても1.4MBとかなりデカイんですよね、フロッピーに入るので御の字なんですけど
>>68
あはは、まさしくその通りなのです。誰か作ってくり〜
0070デフォルトの名無しさん
2006/07/30(日) 22:57:46exerb使うのが一番確実と思われ。
0071デフォルトの名無しさん
2006/07/31(月) 02:34:04> Ruby初心者スレッドPart7を読んで、全添付ライブラリを
> 一つにまとめた実行ファイルの為のレシピを作るスクリプトを書きました。
# permalink が長すぎてコピペしにくい……
0072デフォルトの名無しさん
2006/07/31(月) 10:37:16VisualStudioがないならMinGWをつかえばいいじゃない
というか何でもかんでも他人の労力に頼るな
0073デフォルトの名無しさん
2006/07/31(月) 12:55:560074デフォルトの名無しさん
2006/07/31(月) 15:53:40こういう配列から8473を消そうと思い
p a.delete("8473")
とすると
"8473"
と表示されてしまいます。使い方を間違えてるんでしょうか?
0075デフォルトの名無しさん
2006/07/31(月) 16:01:140076デフォルトの名無しさん
2006/07/31(月) 16:01:45http://www.ruby-lang.org/ja/man/?cmd=view;name=Array#delete
0077デフォルトの名無しさん
2006/07/31(月) 16:21:040078デフォルトの名無しさん
2006/07/31(月) 16:46:08とかいう動作を期待して使ってる風でもない気もしなくもなく
delete は要素の削除が成功したらdeleteした要素を返す
a.delete("8473") を p で表示させるように書いてるんだから "8473" と表示されるのは正しい動作
つーか、その後 a がどうなってるかくらい確かめようぜ
00797
2006/07/31(月) 17:36:45p a
でいいんじゃないの?
0080デフォルトの名無しさん
2006/07/31(月) 17:43:18でもこの動作は直感的じゃないような気がする
0081デフォルトの名無しさん
2006/07/31(月) 17:57:07ふむ。
じゃあ80が思うところの直感的動作を書いてみてよ。
0082デフォルトの名無しさん
2006/07/31(月) 18:42:24deleteで指定した要素が除去された配列が表示される
0083デフォルトの名無しさん
2006/07/31(月) 18:49:40ふむ。
じゃあその場合deleteされたのか1個もされなかったのかはどうやって判定するの?
0084デフォルトの名無しさん
2006/07/31(月) 18:53:30deleteがオプションでもう1個引数取れるようにして
その引数名の配列に削除された要素を入れるってのはどうよ
0085デフォルトの名無しさん
2006/07/31(月) 19:06:560086デフォルトの名無しさん
2006/07/31(月) 19:07:180087デフォルトの名無しさん
2006/07/31(月) 19:26:44非破壊的メソッド delete と、
破壊的メソッド delete! があれば
納得すると思うけど、どうか。
0088デフォルトの名無しさん
2006/07/31(月) 19:34:400089デフォルトの名無しさん
2006/07/31(月) 19:52:35じゃあ
push!
pop!
insert!
shift!
unshift!
も実装しないとな
あと
clear!
replece!
も必要だな
0090デフォルトの名無しさん
2006/07/31(月) 20:03:42別にその程度なら実装しちまえって気もするけどな
0091デフォルトの名無しさん
2006/07/31(月) 20:38:53実際、insert と insert! はたまに欲くなる。
作れば?っていうのはその通りなんだけど、
今さらinsertの挙動が変わると、それはそれで困る。
なんか、よいメソッド名ないかなーと考え始めた段階で
どうでも良くなるのです。
0092デフォルトの名無しさん
2006/07/31(月) 20:58:06その世界では、!なしの pop とか unshift とかは何を返すの?
0093デフォルトの名無しさん
2006/07/31(月) 21:37:560094デフォルトの名無しさん
2006/08/01(火) 08:53:13class Array
def deleted(arg)
self.delete(arg)
return self
end
end
0095デフォルトの名無しさん
2006/08/01(火) 10:19:020096デフォルトの名無しさん
2006/08/01(火) 10:40:37前提として>>53で書いたように、スクリプトも含めた添付ライブラリ全てを内蔵したいので
Exerbで統合する方向性です
安定版の1.8.4は、Cygwin+MinGWではtimezoneが重複してるとか
様々なコンパイルエラーがでまくったので放棄しました
ここで1.8.5系に逃げて、Cygwin+MinGWやMinGW+MSYSでコンパイルは問題なく
rubyの動作も問題ないんだけど、Exerbで統合したバイナリが
Win32 APIのエントリポイントが無いとかで実行できませんでした。
調べてみると、Exerbのコアは1.8.4がベースのようで、io.cにrb_io_set_nonblock関数がないので
実行できないんじゃないかと思いました。しかしながら、コアのソースはVisualStudio用になってるみたいで
改造は断念
しかたないので1.8.4に戻して、MSYS-1.0.10とMinGW-3.1.0-1の組み合わせでやってみたら
ようやく上手くいきました。Exerbで統合後、WindowsXPインストール直後のマシン(Vmware)で
きちんと動作しました。やれやれだぜ。
その他にもメイン環境がXP 64版だったため、MSYSが動かなかったりとか罠がありすぎました
ちなみに、--with-static-linked-extはExerbバイナリ実行時にnkf.soの呼び出しに失敗するのでダメでした
--disable-sharedは、Exerbバイナリ作成時にエントリポイントが見つからないのでダメでした
ここまで来て、わざわざmingw32版でExerb統合する意味ないじゃんと思いましたけど
統合後にUPXで圧縮したら 1.13 MBになったので、mswin32版より小さくなったのが唯一の救いです
関係ないけど、ググって調べてる過程で山田オルタナティブ(Winnyで配布されるウイルス)が
Exerbで作られてるらしく、Exerbバイナリがウイルス駆除ソフトで誤検知されるという記事を読みました
http://www.itmedia.co.jp/enterprise/articles/0604/04/news003_2.html
今後、Exerbバイナリを配布する上で問題になりそうなんですが、誤検知するウイルス駆除ソフトって
どれなんでしょうね?手元のSymantec AntivirusとAVGでは誤検知されないようですが…
0097デフォルトの名無しさん
2006/08/01(火) 10:41:45感じるんじゃない、考えるんだ。
0098デフォルトの名無しさん
2006/08/01(火) 11:02:250099デフォルトの名無しさん
2006/08/01(火) 12:10:37> ちなみに、--with-static-linked-extはExerbバイナリ実行時にnkf.soの呼び出しに失敗するのでダメでした
kwsk
0100デフォルトの名無しさん
2006/08/01(火) 12:25:42coreを入れ替えてExerbを作り直す必要があるのではないか?
0101デフォルトの名無しさん
2006/08/01(火) 13:10:52Exerbコアにnkf.soが取り込まれてないからだと思います。
*.soを取り込んでいないExerbeコアと、
--with-static-linked-ext で*.soが欠けている状態の添付ライブラリを
統合する形になるので、出来上がったバイナリで*.so呼び出しに失敗するんじゃないかと…
iconv.dllとか、*.soがダイレクトに外部dll呼び出してるようなやつは
一つのexeに統合するのは難しいでしょうね。
添付ライブラリまとめられるだけでも、まxまぁ御の字かと…
0102デフォルトの名無しさん
2006/08/01(火) 14:17:42recipe.ja.htmlを見るとDLLも取り込めるようなことを書いてある気がするけど、まだ試してない。
0103デフォルトの名無しさん
2006/08/01(火) 15:32:08VC買った方がよさそうだネ。
0104デフォルトの名無しさん
2006/08/01(火) 15:44:460105デフォルトの名無しさん
2006/08/01(火) 15:54:110106デフォルトの名無しさん
2006/08/01(火) 16:42:040107デフォルトの名無しさん
2006/08/01(火) 17:02:360108デフォルトの名無しさん
2006/08/01(火) 19:20:20エントリポイントはフックしてるみたい。なのでdll組み込みも可能っぽい。やったことないけどさ…
具体的にはKernel32.dllのプロシージャテーブルにあるファンクションへのポインタを
自前の関数へのポインタに書き換えてフックする。で、LoadLibraryが呼ばれたら
該当のファイルがExerbコンテナにあるか探して、あったらテンポラリファイルに書き出して
LoadLibraryしてるみたい。ちなみに*.soファイルも一度テンポラリに書き出してからLoadLibraryしてる
このへん、LGPL的な解釈としてはどう扱われるのか個人的に興味あったりするけど
あれって日本語参考訳でも難解すぎてワケ分からん。誰か上手く解説してくれませんかね?
ExerbのMinGW化は、ざっと眺めた感じではやってできないことは無いと思うけど、
個人的にメリットが無いのでやりたくない作業。GNU的にはMinGWでできたほうがカッコいいと思うけど…
それとテンポラリに書き出すのはあまり美しくないから、思想的な問題か?
で、mingw32版でサイズが減った件は、単に添付ライブラリが少ないからでした
mswin32版にはtkとかopensslといった、rubyのソースには無いライブラリがついてるんですね
0109デフォルトの名無しさん
2006/08/01(火) 20:02:42FC2ブログとDTIブログは上手く投稿できたのですが、
Seesaaブログとココログは上手く投稿できません。
Seesaaとココログに投稿するにはどうしたらいいですか?
投稿できるFC2&DTIと投稿できないSeesaa&ココログの違いは
FC2&DTIが文字コードがeuc-jp
Seesaaはshift-jisでココログがutf-8
それとFC2&DTIはブログIDが0で投稿するのに対し
Seesaa&ココログはブログIDを指定しなければならないことです。
ブログIDは入れたのですが、文字コードを変換して送るのはどうしたらいいのかわかりません。
ここを見て色々試しました。
http://blogpet.18g.net/pukiwiki.php?Blog%C2%D0%B1%FE%BE%F5%B6%B7
エラーメッセージ
C:/Program Files/ruby-1.8/lib/ruby/1.8/xmlrpc/parser.rb:152:in `fault': wrong fault-structure:
{"faultCode"=>"Client", "faultString"=>"Application failed during request deserialization:
\nnot well-formed (invalid token) at line 1, column 320,
byte 320 at /usr/local/perl-5.8/lib/site_perl/5.8.5/i686-linux-thread-multi/XML/Parser.pm line 187\n"}
(RuntimeError)
実行環境
Windows XP SP2
ActiveScriptRuby
ruby 1.8.4 (2005-12-24) [i386-mswin32]
ソース
require "xmlrpc/client"
content={"title" => "記事のタイトル", "description" => "本文の内容"}
server = XMLRPC::Client.new2("http://blog.seesaa.jp/rpc/")
r = server.call('metaWeblog.newPost','blog の ID','blog のユーザ名(アカウント)','blog への login 用パスワード',content,true)
0110デフォルトの名無しさん
2006/08/01(火) 20:12:11なんでrubyなの?コメントスパム用のスクリプトと違う?
0111デフォルトの名無しさん
2006/08/01(火) 20:32:10だろうね。
だから、nkfやiconvをスタティックでビルドしてインストールし、そのあとrubyをコンパイルすればいいはず。
zlibとかgdbmとかはそれでdllのいらないsoを作ったことがある。
で、1.8.4を使うなら、
ttp://ftp.ruby-lang.org/pub/ruby/binaries/mingw/1.8/
にあるmingw32のrubyなら、zlib,curses,readline以外はスタティックリンクになってるみたいだから、
ここからnkf.soやiconv.soを持ってくるだけで動くと思うよ。
0112デフォルトの名無しさん
2006/08/01(火) 22:09:11>mswin32版にはtkとかopensslといった、rubyのソースには無いライブラリがついてるんですね
ext/tkやext/opensslを見たことがないのか?
0113デフォルトの名無しさん
2006/08/01(火) 22:11:19なんで >>96 が一からRuby作り直してるのか漏れには分からん
add_extension_library nkf.so ./exerb_ext/nkf.so
0114デフォルトの名無しさん
2006/08/01(火) 22:19:06ここは初心者スレッドです。
誰もがあなたと同等の知識を持っているとは思わないこと。
0115デフォルトの名無しさん
2006/08/01(火) 22:27:45--with-static-linked-extにすれば何かいいことあるのかと思ってやったら
別に大したことなかったわけで、単に*.soが消えただけだし
Exerbのコアのことも全然理解してなかったし、トラブルに遭遇して調べてみたら
Rubyのインタプリタが丸ごと(正確にはmsvcrt-ruby18.dllの部分が)コアってことが分かったくらいだからね
まぁ、前からCygwinの開発環境も整えたいとは思ってたんで、いい勉強になったと思うことにするよ
ここ初心者スレなんだから、あまり上から見ないでくれよ。最初から全部理解して使ってるわけじゃないからさ
0116デフォルトの名無しさん
2006/08/01(火) 22:49:03ここで何度も指摘されたことだが?
ひとの話聞かないからそうなる
0117デフォルトの名無しさん
2006/08/01(火) 22:54:04もう全員初心者ってことで良いよ。おしまい。
>>115
もとから上も下も無いんだけどね。
>--with-static-linked-extにすれば何かいいことあるのかと思ってやったら
>別に大したことなかったわけで、単に*.soが消えただけだし
どんな夢のような機能を頭に描いていたのだろう。
0118デフォルトの名無しさん
2006/08/01(火) 23:01:56君、このスレに来なくていいから
0119デフォルトの名無しさん
2006/08/01(火) 23:07:10たとえばどのレスでしょ?初心者って言葉を免罪符にするつもりは無いけど
なにかしら誤解してしまったのかも知れませんね。こちらの理解力が足りなかったら謝ります
>>117
最初から言ってるように、俺は全部丸ごと一つに纏めたインタプリタが欲しかったんで
*.rbのライブラリまで含めたexeができるのかと思ってました
Exerbでできるんだから、ruby自体に元々そういう機能が備わってるのかな、と思った訳です
0120デフォルトの名無しさん
2006/08/01(火) 23:08:04その発言態度を「上から」と言わずしてなんと言おうか。
0121デフォルトの名無しさん
2006/08/01(火) 23:22:190122デフォルトの名無しさん
2006/08/01(火) 23:24:28にすると良くないことの方が多いと思う。
Exerbの場合、必要なsoだけ列挙して結合出来るから
exeを小さく出来るメリットもあるはずなのに、
それをわざわざ潰すような使い方してるのは何故でしょうか。
Exerbに関してぐだぐだ文句言う前にマニュアルくらい読んだらどうですか?
0123デフォルトの名無しさん
2006/08/01(火) 23:25:390124デフォルトの名無しさん
2006/08/01(火) 23:27:24>統合後にUPXで圧縮したら 1.13 MBになったので、mswin32版より小さくなったのが唯一の救いです
サイズ気にしてるのにどうして・・・
0125デフォルトの名無しさん
2006/08/01(火) 23:31:150126デフォルトの名無しさん
2006/08/01(火) 23:33:13>こちらの理解力が足りなかったら謝ります
理解力が足りなかったというより
自分が常に正しいと思い込んでるから
ひとの話が耳(目)に入らなかっただけでは?
0127デフォルトの名無しさん
2006/08/01(火) 23:34:50答えたくないならスルーで。
0128デフォルトの名無しさん
2006/08/01(火) 23:35:41こんなところで日ごろのうさを晴らさないで下さい。
0129デフォルトの名無しさん
2006/08/01(火) 23:36:380130デフォルトの名無しさん
2006/08/01(火) 23:38:26君の発言、全部「?」で終わってるよね。
0132デフォルトの名無しさん
2006/08/01(火) 23:43:09知識自慢はいいから、聞きたいことだけズバッと書け。
0133デフォルトの名無しさん
2006/08/01(火) 23:54:56うーん、最初のほうで書いてるんだけど、途中から割り込んで
切り取った部分だけ読んで反応してませんかね?
特定のスクリプトを走らせるだけなら機能絞り込めますけど
rubyに添付されてるライブラリを含めたインタプリタ(一つのexe)が欲しかったんです
なるべく汎用なものが欲しかったんですよ
いま使ってるのは、全部の添付ライブラリをExerbで統合したもので
require "main.rb"するだけのexeでして、肝心のmain.rbは統合してないので
ふつうのテキストエディタで修正可能な状態になってます
要は、Exerb統合バイナリ(添付ライブラリ同梱)と、main.rb(notepadで修正可能なスクリプト)
という組み合わせでして、main.rbはいくらでも自分のやりたいスクリプトに置き換えできるんですよ
だから全統合型のインタプリタが欲しかったんです。
この説明で分かって頂けないようなら、水掛け論にしかならないので、
以降は、この論点に関しては議論するのを避けることにします
それと、Exerbに対して文句言ってるように受け取られましたら、
言い方が悪かったかもれません。すみません。そのような意図は全くありません
0134デフォルトの名無しさん
2006/08/02(水) 00:41:41RubyWin
ttp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/
rubywin-0.0.4.3-i586-mswin32-1.6.zip
0135デフォルトの名無しさん
2006/08/02(水) 01:22:260136デフォルトの名無しさん
2006/08/02(水) 01:24:160137デフォルトの名無しさん
2006/08/02(水) 01:25:590138デフォルトの名無しさん
2006/08/02(水) 09:06:460139デフォルトの名無しさん
2006/08/02(水) 09:16:36ここが本スレ。
0140109
2006/08/02(水) 13:59:43kconvを使ってタイトルと本文をutf-8にエンコードしたらいけました。
0141デフォルトの名無しさん
2006/08/02(水) 16:37:33役に立ててよかったよ
0142デフォルトの名無しさん
2006/08/02(水) 17:15:10VC++Toolkit+アルファでコンパイルできる
Expressではできなかった
0143デフォルトの名無しさん
2006/08/02(水) 21:47:49来週第2版出るんだ…
ノーチェックだった…orz
0144デフォルトの名無しさん
2006/08/02(水) 21:51:020145デフォルトの名無しさん
2006/08/02(水) 21:57:35たのしいRuby 第2版 Rubyではじめる気軽なプログラミング
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797336617/
0146デフォルトの名無しさん
2006/08/02(水) 22:09:120147デフォルトの名無しさん
2006/08/02(水) 22:15:29Ruby関連本出過ぎぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃ
0148デフォルトの名無しさん
2006/08/02(水) 22:18:480149デフォルトの名無しさん
2006/08/02(水) 22:21:380150デフォルトの名無しさん
2006/08/02(水) 22:49:38こゆこと?
for i,e in enumerate(["a","b","c"]):
print i,e
なら、
["a","b","c"].each_with_index {|e,i| p i,e}
0151デフォルトの名無しさん
2006/08/02(水) 22:57:540152うひょー
2006/08/02(水) 23:09:55ttp://youtube.com/watch?v=30P8DSNOZuU&search=vim
0153デフォルトの名無しさん
2006/08/02(水) 23:25:47nkf.soは外部のDLLには依存しない。
static-linked-extなら$"に全部入っているから、>>108のようにテンポラリに
書き出したりする必要はないと思うんだが。
0154デフォルトの名無しさん
2006/08/03(木) 02:46:59それそれ
後ろにつくんですね�d
0155デフォルトの名無しさん
2006/08/03(木) 09:55:012chのbbs.cgiにPOSTするときには、
POST http://pc8.2ch.net:80/test/bbs.cgi HTTP/1.0
というふうに、host名を含んだ絶対パスを指定しなければならないのですが、
http-access2は
POST /test/bbs.cgi HTTP/1.1
と言うふうに、ホスト名を省略してしまうようです。(横取り丸というproxyソフトで確認)
結果、2chのサーバーからは404が返され、POSTは失敗します。
似たような問題にあった人がいたら解決方法を教えてもらえませんか。
0156デフォルトの名無しさん
2006/08/03(木) 16:40:350157デフォルトの名無しさん
2006/08/03(木) 16:59:12Expressでもできたよ。↓を参考にした。
ttp://homepage1.nifty.com/markey/memo/200602.html#020402
0158デフォルトの名無しさん
2006/08/03(木) 17:17:01毎日ある会社の株価を取得して貼っているんですが、
定型作業なのに面倒なので、自動化したいんです
0159デフォルトの名無しさん
2006/08/03(木) 17:24:15親切丁寧に解説する奴がいると思う?
0160デフォルトの名無しさん
2006/08/03(木) 17:25:510161デフォルトの名無しさん
2006/08/03(木) 18:07:500162デフォルトの名無しさん
2006/08/03(木) 18:46:03こんな仕様あったっけ?
0163デフォルトの名無しさん
2006/08/03(木) 18:59:14プロキシを通してでアクセスするときのリクエストに見えるね。
きっと横取り丸を通すことで、そういうリクエストになったのだろう。
とりあえずいまのあなたには無理だからやめときなさい。
0164デフォルトの名無しさん
2006/08/03(木) 19:23:22>>161
ruby 1.8.4 on cygwin
http-acceess2 2.0.6
です
>>162
2ch側からはこういうのが返ってきます
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /test/bbs.cgi was not found on this server.</p>
</body></html>
>>163
proxyを介さず、直接接続しても↑の結果になります
0165デフォルトの名無しさん
2006/08/03(木) 19:30:33cookieのホスト名のところは控えさせてください
2chブラウザからの書き込み
POST http://anime.2ch.net:80/test/bbs.cgi HTTP/1.0
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 99
Host: anime.2ch.net
Accept: text/html, */*
Referer: http://anime.2ch.net/iga/
User-Agent: Monazilla/1.00 (JaneStyle/2.40)
submit=%8F%91%82%AB%8D%9E%82%DE&FROM=&mail=sage&MESSAGE=test&bbs=iga&key=1153958428&time=1154600574
rubyスクリプトからの書き込み
POST /test/bbs.cgi HTTP/1.1
User-Agent: Monazilla/1.00 (JaneStyle/2.10)
Referer: http://anime.2ch.net/iga/
Content-Type: application/x-www-form-urlencoded
Accept: text/html,*/*
Host: anime.2ch.net
Connection: close
Date: Thu Aug 03 19:27:55 GMT+9:00 2006
Content-Length: 99
Host: anime.2ch.net
MESSAGE=test&time=1154505452&submit=%8F%91%82%AB%8D%9E%82%DE&FROM=&mail=sage&bbs=iga&key=1153958428
0166デフォルトの名無しさん
2006/08/03(木) 19:33:16よく見ると rubyスクリプトの方には
Host: anime.2ch.net
が2つありますね。
1つにするようにソースをいじったら書き込み成功しました
ごめんなさい
0167デフォルトの名無しさん
2006/08/04(金) 11:30:06class String
def /(pattern)
self.split(pattern)
end
end
["foo", "bar", "baz"] * "," # => "foo,bar,baz"
"foo,bar,baz" / "," # => ["foo", "bar", "baz"]
0168デフォルトの名無しさん
2006/08/04(金) 12:13:410169デフォルトの名無しさん
2006/08/04(金) 13:24:560170デフォルトの名無しさん
2006/08/05(土) 05:59:03pattern が正規表現リテラルだったら読みづらそうだがw
"foo bar baz".split(/ /)
→ "foo bar baz" / / /
0171デフォルトの名無しさん
2006/08/05(土) 19:56:14この言い方からわかると思うが手に取っただけで買わなかった(w
0172デフォルトの名無しさん
2006/08/05(土) 20:59:29メニューを選択できるようにしたいのですが,
簡単にできるライブラリはあるでしょうか?
参考になるサイトなど教えていただけるとありがたいです.
0173デフォルトの名無しさん
2006/08/05(土) 21:16:20高度な機能はないがruby付属のcurses
0174デフォルトの名無しさん
2006/08/05(土) 23:36:08やっぱり自分でウィンドウ作ってメニュー書いてってしないとダメですかorz
よくありそうなので楽できないかなあと思ったのですが…
0175デフォルトの名無しさん
2006/08/05(土) 23:44:51RAAは見た?
TUIの項目にそれらしいのがいくつかあるけど。
0176デフォルトの名無しさん
2006/08/06(日) 07:11:58rubyだと無理ですか?
0177デフォルトの名無しさん
2006/08/06(日) 07:29:397 \
: \
8
0178デフォルトの名無しさん
2006/08/06(日) 10:04:04なんだ、そりゃwwwww
0179デフォルトの名無しさん
2006/08/06(日) 10:12:030180デフォルトの名無しさん
2006/08/06(日) 11:59:400181デフォルトの名無しさん
2006/08/06(日) 12:06:060182デフォルトの名無しさん
2006/08/06(日) 12:33:240183デフォルトの名無しさん
2006/08/06(日) 14:53:430184デフォルトの名無しさん
2006/08/06(日) 18:14:180185デフォルトの名無しさん
2006/08/06(日) 20:24:22rubytui と ncurses-ruby を見てみましたが
まだ私のスキルでは難しそうでした.
サンプルとかあるとうれしいんですが
0186デフォルトの名無しさん
2006/08/06(日) 21:47:43無駄に2版買ったぜ
2版でるなら1版買う前にいえよ糞め
さて1版どうすんべか
0187デフォルトの名無しさん
2006/08/06(日) 22:34:560188デフォルトの名無しさん
2006/08/06(日) 23:12:18断片的な情報しか紹介してねえ。
初心者がこれ見て何か組めるかってったら組めないよ。
それに全然楽しくないしな。
0189デフォルトの名無しさん
2006/08/06(日) 23:30:34あなたにはレシピブックをお薦めします
さておき、たのしいRubyが糞本だという意見に反論したいが
実際に読んだ初心者(or元・初心者)の感想がないと何とも言えないな
0190175
2006/08/06(日) 23:37:36すまん。それらしいものがあるという事を知ってただけで
使った事はなかったんだ。試しにその2つとrdialogを見てみたが、
どれも望みのものとは違うようだ。
外部コマンドを使って良いのならdialogとかiselectとか
shmenuとかを呼ぶのが楽かも。
0191デフォルトの名無しさん
2006/08/07(月) 05:00:27バックスラッシュを使わないと無理なんですね・・・
あきらめて普通の制御構造にします・・・
0192デフォルトの名無しさん
2006/08/07(月) 05:28:05ケータイからでスマンが、実は()で括ると出来たりしない?
0193デフォルトの名無しさん
2006/08/07(月) 05:48:42そもそも何がやりたいのか分からんし。
if 〜
then 〜
else 〜
end
じゃ駄目なんだろうか。
0194デフォルトの名無しさん
2006/08/07(月) 05:58:05ディストリは CentOS 4.3
$ uname -srvmpio
Linux 2.6.9-34.0.2.EL #1 Fri Jul 7 19:24:57 CDT 2006 i686 i686 i386 GNU/Linux
$ruby -v
ruby 1.8.4 (2005-12-24) [i686-linux]
SDL_mixer-1.2.7 はソースからコンパイルしてインストールしました。
導入しようとしたのは Ruby/SDL 1.1.0 および 1.0.0 で、
sampleディレクトリ下の playwav.rb を実行すると
/usr/local/lib/ruby/site_ruby/1.8/sdl.rb:220:in `open_imp': Couldn't open audio: Couldn't create mixer lock (SDL::Error)
from /usr/local/lib/ruby/site_ruby/1.8/sdl.rb:220:in `open'
from playwave.rb:7
というエラーが出ます。
該当行(playwave.rb:7)は、「SDL::Mixer.open」です。
0195デフォルトの名無しさん
2006/08/07(月) 08:26:520196デフォルトの名無しさん
2006/08/07(月) 09:55:21おれはたのしい Ruby で Ruby を勉強したよ。
「何か組めるか」って、小さなスクリプトの用途にはすぐ使えるようになって
いるし、基本的な使い方の解説はきちんとしていてわかりやすくて良いと思う。
あの本は Ruby の楽しさのある面を伝えているのもあるが、著者自身の面白さ
が滲み出ているのがいい本だと思う。
まあその辺の感じかたは人それぞれだろうけど。
0197デフォルトの名無しさん
2006/08/07(月) 15:09:48状況によってローカルのファイルを使うか、ネット経由でデータを取得するか分岐させたいのですが
0198デフォルトの名無しさん
2006/08/07(月) 15:14:540199デフォルトの名無しさん
2006/08/07(月) 15:16:34例外で呼べばいいんですかね?
0200デフォルトの名無しさん
2006/08/07(月) 15:27:180201デフォルトの名無しさん
2006/08/07(月) 18:18:32do_erbみたいな関数を作って、erbを呼び出そうとしたのですが、
呼び出し元のローカル変数をerb内に渡せません。
なんとかする方法はないでしょうか。
def do_erb(in_file, out_file)
open(in_file) do |f|
tmplate = ERB.new(f.read)
open(out_file, "w") do |dest|
dest.write(tmplate.result)
end
end
end
def make_erb do
text = "Hello, World"
do_erb "hoge.txt.erb", "hoge.txt"
end
---- hoge.txt.erb
<%= text %>
0202デフォルトの名無しさん
2006/08/07(月) 18:19:23$textで
0203デフォルトの名無しさん
2006/08/07(月) 18:23:35$textで
0204デフォルトの名無しさん
2006/08/07(月) 18:24:23いろいろなところから、do_erbを使いたいので・・・
0205デフォルトの名無しさん
2006/08/07(月) 18:57:00これだとどう?
def do_erb(in_file, out_file, bind)
open(in_file) do |f|
tmplate = ERB.new(f.read)
open(out_file, "w") do |dest|
dest.write(tmplate.result(bind))
end
end
end
def make_erb
text = "Hello, World"
do_erb "hoge.txt.erb", "hoge.txt", binding
end
0206デフォルトの名無しさん
2006/08/07(月) 23:41:35よしおちんちんなめあいっこしようぜ
0207デフォルトの名無しさん
2006/08/08(火) 13:59:00p 1 == 3 ?
7 :
8
0208デフォルトの名無しさん
2006/08/08(火) 21:44:220209デフォルトの名無しさん
2006/08/08(火) 22:58:29ローカル変数の情報を渡すには、Bindingオブジェクトを使う必要がある。
>>205のように、binding()で現在のローカル変数情報をもつBindingオブジェクトを作成し、
それをerb.result()に渡してやる。
それが省略されたときは、デフォルトでTOPLEVEL_BINDINGという定数に入っているBindingオブジェクトが使われている。
0210宿題じゃないよ
2006/08/09(水) 16:28:08この条件で作ることができる文字列をすべて列挙するにはどうすればよいか?
例えば、A,B,C,Dの4つのキャラクタを使う場合、
ABCD
BACD
BCAD
BCDA
CABD
:
みたいな結果がほしいです。
具体的なコードでなくてもいいので、とっかかりになるヒントをください。
0211デフォルトの名無しさん
2006/08/09(水) 17:12:03ヒント: 順列
0212デフォルトの名無しさん
2006/08/09(水) 17:35:27Omotiか?w
0214デフォルトの名無しさん
2006/08/09(水) 17:40:47>>234
「部品を何個使いますか?」
って聞かれて、
「17個」
とか数値を入力する。そんで、17個分の入力ボックスが用意されて
【A:預金準備率】
【B:窓口指導】
【C:徴税】
、、、
とか、ぽちぽち入力していく。そんで
「入力終了」
ボタンを押すと、
「配置パターン1:A→B→C」
「配置パターン2:B→A→C」
「配置パターン3:C→A→B」
、、、、、
「配置パターン289:○○」
まで、ずらずらーーっと表示される。
そんで、オレ様はそのリストをながめて、
一番いいのを選べばいいだけ。すごいでしょ?
0215デフォルトの名無しさん
2006/08/09(水) 18:02:00ヒント:再帰
def func x,buf=""
if x == ""
p buf
else
(0 ... x.size).each do |i|
func x[0...i]+x[i+1...x.size], buf+x[i].chr
end
end
end
func "HEL7X"
17文字とか入れると壊れると思う・・w
0216デフォルトの名無しさん
2006/08/09(水) 18:02:180217デフォルトの名無しさん
2006/08/09(水) 18:04:09    if x == ""
        p buf
    else
        (0 ... x.size).each do |i|
            func x[0...i]+x[i+1...x.size], buf+x[i].chr
        end
    end
end
func "CHOI_TEISEI"
0218210
2006/08/10(木) 09:10:52ありがとうございます。>215
0219デフォルトの名無しさん
2006/08/10(木) 21:06:21if s in ('y', 'Y'):
を Ruby 的にはどう書きますか?
0220デフォルトの名無しさん
2006/08/10(木) 21:44:34じゃださいかな?
0221デフォルトの名無しさん
2006/08/10(木) 22:54:22Pythonにはそんな記法があるのか!
これはぜひRubyでも欲しいな
0222デフォルトの名無しさん
2006/08/10(木) 22:59:170223デフォルトの名無しさん
2006/08/10(木) 23:06:07そうするとあまりカッコよくない…
0224デフォルトの名無しさん
2006/08/10(木) 23:12:38when 'y','Y'
end
じゃだめ?
0225デフォルトの名無しさん
2006/08/11(金) 00:17:090226デフォルトの名無しさん
2006/08/11(金) 00:19:12rubyのソースをコンパイルしてexeを生成することはできますか?
0227デフォルトの名無しさん
2006/08/11(金) 01:08:18===演算子による比較しかできないという問題が……
やっぱ==比較したいときもあるわけで
>>225-226
exerb
0228デフォルトの名無しさん
2006/08/11(金) 02:12:56とか?
0229デフォルトの名無しさん
2006/08/11(金) 02:17:55でもRubyにも
for i in [1,2,3]
p i
end
という記法があるので、
if s in ('y', 'Y')
があってもいいと思う。
0230デフォルトの名無しさん
2006/08/11(金) 02:54:31def in(*args)
args.include?(self)
end
end
if s.in('y','Y') then
みたいなのはどうだろ
0231デフォルトの名無しさん
2006/08/11(金) 07:19:23Pythonでのinは比較演算子なので、
(ttp://docs.python.org/ref/comparisons.html)
Rubyにも演算子としてのinを追加してもらうか、
もしくは>>230のようにメソッドとして実装する。
ちなみにfor i in [1,2,3] ... endのinは単なる予約語。
forとinとendで1セットの文法。
(ttp://ruby-lang.org/ja/man/?cmd=view;name=%C0%A9%B8%E6%B9%BD%C2%A4#for)
0232デフォルトの名無しさん
2006/08/11(金) 08:58:13s in array
は
array.include?(s)
と等価、という風に。これならHashに対しても使えるし
0233デフォルトの名無しさん
2006/08/11(金) 12:23:350234デフォルトの名無しさん
2006/08/11(金) 12:59:330235デフォルトの名無しさん
2006/08/11(金) 13:05:220236デフォルトの名無しさん
2006/08/11(金) 13:14:300237デフォルトの名無しさん
2006/08/11(金) 15:16:220238デフォルトの名無しさん
2006/08/11(金) 16:05:16意味的に"犯人"がいるかどうかなら共犯者がいる可能性もあるでしょ
0239デフォルトの名無しさん
2006/08/11(金) 16:51:47236のメソッドを意味的に考えてみなよ
0240デフォルトの名無しさん
2006/08/11(金) 17:09:560241デフォルトの名無しさん
2006/08/11(金) 17:46:18つまりは、=== で比較すればいいってことかな。
0242デフォルトの名無しさん
2006/08/11(金) 17:53:58if not members.find_all { |e| e === member }.empty? ってやれってこと?面倒じゃね?
0243デフォルトの名無しさん
2006/08/11(金) 18:00:33puts "犯人は#{容疑者.first}だ!"
# 一番疑わしい者が自動的に犯人になる冤罪メソッド
0244デフォルトの名無しさん
2006/08/11(金) 18:15:45puts "犯人は %s だ!" % 関係者.max_by { |e| 事件.容疑関連性(e) }
0245田中
2006/08/11(金) 18:33:310246デフォルトの名無しさん
2006/08/11(金) 18:47:09それじゃ事件関連性が小さいやつが犯人になる気ガス
0247デフォルトの名無しさん
2006/08/11(金) 20:02:450249デフォルトの名無しさん
2006/08/11(金) 21:34:000250デフォルトの名無しさん
2006/08/11(金) 21:49:14本気で答もらう気なんだ
これで
0251デフォルトの名無しさん
2006/08/11(金) 23:00:44Webブラウザに任す。
自力でHTTPクライアント作ってるのなら黙ってRFCを理解しろ。
0252デフォルトの名無しさん
2006/08/11(金) 23:50:14前やったことあるけど、うまくいった気がする。
WebAgentなら自動でやってくれた気がする。
0253デフォルトの名無しさん
2006/08/11(金) 23:52:580254デフォルトの名無しさん
2006/08/12(土) 00:08:48僕は今のところコーディング量がCに比べて少なくてすむのが気に入ってます。
0255デフォルトの名無しさん
2006/08/12(土) 00:13:51オリエント急行かよ。
0256デフォルトの名無しさん
2006/08/12(土) 00:21:310257デフォルトの名無しさん
2006/08/12(土) 00:27:410258デフォルトの名無しさん
2006/08/12(土) 00:31:120259デフォルトの名無しさん
2006/08/12(土) 01:50:40もしかして、
>for i in [1,2,3]
>という記法があるので、
逆に
>if s in ('y', 'Y')
が実現出来ない、という関係になっていたりして。
0260デフォルトの名無しさん
2006/08/12(土) 02:04:260261デフォルトの名無しさん
2006/08/12(土) 02:06:590262デフォルトの名無しさん
2006/08/12(土) 03:38:530263デフォルトの名無しさん
2006/08/12(土) 06:20:08caseだとcaseの後ろに定数を置いて、whenの方に変数を置く
ことになるけど、それだとニュアンスが逆になるような・・・
まあ、それでも出来てしまうけど・・・
>>249
クライアント側でやるってことは、もうrubyの出番はない。スレ違い。(板も違う
0264デフォルトの名無しさん
2006/08/12(土) 06:53:01クライアントがWebブラウザであるとはだれもいっていない。
Rubyでクライアントプログラム書くはなしじゃないか。
0265デフォルトの名無しさん
2006/08/12(土) 07:55:520266デフォルトの名無しさん
2006/08/12(土) 08:52:09if s in ['Y' , 'y']
が実装されるといいなあ。
0267デフォルトの名無しさん
2006/08/12(土) 09:02:250268デフォルトの名無しさん
2006/08/12(土) 09:05:36オブジェクト指向的ではないな
0269デフォルトの名無しさん
2006/08/12(土) 09:34:16んで、これ超便利?
0270デフォルトの名無しさん
2006/08/12(土) 09:48:20ていうか俺はforもRange#eachで書いてしまうんだが
これはおかしな書き方かな?
スコープがみみょに違うのは知ってるんだが
大体なんとかなっちゃうからなー
0271デフォルトの名無しさん
2006/08/12(土) 09:50:290272デフォルトの名無しさん
2006/08/12(土) 12:42:37どうしたらいいでしょうか。
0273デフォルトの名無しさん
2006/08/12(土) 12:46:11ほとんど each と times 使ってる。
>>271
for の方が range#each よりも速いとかいう話が前あったけど、それじゃないかな。
でも、0オリジンなら Integer#times の方が速そう。
0274273
2006/08/12(土) 12:52:51変数のスコープの違いが速度に反映されてるっぽいね。
0275デフォルトの名無しさん
2006/08/12(土) 17:28:00どういうもん?
0276デフォルトの名無しさん
2006/08/12(土) 17:39:240277デフォルトの名無しさん
2006/08/12(土) 17:42:290278デフォルトの名無しさん
2006/08/12(土) 17:57:19自分でコレクション的なクラスを作ったときにその要素を巡回するのに
foreachが使える。
http://www.kmonos.net/alang/d/statement.html
0279デフォルトの名無しさん
2006/08/12(土) 18:46:440280デフォルトの名無しさん
2006/08/12(土) 18:59:310281デフォルトの名無しさん
2006/08/12(土) 19:56:170282デフォルトの名無しさん
2006/08/12(土) 20:00:02コードと説明を自分で書け、馬鹿
0283デフォルトの名無しさん
2006/08/13(日) 10:17:04そこにはopArrayという言葉はないようだが。
>>279も書いてるとおり、inの後の式の結果のオブジェクトにはeachが定義さ
れている必要があり、そこからyieldされる値でループする。
class MyCollection
def each
yeild 2
yeild 3
yeild 5
yeild 7
yeild 11
end
end
0284デフォルトの名無しさん
2006/08/13(日) 10:24:07あと、.exrと.exyはどっちが新しい形式でどっちを使った方がよいですか?
0285283
2006/08/13(日) 10:25:360287デフォルトの名無しさん
2006/08/13(日) 10:34:51そんなとき、ruby1.8本体とライブラリをまとめてインストールする方法。
apt-get install `apt-cache search -n ruby1.8 | cut -d ' ' -f 1` irb1.8 rdoc1.8 ri1.8
出典
http://www.juretta.com/log/2005/05/18/_howto_install_complete_ruby_on_debian/
0288デフォルトの名無しさん
2006/08/13(日) 13:37:38仮想パッケージ化希望
0289デフォルトの名無しさん
2006/08/13(日) 14:29:15opArrayじゃなくてopApplyです。
yield使ってみます。
ありがとうございます。
0290デフォルトの名無しさん
2006/08/13(日) 16:50:34#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
char text[]="f75632";
int i,n,data[strlen(text)];
for ( i=0; i<strlen(text); i++ ){
sscanf( text+i, "%02x", &n );
data[i] = n;
printf("%d ",n);
}
return 0;
}
実行結果 247 117 86 99 50 2
0291デフォルトの名無しさん
2006/08/13(日) 16:55:02その変態コードの機能に相当するものは無い。
0292デフォルトの名無しさん
2006/08/13(日) 17:55:120.upto(text.length-2){|i| puts text[i..i+1].to_i(16)}
0293デフォルトの名無しさん
2006/08/13(日) 19:03:45すげぇ。
これがモノグサ野郎御用達言語
Rubyの真の威力なのか…
Cがいかに文字列処理に弱い言語か
よくわかるな。
0294デフォルトの名無しさん
2006/08/13(日) 19:05:18text = "f75632"
data = Array.new(text.size)
text.size.times do |i|
n ,= text[i..-1].scanf("%02x")
data[i] = n
printf("%d ", n)
end
exit(0)
0295デフォルトの名無しさん
2006/08/13(日) 19:51:59>マジでMLに投げてみるか
>↑>>266
お願いします。
0296デフォルトの名無しさん
2006/08/13(日) 20:45:58>いろいろ案がでてるけど、やっぱり
>if s in ['Y' , 'y']
>が実装されるといいなあ。
>>269
> forのように超便利なら入れてくれるかもしれん
> んで、これ超便利?
字数が少なくて済むのが一つ。
ArrayでもHashでも、たぶんRangeでも、一つの構文で対応出来るのがひとつ。(まあどれもinclude?だけど)
あと、便利さの問題とはちょっと違うけど
Rubyでは、
if /\d\d/ =~ s then
と書くのが本来的だが、他言語の一般的な慣習に近づけるなどの理由により、
if s =~ /\d\d/ then
という書き方もみとめられている(メソッドが用意されている)と聞いている。
これと似たような理由になると思う。
俺は、比較するときはいつも、「if」 「変数」 「比較演算子」 「比較条件」の順で書く。
(他言語の一般的な慣習)
でも、if s in ['Y' , 'y'] のようなことをやりたいときだけ、
if ['Y' , 'y'].include?(s) then
のように、「比較条件」 「比較演算子(的なメソッド)」 「変数」で書くことになる。
この切り替えが毎回微妙にストレスなのだが、このストレスの部分が、
if s in ['Y' , 'y'] then
と、短い記述に置き換わったら、とてもいい感じになる。
0297デフォルトの名無しさん
2006/08/13(日) 21:06:45結構大事だよな。書き心地。
0298276
2006/08/13(日) 21:52:01よし、投げてみる。提案をまとめると
「includeメソッドの糖衣構文としてのin演算子の追加」ってことでいいんだよな?
必要な理由を要領よくまとめてくれた296に感謝
あと、ここのスレで出た案だってことは書いてもいい?
0299デフォルトの名無しさん
2006/08/13(日) 21:57:310300デフォルトの名無しさん
2006/08/13(日) 21:58:450302296
2006/08/13(日) 22:03:36>なんでif s == 'y' || s == 'Y'って書かないんだろう?
それは、 if s in ['y', 'Y' , 'n' , 'N' , 'q' , 'Q' , ""] のときにめんどうだから。
>>あと、ここのスレで出た案だってことは書いてもいい?
>馬鹿! このスレのことが世に知れたらどうするんだよ!
なんか、スレのこと知られたくない人がいるらしいので、内緒ということで。
>>298
0303デフォルトの名無しさん
2006/08/13(日) 22:06:11if s in ['a', 'b', 'c', 'd'] とかのほうが混乱起きないかもしれん
0304デフォルトの名無しさん
2006/08/13(日) 22:11:560305デフォルトの名無しさん
2006/08/13(日) 22:13:520306デフォルトの名無しさん
2006/08/13(日) 22:15:51君は ['y', 'Y' , 'n' , 'N' , 'q' , 'Q' , ""].include?(s) をそう理解してるのか
0307デフォルトの名無しさん
2006/08/13(日) 22:16:10う、遅かったか。
じゃあ、 if i in [1.5 ,4 ,7.2 , 9 ,12.3,45,78.1] のときに以下略
0308デフォルトの名無しさん
2006/08/13(日) 22:18:11多くの要素を持つArrayの中に文字列があるかどうかを調べたいなら、
Arrayがレシーバーになるのが自然だし。
0309デフォルトの名無しさん
2006/08/13(日) 22:20:47提案するのは自由だ。
0310デフォルトの名無しさん
2006/08/13(日) 22:39:52配列から文字列を探すとかそういう限定された動作じゃなくて
0311デフォルトの名無しさん
2006/08/13(日) 22:42:370312デフォルトの名無しさん
2006/08/14(月) 06:44:06inかどうかはともかく、そういう書き方は欲しいかも。
無理矢理Object#in定義しても出来るだろうけどさぁ。
0313276
2006/08/14(月) 09:13:55普通にin演算子を追加するとfor-in構文と被ってしまうな、どうしよう
1. if-in、unless-inに限定する
2. for-inだけ特例として扱う(forとセットで使われた場合のみ従来の機能)
0314デフォルトの名無しさん
2006/08/14(月) 09:57:00inではなくて、 in? にするとか。
if s in? [1,2,3] then
0315デフォルトの名無しさん
2006/08/14(月) 10:22:270316デフォルトの名無しさん
2006/08/14(月) 10:47:06Rubyはどうなの?
0317デフォルトの名無しさん
2006/08/14(月) 11:09:34え?
>>229でもいってるように、for i inがあるからこそ、if s inがあってもいいんじゃないかということでは?
0318デフォルトの名無しさん
2006/08/14(月) 11:23:36末尾?ならもうメソッドで良いよ
if s.in?([1,2,3])
0319デフォルトの名無しさん
2006/08/14(月) 11:25:39ますますPythonだなw
0320デフォルトの名無しさん
2006/08/14(月) 11:29:16それなら順番変えて、if [1,2,3].in?(s)でもいいんじゃね?
アレ?
0321デフォルトの名無しさん
2006/08/14(月) 11:32:02さっさと提案してくれ。
0322デフォルトの名無しさん
2006/08/14(月) 11:48:21ちょwそれまんまinclude?だしw
0323デフォルトの名無しさん
2006/08/14(月) 11:50:05>>>313
>え?
>>>229でもいってるように、for i inがあるからこそ、if s inがあってもいいんじゃないかということでは?
>>229 で言っているのは考え方の問題。
>>313 が困っているのは技術的な実現方法。 すでにfor 〜 in があるから、 if 〜 in を
糖衣(等意?)構文として実現しようとするとかぶってしまい不都合だからどうしよう、って悩んでる。
・・・・ていう話かな?
>>318
>末尾?ならもうメソッドで良いよ
>if s.in?([1,2,3])
if s in array が技術的にナニなら、メソッドで妥協もいいかなと思う。
if s.in? [1,2,3] なら、
・短い記述 (in ほどではないが、まあいいかな)
・include?メソッドをもつものをカバー
・比較対象、演算子?、比較条件の順序で書ける。
は満たしている。
0324デフォルトの名無しさん
2006/08/14(月) 11:57:05> メソッドで妥協もいいかな
すんなよ
メソッドでいいなら自力で定義しろ
他人巻き込むな
0325デフォルトの名無しさん
2006/08/14(月) 12:05:52もちろん、言語として初めからあったほうがいい演算子またはメソッドとしての提案という意味。
本当にあった方がいいのか無くてもいいのかは、MLで提案されれば適切に議論されるでしょ。
0326デフォルトの名無しさん
2006/08/14(月) 13:39:19JavaScriptもfor inとは別にin演算子がある
意味は違うが
0327デフォルトの名無しさん
2006/08/14(月) 14:54:07どうして{}を使わせてくれなかったのだろう。
0328デフォルトの名無しさん
2006/08/14(月) 14:57:12やっぱりいくらか制限が必要だな。
p 1 in [1,2]
p 1 in (1..2)
とは書けるが、
p 1 in 1..2
とは書けないバージョン。
Index: parse.y
===================================================================
RCS file: /cvs/ruby/src/ruby/parse.y,v
retrieving revision 1.451
diff -p -U 2 -r1.451 parse.y
--- parse.y8 Aug 2006 03:28:58 -00001.451
+++ parse.y14 Aug 2006 05:39:36 -0000
@@ -2104,4 +2104,12 @@ arg: lhs '=' arg
%*/
}
+| primary_value keyword_in primary_value
+ {
+ /*%%%*/
+$$ = NEW_CALL($3, rb_intern("include?"), NEW_LIST($1));
+ /*%
+$$ = dispatch2(inop, $1, $3);
+ %*/
+ }
| primary
{
0329デフォルトの名無しさん
2006/08/14(月) 14:57:170330デフォルトの名無しさん
2006/08/14(月) 14:57:54頻出。過去ログ嫁。
0331328
2006/08/14(月) 15:01:581 in 1..2
p((1 in 1..2))
は書けるが、
p(1 in 1..2)
とは書けないバージョン。
どっちがいいかな?
Index: parse.y
===================================================================
RCS file: /cvs/ruby/src/ruby/parse.y,v
retrieving revision 1.451
diff -p -U 2 -r1.451 parse.y
--- parse.y8 Aug 2006 03:28:58 -00001.451
+++ parse.y14 Aug 2006 05:49:40 -0000
@@ -1058,4 +1058,12 @@ expr: command_call
%*/
}
+| arg_value keyword_in arg_value
+ {
+ /*%%%*/
+$$ = NEW_CALL($3, rb_intern("include?"), NEW_LIST($1));
+ /*%
+$$ = dispatch2(inop, $1, $3);
+ %*/
+ }
| arg
;
0332デフォルトの名無しさん
2006/08/14(月) 16:04:08はたしてどっちがいいのか。うーーん。初心者だからわかんないや。
0333デフォルトの名無しさん
2006/08/14(月) 16:08:09「Pyの A in B をRubyでも使いたい」って素直にMLに投げてからのほうがいいと思う
0334デフォルトの名無しさん
2006/08/14(月) 16:16:050335276
2006/08/14(月) 17:31:11メール本文を考えてみました
ttp://www.uploda.org/uporg479135.txt.html
受信パスワードはin
この本文で問題がなければruby-devへ投下する
0336デフォルトの名無しさん
2006/08/14(月) 17:55:070337デフォルトの名無しさん
2006/08/14(月) 17:56:45素直にとても良く書けてると思う。導入に議論の余地はあれど、提案としてはOKではないかな。
0338デフォルトの名無しさん
2006/08/14(月) 17:59:32漏れもそう思う。実装する段になったら ruby-dev に行けばいい。
0339デフォルトの名無しさん
2006/08/14(月) 18:30:40>私はこうした書き方に、少なからずストレスを感じます。
と書いているのに、
>かなり書き心地が良くなるのではないでしょうか。
はおかしい。人事みたいだ。
自分がそうなれば幸福だから、というスタンスで書いたほうがいいと思うよ。
0340デフォルトの名無しさん
2006/08/14(月) 19:02:16無理ならメソッドでもいい、みたいな
0341デフォルトの名無しさん
2006/08/14(月) 20:38:200342デフォルトの名無しさん
2006/08/14(月) 21:30:08> まつもとゆきひろ様、ぜひ導入をご一考ください。
Rubyの実装ってMatzが決定権持ってるの?
作者といえども、他の開発メンバと同等のレベルにしか思ってなかった。
0343デフォルトの名無しさん
2006/08/14(月) 22:11:180344デフォルトの名無しさん
2006/08/14(月) 22:19:180345デフォルトの名無しさん
2006/08/14(月) 22:21:11え、そうなんですか?(ドキドキ
0346デフォルトの名無しさん
2006/08/14(月) 22:21:27いきなり提案しても無駄だから、2chでバックを固めてから提案する、
という戦略なのかも、と妄想してみる
0347デフォルトの名無しさん
2006/08/14(月) 22:31:06http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/29189
ほら
0348デフォルトの名無しさん
2006/08/14(月) 23:04:05> Rubyの実装ってMatzが決定権持ってるの?
そりゃもちろん。
少なくともcoreの新機能なんかは彼が「うん」といわなきゃ入らない。
0349デフォルトの名無しさん
2006/08/14(月) 23:09:40ついでに>>331のパッチもつけとけ。
0350デフォルトの名無しさん
2006/08/15(火) 00:16:260351デフォルトの名無しさん
2006/08/15(火) 00:29:460352デフォルトの名無しさん
2006/08/15(火) 00:35:250353デフォルトの名無しさん
2006/08/15(火) 07:12:45例えば
def func(i)
i * i
end
def replace(str)
???
end
str = "abc[1]def[2]ghi[3]xyz"
puts replace(str) #=> "abc1def4ghi9xyz"
のようなことを行いたいです。
文字列中の[ ]の数は不定で、存在しない場合もあります。
また、[ ]内の文字には文字"["と文字"]"は使用さません。
0354デフォルトの名無しさん
2006/08/15(火) 08:31:12def func(i)
i * i
end
def replace(str)
str.gsub(/\[(\d)\]/) {|s| func($1.to_i) }
end
str = "abc[1]def[2]ghi[3]xyz"
puts replace(str)
0355デフォルトの名無しさん
2006/08/15(火) 08:39:14全角スペースとは質が悪い。
コピペで動かなかったorz
0356354
2006/08/15(火) 08:42:170357354
2006/08/15(火) 08:45:14ごめんごめん。
0359デフォルトの名無しさん
2006/08/15(火) 14:32:010360デフォルトの名無しさん
2006/08/15(火) 14:39:580361デフォルトの名無しさん
2006/08/15(火) 19:10:41コンソール上のirbで全角の警告がでるようにする設定を教えてくれ。
0362デフォルトの名無しさん
2006/08/15(火) 23:24:320363デフォルトの名無しさん
2006/08/15(火) 23:46:56Ctrl-C を押してもすぐには終了されずに
Enter を押して入力を確定させたあとで終了します。
Ctrl-C ですぐに終了するようにできませんか?
0364デフォルトの名無しさん
2006/08/15(火) 23:50:030365276
2006/08/16(水) 00:54:38[ruby-list:42693]
あとは返答をお楽しみにってことで
0366デフォルトの名無しさん
2006/08/16(水) 02:40:33なんか嫌なことでもあったのか?
0367デフォルトの名無しさん
2006/08/16(水) 03:41:33まぁ頑張って反論してよ>>276
0368デフォルトの名無しさん
2006/08/16(水) 04:44:50む〜、どのようにすれば良いのじゃ?!
0369デフォルトの名無しさん
2006/08/16(水) 08:11:32def self.foo
@@foo
end
def self.foo=(val)
@@foo = val
end
がもっと簡単にかけてほしい。
0370デフォルトの名無しさん
2006/08/16(水) 08:46:10継承したとき。
0371デフォルトの名無しさん
2006/08/16(水) 09:05:35ってことなんじゃないの
0372デフォルトの名無しさん
2006/08/16(水) 11:19:20何を期待していて実際の動作とどう違って変だと感じるのか、
書いてくれんとrubyが変なのか>>370の頭が変なのか判断しかねる。
ちなみに1.9ではクラス変数は継承されなくなった。
0373デフォルトの名無しさん
2006/08/16(水) 12:21:230374デフォルトの名無しさん
2006/08/16(水) 12:37:50あったり無かったり。色々。
0375デフォルトの名無しさん
2006/08/16(水) 13:06:40inは動詞だと意味変わるし、is_in? なんて妙な英語使う奴の気がしれん。
せいぜい is_included? だろ。 (←釣りのつもり。念のため。)
0376デフォルトの名無しさん
2006/08/16(水) 13:17:200377デフォルトの名無しさん
2006/08/16(水) 13:22:530378デフォルトの名無しさん
2006/08/16(水) 13:26:52>>370 じゃないけど、漏れの場合は、
「継承しつつ、オーバーライドもできる (サブクラスで代入したらそちらが優先)」
ような動作になって欲しい。
確か Smalltalk のクラス変数はそういう感じじゃなかったっけ。
でも、
> ちなみに1.9ではクラス変数は継承されなくなった。
みたいに仕様がコロコロ変わるようだと、 >>371 が正解かも知れないなあ。
0379デフォルトの名無しさん
2006/08/16(水) 13:40:22いいたいことがあるならMLで発言すれば考え直してくれるかもよ?
0380デフォルトの名無しさん
2006/08/16(水) 13:59:30ラテン語の方が古い気がする。
というのは、置いといて、Objectクラスにメソッドを追加しないと使えないんだったら
使う気にならない。in演算子がRuby自体に含まれていることが重要だと思う。
0381デフォルトの名無しさん
2006/08/16(水) 14:13:28願いなのに、どうしてああいう的外れな回答ばかり帰ってくるんだろう。
ま、rubikichiはそういうキャラだから仕方ないとして。
0383デフォルトの名無しさん
2006/08/16(水) 14:58:480384デフォルトの名無しさん
2006/08/16(水) 15:46:14今までだって「こうやればいい」的な解決がほとんどだったでしょ
0385デフォルトの名無しさん
2006/08/16(水) 16:20:14スレッドが繋がるMUA使えよ
ML初心者かよ
0386デフォルトの名無しさん
2006/08/16(水) 16:25:13omoti は黙ってろよ。
wl だと繋がって見えるが。
0387デフォルトの名無しさん
2006/08/16(水) 16:32:05はぁ?誰がomotiやねん。
In-Reply-ToとかReferencesをつけるMUA使え、アホ
0388デフォルトの名無しさん
2006/08/16(水) 16:35:290389デフォルトの名無しさん
2006/08/16(水) 16:37:24はっきり言って、スレッドつなげない奴は「議論する気あんの?」と思われてもしかたないぞ。
0390デフォルトの名無しさん
2006/08/16(水) 16:39:470391デフォルトの名無しさん
2006/08/16(水) 17:08:05あと(笑)もどうかと。
0392デフォルトの名無しさん
2006/08/16(水) 17:17:030393デフォルトの名無しさん
2006/08/16(水) 17:46:11走召糸色木亥火暴
などと口走るほうが好ましいと思われます
0394デフォルトの名無しさん
2006/08/16(水) 17:57:350395デフォルトの名無しさん
2006/08/16(水) 18:01:130396デフォルトの名無しさん
2006/08/16(水) 18:40:49夏に謝ってください
0397デフォルトの名無しさん
2006/08/16(水) 18:50:52そうだそうだ夏に謝れ
来年から来てくれなくなったらどうするんだ
0398デフォルトの名無しさん
2006/08/16(水) 19:02:290399デフォルトの名無しさん
2006/08/16(水) 19:15:01いけました!半分は、できないものだと思っていました。
ありがとうございました。
0400デフォルトの名無しさん
2006/08/16(水) 20:20:25class Module
def attr_class_accessor(*vs)
vs.each{| cv |
module_eval(<<-EOS)
class << self
def #{cv}; @@#{cv}; end
def #{cv}=(v); @@#{cv} = v; end
end
EOS
}
end
end
とか
0401デフォルトの名無しさん
2006/08/16(水) 20:25:45あたりはむしろ相当オッサンだと思うが。
0402デフォルトの名無しさん
2006/08/16(水) 20:34:220403デフォルトの名無しさん
2006/08/16(水) 20:46:34オーバーライド?
0404デフォルトの名無しさん
2006/08/16(水) 22:15:46ん?何か変ですか?
0406デフォルトの名無しさん
2006/08/17(木) 01:35:03それが標準メソッドになったりしないでしょうか。
そうでないとRDocでサポートされないので、ドキュメント生成時にこまるんですよ。
つまり attr_class_accessor :foo とかしても、RDocが解釈してくれるわけじゃないので、
ドキュメントに現れないです。
逆に言えば、RDocさえ対応してくれれば標準メソッドじゃなくてもいいんですけど。
0407デフォルトの名無しさん
2006/08/17(木) 02:25:220408デフォルトの名無しさん
2006/08/17(木) 02:34:330409デフォルトの名無しさん
2006/08/18(金) 08:10:580410デフォルトの名無しさん
2006/08/18(金) 20:00:54変数への代入時に特別な処理をしたい、ということを考えています。
各インスタンス変数 @var に対して var, var=(x) を定義する代りに
以下のようなかんじで attr_accessor を使って楽しても問題ないでしょうか?
この場合ですと特別な処理をしたい @foo に対して、foo=(x) を再定義している
(ことになると理解しています)のが気になるのですが…
class S
attr_accessor :foo, :bar
def foo=(x)
@foo = x.tr('a-z','A-Z')
end
end
s = S.new
s.foo = 'foo'
s.bar = 'bar'
puts [s.foo, s.bar] -> FOO, bar
手元の ruby 1.8 では期待通りの実行結果になるのですが、
上から順にメソッド定義が実行されることを仮定してよいのかしら。
0411デフォルトの名無しさん
2006/08/18(金) 20:20:19で、クラス定義の内部は上から順番に実行されると考えてよい。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%A5%AF%A5%E9%A5%B9%A1%BF%A5%E1%A5%BD%A5%C3%A5%C9%A4%CE%C4%EA%B5%C1
> クラス定義式の中は self がそのクラスであることと、呼び出し制限のデフォ
> ルトが異なること以外にトップレベルとの違いはありません。クラス定義式
> 中には任意の式を書くことができクラス定義の際に実行されます。
0412410
2006/08/18(金) 22:22:12- 定義(というか ruby プログラム)は上から順番に実行されることが保証されている
ということですか。
勉強になりました 、どうもありがとうございます >411 さん
0413デフォルトの名無しさん
2006/08/19(土) 02:09:29ttp://www.amazon.co.jp/gp/product/4274066428/
おー
0414デフォルトの名無しさん
2006/08/19(土) 03:33:160415デフォルトの名無しさん
2006/08/19(土) 11:33:20> この場合ですと特別な処理をしたい @foo に対して、foo=(x) を再定義している
> (ことになると理解しています)のが気になるのですが…
-wで警告が出るのを気にしないなら問題ない。
0416デフォルトの名無しさん
2006/08/19(土) 11:52:070417デフォルトの名無しさん
2006/08/19(土) 12:23:300418デフォルトの名無しさん
2006/08/19(土) 12:25:220419デフォルトの名無しさん
2006/08/19(土) 12:26:384部を分離、加筆ということで2冊に分けたような気がする。
併せて買うと高くなっている。
0420410
2006/08/19(土) 12:42:09-wで警告が出るのを気にしないなら問題ない。
あ、警告が出るのはよくないですね… attr_reader を使えばいいのかな。
class S
attr_reader :foo
attr_accessor :bar
def foo=(x)
@foo = x.tr('a-z','A-Z')
end
end
s = S.new
s.foo = 'foo'
s.bar = 'bar'
puts [s.foo, s.bar] -> FOO, bar
手元の環境(ruby 1.8)ではこれで期待通りの動作になりました。
0421デフォルトの名無しさん
2006/08/19(土) 13:52:39ライブラリ編の方は高いままか。
でも、これなら言語編だけでも買う気が起きるな。
さすがに、2冊同時の値段は厳しかったから。
0422デフォルトの名無しさん
2006/08/19(土) 14:00:03誰か欲しい人いる?
2000円くらいで売る
0423デフォルトの名無しさん
2006/08/19(土) 14:32:310424デフォルトの名無しさん
2006/08/20(日) 07:53:190425デフォルトの名無しさん
2006/08/20(日) 08:29:190426デフォルトの名無しさん
2006/08/20(日) 08:53:43キープした本を倍くらいの高値で出品してるんだ
評価履歴見る限りではものによっては売れてるみたいだけど、
初心者向け書籍でふっかけても売れるもんかねえ
0427デフォルトの名無しさん
2006/08/20(日) 17:22:16file 'hoge.o' => ['hoge.c', 'Rakefile'] do
p "hoge.o hoge.c Rakefile"
end
とかくと、hoge.cとRakefileが更新されたときにタスクが実行されます。
これを file でなく、rule で行いたいのですが、いい方法はないでしょうか。
rule '.c' => ['.o', 'Rakefile'] do
p "#{t.name} #{t.source} Rakefile"
end
と書いてもうまくいきません
0428デフォルトの名無しさん
2006/08/20(日) 17:24:25%.o: %.c Makefile
なんとかかんとか
で、できるんですが・・・
0429デフォルトの名無しさん
2006/08/20(日) 17:37:15http://www.kuwata-lab.com/kwartz/kwartz3-users-guide.03.html
できそうではあるのですが・・・
0430427
2006/08/20(日) 19:18:13def make_sources(task_name, extensions)
このあたりを見るに、ソースに対応した拡張子しか対応してなさそうです。
しかし、procを渡すと、その返却値のファイルで見てくれるので、
無理やり、
file 'hoge.o' => ['hoge.c', lambda{'Rakefile'}] do
p "hoge.o hoge.c Rakefile"
end
とやるとうまくいきました。
普通のファイルも扱えるように、
要望だそうかな・・・って、どこに出せばいいんだろ。
0431427
2006/08/20(日) 19:19:03rule '.c' => ['.o', lambda{'Rakefile'}] do
p "#{t.name} #{t.source} Rakefile"
end
です。すみません。
0432デフォルトの名無しさん
2006/08/20(日) 22:38:47rake-devl ML http://rubyforge.org/pipermail/rake-devel/ か
ruby-core あたりじゃまいか。
あとruleの順序が逆のような。
# Rakefile
task :default => 'hoge.o'
file '.foo'
rule '.o' => %w[.c Rakefile .foo] do |t|
p "#{t.name} #{t.sources.join(' ')}"
end
0433patch
2006/08/20(日) 22:41:32===================================================================
--- lib/rake.rb (リビジョン 568)
+++ lib/rake.rb (作業コピー)
@@ -1552,12 +1552,11 @@
# Attempt to create a rule given the list of prerequisites.
def attempt_rule(task_name, extensions, block, level)
- sources = make_sources(task_name, extensions)
- prereqs = sources.collect { |source|
+ prereqs = make_sources(task_name, extensions) { |source|
if File.exist?(source) || Rake::Task.task_defined?(source)
source
- elsif parent = enhance_with_matching_rule(sources.first, level+1)
+ elsif parent = enhance_with_matching_rule(source, level+1)
parent.name
else
- return nil
+ nil
end
}
@@ -1573,7 +1572,8 @@
case ext
when String
- task_name.sub(/\.[^.]*$/, ext)
+ yield ext.sub(/\A(?=\.)/) {task_name.sub(/\.[^.]*$/, '')} or
+ yield ext or ext
when Proc
- ext.call(task_name)
+ yield ext.call(task_name)
else
fail "Don't know how to handle rule dependent: #{ext.inspect}"
0434427
2006/08/20(日) 23:41:05.cと.o逆でした。書き込むときに間違えました orz
手元では、あってます。
0435デフォルトの名無しさん
2006/08/21(月) 08:25:250436デフォルトの名無しさん
2006/08/23(水) 23:15:03Rubyは初めてです。
この度Ruby on Railsの学習を始めたのですが、
Rubyの仕様なのかRailsのしくみなのかよく分からずに覚えていってます。
それでRubyの基礎というか本質的な部分を勉強したいと思っています(入門ではなく)。
なんか良い書籍はありませんでしょうか?
0437デフォルトの名無しさん
2006/08/23(水) 23:21:160438デフォルトの名無しさん
2006/08/23(水) 23:50:23いや、例のでかい本の内容がわからないからなんとも言えないけど
プログラミング慣れしてる人なら入門補助的に機能する本かもしれないし
0439デフォルトの名無しさん
2006/08/23(水) 23:53:270440436
2006/08/24(木) 00:13:09返事を待たずに比較考慮して
「オブジェクト指向スクリプト言語 Ruby」
http://www.amazon.co.jp/gp/product/4756132545
を注文しちゃった。
ちょっとミスったかな?
>>413
のが良さそうな表紙だ。
0441デフォルトの名無しさん
2006/08/24(木) 00:17:03バージョン 1.4 ベースだからかなり古いと思われ。
0442デフォルトの名無しさん
2006/08/24(木) 00:18:25Ruby on Rails の本が何冊か出てるから
そっち買った方がいいと思う。
その本は Ruby を使うこと以外のこと
(言語のつくりとか)の解説も多く、
入門的に使うにはあまり向いてないよ。
0443デフォルトの名無しさん
2006/08/24(木) 00:21:02速攻でキャンセルしろ
スレ的にはもはや漬物石にしか使えない本だ
RoRはRoR本に任せるべし
Rubyを知りたい場合はたのしいRuby第2版か>>413買え
0444436
2006/08/24(木) 00:37:11amazonで注文したんだけど速攻でキャンセルしようと思ったらできなかった。
返品できるみたいなんでやってみる。ごめんよamazon
>>443
RoR本は1冊もってます。RoRの作者が書いたやつ。
達人プログラマも惹かれましたが、作者の書いた本にも惹かれ
>>440を選択してしまいました。
>>413にしようかな。Ruby第2版ってなんですか?>>413とは違うの?
0446デフォルトの名無しさん
2006/08/24(木) 02:01:05継承を用いないで、あるクラスの別名を定義したいのですが。。。
0447446
2006/08/24(木) 02:14:330448デフォルトの名無しさん
2006/08/24(木) 11:31:23aから、bの要素でないものを抜き出す一番スマートな方法を教えてください
その際、計算量がどれくらいになるかも教えて欲しいです。
例)
a = [1,2,3,4,5]
b = [2,5]
のとき、
[1,3,4]が欲しい
0449デフォルトの名無しさん
2006/08/24(木) 11:35:520450デフォルトの名無しさん
2006/08/24(木) 12:28:02grepとかと比べてどうかとかそういう話だと思うけど
0451デフォルトの名無しさん
2006/08/24(木) 14:21:46ソースを見たところ、bをHashにしてa.eachで突き合わせてるようす。
時間はhashメソッドの実装にもよるかもと思って試したらよくわからない結果になった。
@CoreDuo T2600, ruby-1.8.5-preview5 on Cygwin 1.5.21-2
user system total real
Fixnum 0.234000 0.016000 0.250000 ( 0.238000)
Float 873.125000 0.156000 873.281000 (888.061000)
String 0.704000 0.000000 0.704000 ( 0.703000)
LongString 0.516000 0.000000 0.516000 ( 0.494000)
Object 0.531000 0.000000 0.531000 ( 0.536000)
require 'benchmark'
class Hoge
def hogehoge;end
@value = rand
end
def mklary(dir, size)
Dir[File.join(dir,'*.*')].sort{rand(2)<=>1}[0, size].map{|fn| IO.read(fn)}
end
Benchmark.bm(0) do |job|
j = "job.report(t) {a - b}"; al = 1000000; bl = 500000
t="Fixnum"; a = (1..al).to_a; b = (1..bl).to_a; eval(j)
t="Float"; a = (1..al).map{rand}; b = (1..bl).map{rand}; eval(j)
t="String"; a = (1..al).map{|i| i.to_s}; b = (1..bl).map{|i| i.to_s}; eval(j)
t="LongString"; a = mklary('/usr/bin',500); b = mklary('/usr/bin',250); eval(j)
t="Object"; a = (1..al).map{Hoge.new}; b = (1..bl).map{Hoge.new}; eval(j)
end
0452デフォルトの名無しさん
2006/08/24(木) 14:26:16「何を」計測・比較しようとしてるのかを詳しく
0453デフォルトの名無しさん
2006/08/24(木) 15:08:24同じ要素数でオブジェクトが違う状態で実行に掛かる時間を比較しているつもり。
File読み込んだときは要素数が違うけど。
っていうか時間って書いてあるね。
0454デフォルトの名無しさん
2006/08/24(木) 15:12:020455デフォルトの名無しさん
2006/08/24(木) 16:19:01そもそも、計算量はこうです、と言って出したデータじゃないから文句言われてもな。
ベンチマークはHashがhashメソッドの値を使うって書いてあったので
オブジェクト毎に違いがあるか試すためにやってみたんだけどFloatが遅すぎるのが不思議。
0456デフォルトの名無しさん
2006/08/24(木) 17:15:17計算量ってオーダーのことを聞いてると思うので、
オブジェクトの違いによる差よりも、同じ種類のオブジェクトで、
配列要素の増加に対して処理時間がどう増加するかを提示するのが良いと思われ。
0457デフォルトの名無しさん
2006/08/24(木) 17:25:47だから計算量のデータじゃないって言ってんじゃんかよ。うぜーよ。
0458デフォルトの名無しさん
2006/08/24(木) 17:39:330459デフォルトの名無しさん
2006/08/24(木) 18:11:25何だろこれ?
0460デフォルトの名無しさん
2006/08/24(木) 18:13:22オーダーってO(N)とかいう話?
a - bするとして、処理の項目毎には
1. bをHash化=>(Hash)B(たぶんO(N))
2. aの順次アクセス=>要素oを取得(O(N))
3. B中からoを検索(O(1)*a.size回)
4. 3で見つからなかったオブジェクトを返値のArrayに挿入(たぶんO(N))
1.8.5-prevew5のソースだと、やってる項目はこんな感じ。
これは試すまでもないし、>>451に書いた話で想像できるだろ。
全部あわせて計算量を示せるとは思えんが。
>>458
ごめんちゃい。
あとはこっちでやれよ。
ttp://pc8.2ch.net/test/read.cgi/tech/1106572657/
0461デフォルトの名無しさん
2006/08/24(木) 23:42:20[ruby-dev:29352]
0462デフォルトの名無しさん
2006/08/24(木) 23:57:00意味わかんないんだけど、何?
0463デフォルトの名無しさん
2006/08/25(金) 00:16:15「ruby-devメーリングリスト過去ログの29352番嫁」
という意味だとオモ
ちなみにruby-devでぐぐればMLの過去ログ見つかる
0464デフォルトの名無しさん
2006/08/25(金) 00:19:37じゃなくてそれ読んだけどどう関係があるの?
0465デフォルトの名無しさん
2006/08/25(金) 01:01:50よくhashが衝突するので、それを回避するために、計算しているから、遅くなってる、
でよい?
0466デフォルトの名無しさん
2006/08/25(金) 01:36:33ちょっと誤解される表現かも。
「衝突を回避するための計算」のために遅いんではなく、
衝突してしまってるのでhashとしての効果が出ない状態。
「回避するための計算」が十分に回避できてないといってもいいけど。
0467デフォルトの名無しさん
2006/08/25(金) 12:54:50それとも宿題終わってもう見てないのか?
0468デフォルトの名無しさん
2006/08/25(金) 14:01:25d = RFLOAT(num)->value;
if (d == 0) d = fabs(d);
c = (char*)&d;
for (hash=0, i=0; i<sizeof(double);i++) {
hash += c[i] * 971;
}
if (hash < 0) hash = -hash;
return INT2FIX(hash);
つまり、Floatの各バイトを足し合わせて、971倍しているだけだな。
そりゃあ衝突もするわ。
0469デフォルトの名無しさん
2006/08/25(金) 15:40:55971 = 2^(8+1) + 2^(8+0) + 2^(1) + 2^(0) って分解できるけど何か便利なのかな。
0470デフォルトの名無しさん
2006/08/25(金) 16:01:190471デフォルトの名無しさん
2006/08/25(金) 16:08:20また、その素数についても、下位ビットが全部消えちゃうことがないように
ある程度下位ビットが生き残るような値が望ましい。
だいたいそんなところ。
0472デフォルトの名無しさん
2006/08/25(金) 16:22:18とかの間違いだよな。
0474デフォルトの名無しさん
2006/08/25(金) 16:34:16ばらけすぎ。
それ7回繰り返したらいくらになると思う?
0475デフォルトの名無しさん
2006/08/25(金) 16:43:41ばらけたほうがいいんじゃないの?
桁が増えると乗算命令のコストが増える(実際どうか知らんけど)とか言う関係かな。
>>473
> ビットが反転するだけで、同じことでは?
よくわかんない。
なんか勘違いしてる?
0476デフォルトの名無しさん
2006/08/25(金) 17:56:16となるので
(0..-2).each{|i| p i}
としてみたけど何にも表示されません。これは,なにが起こってるんですか?
0477デフォルトの名無しさん
2006/08/25(金) 18:33:52(0..-2)じゃ配列じゃなくてRangeオブジェクトだし降順だとeach動かないぞ
0478476
2006/08/25(金) 20:40:58[0..-2]というのは配列にRangeオブジェクトを渡してるんですよね?
昨日から勉強し始めたのでまだよくわかってません
精進します
0479デフォルトの名無しさん
2006/08/25(金) 21:08:18include Comparable
attr_reader :str
def initialize(str)
@str = str
end
def <=>(other)
@str <=> other.str
end
end
hash ={ Foo.new("abc") => "a"}
array = [ Foo.new("abc") ]
b = Foo.new("abc")
p hash.include?(b) #=> false
p array.include?(b) #=> true
hashの場合もtrueにする良い方法はないでしょうか?
0480デフォルトの名無しさん
2006/08/25(金) 21:29:330481デフォルトの名無しさん
2006/08/25(金) 21:37:04def hash
@str.hash
end
def eql?(other)
@str == other.str
end
end
みたいな
0482479
2006/08/25(金) 21:49:42>>480
hash.keys.include?でできました
>>481
こちらでもできました
でも意味が理解できません、勉強します。
0483479
2006/08/25(金) 21:56:09hashのkeyの等しさの判断は、これを使用するのですね勉強になりました。
0484デフォルトの名無しさん
2006/08/27(日) 06:12:31class A
def a(n)
puts ["(^0^) ", "(T_T)", "(´_`;)"].at(n % 3)
end
end
def delegate(obj, f)
proc { |*args| obj.__send__ f, *args }
end
a = A.new
(1..2006).each &(delegate a, :a)
こんな感じのことがやりたいのですが・・・。
0485デフォルトの名無しさん
2006/08/27(日) 06:21:130486デフォルトの名無しさん
2006/08/27(日) 06:25:36本当にありがとうございました!
0487デフォルトの名無しさん
2006/08/29(火) 21:30:440488デフォルトの名無しさん
2006/08/30(水) 07:58:06うさぎ本ではなくピッケル本というのが正しいのですか?
0489デフォルトの名無しさん
2006/08/30(水) 13:40:180490デフォルトの名無しさん
2006/08/30(水) 19:54:01The Pickax Book ツルハシ本
0491デフォルトの名無しさん
2006/08/31(木) 10:10:52"Pickaxe" じゃね?
0492490
2006/08/31(木) 11:10:31ふむ。裏表紙には
Welcome to the PickAxe (named for the tool on the cover).
と書いてあった。Aも大文字。
0493デフォルトの名無しさん
2006/08/31(木) 22:18:37その二進表示を出力するプログラムを作成しよ。
ただし整数から二進表示文字列を作るメソッドi2bを
作成してそれを呼び出すように書くこと。
出来る人誰かいませんか?できるだけ簡単なプログラムでお願いします。
Ruby初心者なのでわからなくて困ってます。
0494デフォルトの名無しさん
2006/08/31(木) 22:25:010495デフォルトの名無しさん
2006/08/31(木) 22:26:540496デフォルトの名無しさん
2006/08/31(木) 22:27:140497デフォルトの名無しさん
2006/08/31(木) 22:28:110498デフォルトの名無しさん
2006/08/31(木) 22:45:570499デフォルトの名無しさん
2006/08/31(木) 22:59:060500デフォルトの名無しさん
2006/08/31(木) 23:14:270501デフォルトの名無しさん
2006/08/31(木) 23:21:14def i2b(i)
i.to_s.unpack("b*)
end
くれぐれも他の奴は俺みたいに親切にならないように。
こんな簡単な問題なんだから、間違いを指摘してあげるのもナシで。
0502デフォルトの名無しさん
2006/08/31(木) 23:21:47def i2b(i)
i.to_s.unpack("b*")
end
0504デフォルトの名無しさん
2006/08/31(木) 23:38:430505デフォルトの名無しさん
2006/08/31(木) 23:41:000506デフォルトの名無しさん
2006/08/31(木) 23:41:550507デフォルトの名無しさん
2006/08/31(木) 23:44:160508デフォルトの名無しさん
2006/09/01(金) 00:12:35そこで >>502 みたいなレスしなきゃ良い回答だと思ったのに。
0509デフォルトの名無しさん
2006/09/01(金) 15:02:09ソースコード・標準入出力はShift-JISで、内部演算はUTF-8みたいな感じで。
0510デフォルトの名無しさん
2006/09/01(金) 15:06:17ないよ。
諦めな。
0511デフォルトの名無しさん
2006/09/01(金) 15:16:21サンクス。
0512デフォルトの名無しさん
2006/09/01(金) 15:38:35ttp://www.oreilly.co.jp/books/4873112923/
さっきちょっと見てきたけど、とてつもない初心者に勧めるにはいいんじゃないかな?
0513デフォルトの名無しさん
2006/09/01(金) 16:14:57$KCODEのとこ見てみな。
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%CA%D1%BF%F4
Rubyは内部コードというものがないのでソースコード読むときに考慮されるのとメソッドが何個か考慮するようになるくらいという認識だが。
あんまり深く考えたことない。
0514デフォルトの名無しさん
2006/09/01(金) 18:14:00成り済ましファイルの判定に使いたいと考えています。
ご存知の方おられましたら、教えてください。
環境は Linux+ruby 1.8.5 及び WindowsXP+ruby-mswin32 1.8.5 です。
よろしくお願いいたします。
hoge% file -bi foo.bmp
image/bmp
hoge% mv foo.bmp foo.jpg
hoge% file -bi foo.jpg
image/bmp
hoge%
0515デフォルトの名無しさん
2006/09/01(金) 18:43:54Windows で使えるかわからないけど、このへんとか?
http://raa.ruby-lang.org/project/filemagic/
0516デフォルトの名無しさん
2006/09/01(金) 18:49:31いる。で、その判定ルールそのものは magic という設定ファイル(をコンパイ
ルしたもの)を利用している。
なので、 magic を file コマンドから流用し、それを使って自分で同じよう
に処理をすれば可能といえば可能だろう。ただまあ、そこまでするくらいなら
file コマンドを直に呼び出した方が楽だと思うが。
あと、 mimetype が欲しいのであれば、 file に -m オプションで magic.mime を指定するという手もあるよ。
% file test.png
test.png: PNG image data, 640 x 480, 8-bit colormap, non-interlaced
% file -m /usr/share/file/magic.mime test.png
test.png: image/png
0517デフォルトの名無しさん
2006/09/01(金) 18:59:00ありがとうございます!
残念ながら >515 のものは magic.lib を用いるので
素のwindows ではだめなようです。
windowsでは magic がないので、そもそもmagic.lib のロジックから
作らないとだめみたいですね。cygwinやSFUで動くかも…
ともあれ参考になりました。ありがとうございました。
0518デフォルトの名無しさん
2006/09/01(金) 19:56:09ソースをUTF-8で書いて、$KCODE = "UTF8" にすれば一応、文字処理はクリアできそう
ですね。
携帯サイトのCGIなので、標準出力はShift-JISにしたいのですが、kconv を使って、
UTF-8 → Shift-JIS に変換して出力するものでしょうか?
それとももっと違う方法を取るものなのでしょうか?
0519デフォルトの名無しさん
2006/09/01(金) 22:26:13基本的にはそういうこと。
初期化の順番を考えると#!行で-Kuを指定した方が良い。
フレームワークとかテンプレートエンジンでコード変換を吸収してくれるならそれを使うといいと思うけど寡聞にして知らない。
0520デフォルトの名無しさん
2006/09/01(金) 22:50:25encoding.pm は非推奨
encoding.pm は非推奨
encoding.pm は非推奨
0521デフォルトの名無しさん
2006/09/01(金) 23:34:00サンクス
0522デフォルトの名無しさん
2006/09/01(金) 23:58:480523デフォルトの名無しさん
2006/09/02(土) 00:06:34って聞いているもんじゃね?
つくりによるとしか
0524デフォルトの名無しさん
2006/09/02(土) 07:58:02やり方がわかりません。
http://www.ruby-lang.org/ja/20020106.html
を読んで
cvs -z4 -d :pserver:[email protected]:/src co ruby
をしてみたけど、これって1.9ではないですよね。
どなたかruby1.9のダウンロード方法教えてください。
0525デフォルトの名無しさん
2006/09/02(土) 09:05:46Windows で Ruby を使うなら ActiveScriptRuby など。
0526デフォルトの名無しさん
2006/09/02(土) 09:16:43LinuxならRPM/debなど。
ソースからのビルドは慣れた人や
インストーラの存在しない環境向け。
あと勘違いしてるようだが言語の場合
必ずしも最新版が良い訳ではない。
基本的に安定版と呼ばれるものを使うべし。
0527デフォルトの名無しさん
2006/09/02(土) 09:22:05んー……ちと帰宅したら試してみる。
0528524
2006/09/02(土) 11:56:40>>524のやり方でダウンロードしたものが1.9のようです。
version.h見たら1.9.0と書いてありました。
お騒がせして申し訳ない。
0529デフォルトの名無しさん
2006/09/02(土) 20:00:45↓ruleと(の間にスペースが入っている
rule (/#{DEST_DIR}/ => lambda{|f| File.basename f }) do |t|
p t.name
end
って書くと、
warning: don't put space before argument parentheses
って、言われるのですが、これって何でですノン?
スペースなくすと、大丈夫です。
文法上、あいまいさが出るんですか?
0530デフォルトの名無しさん
2006/09/02(土) 21:03:40a = func1()
def func1
return 1
end
みたいな使い方をしたい。
理由は、関数定義がファイルの先頭にあると、読みにくいからです
0531デフォルトの名無しさん
2006/09/02(土) 21:16:53Rubyが関数呼び出しの際カッコを省略できるのは知ってる?
foo (a + b + c) * x
どうなるかぱっと見わかりづらくね?
>>530
無理。
関数定義と実行ファイルを別にすりゃいいだけじゃないか。
末尾が実行開始位置だと読みにくいくらい既に長くなってるってことでしょ?
0532デフォルトの名無しさん
2006/09/03(日) 00:00:01「フォームの値が入っているものとしてローカルで実験」の項がWeb上の最新マニュアルから消えているんですが
これが出来るほかの方法知りませんか?
0533デフォルトの名無しさん
2006/09/03(日) 00:07:220534デフォルトの名無しさん
2006/09/03(日) 00:14:13回答ありがとうございます
…でも、ごめんなさい現在ruby1.8.4(Winバイナリ)を使っているのですが、該当のサンプルコードを丸々コピペでも
「do not use CGI_PARAMS and CGI_COOKIES」と表示されて。
恐らく、現在のバージョンでは消されてしまったのではないかと思うのです、わかりませんが…。
0535デフォルトの名無しさん
2006/09/03(日) 00:19:00open("hoge.txt").read
ってやっちゃてよいものなんでしょうか。
close呼ばれる?
0536デフォルトの名無しさん
2006/09/03(日) 00:25:29http://www.ruby-lang.org/ja/man/?cmd=view;name=trap%3A%3AIO
IO.read "hoge.txt"
とやればいいようですね。
0537デフォルトの名無しさん
2006/09/03(日) 01:06:19普通は {} を使ってブロック内で処理させるな。(ただし、普通=俺の普通)
0538デフォルトの名無しさん
2006/09/03(日) 02:05:40プロセスが終わるときには閉じるでしょう。それで大丈夫なら大丈夫じゃないか。
でも、IO.readで代用できるんだったらそっちのほうが安全で楽かと。
0539デフォルトの名無しさん
2006/09/03(日) 04:15:02def main
a = func1()
end
def func1
return 1
end
main
みたいな方法はどう?
0540デフォルトの名無しさん
2006/09/03(日) 10:35:52>文法上、あいまいさが出るんですか?
その通り。関数のカッコの前にスペースを入れられるようにすると、>>531のように、
(foo(a+b+c)) * x
foo((a+b+c) * x)
の2通りに解釈できてしまう。
0541デフォルトの名無しさん
2006/09/03(日) 13:59:16ああ、そうっかー。カッコなしでも関数呼べますもんね
0542デフォルトの名無しさん
2006/09/04(月) 00:34:13rubyのshellってないんですかね。
0543デフォルトの名無しさん
2006/09/04(月) 01:00:520544デフォルトの名無しさん
2006/09/04(月) 01:14:590545デフォルトの名無しさん
2006/09/04(月) 01:17:12なんで?
0546デフォルトの名無しさん
2006/09/04(月) 01:35:31emacsでしか使えないか・・・
0547デフォルトの名無しさん
2006/09/04(月) 12:42:500548デフォルトの名無しさん
2006/09/04(月) 12:49:49そんなアドホックなメソッドいらん。inject使うか自分で定義すれ。
0549デフォルトの名無しさん
2006/09/04(月) 18:38:33俺は定義してるな
既存クラスへのメソッド追加は結構やる
大きいコードではやりたくないがな
0550デフォルトの名無しさん
2006/09/04(月) 19:26:11結構使うだろ? というようなメソッドを
いろいろ教えて欲しいなと思うのです。
まあ、「そんなの使わねぇよ、バカ」とか言われそうなので
敷居高そうですけど。
0551デフォルトの名無しさん
2006/09/04(月) 19:50:41=>[1..5,7..10,13..15,19]
とか使ってます。たまにだけど(こういうこと?>>550)
0552デフォルトの名無しさん
2006/09/04(月) 20:13:39ftp://ftp.ruby-lang.org/pub/ruby/snapshot.tar.gz
のRubyのMakefileで、アンインストールを行うターゲットはどれなのでしょう?
uninstallという名のターゲットは無いようなので。
0553デフォルトの名無しさん
2006/09/04(月) 20:21:41そういうの。
というか、ほんとはその中身が知りたい。
どうやんの、それ。
あと、Enumerable#max も割とアドホックな気がする。
0554デフォルトの名無しさん
2006/09/04(月) 20:44:25class Time
alias :strftime_org :strftime
def strftime(format)
format.gsub!(/%u/, self.usec.to_s)
strftime_org(format)
end
end
puts Time.now.strftime("%a %b %d %H:%M:%S:%u %Z %Y")
#=> Mon Sep 04 20:43:58:858000 東京 (標準時) 2006
いらない?あっそ
0555デフォルトの名無しさん
2006/09/04(月) 20:47:27無かったはず。
たしか、インストールされたファイルのリストがどっかに出力されてるから
それを元にしてインストールされたファイルを全て削除すればおしまい。
0556デフォルトの名無しさん
2006/09/04(月) 20:51:25こういうのって自分用のライブラリに纏めて使ってる人はいるかな。
0558デフォルトの名無しさん
2006/09/04(月) 21:19:27shuffleは使うよねー
こういうのはActiveSupportでまとめてくれるとうれC
0559デフォルトの名無しさん
2006/09/04(月) 21:23:15てゆか、プ板でまとめないか?
0560デフォルトの名無しさん
2006/09/04(月) 21:30:10今は標準でサポートされたんだっけ?
0561デフォルトの名無しさん
2006/09/04(月) 21:31:54プ板って初めて見た。
ム板、マ板ならよく見るけど。
0562デフォルトの名無しさん
2006/09/04(月) 21:48:47俺の場合、
Time#to_sで、月が英語表記なのがいやで(=読めない)
"%Y/%m/%d %H:%M:%S"を
俺用to_sとして使ってます。
(実際はメソッド名変えてます。)
ええ、ばかですよ。
あと、>>554氏のやつで
引数formatを破壊的メソッドgsub!で書き換えちゃうのって
まずくない?
(意図的だったらスミマセン)
こういう時、俺の場合、dupで複製してから、
複製に対してごにょごにょするんだけども、
そういうのって一般的なのでしょうか?
0563デフォルトの名無しさん
2006/09/04(月) 21:51:38最終的にcookbookみたいなレベルのになるのでもいいから見てみたい
0564デフォルトの名無しさん
2006/09/04(月) 22:17:46Array#shuffleとArray#shuffle!は先週1.9に追加された。
0565デフォルトの名無しさん
2006/09/04(月) 22:18:04wiki立てようか?
0566デフォルトの名無しさん
2006/09/04(月) 22:25:41http://oss.moongift.jp/intro/i-2310.html
0567デフォルトの名無しさん
2006/09/04(月) 22:50:21まじっすか!
0568デフォルトの名無しさん
2006/09/04(月) 22:55:57Rubyって関数内関数って使える?
0569デフォルトの名無しさん
2006/09/04(月) 22:57:140570デフォルトの名無しさん
2006/09/04(月) 23:17:030571デフォルトの名無しさん
2006/09/04(月) 23:22:35そのメソッドを一回呼び出すと、内部で宣言したメソッドが当該クラスに追加
される、という挙動になる。ので、外からも呼べるようになるので、メソッド
内メソッドではないというだけ。
ああいうのが欲しくなったときは、仕方ないので lambda とかを使っている。
0572552
2006/09/04(月) 23:31:251.9Betaがインストールされてしまった環境を、1.8に戻すにはどうしたら良い
でしょうか?
・OSはRedHat EL4
・CPUはXeon64
・もともとRedHat公式の1.8がインストールされていた
・ある人が無断で1.9Betaをソースからビルドしてインストールしてしまった
ftp://ftp.ruby-lang.org/pub/ruby/snapshot.tar.gz
・インストールログは取っていなかったので、どこに何が入ったかわからない
・find で検索すると、/usr/local/lib/ruby の下に、1.8 と 1.9のディレク
トリが存在する
・1.9Betaのインタプリタは/usr/local/bin/ruby、1.8のインタプリタは/usr/bin/ruby
考えたのですが、1.9Betaのインタプリタだけ削除(またはリネーム)すれば、
再び1.8が呼ばれるようにはならないでしょうか?
恥ずかしい相談で恐縮ですが、どうかアドバイスをお願いします。
0573デフォルトの名無しさん
2006/09/04(月) 23:41:09サンクス
ほんとだ。関数内関数にはならないけど、宣言はできるのか
def hoge
def moge
puts " moge"
end
puts " hoge"
moge
end
def moge
puts " new moge"
end
puts "hoge:"
hoge
puts "moge:"
moge
puts "hoge.moge:"
hoge.moge
0574デフォルトの名無しさん
2006/09/04(月) 23:41:54hoge
moge
moge:
moge
hoge.moge:
hoge
moge
moge
ん?mogeが再定義できていないのは?
0575デフォルトの名無しさん
2006/09/04(月) 23:50:05yieldの使い方がリファレンスを読んでも理解できません。
Procは分かるのですが、どう違う物なんでしょうか。
なにか分かりやすいページとかあったら教えてください。
0576デフォルトの名無しさん
2006/09/04(月) 23:52:02> ・find で検索すると、/usr/local/lib/ruby の下に、1.8 と 1.9のディレク
> トリが存在する
ということは1.8もソースからインストールしていたということだな。
とくになにも指定していなければ上書きされてしまったはずなので、
そこにあった1.8は復活できないが、以下のものを消せばいいはず。
* /usr/local/bin/{ruby,erb,irb,rdoc,ri,testrb}
* /usr/local/lib/libruby.so.1.9*
* /usr/local/lib/1.9
* /usr/local/lib/site_ruby/1.9
* /usr/local/man/man1/ruby.1
* /usr/local/share/ri/1.9 (install-doc までやってれば)
make DESTDIR=/tmp/ruby_install install
でインストール先を指定できるので、なにがインストールされるか
確認してみればいい。
0577デフォルトの名無しさん
2006/09/04(月) 23:52:510579デフォルトの名無しさん
2006/09/05(火) 00:04:300580573
2006/09/05(火) 00:12:42puts "etc:"
puts " self.hoge " + self.methods.include?("hoge").to_s
puts " self.moge " + self.methods.include?("moge").to_s
puts " Object.hoge " + Object.methods.include?("hoge").to_s
puts " Object.moge " + Object.methods.include?("moge").to_s
ってやったんですが、結果は、
etc:
self.hoge false
self.moge true
Object.hoge false
Object.moge true
なんじゃこりゃ><
これってどういう挙動ですノン?
def hoge は、どこに登録されているんだろ?
def hoge 内の def moge は、Objectに登録されているんですけど、よいのですか?
0581デフォルトの名無しさん
2006/09/05(火) 01:30:400582デフォルトの名無しさん
2006/09/05(火) 01:45:51def moge; end
end
def moge; end
pvt = Object.private_instance_methods
pub = Object.public_instance_methods
p pvt.include?('hoge')# => true
p pvt.include?('moge')# => true
p pub.include?('hoge')# => false
p pub.include?('moge')# => false
hoge
pvt = Object.private_instance_methods
pub = Object.public_instance_methods
p pvt.include?('hoge')# => true
p pvt.include?('moge')# => false
p pub.include?('hoge')# => false
p pub.include?('moge')# => true
最初の時点では両方とも private だが
メソッド内で再定義された時点から public になってるな。
ちなみに勘違いしてるかも知れないが
>>573のコード内の
hoge.moge
は hoge の戻り値が nil なので nil.moge を呼んでるぞ。
そりゃ Object の public メソッドに moge があるんだから nil.moge も呼べる罠。
0584559
2006/09/05(火) 02:32:02"new moge" は全然newじゃない。
puts "moge:"
moge
puts "hoge:"
hoge
puts "moge:"
moge
の結果
moge:
new moge
hoge:
hoge
moge
moge:
moge
0585デフォルトの名無しさん
2006/09/05(火) 06:56:13標準登載するまでもないかもしれないが、
良く使うメソッドコード集ってすげぇ欲しいわw
できれば、ライセンスフリーで使えることを謳っておいてくれると嬉しい。
2ch はライセンス的にダメなので wiki が良いな。
0586デフォルトの名無しさん
2006/09/05(火) 10:34:49WEBrick使ってるんですけど、特定のホストで例外が起きます。
調べてみると、ホスト名の認識がまずいようで、
URI::parse('http://shacho_soft.at.infoseek.co.jp/diablo_calc/calc.html')
上記のホストで、ホスト名にアンダースコアが含まれてるために host ではなくて registry が設定されてしまい
InvalidURIErro例外が発生します。WEBrick的には HTTPStatus::BadRequest です。
uri/common.rb の↓の部分でアンダースコアが含まれてないから、上手くいかないんだと思うんですけど
DOMLABEL = "(?:[#{ALNUM}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
TOPLABEL = "(?:[#{ALPHA}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
HOSTNAME = "(?:#{DOMLABEL}\\.)*#{TOPLABEL}\\.?"
こういうのって、きっちりRFCにしたがってるんだと思いますが
どうにかして上手く回避する方法はないでしょうか?
たぶん、アンダースコアを含めれば上手くいくんでしょうけど、
この手の問題って、過去に問題になってる気がするので、賢い方法があったら教えてください
0587572
2006/09/05(火) 12:22:00わせたところ、1.8はソースではなくRedHat提供のRPM(バイナリ)パッケージ
からインストールしたということでした。
>>576氏の
>1.8もソースからインストールしていたということだな。
という言葉と矛盾してしまい、少々当惑しております。もしかしたら、他の方
法で1.8をインストールしようとした人がいたのかも知れません。
ということで、追加で質問させていただきたいのですが、
RedHat提供のRPM(バイナリ)パッケージでRuby1.8を再インストールしようと
思っているのですが、>>576で教えていただいた手順の実行後、RPMのインストー
ルをすればよいのでしょうか?
何度もすみませんが、よろしくお願いします。
0588デフォルトの名無しさん
2006/09/05(火) 12:58:45俺もいつも困ってるんだが、なんかうまい方法ないかねえ。
0589デフォルトの名無しさん
2006/09/05(火) 13:10:33本スレにぶん投げるといいことあるかも
0590デフォルトの名無しさん
2006/09/05(火) 13:27:47関連しそうなRFC1738, 2396, 2616を眺めてみたけどアンダースコアは使えるよ。
というかそれ全然RFCに従ってないと思う、WEBrick使って無いんで知らないけど
ttp://ja.wikipedia.org/wiki/%E3%83%AB%E3%83%93%E3%83%BC
とかも失敗しない?
0591デフォルトの名無しさん
2006/09/05(火) 13:37:09ホスト名
0592デフォルトの名無しさん
2006/09/05(火) 13:54:36さすがに ttp:// に対応してるわけはなかろう。
0593デフォルトの名無しさん
2006/09/05(火) 13:57:39漏れは、アンダースコアを含んだパターンも解釈するように URL::parse を修正して使ってる。
0594デフォルトの名無しさん
2006/09/05(火) 14:14:08あ、ごめん癖でh抜いちゃったけど要はURLエスケープした文字列含んでるとって事。
0595デフォルトの名無しさん
2006/09/05(火) 14:23:21URL エスケープしててもいけるよん。試してみた?
0596デフォルトの名無しさん
2006/09/05(火) 15:08:40URI::parseの制限をゆるくするオプションかなんかは欲しい。
WEBrickでproxy作ったりするとかなり迷惑する。
0597デフォルトの名無しさん
2006/09/05(火) 16:01:20オプションで指定といっても難しそうな気はするね。
uri = URI::Parser::new(:host=>host_pattern, :path=>path_pattern, :fragment=>fragment_pattern).parse(url)
みたいにカスタマイズできると良いのかなあ?
0598デフォルトの名無しさん
2006/09/05(火) 16:28:22日時をあらわす文字列と、そのフォーマットを表す文字列を指定して、
Timeオブジェクトを生成するにはどうしたら良いでしょうか?
Rubyは1.8.1です。
0599デフォルトの名無しさん
2006/09/05(火) 16:36:20Time#strftimeを参照のこと。
0600デフォルトの名無しさん
2006/09/05(火) 16:40:36def shuffle(ary)
ary.map{|x| [rand,x]}.sort.map{|x| x[1]}
end
0601598
2006/09/05(火) 16:49:09すみませんが、混同しているわけではありません。
やりたいことは、Time#strftime の逆です。
文字列から、Timeオブジェクトを作りたいのです。
0602デフォルトの名無しさん
2006/09/05(火) 16:55:32こんなのとか? Time::strptime は 1.9 からなのかな?
require "date"
Time::local(*DateTime::_strptime("2006-09-05 16:49:50", "%Y-%m-%d %H:%M:%S").values_at(:year, :mday, :mon, :hour, :min, :sec))
0605デフォルトの名無しさん
2006/09/05(火) 17:12:04Date必要なし。
Time.local(*"2006-09-05 17:00:00".match(/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/).captures)
0606デフォルトの名無しさん
2006/09/05(火) 17:20:08MLか日記で読んだやつ。
ary.sort_by{0.5<=>rand}
shuffle!するにはreplaceしてくれ。
短くしたいなら
ary.sort{rand(3)-1} #0..2を返すので-1で-1..1
とかだけどsort_byより遅いかも。
0607デフォルトの名無しさん
2006/09/05(火) 17:25:18の問題は、イテレータで書くと綺麗に書けそうな予感がしますが
(a)どなたかお手本をみせてもらえませんか
また、(b)本能でざっと書いた以下を、もっとrubyの特長
を生かした感じで書くならどのような書き方がありますか。添削所望
ary=gets.chop.gsub(/[() ]/,"").split(',')
while (n=ary.shift.to_i)<=ary.length
if n==0 then print "[]\n";next end
puts ary[0..n-1].inspect
if n==ary.length then break end
ary=ary[n..ary.length]
end
0608デフォルトの名無しさん
2006/09/05(火) 17:26:24それならarr.sort_by{rand}でもいける
下の方法は偏るよ
0609デフォルトの名無しさん
2006/09/05(火) 18:10:52やってみた。
ルビーらしいかどうかはわからんけど。
ary = [1, 5, 3, 55, -45, 6, 2, 8, 7, 0, 1, 2, 3, 1]
while !(ary.empty? || ary.size <= ary.first)
p ary.slice!(0, ary.shift)
end
0610デフォルトの名無しさん
2006/09/05(火) 18:21:00立てて欲しいな。
0611デフォルトの名無しさん
2006/09/05(火) 19:07:47偏るね。
低脳だった。
忘れてくれ。
0612デフォルトの名無しさん
2006/09/05(火) 19:45:01irb(main):299:0> Benchmark::bmbm do |bm|
irb(main):300:1* bm.report("plain"){10.times{(1..10000).sort_by{rand}}}
irb(main):301:1> bm.report("ufo"){10.times{(1..10000).sort_by{0.5<=>rand}}}
irb(main):302:1> end
Rehearsal -----------------------------------------
plain 0.375000 0.000000 0.375000 ( 0.375000)
ufo 0.093000 0.000000 0.093000 ( 0.119000)
-------------------------------- total: 0.468000sec
user system total real
plain 0.282000 0.000000 0.282000 ( 0.288000)
ufo 0.125000 0.000000 0.125000 ( 0.115000)
整数値作ってからのほうが早いがもっと僅差だと思っていた。勉強になった。
0613600
2006/09/05(火) 20:37:040614デフォルトの名無しさん
2006/09/05(火) 20:41:53Float#<=> は 0, 1, -1 しか返さなくない?
0615デフォルトの名無しさん
2006/09/05(火) 21:58:53偏る。やっぱアホだったorz
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/39588
やるならsort_by{rand(ary.length)}かな。
でも整数だと偏るという話もあるみたい。
0616デフォルトの名無しさん
2006/09/05(火) 22:02:14ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/40891
0617デフォルトの名無しさん
2006/09/05(火) 22:22:18> RedHat提供のRPM(バイナリ)パッケージでRuby1.8を再インストールしようと
> 思っているのですが、>>576で教えていただいた手順の実行後、RPMのインストー
> ルをすればよいのでしょうか?
再インストールしなくても、prefixがわかれてるようだからRPMのほうはその
まま残ってるだろ。
/usr/local/binが/usr/binよりもPATHの先にセットされてるんで
/usr/local/bin/rubyが使われてるだけだと思う。1.9を消すだけで十分なはず。
PATHの順序を変えてためしてみればいい。
0618デフォルトの名無しさん
2006/09/05(火) 22:30:090619デフォルトの名無しさん
2006/09/06(水) 00:19:07class Array
def shuffle
r=[]
while i=slice!(rand(size)) do
r.push i
end
return r
end
def shuffle!
replace shuffle
end
end
0620デフォルトの名無しさん
2006/09/06(水) 00:20:23御免これじゃshuffleが元データ破壊しちまうw
書き直すわw
0621619
2006/09/06(水) 00:24:12class Array
def shuffle!
r=[]
while i=slice!(rand(size)) do
r.push i
end
replace r
end
def shuffle
dup.shuffle!
end
end
0622デフォルトの名無しさん
2006/09/06(水) 00:54:34おーさまのみみはろばのみみー(メル欄)
0623デフォルトの名無しさん
2006/09/06(水) 01:15:520624デフォルトの名無しさん
2006/09/06(水) 01:21:12bangなメソッドも似たような感じでかけないかな。
0625デフォルトの名無しさん
2006/09/06(水) 01:21:29無駄な電池消費しないのは良いが流し聴く以外には向かない
0626デフォルトの名無しさん
2006/09/06(水) 06:07:44こういうのがあるけど。
http://facets.rubyforge.org/
Ruby Facetsは単一の大きなライブラリであり、コアとなる拡張メソッドと、標準ライブラリを含んでいます。
Array#shuffleだけでなく、String#shuffleやHash#shuffleもある。
ソース付きで見られるから勉強にも良い。
0627デフォルトの名無しさん
2006/09/06(水) 06:58:41やりたいのは、n番目の文字以降の部分文字列をスマートに取得することです。
Rubyには String#[index,length] と String#slice(index,length)がありますが、lengthを省略すると、部分文字列ではなくて文字コードが返されてしまうので、JavaのString#substring()とはちょっと違うようです。
String#slice(index)が文字コードではなくて部分文字列を返してくれるといちばんいいんですけど。
今は
s = "abcdefg"
i = 3
s[i, s.length - i]
としているんですけど、なんかかっこわるいので、「n番目以降の部分文字列」をとってくるスマートな方法をお願いします。
0628デフォルトの名無しさん
2006/09/06(水) 07:31:32puts s[3..s.size] #=> "defg"
でダメ?
0629デフォルトの名無しさん
2006/09/06(水) 07:40:58puts s[3..-1] #=> "3456"
もあり。
0630デフォルトの名無しさん
2006/09/06(水) 11:33:28うるさいよ童貞
0631デフォルトの名無しさん
2006/09/06(水) 13:16:03Pythonのhelp()はとても便利なのですが、あんな感じのものが、irbから対話
的に呼び出せたり、といったものはないのでしょうか?
0632デフォルトの名無しさん
2006/09/06(水) 16:38:17いまひとつこれのしくみがよくわからない。
2つの要素を比較するときの比較結果がランダムになるんだよね。
ソートが終了することは保証されるの?
0633デフォルトの名無しさん
2006/09/06(水) 16:47:02どうでもいいけど、それ sort_by の使い方を勘違いしてるでしょ。 >>608 が正しい。
0634デフォルトの名無しさん
2006/09/06(水) 19:53:52Pythonのhelp()はどんなのかしらないんだけど、
ttp://rubyist.g.hatena.ne.jp/yamaz/20060831 はどうよ。
0636デフォルトの名無しさん
2006/09/06(水) 21:32:160637デフォルトの名無しさん
2006/09/06(水) 22:01:13RDEを使って勉強を始めましたが、複数行をコメントアウトしたり復帰したりする方法がわかりません。
RDEマニュアルを見てみましたが、特にふれられてないような気がします。メニューをみても(複数行のインデントはありましたが)コメントに関するコマンドはなかった気がします。
どなたか教えていただけませんでしょうか。
お願いいたします。
0638デフォルトの名無しさん
2006/09/06(水) 22:05:58・他の同プロセスが動いてないことを確認してから起動させる。
・特定のポートを開くとか、なにかをロックしてから起動させる。
・起動したらまずそのスクリプト自身を削除するようにする。
みたいなのはダメで、厳密には外部からの制御が必須。
0639デフォルトの名無しさん
2006/09/06(水) 22:18:41windowsみたいに言語でサポートされてる訳ではないんですね
0640デフォルトの名無しさん
2006/09/06(水) 22:18:46DBのロックやファイルのロックを使う。
具体的にはこんな感じ。(ファイルロックの例)
open('test.lck') do |f|
raise('二重起動です') unless f.flock(File::LOCK_EX | File::LOCK_NB)
while (print('input ^Z to exit> ') or gets) do end
f.flock File::LOCK_UN
end
0641デフォルトの名無しさん
2006/09/06(水) 22:21:38その例の応用だとファイルのロックを外さずに終了しちゃう場合も出てきそうだな。
0642デフォルトの名無しさん
2006/09/06(水) 22:22:47プロセスの監視を使う方法もあるが
スクリプト言語の場合
二重起動してるのはインタプリタ本体。
それらが同じスクリプトを実行してるのかどうかまでは
OSからは判らん話だろ。
だからスクリプト側でやるしかない。
0643デフォルトの名無しさん
2006/09/06(水) 22:24:33rubyインタプリタが終了したらロックは外れる。
気持ち悪いならもっと作り込めば良いが。
0644デフォルトの名無しさん
2006/09/06(水) 22:35:15なんでOSが出てくるの?
0645デフォルトの名無しさん
2006/09/06(水) 22:37:54そりゃ嘘だな。killしてみた?
0646デフォルトの名無しさん
2006/09/06(水) 23:31:33http://rubyde.sourceforge.net/hiki/ja/Sample%2Bscripts.html あたりに
こっそり書いてあったりします。
0647デフォルトの名無しさん
2006/09/07(木) 02:24:01それは特殊な場合だろ。
基本的にはロックがちゃんとはずれるように作るんだよ。
正常系のテストをちゃんとしとけ。
その上で、ロックファイルのタイムスタンプを見て、時間が掛かりすぎてると思うならロックファイル消してやりなおすなりすりゃいいだろ。
やり直していいかどうかは、何をどういう仕様でやるか次第だが。
0648デフォルトの名無しさん
2006/09/07(木) 03:14:14でしたら、もっと良い例をお願いしても構いませんでしょうか?
0649デフォルトの名無しさん
2006/09/07(木) 06:07:24thanks
0651デフォルトの名無しさん
2006/09/07(木) 17:34:54$ /usr/bin/ruby /usr/bin/gem_server
と gem_server を立ち上げて、Webブラウザでアクセスをしていると
*** glibc detected *** corrupted double-linked list: 0x4028f8b8 ***
Aborted
というメッセージを吐いて死んでくれる現象が頻発しています。
/uar/bin/ruby -d で立ち上げると
(eval):11: [BUG] Segmentation fault
Aborted
とお亡くなりになります。環境は
Debian GNU/Linux etch / i386
libc6 2.3.6-15
ruby1.8 1.8.4-5
libgems-ruby 0.9.0-2
です。試しに ruby 1.8.5 を tar ball から直接 make して
/usr/local/bin/ に導入し(rubygems は deb パッケージから導入したものを流用ということで)
$ /usr/local/bin/ruby -I/usr/lib/ruby/1.8 /usr/bin/gem_server
と gem_server を動かしてみると、落ちることはありません。ruby 1.8.4 から 1.8.5 の間で
このあたりのバグフィックスがなされているのでしょうか、あるいは私の環境が変なだけ?
0652デフォルトの名無しさん
2006/09/07(木) 17:43:39動かすことは可能ですか?
cronはなしでお願いします
0653デフォルトの名無しさん
2006/09/07(木) 19:28:54rubyscript2exe で --rubyscript2exe-rubyw を指定して実行ファイルを作るとプロンプトでなくなる。
ログ取りたい場合は以下参照
When using --rubyscript2exe-rubyw, the application runs without a console.
This is nice for an application with a GUI. But, although you're a good programmer,
sometimes the applications simply dies. If there's no console, there's no back-trace
as well. I usually add one of the following lines to the top of my application, even
before the require statements:
$stdout = $stderr = File.new("/path/to/temp/application.log", "w")
or
$stdout = $stderr = File.new("/path/to/temp/application.#{Process.pid}.log", "w")
あとはwshでrun経由でスクリプト起動してプロンプト非表示にするオプション指定するとか
俺はこんな感じでやってる
0654デフォルトの名無しさん
2006/09/07(木) 21:05:240655デフォルトの名無しさん
2006/09/07(木) 22:24:46>>640はflockだからcloseしたら解除される。
プロセスが終了すればfdはcloseされる。
0656デフォルトの名無しさん
2006/09/08(金) 01:21:42俺には質問の意味がわからない・・・
「コンソールを出す」起動方法ってどんなの?
0657デフォルトの名無しさん
2006/09/08(金) 01:31:04つか、>>656 は元から端末が出してるだろ。
0658デフォルトの名無しさん
2006/09/08(金) 01:56:480659デフォルトの名無しさん
2006/09/08(金) 05:35:03あるならrubywに関連付けれ
0660デフォルトの名無しさん
2006/09/08(金) 09:05:090661デフォルトの名無しさん
2006/09/08(金) 09:53:250662デフォルトの名無しさん
2006/09/08(金) 12:38:14ある。
0663デフォルトの名無しさん
2006/09/08(金) 12:59:14Rubyのソースに、関数やクラスの説明のコメントを付けたいのですが、
JavaDocのような標準的な形式はないのでしょうか?
参考になるようなコードやWebページをご紹介いただければ、いっそう助かります。
0664デフォルトの名無しさん
2006/09/08(金) 13:00:390665663
2006/09/08(金) 13:05:50[ネタ] Rubyってドキュメントあるの?樹形図
http://d.hatena.ne.jp/kzys/20050314/p1
0666デフォルトの名無しさん
2006/09/08(金) 15:16:38デバッグで、ブレイクポイントまで実行してからステップを実行すると、また最初からやり直します。
どのようにすれば正常に動くようになるのでしょうか?
0667デフォルトの名無しさん
2006/09/08(金) 21:17:580668デフォルトの名無しさん
2006/09/08(金) 23:11:06http://www.ruby-doc.org/core/
俺はRDoc調べつつ、上記のURLと*.rbのソースを比較して覚えたな。
0669デフォルトの名無しさん
2006/09/09(土) 00:32:25ruby.exeにファイル名を渡した時
自動でワイルドカードが展開されますが
これを止める方法はありますか?
0670デフォルトの名無しさん
2006/09/09(土) 00:56:17ワイルドカードを含む引数を' (シングルクオート)でくくる。
……って話ではない?
0671デフォルトの名無しさん
2006/09/09(土) 08:56:17標準のシェルがワイルドカードを展開しない環境 (Win32)では、
Ruby インタプリタが自前でワイルドカードを展開して ARGV に設定します。
この場合ワイルドカードとして `*', `?', `[]', `**/' が使用できます
(Dir.glob と異なり `{..}' は使えません)。
Win32 環境で、ワイルドカード展開を抑止したい場合は引数を
シングルクォート(') で括ります。
0672デフォルトの名無しさん
2006/09/09(土) 12:36:020673デフォルトの名無しさん
2006/09/09(土) 13:17:240674デフォルトの名無しさん
2006/09/09(土) 15:31:21ソースを全部コピーしてください
0675669
2006/09/09(土) 15:41:09う〜ん、やっぱりそれしか無いですか…
バッチファイルを作ってデフォルトで括られるようにするかな
お答えありがとうございました
0676デフォルトの名無しさん
2006/09/09(土) 16:26:24exerb
0677デフォルトの名無しさん
2006/09/09(土) 18:09:38こういうのがやりたいのですが、これワイルドカードに対応してないようなのです
別の方法があるでしょうか?
0678デフォルトの名無しさん
2006/09/09(土) 18:09:54具体的には、ソフトにRuby組み込むときって、dllと、ライブラリのソースがいるじゃないですか?
ライブラリのソースがバババと入っているのはなんとかならんのかなー、と思った次第。
まとめられたらなあ。
0679デフォルトの名無しさん
2006/09/09(土) 19:04:45Dir.glob("#{dir}#{num}*")
0680デフォルトの名無しさん
2006/09/09(土) 19:11:56この辺のを改造すればなんとかなるかも
ttp://bruby.sourceforge.jp/
0681デフォルトの名無しさん
2006/09/09(土) 22:24:29インスタンス変数はサブクラスと共有されている様ですが、
これを制限する方法は存在しますか?
ほぼブラックボックス化したクラスを継承したとき、
いずれかのクラスに共有やクラス外からの変更を意図しないインスタンス変数があった場合、
サブクラス内で使われるインスタンス変数名と親クラスのそれとが被ってしまうことは非常に大きな問題に思えるのですが、
まさか解決法が無いなんてことは…ないですよね?
0682デフォルトの名無しさん
2006/09/09(土) 22:30:490683デフォルトの名無しさん
2006/09/09(土) 22:57:46とりあえずAjaxは板違いなのでWeb製作かWebプログラミング辺りへGo
Railsも専用のスレはWebプログラミング板にある。>2 参照
0684デフォルトの名無しさん
2006/09/09(土) 22:58:420685デフォルトの名無しさん
2006/09/09(土) 22:58:50いろんなこと勉強してみます。
0686デフォルトの名無しさん
2006/09/09(土) 23:09:51お前は分かってるつもりなの?w
0687デフォルトの名無しさん
2006/09/09(土) 23:13:41<form action="hoge.rb" method="post" enctype="multipart/form-data">
<input type="hidden" name="id" value="id" />
<p><input type="file" name="file" size="20" /></p>
<p><input type="submit" name="return" value="アップロード" /></p>
</form>
cgi = CGI.new
としたとき,
cgi['file']
は参照できるのですが,
cgi['id'].read
の値がなぜか空になっています。
どうすればこの値をきちんと取得できるでしょうか?
0688デフォルトの名無しさん
2006/09/09(土) 23:28:09あと、読めるのは一回だけだから、
最初に読むときに別の変数に代入しようね
0689デフォルトの名無しさん
2006/09/09(土) 23:29:19ありがとうございました。
解決しました。
0690デフォルトの名無しさん
2006/09/09(土) 23:49:48俺も初心者なんで眉に唾つけてね。可視性の制御対象は、メソッドと定数だけ
で、インスタンス変数は含まれないみたい。
君の心配はわかるけど、そもそもブラックボックスをホワイトボックス再利用
しようとすることが間違いなんで、実用上問題になるとは思えない。
0691デフォルトの名無しさん
2006/09/10(日) 00:00:16要は親クラスと子クラスの同名のインスタンス変数を別として扱いたいと。
う〜ん……逆にアクセサメソッド用意しちゃったら?
アクセサ付いてる変数名は使わないでしょ多分。
んでアクセサメソッドのコメントに「みだりに使うな」とか。
0692デフォルトの名無しさん
2006/09/10(日) 00:22:17>>691氏
非常に参考になりした。ご返答ありがとう御座いました。
アクセサを作った心理作戦ですか・・・なかなか面白そうです。今後の参考にさせて頂きます。
0693デフォルトの名無しさん
2006/09/10(日) 00:58:35PickAxeを見てたら、mixinでよく似た問題が取り上げられていました(cf. pp. 122-123)。
曰く「固有の名前を付けよ」だそうです。モジュール名を接頭辞につけるなど。
その他、ハッシュ定数を使う手もあるみたいです。
0694デフォルトの名無しさん
2006/09/10(日) 02:55:13http://www.erikveen.dds.nl/tar2rubyscript/index.html
これは?
0695デフォルトの名無しさん
2006/09/10(日) 07:43:10>君の心配はわかるけど、そもそもブラックボックスをホワイトボックス再利用
>しようとすることが間違いなんで、実用上問題になるとは思えない。
違う。ブラックボックスにしたいのに、親クラスで使っているのと同じ名前のインスタンス変数をサブクラスで偶然定義してしまった場合、それが親クラスにも影響を与えてしまうことが問題。
つまり、ブラックボックスにしたいのに、それができないことが問題。ホワイトボックスうんぬんは関係ない。
これは多人数でプログラムを開発するうえでは、けっこう致命的。
あまり発生しない問題ではあるが、発生した場合に発見するのが難しい。なぜなら単体テストはどれも通ってて、結合テストになってはじめて発生するから。
残念ながらRubyでは解決方法は特になく、別名をつけるしかない。
Javaならprivateにすればいいし、Pythonなら__varとかすると自動的にクラス名をつけて_MyClass_varとかしてくれるんだけどね。
というわけで、プライベートな変数の名前衝突がどうしても気になるなら、RubyよりPython使ったほうがいいかも。
0696デフォルトの名無しさん
2006/09/10(日) 08:06:48ども
0697デフォルトの名無しさん
2006/09/10(日) 12:03:01困るのはその通りだね。
ただちょっと言うと、 Ruby では継承そのものを利用する局面がそれほど多く
ないと感じる。 Java とかと違って、継承しないと利用できない局面がそもそ
もなく、同名のメソッドさえ用意しておけば問題ないから。
だからそれほど問題視されていないんじゃないかなと思う。
実際、 Ruby のプログラムで継承を使ったことはおれはほとんどない。まあそ
んな大規模なプログラムを Ruby でやった経験もないけれど……。
mixin の場合はちょっとまずいのかな。
0698デフォルトの名無しさん
2006/09/10(日) 14:31:07与えないよ
0699デフォルトの名無しさん
2006/09/10(日) 14:43:35えー、どうやったら与えないの?
ちょっとコード例見せて(はぁと
0700デフォルトの名無しさん
2006/09/10(日) 14:47:42Smalltalkの記事探してたら、偶然見つけた。
http://d.hatena.ne.jp/sumim/20060221/p1
コード:
class Parent
def set(val)
@val = val end
def show
puts "Parent:"+ @val end end
class Child < Parent
def set_(val)
@val = val end
def show_
puts "Child:"+ @val end end
obj = Child.new
obj.set "for Parent."
obj.set_ "for Child."
obj.show
obj.show_
obj.set "for Parent."
obj.show_
実行結果:
Parent:for Child.
Child:for Child.
Child:for Parent.
0701デフォルトの名無しさん
2006/09/10(日) 14:47:52exerbの作者、面白いもん作ってんなー。
さすが、未踏ユースゲッターだ。
いじってみるか
0702デフォルトの名無しさん
2006/09/10(日) 14:48:300703デフォルトの名無しさん
2006/09/10(日) 15:08:491.6だけどね
0704デフォルトの名無しさん
2006/09/10(日) 15:12:530705デフォルトの名無しさん
2006/09/10(日) 15:15:53それ、思いっきり影響与えてるじゃんw
0706デフォルトの名無しさん
2006/09/10(日) 15:19:080707700
2006/09/10(日) 15:21:160708デフォルトの名無しさん
2006/09/10(日) 15:35:060709デフォルトの名無しさん
2006/09/10(日) 15:49:00定数でしのぐしかないわな。
0710デフォルトの名無しさん
2006/09/10(日) 16:01:33ハッシュ使えばほぼ解決できるな。醜くなりそうだけど。
0711デフォルトの名無しさん
2006/09/10(日) 16:15:50ちょwwww
手元でも確かめた、マジこれまずいでしょ。
何がまずいかっていうと、他の言語の感覚で使うと非常に困るんだな。
Rubyは、継承ってあまりしないのかもしれないけど・・・。
>>709
ハッシュ定数ってどゆこと?
perlみたいに、全部Hashに突っ込むの?
0712709
2006/09/10(日) 17:38:59>>711 ハッシュ定数は想像の通り。ところでそんなにマズイか?Mixin以外に困る事態が想像しにくいのだけど。
0713デフォルトの名無しさん
2006/09/10(日) 17:44:52下手に安易な変数名をつけられないよ。
まさか、ドキュメントに変数名が全部網羅してあるとは、限らない。
ソース読まないと安全に使えないということになる。
他の言語だと気にしないですむだけに、怖いな・・・
0714デフォルトの名無しさん
2006/09/10(日) 17:48:060715デフォルトの名無しさん
2006/09/10(日) 18:22:38ハンガリア〜ン
0716デフォルトの名無しさん
2006/09/10(日) 18:25:21すみませんrubyマニュアル当たってもなかなかヒットしないので教えてください
Windows環境でputsしたりするときに、改行コードをLFにしたいのですが
どのようにすればいいのでしょうか?
0717デフォルトの名無しさん
2006/09/10(日) 18:43:11と思う
0718デフォルトの名無しさん
2006/09/10(日) 18:52:38書いて行かないといけないというのもかなり違和感あります。
0719デフォルトの名無しさん
2006/09/10(日) 19:14:45puts "改行で終わる文字列オブジェクトが引数になった場合puts自身は改行しません\f"
0720デフォルトの名無しさん
2006/09/10(日) 19:18:49とすると必ずnilが返ってくるのですがバグですか?
mswin32です
0721デフォルトの名無しさん
2006/09/10(日) 19:21:360722デフォルトの名無しさん
2006/09/10(日) 19:34:480723デフォルトの名無しさん
2006/09/10(日) 20:23:380724デフォルトの名無しさん
2006/09/10(日) 22:18:15Windowsじゃそういうファイル名は付けられないから。
0725デフォルトの名無しさん
2006/09/10(日) 22:39:53> 指定されたパスの最初にある空白文字は除去されます。
> 指定されたパスの最後にある空白文字は除去されます。
> コロンの後ろにあり、パス区切り文字の前にある空白文字は除去されます。
> ディレクトリ名あるいはファイル名の最後にある空白文字は除去されます。
0726デフォルトの名無しさん
2006/09/10(日) 22:42:48それ何の仕様?
0727デフォルトの名無しさん
2006/09/10(日) 22:47:51ttp://www.microsoft.com/japan/msdn/netframework/programming/bcl/faq/SystemIOFAQ.aspx
> 特定の空白文字は、最後、最初、あるいはスペースが意味を持たない文字列内の
> すべての場所において除去されます。
> 次のコードは、c:\Windows\System32 のようなパスを探す場合の空白文字の除去の例です。
> 次のような規則に従います。
:
0728デフォルトの名無しさん
2006/09/10(日) 23:20:310729デフォルトの名無しさん
2006/09/11(月) 08:04:05ディレクトリ名ってWindowsじゃフォルダって言うんじゃないのか代
0730デフォルトの名無しさん
2006/09/11(月) 08:34:40別にフォルダをディレクトリのように扱えるということではない
マイ コンピュータ や コントロールパネル を移動したりすることはできないという意味なのだろう
0731デフォルトの名無しさん
2006/09/11(月) 09:11:11作れないよ
0732デフォルトの名無しさん
2006/09/11(月) 09:13:07>マイ コンピュータ や コントロールパネル を移動したりすることはできない
出来ますが何か?
0733デフォルトの名無しさん
2006/09/11(月) 09:41:560734デフォルトの名無しさん
2006/09/11(月) 09:45:38region を指定した上で indent-region では何か不足?
0735デフォルトの名無しさん
2006/09/11(月) 09:47:41あれはレジストリ内の参照用パスの再設定じゃね?
ディレクトリの移動とは別物だと思う
概念的存在のフォルダの移動はできない、でよいかと
0736デフォルトの名無しさん
2006/09/11(月) 10:06:11どうもです。
ソースコードにその一文を追加してもダメでした。
どこかに設定欄があるのでしょうか?
0737デフォルトの名無しさん
2006/09/11(月) 12:14:11いいえ。
ruby-mode.el を見ても、そんなの無かったので気が付きませんでした。
そういったものの一覧を知るにはどうしたら良いですか?
0738デフォルトの名無しさん
2006/09/11(月) 12:29:09> 記者はTurbo Rubyでも出せば結構ヒットするのでは,とも思うのだが。
ヒットするかねぇ……
0739デフォルトの名無しさん
2006/09/11(月) 12:53:08M-x info -> Emacs
0740デフォルトの名無しさん
2006/09/11(月) 13:08:510741デフォルトの名無しさん
2006/09/11(月) 13:13:23>ボーランドにとっての最大の資産は,忠誠心の高いユーザーからなるコミュニティであろう。
>彼らが「このツールいいよ」とネット上でクチコミで広めてくれたり,積極的にカスタム
>・コンポーネント(ソフトウエア部品)を作ってくれたりするようになれば,それなりに勝機はある。
いまは逆の展開になってるよな・・・
0742デフォルトの名無しさん
2006/09/11(月) 14:49:13ワロタ
確かに逆だww
(公証は)Turboは外部コンポーネント使えないしなw
0743デフォルトの名無しさん
2006/09/11(月) 15:05:10本当の意味でのコンパイラがでてくれれば買っちゃうよ
0744デフォルトの名無しさん
2006/09/11(月) 22:34:19print "\ropq"
とすると
opqdefghijklmn
となってしまうのですが
opqだけ表示するために表示行を一度クリアするには
どうすればいいんでしょ?
0745デフォルトの名無しさん
2006/09/11(月) 22:49:29UNIX/Linuxなら
print `tput el` # 行末まで削除
print `tput el1` # 行頭まで削除
0746デフォルトの名無しさん
2006/09/11(月) 22:55:42winなんで駄目ですねぇ
規格を定めた人もその辺まで考えといてくれよと
0747デフォルトの名無しさん
2006/09/11(月) 23:15:46print "\ropq" + ' ' * ("abcdefghijklmn".length - "opq".length)
じゃないか?
0748デフォルトの名無しさん
2006/09/11(月) 23:18:240749デフォルトの名無しさん
2006/09/11(月) 23:20:060750デフォルトの名無しさん
2006/09/11(月) 23:28:35print "\r "
print "\ropq"
0751デフォルトの名無しさん
2006/09/11(月) 23:29:270752デフォルトの名無しさん
2006/09/11(月) 23:31:00XP以降では標準でANSIエスケープシーケンス無視するね
解釈するように設定変更はできるけど
0753デフォルトの名無しさん
2006/09/11(月) 23:39:340754デフォルトの名無しさん
2006/09/12(火) 00:22:48Win2000でも無視する。NT4でもそうだったような。
> 解釈するように設定変更はできるけど
できるの?
0755デフォルトの名無しさん
2006/09/12(火) 08:25:320756デフォルトの名無しさん
2006/09/12(火) 16:07:230757デフォルトの名無しさん
2006/09/12(火) 19:40:540758デフォルトの名無しさん
2006/09/12(火) 19:50:5816bitアプリケーションの場合しか有効にならないんですけど、
そのことを考慮していらっしゃいますか?
0759デフォルトの名無しさん
2006/09/12(火) 20:17:22cygwinで実行したらOKだった
0760デフォルトの名無しさん
2006/09/12(火) 20:20:23cmd.exeで実行してもOKだった
0761デフォルトの名無しさん
2006/09/12(火) 20:28:140762デフォルトの名無しさん
2006/09/12(火) 20:35:38cmd.exe上は動かないみたい
さてどうしたものか
0763デフォルトの名無しさん
2006/09/12(火) 20:38:450764デフォルトの名無しさん
2006/09/12(火) 21:57:33print "\x1b[s"
print "abcdefghijklmn"
print "\x1b[2K"
print "\x1b[u"
print "opq"
0765デフォルトの名無しさん
2006/09/12(火) 22:56:30puts Iconv.conv('utf8', 'sjis', '\\\\/') # 促促/
puts '\\\\/'.tosjis.toutf8 # \\/
と結果が違うのですが、Iconvの方なんかおかしくないですか?
ruby 1.8.4 (2005-12-24) [i686-linux] です。
0766デフォルトの名無しさん
2006/09/13(水) 00:46:35iconvも\\/になったけど。
libiconvのバージョンは?
0767デフォルトの名無しさん
2006/09/13(水) 04:35:59きたね。
個人的にはイラネと思うが、まぁ直感的な記法だから邪魔にはならないかな。
0768デフォルトの名無しさん
2006/09/13(水) 09:12:50文字コードは変換可能なので気にしません。
str = 'abcあいうdefえお かき<?>くけこ'
array = hoge(str)
p array #=> ['abc, 'あいう', 'def', 'えお', ' ', 'かき', '<?>', 'けこ']
0769デフォルトの名無しさん
2006/09/13(水) 11:01:25str.scan(/[\x21-\x7e\s]+|[^\x21-\x7e\s]+/).to_a
0770デフォルトの名無しさん
2006/09/13(水) 13:11:07(1) NKF.nkf などを使って ISO-20200-JP に変換する
(2) String#scan で ESC を検索して分割
(3) それぞれの部分文字列を再度 NKF.nkf で適当に変換
という処理なら昔やったことがある。
0771デフォルトの名無しさん
2006/09/13(水) 13:18:55#!ruby -Ks
def hoge(str)
ret = []
flag = nil
str.scan(/./).each do |chr|
if flag != (chr.size == 1)
flag = (chr.size == 1)
ret << ""
end
ret[-1] += chr
end
ret
end
p hoge("abcあいうdefえお かき<?>くけこ")
0772765
2006/09/13(水) 15:13:34$iconv -version
iconv (GNU libc) 2.4
でした。2.3.5のdebianやMacOSX10.4でも>>765と同様の結果です。
うーん、何がおかしいんだろう
0773デフォルトの名無しさん
2006/09/13(水) 15:55:030774デフォルトの名無しさん
2006/09/13(水) 15:56:08バックスラッシュで iconv が狂うみたいだな。 Ruby の問題ではない。
SJIS のかわりに CP932 を指定すれば化けないよ。たぶん。
0775765
2006/09/13(水) 16:11:080776デフォルトの名無しさん
2006/09/13(水) 18:27:31if x in [1,2,3] って is を補いたくなるね
[1,2,3].has? 4 というのがあれば読み下せるんだけど、[ruby-list:24603]で切り捨てられてるか
0777768
2006/09/13(水) 18:30:07ありがとうございました、いろいろ方法があるんですねー
769さんの方法がシンプルで良さそうなんですけど
使う文字コードによってマズイことがあるのかな?
0778デフォルトの名無しさん
2006/09/13(水) 18:56:29むろん。 shift-jis や 7bit jis では問題が起こる可能性がある。
ふだんから euc-jp や utf-8 を使ってるなら問題ナシ。
0779769
2006/09/13(水) 19:02:43>>778 の言う通りで、 7bit jis (ISO-2022-JP) だとダメだね。
Shift_JIS なら -Ks か $KCODE = "s" する (あまりおすすめできない) か、
/.../s みたいに Shift_JIS と見做すオプションを付ければ問題ないと思う。
0780デフォルトの名無しさん
2006/09/14(木) 01:32:11def bar(str)
str =~ /(hoge|huga|hage)/
...
end
みたいな感じで正規表現を使う場合、インスタンスが生成されるたび、
あるいはメソッドが呼ばれるたびに正規表現のインスタンスが作成されるのでしょうか?
/(hoge|huga|hage)/が静的な場合、定数を定義した方がよかったりしますか?
0781デフォルトの名無しさん
2006/09/14(木) 02:06:21空間効率悪過ぎ。
0782デフォルトの名無しさん
2006/09/14(木) 02:19:21ttp://www.yotabanana.com/lab/20060905.html#p10
とか?
0783デフォルトの名無しさん
2006/09/14(木) 02:21:09生成されちゃいますね〜。
ご名答ですw
0784デフォルトの名無しさん
2006/09/14(木) 03:30:24静的なRegexpはparse時にインスタンスが作られる。
>>783はネタのつもりなのかただの勘違いか。
0785デフォルトの名無しさん
2006/09/14(木) 07:09:26RubyやめてJavaでもいいが
0786デフォルトの名無しさん
2006/09/14(木) 10:09:49全然、性格が違うではないか
0788デフォルトの名無しさん
2006/09/14(木) 13:37:24足りないものを満たしてくれたり自分のやりたいことのできる言語を探したほうがいいと思う
最初にRubyというのは、最初にPHPと同じくらい悲惨だ(悲惨のベクトルは真逆だが)
っていうか脈絡なさ杉
>>784
そうなんだ
変数が入ってる場合はるびま添削の第1回みたく括り出したほうがいい?
0789デフォルトの名無しさん
2006/09/14(木) 13:44:270790デフォルトの名無しさん
2006/09/14(木) 20:55:50悲惨というのはどういう意味?
他の言語がかったるくて使えなくなるみたいなこと?
0791デフォルトの名無しさん
2006/09/14(木) 21:28:46Rubyでbz2圧縮のファイルを扱えるモジュールはないでしょうか?
「Rubyアプリケーションプログラミング」という本に、bz2拡張ライブラリ
の作り方が載っているようなんですが、それを参考に自作する以外に
何か方法があればうれしいのですが。
0792デフォルトの名無しさん
2006/09/14(木) 21:45:28ではだめなの?
0793デフォルトの名無しさん
2006/09/14(木) 22:17:01実はWindowsでRubyのスクリプトからbz2で圧縮されたファイルを展開
する、ということをしたいのですが、ご教示いただいたライブラリでは、
無理みたいです(たぶん)。
現在はbz2のwin32バイナリをコマンドラインから呼び出す形にしています。
ただ、他の人がスクリプトを使うとき、いちいちbz2を落としてきてもらう
必要があるので、もっとスマートな方法があるといいんですが。
0794デフォルトの名無しさん
2006/09/14(木) 22:31:250795デフォルトの名無しさん
2006/09/15(金) 01:13:32どう無理だったか知りたい。
0796デフォルトの名無しさん
2006/09/15(金) 02:03:48自分はRDE(Ruby Development Environment)を使ってるんですけど。
もっといいやつありますかね?
0797デフォルトの名無しさん
2006/09/15(金) 02:55:22vim
xyzzy
0798デフォルトの名無しさん
2006/09/15(金) 03:28:32補完機能ありますか?
RDEはメンバメソッドの一覧とか表示してくれて便利なんですけど。
0799デフォルトの名無しさん
2006/09/15(金) 04:05:15俺はemacs一本。
winだったらmedowっていうemacsがあるよ
0800デフォルトの名無しさん
2006/09/15(金) 04:43:450801デフォルトの名無しさん
2006/09/15(金) 05:48:22win32バイナリも一緒に配布するってのじゃだめなのかな。
それより、「ファイルを展開したい」とあるけど、もし *.tar.bz2 なファイルのことをいってるのなら、
bzライブラリは圧縮ファイルを解凍するだけで、tarの展開は別のライブラリを使わないとできないよ。
rubyforgeにmini-tarというライブラリがあるからそれをつかうといい。
0802デフォルトの名無しさん
2006/09/15(金) 09:03:37maedow => Meadow
emacs => Emacsen
0803デフォルトの名無しさん
2006/09/15(金) 09:30:40p "a\012c".to_a.pack('m') #=> "YQo=\n"
p "\012bc".to_a.pack('m') #=> "Cg==\n"
$/ = nil
p "abc".to_a.pack('m') #=> "YWJj\n"
p "a\012c".to_a.pack('m') #=> "YQpj\n"
p "\012bc".to_a.pack('m') #=> "CmJj\n"
デフォルトだと0x0aの後が正常にpackされないのは仕様なのですか?
ruby 1.8.5 (2006-08-25) [i386-mswin32]です。
0804デフォルトの名無しさん
2006/09/15(金) 09:43:30String#to_a は $/ で分割する。
p ["a\012c"].pack("m")' #=> "YQpj\n"
0805803
2006/09/15(金) 10:08:45バイナリデータの途中の処理だったので思いもつきませんでした。
p "a\012b".to_a #=> ["a\n", "b"]
0806デフォルトの名無しさん
2006/09/15(金) 10:33:49大抵Emacsが良いとかいってるやつはvimを使ったことがないんだ
0807デフォルトの名無しさん
2006/09/15(金) 10:40:340808デフォルトの名無しさん
2006/09/15(金) 10:42:06ってレスも定期的に出てくるよな。
0809デフォルトの名無しさん
2006/09/15(金) 10:50:23vimなんてviの2文字で起動する、しかもvとiは打ちやすい位置に配置されてる。
この時点でvimの完全勝利だが起動時間もvimのが速い。
Emacsなんて起動が遅すぎて待ってる間にプログラミングしようという気力が萎えちゃうね。
vim is the best editor. all other editors are sucks.
0810デフォルトの名無しさん
2006/09/15(金) 11:20:480811デフォルトの名無しさん
2006/09/15(金) 11:34:23まじれすなんてするものか
0812デフォルトの名無しさん
2006/09/15(金) 12:28:47hoge
moge
mage
EOS
という文字列があったとき、
先頭と末端に文字を追加したいのですが、
puts s.gsub(/(.+?)\n/, "++" + $1 + "++\n")
では、
moge
moge
moge
となりうまくいきません。
どこが間違っているのでしょうか?
0813デフォルトの名無しさん
2006/09/15(金) 12:49:16その文章からはどう追加したいのかわからんのだが。
結果としてどういう文字列が欲しいか書け。
0814デフォルトの名無しさん
2006/09/15(金) 12:50:44puts s.gsub(/(.+?)\n/, "++\\1++\n")
または
puts s.gsub(/(.+?)\n/) { "++" + $1 + "++\n" }
でいいと思う、というかリファレンスよめ
0815デフォルトの名無しさん
2006/09/15(金) 13:35:02vi の 2文字で nvi が起動してしまう私は FreeBSD ですかそうですか。
0816デフォルトの名無しさん
2006/09/15(金) 15:22:40こういうインタフェイスを使うには、とりあえずbzip2をソースからコンパイル
しないといけないんだろうと思い、VisualC++のトライアル版をインストール
してみました。が、windows.hがないとか言われて上手くいきませんでした。
なんかRuby云々よりも私自身のスキルの問題のようです・・・。
>>801
あ、なるほど。バイナリ自体を含めてしまったらいいんですね。
思い至りませんでした。
あと対象のファイルは単なる.bz2なのですが、mini-tarのこと教えていただき
ありがとうございました。覚えておこうと思います。
0817デフォルトの名無しさん
2006/09/15(金) 16:14:51ttp://ftp.ruby-lang.org/pub/ruby/binaries/mingw/1.8/ext/
ここのコンパイル済みのbz2でなんとかならんかな。
使ってないからわからんけど。
0819デフォルトの名無しさん
2006/09/15(金) 17:31:43まさかとは思うがいちいち
$ emacs hogehoge.rb
という起動の仕方をさせているわけでもあるまい
とか言う俺はviやlessで新たにファイルを読み込むキーバインドを覚えらんね
0820デフォルトの名無しさん
2006/09/15(金) 17:33:28Ruby スレでは。
0821812
2006/09/15(金) 18:09:43++moge++
++mage++
にしたかったのでした。
>>813
>>814
うぉぅ、デキターーーー。
エスパーサンクス!!
リファレンス読みます。すまん。
0822デフォルトの名無しさん
2006/09/15(金) 18:34:09あれはviには真似出来んよ。
0823デフォルトの名無しさん
2006/09/15(金) 18:51:390824デフォルトの名無しさん
2006/09/15(金) 19:27:37その点viはシンプルで素晴らしい。viの完全勝利。
0825デフォルトの名無しさん
2006/09/15(金) 19:34:410826デフォルトの名無しさん
2006/09/15(金) 19:51:45そう思ったら自分好みに変えるのがemacs
0827デフォルトの名無しさん
2006/09/15(金) 22:01:03Ruby 1.9.1 マダァー?
0828デフォルトの名無しさん
2006/09/15(金) 23:38:540829デフォルトの名無しさん
2006/09/16(土) 00:09:41あと1年3ヶ月ちょい待て。
0830デフォルトの名無しさん
2006/09/16(土) 00:27:46viの方が覚えやすい
0831デフォルトの名無しさん
2006/09/16(土) 04:00:01"Vi vs Emacs" がまたはじまったぁぁぁーーー!!
今回は一体何レス無駄に消費するのかっ! するなら本スレでやってくれっ!
0832デフォルトの名無しさん
2006/09/16(土) 04:13:360833デフォルトの名無しさん
2006/09/16(土) 04:14:36すまん
板ちがいだったかも
0834デフォルトの名無しさん
2006/09/16(土) 19:09:24少なくともvi vs Emacsの話よりかはこのスレに合ってる。
0835デフォルトの名無しさん
2006/09/16(土) 20:09:230836デフォルトの名無しさん
2006/09/16(土) 20:15:12をみるかぎり1.4.3時代に取り残されたままっぽい。
そういえばSqueakはVM部分がSmalltalkで出来てて
Cのトランスレータで云々っていうけど充分な速度でてるよね。
ってスクリプトをコンパイルってのとは微妙にはずれてるか。スマン
0837デフォルトの名無しさん
2006/09/16(土) 21:08:16宝くじに当たるわ女にモテるわ仕事も順調になるわで幸せになれました。
みんなもEmacsからviに乗り換えて幸福になりましょう^^
0838デフォルトの名無しさん
2006/09/16(土) 22:39:19責任とって……くれますか?
0839デフォルトの名無しさん
2006/09/16(土) 23:22:510840デフォルトの名無しさん
2006/09/17(日) 11:40:21また、Net::HTTPで、レスポンスボディをIOで読みたいのですが、それをするにはどうすればいいのでしょうか。
0841デフォルトの名無しさん
2006/09/17(日) 13:18:14ある文字列がその集合に含まれるかを高速に確認する方法はどのようにすれば良いでしょうか
・Arrayにいれて、Array#include?
・Hashにいれて、Hash#include?
・Hashのkeyで判断、if hash(str) ……
・その他
0842デフォルトの名無しさん
2006/09/17(日) 13:21:48× ・Hashのkeyで判断、if hash(str) ……
○ ・Hashのvalueで判断、if hash[str] ……
なお、グループ内の文字列は同じものの複数存在することはありません。
0843デフォルトの名無しさん
2006/09/17(日) 13:42:36コマンドラインのツールを作ろうとしていますが、
コマンドライン引数を便利に扱うライブラリは
ないでしょうか?
0844デフォルトの名無しさん
2006/09/17(日) 13:45:120845デフォルトの名無しさん
2006/09/17(日) 13:48:30数百個程度ならArray#include?で十分だと思われ。
0846デフォルトの名無しさん
2006/09/17(日) 14:13:12Hash が使えるなら Hash で。O(1) だし。
0847デフォルトの名無しさん
2006/09/17(日) 14:27:38Set が使えるなら Set で。O(1) だし。
0848デフォルトの名無しさん
2006/09/17(日) 14:28:10まじでー
ハッシュってなんというか処理重いイメージあるんだけど探し物には便利?
0849デフォルトの名無しさん
2006/09/17(日) 14:28:31使い捨てならArrayの方が良さそう。
0850デフォルトの名無しさん
2006/09/17(日) 14:29:55アルゴリズムの勉強くらいしよう
0851デフォルトの名無しさん
2006/09/17(日) 14:37:26キー一発でそのものだけを見付けたいならHash
データがものすごく多いならRDBMS使用
0852デフォルトの名無しさん
2006/09/17(日) 14:55:47おう、それだそれだ、サンクス!!
0853デフォルトの名無しさん
2006/09/17(日) 14:56:470854デフォルトの名無しさん
2006/09/17(日) 15:01:26物によるだろうね。大抵は遅くなりそうだけど。
知りたいなら、計って見ればいいじゃない。
0855841
2006/09/17(日) 15:11:08正規表現は使用しないのでHash使用が良さそうですね。
いま思ったのですが、Hashっていうのはハッシュソートのハッシュのことなのでしょうか?
0856デフォルトの名無しさん
2006/09/17(日) 15:23:28ハッシュのアルゴリズムを使った配列のこと
perlの連想配列って言ったらわかる?
0857デフォルトの名無しさん
2006/09/17(日) 16:03:05度いういうツールをつくったかわからないでしょうか?
http://llamerada.ty.land.to/brails.html
ここによると、Ruby2Exe らしいのですが、どこにあるんでしょう。
http://d.hatena.ne.jp/babie/20060713/p6
0858デフォルトの名無しさん
2006/09/17(日) 16:15:16アイコンから見るに、rubyscript2exeですね
http://www.erikveen.dds.nl/rubyscript2exe/index.html
0859デフォルトの名無しさん
2006/09/17(日) 19:25:51やだなー。
0860デフォルトの名無しさん
2006/09/17(日) 19:34:12ログをみると、
ruby lib version (1.8.4) doesn't match executable version (1.8.5) (RuntimeError)
といわれてとまってしまいます。
だれかおしえてください。
0861デフォルトの名無しさん
2006/09/17(日) 20:07:35環境kwsk書かないヤツに教えることは何もない。
0862デフォルトの名無しさん
2006/09/17(日) 20:17:42Σ1/n^12
の話を計算したいんですが、n = 100程度までの値を正確に出したいのです。
小さな少数を扱うクラスがあれば教えて欲しいです。
0863デフォルトの名無しさん
2006/09/17(日) 20:26:080864デフォルトの名無しさん
2006/09/17(日) 20:29:51FreeBSD 6.0-RELEASE-p7
です。
現在の ruby のバージョンは 1.8.4 です。
0865デフォルトの名無しさん
2006/09/17(日) 20:42:450866デフォルトの名無しさん
2006/09/17(日) 22:47:301.8.5のrubyが古い1.8.4のrbconfig.rbをロードしてるメッセージだな。
FreeBSD使ってないので、どこの何がまずいのかはわからん。
0867デフォルトの名無しさん
2006/09/17(日) 23:16:22Stringの場合はreplaceで出来たのですが。
初歩的な質問してすみません。
def func(d, s)
end
a = 0
func(a, 10)
p a
0868デフォルトの名無しさん
2006/09/17(日) 23:43:31基本的に無理。
Fixnumはimmutable
どうしてもやりたければ配列使うとかしないとダメ。
0869デフォルトの名無しさん
2006/09/17(日) 23:45:38なんとそうですか。
こういうプログラムは設計自体がRubyの仕様に合ってないのでしょうね。
見直した方が良さそうです。ありがとうございました。
0870デフォルトの名無しさん
2006/09/17(日) 23:56:080871デフォルトの名無しさん
2006/09/18(月) 00:06:02FortranとかVBとかC++にあるような「参照渡し」はない。
0872デフォルトの名無しさん
2006/09/18(月) 01:03:34system()でプロセスの優先度指定できない?
裏で作業させているとちょっと重くて・・・。
ruby 1.8.5 (2006-08-25) [i386-mswin32] なんだけど、厳しいかな。
0873デフォルトの名無しさん
2006/09/18(月) 01:16:420874デフォルトの名無しさん
2006/09/18(月) 01:24:03ありがとう。気が付かなかった。
0875デフォルトの名無しさん
2006/09/18(月) 08:43:350876ヽ(´ー`)ノ ◆.ogCuANUcE
2006/09/18(月) 10:08:20http://www.ruby-lang.org/ja/man/?cmd=view;name=FAQ%3A%3A%A5%AF%A5%E9%A5%B9%A1%A2%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB
…の、6.15 参照。
これぐらいの機能、Class か Module に欲しいけど。
0877デフォルトの名無しさん
2006/09/18(月) 10:15:56const_getを使うといいよ
0878デフォルトの名無しさん
2006/09/18(月) 10:24:190879デフォルトの名無しさん
2006/09/18(月) 11:21:48eval の第2引数に、stringじゃなくてprocを指定できませんかね。
bindobj = binding()
eval '...', bindobj
だと毎回文字列をパースして効率が悪いので、あらかじめprocオブジェクトに
しておいてそれをevalできればいいかなと思ったのですが、どうしたらいいで
しょうか。
(関数に出来ないのは、bindingオブジェクトをつかうから。)
instance_eval だとprocオブジェクトを渡せるみたいなんですが、そうすると
今度はbindingオブジェクトを渡せなくて困ってます。
0880デフォルトの名無しさん
2006/09/18(月) 11:49:13portupgrade の途中でそうなるの? おれの環境ではそういうことは起こらなかったが。
なんにせよ、 portupgrade を使わず、ふつうに ports でビルドすれば問題ないだろう。
あと、このスレより FreeBSD 関連のところで聞いた方が実りがあると思うよ。
0881デフォルトの名無しさん
2006/09/18(月) 11:57:08str = eval("String").new
p str.class
かな。素人だから知らないけど、そーゆーのはとにかくevalっとく。
変数の場合は、instance_variable_get みたいのがあるけど。
>>872
Win32 API を叩く話になるんじゃないかな、そーゆーのって。
0882881
2006/09/18(月) 11:59:300883デフォルトの名無しさん
2006/09/18(月) 14:03:10> eval の第2引数に、stringじゃなくてprocを指定できませんかね。
できない。
> (関数に出来ないのは、bindingオブジェクトをつかうから。)
bindingをかえるということは、一回目はローカル変数と解釈されたものが
二回目はメソッド呼び出しと解釈されるかもしれないということだ。
0884デフォルトの名無しさん
2006/09/19(火) 05:41:29thanx
0885デフォルトの名無しさん
2006/09/19(火) 19:44:50x = Hash.new{|h,k| = Hash.new(0)}
...
x[a][b] += 1
...
というように書けば希望通りの動作をしてくれるのですが、この場合 x を Marshal で書き出そうとすると
TypeError: can't dump hash with default proc
とエラーになってしまいます。マニュアルに明記してある仕様なのでしようがないのかとも思うのですが、なにか(Marshal.dump できるオブジェクトにするための)逃げ道はないでしょうか?
Hash.new でブロック指定しないでおいて x[a][b] の値変更時に、x[a] や x[b] の値が nil かどうか事前チェックする、とか例外 NoMethodError を捕捉するとかいう、苦し紛れの方法しか私の頭では思いつかないので…。
0886デフォルトの名無しさん
2006/09/19(火) 19:59:28自前でそういう働きをするクラスを作ればよい。
class MyHash
def initialize
@hash = Hash.new
end
def []=(k,v)
@hash[k] = v
end
def [](k)
@hash.key?(k) ? @hash[k] : Hash.new(0)
end
end
p Marshal.dump(MyHash.new) #=> "\004\bo:\vMyHash\006:\n@hash{\000"
0887886
2006/09/19(火) 20:08:270888デフォルトの名無しさん
2006/09/19(火) 21:35:28publicだったら、関数をオーバーライドしてしまったときでも Kernel.puts とかで呼び出せるのに。
0889デフォルトの名無しさん
2006/09/19(火) 21:54:090890デフォルトの名無しさん
2006/09/19(火) 23:00:360891デフォルトの名無しさん
2006/09/19(火) 23:16:33startコマンド経由で実行させるというのはどうでしょうか
start /b /idel lame ”WAVEファイル名” "MP3ファイル名"
みたいに
0892デフォルトの名無しさん
2006/09/20(水) 00:05:49x.default = nil
Marshal.dump(x)
0893888
2006/09/20(水) 19:02:45__send__ でできるのはしってるんだけど、それを聞いているんじゃなくて、なぜprivateなのかを聞いているんですけど。
>>890
説明が足りなかった。インスタンスメソッドとしてはprivateでもいいんだけど、モジュールメソッドとしてはpublicでもいいんじゃないか、ということ。
それなら "hoge".puts はできないけど Kernel.puts はできるよね。それが自然に思える。
0894デフォルトの名無しさん
2006/09/20(水) 23:02:42何を問題にしているのかわからない。
Kernelのプライベートメソッドってあまりないし、
Kernel.putsはpublicだし、
何か問題あった?
勘違いしてたらごめん。まじでわかんない。
0895デフォルトの名無しさん
2006/09/21(木) 00:30:110896デフォルトの名無しさん
2006/09/21(木) 01:07:24トップレベルはデフォルトでmodule_functionにしろってか。
0897デフォルトの名無しさん
2006/09/21(木) 01:49:40だうと。他のファイルも影響を受ける。
require "lib"
A.new.foo # 3
def puts(s)
raise "abort"
end
A.new.foo # abort
------------ lib.rb -----------------------
class A
def foo
puts 3
end
end
0898885
2006/09/21(木) 02:37:41そうか自分でクラス定義すればよいわけですね。
class MyHash
def initialize
@hash = Hash.new
end
def []=(k,v)
@hash[k] = v
end
def [](k)
@hash.key?(k) ? @hash[k] : (@hash[k] = Hash.new(0)) # ← だけちょっと修正
end
end
で希望通りの動作になりました、どうもありがとうございます。
ちなみに、実質的に同じことだとは思うのですが、次のようなコードでも問題ないでしょうか?
class MyHash < Hash
def [](k)
self.key?(k) ? self[k] : (self[k] = Hash.new(0))
end
end
# インデントに全角スペースを使っています
0899デフォルトの名無しさん
2006/09/21(木) 17:19:59こういうデータを
data = str.split(',')
し
p data.size
とすると
10が帰ってきて難儀しています。
エンコードのせいでしょうか?
0900デフォルトの名無しさん
2006/09/21(木) 17:24:480901デフォルトの名無しさん
2006/09/21(木) 17:59:130902デフォルトの名無しさん
2006/09/21(木) 18:01:580903899
2006/09/21(木) 18:19:263時間くらい悩みました
0904デフォルトの名無しさん
2006/09/21(木) 18:25:130905デフォルトの名無しさん
2006/09/21(木) 20:15:440906デフォルトの名無しさん
2006/09/21(木) 22:39:48たとえば
a = [0,1,2]
x = nil
puts(x) if a.any?{|e| (x = e) < 3} # => 0
が仕様として保証されるのか、ということです。マニュアル読むとけっきょく該当クラスにおける each メソッドの定義しだい、ということのようですが…。
0907デフォルトの名無しさん
2006/09/21(木) 23:38:04Kernel.putsはpublicじゃないだろ。
Rubyでのpublic/privateはJavaやC++と違うんだけど、それはわかってるよね?
0908デフォルトの名無しさん
2006/09/22(金) 03:47:21putsはKernelのモジュール関数として定義されてるからpublicでしょ
Kernel#putsはprivate
0909デフォルトの名無しさん
2006/09/22(金) 08:15:04module MyModule
def p
Kernel.puts
end
end
MyModule.p
> ruby -v
ruby 1.8.4 (2005-12-24) [i386-mswin32]
> ruby test.rb
test.rb:6: private method `p' called for MyModule:Module (NoMethodError)
0910デフォルトの名無しさん
2006/09/22(金) 08:22:45class MyClass
include Kernel
def p
self.puts
end
end
MyClass.new.p
> ruby test2.rb
test2.rb:4:in `p': private method `puts' called for #<MyClass:0x2ab71b0> (NoMethodError)
0911909
2006/09/22(金) 08:30:490912デフォルトの名無しさん
2006/09/22(金) 09:32:46> puts(x) if a.any?{|e| (x = e) < 3} # => 0
あたりまえだが、ifの条件式が先に評価される。
ブロックも(呼ばれれば)いっしょに評価される。
もちろん、ブロックが呼ばれるかどうかはeachの定義次第。
0913デフォルトの名無しさん
2006/09/22(金) 09:37:45それはもちろん、何をどういう順序でyieldするかeach次第。
というか、eachの役目はそれを定義すること。
0914906
2006/09/22(金) 11:21:59> ああ、yieldされる順序のはなしか?
そうです、用語がわからなかったので妙な書き方になっていてすいません。
> それはもちろん、何をどういう順序でyieldするかeach次第。
> というか、eachの役目はそれを定義すること。
なるほど、Klass#any? や Klass#find や Klass#map の yield する順序は Klass#each の定義しだいと。
うーむ、Array#each の「仕様」はどこで決まっているのかなあ(実装 == 仕様 ?)…ユーザ側でメソッド再定義できるからそのあたり気にするべきでない(each の定義に依存するコードは書かない)というのが正しい姿勢?
0915906/914
2006/09/22(金) 11:23:51>>912,913 さん
の間違いです、インデックスが1つずれてしまった。
0916デフォルトの名無しさん
2006/09/22(金) 17:54:46Hashは順不同だけど
0917デフォルトの名無しさん
2006/09/22(金) 18:17:45あとはIOなんかも先頭からだ。
0918デフォルトの名無しさん
2006/09/22(金) 19:45:05勝手に順番かわったりしたら困る
0919デフォルトの名無しさん
2006/09/22(金) 19:50:34せっかく順序なんかを捨象して抽象化したところに副作用を持ち込んだ上に
直感に反する目的に使うのはださい。
>>906 を普通に書くと
puts(x) if x = a.find{|e| e<3}
じゃないの。
0920906/914
2006/09/22(金) 21:51:28> せっかく順序なんかを捨象して抽象化したところに副作用を持ち込んだ上に直感に反する目的に使うのはださい。
う、たしかにそうですね、頭が悪いなあ > 自分
でも find (系?)のメソッドについては順序保証が欲しいような…たとえば
x = 'aaaaaaaaaaaa'
puts [/a/, /aa/, /aaa/].reverse.find{|r| r.match(x)}
で /aaa/ が返ると思ってよいか、とか。
- Array#each は配列の先頭から順番に各要素を yield へ渡す
- Enumerable#find の引数として渡されたブロックが Klass#each 内での yield の呼出し順に処理される
ことは保証済みと考えてよいのかしら、というあたりがモヤモヤっとしているのです。
0921デフォルトの名無しさん
2006/09/22(金) 22:15:23phpのPEAR(gemsみたいなの)には、Cache_Litetってのがあるのですが、
http://php.y-110.net/wiki/index.php?PEAR%A1%A7Cache_Lite
rubyにも似たようなのがないかと思いまして。
0922デフォルトの名無しさん
2006/09/23(土) 00:29:13キャッシュって言葉が指すものがいろいろあって何の話かわからん
0923デフォルトの名無しさん
2006/09/23(土) 01:41:14えと、ファイルにキャッシュする感じですね。
例えば、「なんでもRSS」みたいに、既存のページを他のものに変換するようなサービスを考えてください。
リクエストに応じて、毎回ページを変換していると、処理時間を食うので、
ファイルかなんかに、キャッシュしてくれるというイメージです。
時間切れ管理なんかもあるとよい感じです。
0924デフォルトの名無しさん
2006/09/23(土) 01:47:24http://raa.ruby-lang.org/project/cache/
0925デフォルトの名無しさん
2006/09/23(土) 03:01:15自分で書いてもすぐじゃないのか?
0926919
2006/09/23(土) 07:59:06find系は(順序がつくコンテナでは)順序保証があると思っていいと思うのよ。
919の後半はそういう意味。
なので、>>920で懸念されている点についてはOKだと考えていいと思う。
一方、any? とか include? とか、そういうのはコンテナ全般に対して
意味が定義される操作で、かつ述語なので副作用は本来考えて筈。
そういうのに順序を期待するのは変な感じがする。
0927デフォルトの名無しさん
2006/09/23(土) 09:54:13eachが保証するかぎりは保証されると思っていいよ。
0928デフォルトの名無しさん
2006/09/23(土) 11:06:43class Array
def each
yield 0
end
end
[1,2,3].each{|i| puts i} # 0
p [1,2,3].collect{|i| i} # [1,2,3]
0929デフォルトの名無しさん
2006/09/23(土) 11:13:050930デフォルトの名無しさん
2006/09/23(土) 11:35:44any?とかに副作用期待したっていいんじゃね?
まあfindで間に合うんだったら俺だってfind使うけど
0931デフォルトの名無しさん
2006/09/23(土) 11:57:21Array#collect
0932デフォルトの名無しさん
2006/09/23(土) 12:42:21eachを再定義してもcollectはそれを無視するということだろう
0933デフォルトの名無しさん
2006/09/23(土) 14:57:05moduleをincludeするとincludeしたクラスとis aの関係になると書いてありますがユーティリティメソッド集としてmoduleをincludeするのは間違った使い方?
0934デフォルトの名無しさん
2006/09/23(土) 16:38:26c:\ruby>ruby -e"puts [2006, 9, 23] "
#=>
[BUG] cross-thread violation on rb_gc()
ruby 1.8.5 (2006-08-25) [i386-mswin32]
0935デフォルトの名無しさん
2006/09/23(土) 16:41:580936デフォルトの名無しさん
2006/09/23(土) 16:44:00やってみたがうちのASR1.8.5では普通に出力されるな。
0937デフォルトの名無しさん
2006/09/23(土) 17:05:50それはEnumerableをmixinするクラスを書く人に向けた仕様だろ。
mixinした結果得られるany?だとかのメソッドのユーザにとっては、それが
Enumerableの実装そのままだなんてのは関知すべきでない実装上の事情。
適宜コンテナの内部仕様に即した再定義がなされているかもしれない。
例えば、priority queueではinclude?なんかは値によっては前からでなく
後ろから探し始めるよう再定義されてもおかしくない。
0938デフォルトの名無しさん
2006/09/23(土) 18:30:21> 関知すべきでない実装上の事情
そうなのかな?
あるクラスのユーザは少なくともそのクラスが Enumerable を mixin しているかどうかは
関知しているべきじゃないの?
0939デフォルトの名無しさん
2006/09/23(土) 19:35:260940デフォルトの名無しさん
2006/09/23(土) 20:48:05じゃあどうするべきと思うの?
ユーザはそのクラスが何を mixin しているか知っているべきでないとすると、
そのクラスのメソッドそれぞれがどういう仕様かを
Enumerable の仕様とは別に全てのメソッドについて個別に知っておくべき?
>>937 では、「だからユーザはどうすべきなのか」が読み取れないんだけど。
0941デフォルトの名無しさん
2006/09/23(土) 21:03:42気にならないor気にしたくないなら自分で実装すべきってだけなんでは?
0942デフォルトの名無しさん
2006/09/23(土) 21:06:57気の利いたマニュアルなら、どういう順番で戻るのか、あるいは順不同なのかが書かれてるはず。
Rubyのマニュアルが今どうなってるのかは知らんけど。
0943デフォルトの名無しさん
2006/09/23(土) 21:08:25うーん、それだと差分プログラミングの恩恵が半減な気がするんですが・・・
0944デフォルトの名無しさん
2006/09/23(土) 21:11:08なぜ?
0945デフォルトの名無しさん
2006/09/23(土) 21:45:24差分プログラミングが何だかわかってないだろ?
0946デフォルトの名無しさん
2006/09/23(土) 22:30:54何を寝言いってるんだか。
Enumerable#any?の仕様を知るのにEnumerableのドキュメントなんて読むべき
じゃないってのか?
> 適宜コンテナの内部仕様に即した再定義がなされているかもしれない。
eachに従うってのがEnumerableの仕様。
> 例えば、priority queueではinclude?なんかは値によっては前からでなく
> 後ろから探し始めるよう再定義されてもおかしくない。
そのpriority queueがそういう仕様なら、そいつが明記しておくべきことで、
Enumerableとはまったく関係ない都合だな。
なんでお前の脳内ライブラリの都合までEnumerableが全責任を負わなきゃならんのだ。
0947デフォルトの名無しさん
2006/09/24(日) 01:22:40差分プログラミングするのに何でカプセルの中まで見なきゃならんのだ?
0948デフォルトの名無しさん
2006/09/24(日) 02:43:30> じゃないってのか?
Rubyの場合にはドキュメントを見るより、はじめからソースを読んだ方が早くて
正確なことの方が多いな。で、足りなければドキュメントを読む。
0949デフォルトの名無しさん
2006/09/24(日) 02:58:200950デフォルトの名無しさん
2006/09/24(日) 03:04:030951デフォルトの名無しさん
2006/09/24(日) 03:05:350952デフォルトの名無しさん
2006/09/24(日) 03:14:550953デフォルトの名無しさん
2006/09/24(日) 03:19:23ソフトの内容の割に行数が少ないと感じる。
0954デフォルトの名無しさん
2006/09/24(日) 03:19:470955デフォルトの名無しさん
2006/09/24(日) 09:38:10>実際、他の言語より読むのはラクだ。
>ソフトの内容の割に行数が少ないと感じる。
はたして、読みやすさと、ソフトの割りに行数が少ないことは共存するのだろうか?
0956デフォルトの名無しさん
2006/09/24(日) 09:44:560957デフォルトの名無しさん
2006/09/24(日) 09:54:10Rubyスクリプトは高等な(w動作をさせられる場合でも
読み下しやすい短さで書けることが多いとは感じる
0958デフォルトの名無しさん
2006/09/24(日) 10:02:48def integrate (f, a, b, n):
def subinte (f, a, b, n):
if a < b :
return f(a) + subinte (f, (a + n), b, n)
else:
return 0.0
return n * subinte(f, a, b, n)
integrate((lambda x: x*x), 0.0, 1.0, 0.01)
rubyで書くとどうなるの?
つうか、rubyで、関数を引数にするにはどうするの?
0959デフォルトの名無しさん
2006/09/24(日) 10:06:120960デフォルトの名無しさん
2006/09/24(日) 10:27:37pythonのコードでインデントが消えるのって致命的だなあ。
それはともかく、こんな感じかと。
コピペするなら全角スペースは適当に置換してね。
def integrate (a, b, n, &block)
def subinte (a, b, n, &block)
if a < b
return block.call(a) + subinte((a + n), b, n, &block)
else
return 0.0
end
end
return n * subinte(a, b, n, &block)
end
p integrate(0.0, 1.0, 0.01){|x| x*x}
0962デフォルトの名無しさん
2006/09/24(日) 11:43:57SEGVする件について。
0963デフォルトの名無しさん
2006/09/24(日) 11:47:160964デフォルトの名無しさん
2006/09/24(日) 13:16:08話がわかってないな。
0965デフォルトの名無しさん
2006/09/24(日) 15:04:34あいや、再現条件が間違ってました。
cmd.exeのカレントディレクトリがc:\windows\system32だと、ワンライナーでこけてしまいます。
こちらの環境依存でしょうか?
c:\windows\system32>ruby -e"puts [22]"
#=> [BUG] cross-thread violation on rb_gc()
c:\windows\system32>ruby -e"puts 2/2"
#=> 1
c:\windows\system32>ruby -e"puts 2**2"
#=> [BUG] cross-thread violation on rb_gc()
0966デフォルトの名無しさん
2006/09/24(日) 15:09:280967デフォルトの名無しさん
2006/09/24(日) 15:19:16Enumerable を include しておきながら collect は Array でオーバーライドしてるとすると、
それは Array#collect のドキュメントに明記しておかないとまずくね?
0968デフォルトの名無しさん
2006/09/24(日) 15:34:160969デフォルトの名無しさん
2006/09/24(日) 15:48:23Rubyだってソフトウェアなんだから、I/Fをドキュメントに書き、カプセル化された内部実装は参照する必要をなくすべき、って奴と、オプソなんだからソース嫁、って奴の意見が割れてるのさ。
0970デフォルトの名無しさん
2006/09/24(日) 16:04:02そんなことまで言ってないよ。
継承してるなら継承元のドキュメントだけあれば良いけど、
継承していながらオーバーライドしてるメソッドがあるなら、
サブクラスのドキュメントにはそう明記すべき。
ハナっからドキュメントがなければないで「ソース嫁」でもいいけどね。
ドキュメントがありながら、それがミスリードするようなものであるならそれはまずい。
0971デフォルトの名無しさん
2006/09/24(日) 16:32:420972デフォルトの名無しさん
2006/09/24(日) 16:36:50あと、Rubyには関数内関数なんてのはないから
内側のdefは外に出すべき。
0973デフォルトの名無しさん
2006/09/24(日) 16:38:10system32ディレクトリの中に、違うバージョンの
msvcrt-ruby18.dllとかがはいってるんじゃない?
0974デフォルトの名無しさん
2006/09/24(日) 17:41:35---------------------------------------------------------- Array#collect
array.collect {|item| block } -> an_array
array.map {|item| block } -> an_array
------------------------------------------------------------------------
Invokes _block_ once for each element of _self_. Creates a new
array containing the values returned by the block. See also
+Enumerable#collect+.
a = [ "a", "b", "c", "d" ]
a.collect {|x| x + "!" } #=> ["a!", "b!", "c!", "d!"]
a #=> ["a", "b", "c", "d"]
0975デフォルトの名無しさん
2006/09/24(日) 19:20:17refe やリファレンスマニュアルには載ってないよ。
0976デフォルトの名無しさん
2006/09/24(日) 20:47:58日付と時刻を出力するにはどうすればよいですか?
input : 10 (数字)
output : 1970/01/01 00:00:10 (文字列)
0977デフォルトの名無しさん
2006/09/24(日) 20:57:150978976
2006/09/24(日) 21:08:44自己解決
Time.at()で可能。ただし指定する秒数があまり大きいとNGを返す。
:in `at': bignum too big to convert into `long' (RangeError)
0979デフォルトの名無しさん
2006/09/24(日) 21:50:00作ったのでWxRubyで簡単なGUIを作りました、が、
実行するとCPUの使用率が100%になって、ウィンドウが応答不能に
なります。一応、処理が完了すれば復帰します。
少々処理速度を犠牲にしても、きれいにGUIから実行できるよう
にしたいのですが、もしあればノウハウをご教示いただけませんでしょうか。
GUIとは別のThreadで処理させるなどしてみたのですが、そうしたら
今度は待てど暮らせど変換が終わらなくなってしまいました・・・。
0980デフォルトの名無しさん
2006/09/24(日) 22:06:46うーん。普通に、他の言語で作っても、そうなると思うけど(GUIが固まる)
別スレッドにしないと。Threadが上手く行かないのは、技術力の問題では?
0981デフォルトの名無しさん
2006/09/24(日) 22:14:53というのに気づいて腹が立った
0982981
2006/09/24(日) 22:16:360983デフォルトの名無しさん
2006/09/24(日) 22:23:16技術力、全くもってその通りだと思います・・・。
で、申し訳ないんですが、もうちょっとだけ質問。
ものすごく基本的なことかもしれませんが、スレッドには
優先順位はつけられるけど、リソース配分みたいなことは
できないんですよね?
あと、馬力のいる処理をさせるときCPU使用率が100%に
ならないようにするいい方法はあるでしょうか。とりあえず
sleepをはさんだりしているんですが、それってありですか?
0984デフォルトの名無しさん
2006/09/24(日) 22:26:07Windowsしかしらんが、優先順位はつけられなかったとおも。
適時sleepして、CPUに処理返すのは有効手段かと。
0985デフォルトの名無しさん
2006/09/24(日) 22:28:08優先順位しかつけられなかったとおも。
0986デフォルトの名無しさん
2006/09/24(日) 22:35:05やめさせたいんですが
0987デフォルトの名無しさん
2006/09/24(日) 22:40:33やっぱりそうですか。
とりあえずsleepで微調整していこうと思います。
ありがとうございました。
0988デフォルトの名無しさん
2006/09/25(月) 23:14:44どのようにインストールすれば良いのでしょうか。
0989デフォルトの名無しさん
2006/09/25(月) 23:17:25「てい」が余計でした
0990デフォルトの名無しさん
2006/09/27(水) 21:03:05前にいっぺんCygwin版でやったけど、結構めんどくさいんだよねー
今はあきらめてChaSenをWin32APIで呼び出して使ってる
(『恋するプログラム―Rubyで作る人口無能』を参考にした)
MeCabも同じような方法で呼び出せるかも知れんけど
俺も初心者なので、あんまり詳しいところはよくわからない
0991デフォルトの名無しさん
2006/09/27(水) 21:28:53ruby 1.8.5 (2006-08-25) [i386-freebsd5]
なのに、<%= RUBY_VERSION %>が 1.8.4 なのはがい出?
気持ち悪いんだけどどこ直せばいいんでしょうか?
0992デフォルトの名無しさん
2006/09/27(水) 22:21:42どうやってインストールしたの?
0993デフォルトの名無しさん
2006/09/27(水) 22:59:12ごめんなさい
/usr/bin/env ruby -e "p RUBY_VERSION"
してみたら 1.8.5 だったので、調べてみたところ tdiary のキャッシュのせいでした
<%= RUBY_VERSION %>って eval されないのね。お騒がせしてすみませんでした
0994デフォルトの名無しさん
2006/09/27(水) 23:32:34レスありがとうございます。茶筅ためしてみます。
0995デフォルトの名無しさん
2006/09/28(木) 14:42:47をしたところ、
E: パッケージ irb1.8 が見つかりません、となるのですが、どうしたらインストールできますか?
ubuntuです。
0996デフォルトの名無しさん
2006/09/28(木) 14:46:54お、俺もubuntu使い。奇遇だね。
apt-cache search irb
で、ちゃんと見つけてくれてる?
0997sage
2006/09/28(木) 14:51:12と表示されました。
0998デフォルトの名無しさん
2006/09/28(木) 15:11:07それだけ?ズラズラいくつか表示された中に
irb1.8 - Interactive Ruby (for Ruby 1.8)
って、無い?
0999デフォルトの名無しさん
2006/09/28(木) 15:12:38irb - Interactive Ruby (irb)
でもいいや。
1000デフォルトの名無しさん
2006/09/28(木) 15:29:39次スレ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。