Ruby初心者スレッドPart7

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは2以降。Ruby on Railsの質問はWebProg板のRailsスレで。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・ぐぐる
 ・マニュアルで探す http://www.ruby-lang.org/ja/man/
 ・FAQを読む http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(なるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。


宗教的な話題は禁止します。
2デフォルトの名無しさん: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/
3デフォルトの名無しさん:2006/07/28(金) 18:18:28
o2
4デフォルトの名無しさん:2006/07/28(金) 18:18:31
5デフォルトの名無しさん: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/
6デフォルトの名無しさん:2006/07/28(金) 18:36:55
== Ruby使用時の探し物
RAA - 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/
7デフォルトの名無しさん:2006/07/28(金) 18:37:03
rakeについてお聞きします。

rake cleanにデフォルトの削除ファイルを設定したいのですが、
デフォルトでは、*.bakなどが追加されています。
*.bakが削除されないようにしたいのですが、どうしたらよいでしょうか?

CLEAN = Rake::FileList["**/.hoge"]
では、*.bakがふくまれないのですが、
警告がでてしまいます。
8デフォルトの名無しさん:2006/07/28(金) 19:02:06
どういった警告でしょうか。
9デフォルトの名無しさん:2006/07/28(金) 19:05:56
>>前スレ994
mswin32版1.8.4で、getsをsleep 0.1 while trueに変えるだけで、
CPU時間を浪費せずに正しく動作するわけだが。
お前さんはいったい何を使ってるのかね?

というか、そもそも、Thread.list.each{|t| t.join}もCPU時間を
浪費しないわけだが・・・
107:2006/07/28(金) 19:18:48
警告は、
hogehoge/rakefile:6: warning: already initialized constant CLEAN
です。
ようするに、CLEAN定数で初期化ずみだからだと思うのですが・・・

CLEAN.new("**/.hoge")
とすればいいのかと思ったのですが、
undefined method `new' for []:Rake::FileList
といわれてしまいます・・・
11デフォルトの名無しさん:2006/07/28(金) 19:24:58
>>1
乙であります。
12デフォルトの名無しさん:2006/07/28(金) 20:05:18
>>10
よく知らないけど、CLEANってトップレベルで定義されてるの?
であれば、
class Object
remove_const(:CLEAN)
end
CLEAN = Rake::FileList["**/.hoge"]
で、警告も出ないと思う。

しかし、Rake::FileListには特定の要素を削除するメソッドがあったりしないか?
13デフォルトの名無しさん:2006/07/28(金) 20:05:57
>10
CLEANが定数だからだね。警告は出るが、値としてはちゃんと変化している。
警告は気にしなければ、期待通りの動作になっているはず。

気になる場合だが、
http://rake.rubyforge.org/classes/Rake/FileList.html#M000122

CLEAN.exclude('*.bak')
してから、
CLEAN.include('**/.hoge')
などとすればいいのではないかと思うよ。
使ったことないからよくわからないが。
147:2006/07/28(金) 20:14:54
>>13
そうです。警告出るんですが一応動く。警告

exclude試しました。で上手くいきますね。
サンクスです。
15前スレ989:2006/07/29(土) 00:13:07
すいません・・・どうも。Ruby凄く興味あったもので、
こんなにメリットが多そうな言語がなんで馬鹿にされてるのかなと思って。
でもRubyが出来ても就職にはそんなにメリットないというご指摘もあったので
もう少しPerlやPHPを頑張ってみようと思います。
16デフォルトの名無しさん:2006/07/29(土) 00:21:05
就職に対してはプログラミング言語の勉強なんてメリットなんもないよな
教科書のサンプルなぞれる程度の「実力」なんざ最初から無いほうがありがたい

とかいう話はプログラマ板で腐るほど出てるので覗いてみるといい
17デフォルトの名無しさん:2006/07/29(土) 00:35:59
いや、PerlやPHPができますとか言われても「ふ〜ん、それで?」なんだけど。
18デフォルトの名無しさん:2006/07/29(土) 00:45:33
何を言う
>>15が就職までにいくつもの有用モジュールを作り上げる有名学生プログラマとして
その言語界で名を馳せるようになるかもしれないじゃないか

それくらいになれば趣味でLL使ってプログラミングしてますとか抜かしても一目置くぞ

てかそういう細かい話は板違いなんだってば
19デフォルトの名無しさん:2006/07/29(土) 00:50:26
>>18
板違いなら発言するな、馬鹿。
20前スレ989:2006/07/29(土) 01:11:36
そうなんですか、
みなさん作りたい物があって、
それにRubyが適しているから使っている感じなんですかね。
私も作りたい物があってプログラミングを勉強してるんですが、
やっぱりある程度、色々な言語が出来たほうが、
応用効くかなって、そんな事考える暇あったら、
どんどん実際に作ってみたほうがいいのかな。
21デフォルトの名無しさん:2006/07/29(土) 01:17:17
いいからうせろ
22デフォルトの名無しさん:2006/07/29(土) 02:18:20
>>21
幼児じゃないんだからイヤイヤしても意味ないぞ
23デフォルトの名無しさん:2006/07/29(土) 02:55:28
別に作りたいものがあってRuby始めたわけじゃないけどな。
便利だから使ってるだけだ。
24デフォルトの名無しさん:2006/07/29(土) 06:39:54
>みなさん作りたい物があって、
>それにRubyが適しているから使っている感じ

当たり前だ

セカンドショットもラフもグリーンも全部ドライバー使うような猿と一緒にするな
25デフォルトの名無しさん:2006/07/29(土) 08:21:18
わいはサルや!プログラマー猿や!!って
誰かがその振りを受けないと若年層には理解出来まい。
26デフォルトの名無しさん:2006/07/29(土) 09:02:24
ひょっとしてドライバーって
VB や Lisp のことを
暗喩しているのでしょうか?
27デフォルトの名無しさん:2006/07/29(土) 10:45:50
つっこみアリでも理解されていないようです
28デフォルトの名無しさん:2006/07/29(土) 10:53:17
CGIをCで書く香具師は(いない訳じゃないが)おらんし
シューティングゲームをRubyで書く香具師もおらんだろうな
29デフォルトの名無しさん:2006/07/29(土) 11:02:00
read.cgi は C みたいだけどな
30デフォルトの名無しさん:2006/07/29(土) 11:02:43
STGをRubyで書く人間もいないわけではない
まぁ、エフェクトバリバリのゲームとかは現状無理っぽいけど
31デフォルトの名無しさん:2006/07/29(土) 11:11:12
>>29
そりはひろゆきの趣味?
32デフォルトの名無しさん:2006/07/29(土) 11:37:07
2ちゃんねるのCGIの一部が有志によってCで書かれてるのは単純に速度と使用頻度と負荷の問題

教科書的にはPerlなんかのCGIをCで書き換えることはあまりワリに合わないわけなんだけど
2ちゃんねるの場合はCで注意深く作って速度を上げる手間対効果すら重要だったわけ

まあその割にはひろゆきがへんなのちょこちょこいれてるわけだが(w
33デフォルトの名無しさん:2006/07/29(土) 12:54:40
>>15
どんなにinputしても誰からも認めてもらえない。
(資格や学歴も含めて)outputしたものが全て。
いかに効率よくoutputするかを第一に考えて
必要なものだけinputするようにしろ。

就職負け組のニートが過去の反省を踏まえて言うんだから
間違いない。俺と同じ轍を踏むな。

天国へ至る道は地獄へ至る道を熟知することである−マキャベリ
34デフォルトの名無しさん:2006/07/29(土) 13:01:41
気付いたときには手遅れ

厳しいけど漏れもがんがる
35デフォルトの名無しさん:2006/07/29(土) 20:49:06
一概にワリに合わないということは無い。
GNU cgiccやboostを活用すればコード量的にはむしろ減るわけだが。
あとはミドルウェアやライブラリの都合だろう。
PerlではOLEDBテンプレートは無理だし。
36デフォルトの名無しさん:2006/07/29(土) 21:22:32
boostを使おうがC++で書いてる時点でコード量はヘラねーよアホ。
37デフォルトの名無しさん:2006/07/29(土) 21:35:44
>>33
「inputしすぎたのが原因でoutputが出来なかったので就職出来ませんでした」ってこと?
アホ?
38デフォルトの名無しさん:2006/07/29(土) 21:37:47
別に>>33に同意するわけではないが、

>>37、お前は>>33よりアホ
39デフォルトの名無しさん:2006/07/29(土) 22:06:32
>>38
お前がアホ。

37の意訳が違うというなら

「必要なものだけinputするようにしろ。」という一文が意味不明
40デフォルトの名無しさん:2006/07/29(土) 22:09:35
どっちかというと、多くの人はinputしなさすぎでoutput出来ない

必要なものだけinputしろ?
こんな抽象的な文言、アドバイスにもならん。

それが必要なものかどうかをどう判断する?inputしないと大抵無理だろうが。

よって33がアホ
41デフォルトの名無しさん:2006/07/29(土) 22:10:17
>>39
もういいから
42デフォルトの名無しさん:2006/07/29(土) 22:12:06
もういいなら黙ってればいいのに。
43デフォルトの名無しさん:2006/07/29(土) 22:13:07
俺も>>33には同意しないが、>>33が言ってるのは、
「世間ではoutputされたものが全てとみなし、どれだけinputしたかは
評価しないので、何をoutputするのかを考えてinputしろ」
ってことだろ。

なにを一生懸命反論してるのやら。
44デフォルトの名無しさん:2006/07/29(土) 22:18:50
言い換えると「世間様では結果出してなんぼ」だな
批判される思考形態ではあるが一面の真実ではある
45デフォルトの名無しさん:2006/07/29(土) 22:20:43
就職で有利になりたければ、プログラミングなんか勉強しないで
TOEIC730点以上とかを目指したほうがいいよ。
46デフォルトの名無しさん:2006/07/29(土) 22:28:45
ぶっちゃけそれもどうかと思うが

ともあれ「Rubyを勉強してます」程度のことが就職活動で有利になることはない
面接の話のネタにはできるかもしれんがそれは別にRubyでなくてもいいな
47デフォルトの名無しさん:2006/07/29(土) 22:30:07
いやいや、国内組み新卒TOEIC730点はかなりのインパクトだぞ。
48デフォルトの名無しさん:2006/07/29(土) 22:38:40
えいご漬けで PR したらネ申
49デフォルトの名無しさん:2006/07/29(土) 23:51:04
かつて英語できるけどPC全然使えない馬鹿な新人がいたな
50デフォルトの名無しさん:2006/07/30(日) 00:02:32
英語はオプションとして大きく評価はされるけど、基本は本業だからね。
英語自体を本業にしたいなら、TOEICは900点超えないとダメだろう。

というかTOEIC程度の易しい英語テストで評価できるんだろうか。
よく知らんけど。
51デフォルトの名無しさん:2006/07/30(日) 00:18:04
めんどくさいし結論も出ないんだからからマ板でやれって
52デフォルトの名無しさん:2006/07/30(日) 02:59:03
>>51がいいこと言った!
まったくもっってまんこくさい
53デフォルトの名無しさん:2006/07/30(日) 14:08:54
Exerbというのを知って、rubyインタプリタとスクリプト(および周辺ライブラリ)を
統合してしまうアイデアに感心したのですが、
いっそのこと、ruby(と周辺ライブラリが)丸ごと一つのexeになってるインタプリタってありませんか?

要は、インストールも解凍もパスの設定もなんにも要らずに
ただフォルダにexeとスクリプトさえあれば動いてしまうような、そんなのが欲しいんですけど…
54デフォルトの名無しさん:2006/07/30(日) 14:21:46
そこまで隠して何がしたいんよ
55デフォルトの名無しさん:2006/07/30(日) 14:23:07
>>53

Exerb
5653:2006/07/30(日) 15:01:23
>>54
別に隠したいわけじゃないんですけどね

>>55
Exerbでもなんとかやりくりすれば似たようなことできそうなのは分かりますけど
既にだれかが作ってないかなぁと思って聞いてみました
57デフォルトの名無しさん:2006/07/30(日) 15:03:35
そもそも

>要は、インストールも解凍もパスの設定もなんにも要らずに
>ただフォルダにexeとスクリプトさえあれば動いてしまうような、そんなのが欲しいんですけど…

をするために Exerb があるんだよ

exe only スクリプトさえ不要
5853:2006/07/30(日) 15:21:55
うむー、Exerb で exe にしちゃうとスクリプトの修正が難しくなるわけで
ちょこっと動作を変えたいときとかexe単体だとどうにもならないんですよ(やりようはありますが…)

今のところ、元々のスクリプトで何かファイルを読み込んで expr する仕様にしておいて
exe化した後でも、外部のファイルを修正してメソッド上書きで凌げるようにはしています

そんなわけで統合型インタプリタのexe一本とスクリプト一本(とnotepad)さえあれば
イケるような環境があると嬉しいなぁと思ったわけです
なければないで、なんとかやりくりするんですけどね
59デフォルトの名無しさん:2006/07/30(日) 15:38:27
一発でexe化するスクリプト書いて毎回exe生成するとか
6059:2006/07/30(日) 15:40:49
ごめん読み直したら解答になってなかった
61デフォルトの名無しさん:2006/07/30(日) 19:07:35
>>58
> うむー、Exerb で exe にしちゃうとスクリプトの修正が難しくなるわけで
> ちょこっと動作を変えたいときとかexe単体だとどうにもならないんですよ(やりようはありますが…)

exerbでバイナリファイル化するにしたって、
あとで置き換えたいファイルをexerbのレシピファイルから
外してしまえばいいんでない?
レシピファイルに記載されたファイルしかrequireできない、
ってことはないよね、多分。
6253:2006/07/30(日) 20:01:58
>>61
ついさっき試してみましたができました
これなら main.rb を require するだけのスケルトンを作って
main.rb レシピから外すだけで、ほとんど外部に追い出すことができそうです
あとは、いろいろな用途に使えるように、付属ライブラリを列挙したレシピを作れば
目的のものなりそうです。既にそういうレシピが転がってると嬉しいんですけど…

いまそれができないかソースの書き換え中です
具体的にはIniParamクラスのinitializeメソッドをexeから外出しして
ユーザーが(rubyの知識が必要にはなるけど)カスタマズできるようにしたいです
それと後々の可能性を考えて、多言語対応が必要になる部分も外出しできるように修正中です
6353:2006/07/30(日) 20:06:45
あらら、、スゲーミスしちゃった。後半の4行は推敲中の文章を消すのを忘れて送信しちゃいました
文章繋がらなくなっちゃってスミマセン
64デフォルトの名無しさん:2006/07/30(日) 21:10:36
頭悪いなコイシ
65デフォルトの名無しさん:2006/07/30(日) 21:11:48
悪かったなイトシ
66デフォルトの名無しさん:2006/07/30(日) 21:21:39
無茶苦茶でござりまするがな〜
67デフォルトの名無しさん:2006/07/30(日) 21:41:30
拡張ライブラリなら--with-static-linked-extで
全部スタティックにリンクされるがな。
68デフォルトの名無しさん:2006/07/30(日) 22:01:16
コンパイラを持っていないWindows版Rubyユーザって結構いそう。
ASRにExerbが含まれるようになったから、そういうユーザが今後増えるかも。
そういう人達には>>67の方法は辛そう。
6953:2006/07/30(日) 22:17:49
>>67
レスありがとうございます。ソレいいですねぇ、どなたか配布されてませんかね?
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
あはは、まさしくその通りなのです。誰か作ってくり〜
70デフォルトの名無しさん:2006/07/30(日) 22:57:46
ASRは外部DLLも含んでるから、>>67だけじゃ完全に単一ファイルにはできんな。
exerb使うのが一番確実と思われ。
71デフォルトの名無しさん:2006/07/31(月) 02:34:04
ttp://moonrock.jp:23000/
> Ruby初心者スレッドPart7を読んで、全添付ライブラリを
> 一つにまとめた実行ファイルの為のレシピを作るスクリプトを書きました。

# permalink が長すぎてコピペしにくい……
72デフォルトの名無しさん:2006/07/31(月) 10:37:16
>>69
VisualStudioがないならMinGWをつかえばいいじゃない

というか何でもかんでも他人の労力に頼るな
73デフォルトの名無しさん:2006/07/31(月) 12:55:56
cygwin上でで CC='gcc -mno-cygwin' としてコンパイルするのがたぶん楽
74デフォルトの名無しさん:2006/07/31(月) 15:53:40
a = ["", "8473", "8701", "4765", "3749", "8735", "8882", "4284", "2799"]
こういう配列から8473を消そうと思い
p a.delete("8473")
とすると
"8473"
と表示されてしまいます。使い方を間違えてるんでしょうか?
75デフォルトの名無しさん:2006/07/31(月) 16:01:14
はい
76デフォルトの名無しさん:2006/07/31(月) 16:01:45
次からはリファレンスぐらい読め
http://www.ruby-lang.org/ja/man/?cmd=view;name=Array#delete
77デフォルトの名無しさん:2006/07/31(月) 16:21:04
目的に対しての delete の使い方そのものは間違ってないな
78デフォルトの名無しさん:2006/07/31(月) 16:46:08
きちんと実行されているかどうかを確かめるためにpでデバッグ表示してるんだろ


とかいう動作を期待して使ってる風でもない気もしなくもなく

delete は要素の削除が成功したらdeleteした要素を返す
a.delete("8473") を p で表示させるように書いてるんだから "8473" と表示されるのは正しい動作
つーか、その後 a がどうなってるかくらい確かめようぜ
797:2006/07/31(月) 17:36:45
>>74
p a
でいいんじゃないの?
80デフォルトの名無しさん:2006/07/31(月) 17:43:18
ども、deleteの使い方を今日は覚えました
でもこの動作は直感的じゃないような気がする
81デフォルトの名無しさん:2006/07/31(月) 17:57:07
>>80
ふむ。
じゃあ80が思うところの直感的動作を書いてみてよ。
82デフォルトの名無しさん:2006/07/31(月) 18:42:24
>>81
deleteで指定した要素が除去された配列が表示される
83デフォルトの名無しさん:2006/07/31(月) 18:49:40
>>82
ふむ。
じゃあその場合deleteされたのか1個もされなかったのかはどうやって判定するの?
84デフォルトの名無しさん:2006/07/31(月) 18:53:30
>>83
deleteがオプションでもう1個引数取れるようにして
その引数名の配列に削除された要素を入れるってのはどうよ
85デフォルトの名無しさん:2006/07/31(月) 19:06:56
そんなんだったら単純にbooleanで返してくれる方がまだ良いだろ。
86デフォルトの名無しさん:2006/07/31(月) 19:07:18
popもshiftも取り除いた要素を返すから、それと同じと思えばいいんじゃね?
87デフォルトの名無しさん:2006/07/31(月) 19:26:44
たぶん、80の人は、
非破壊的メソッド delete と、
破壊的メソッド delete! があれば
納得すると思うけど、どうか。
88デフォルトの名無しさん:2006/07/31(月) 19:34:40
非破壊的なら find_all なり reject なりを使えばいいじゃない
89デフォルトの名無しさん:2006/07/31(月) 19:52:35
>>87
じゃあ

push!
pop!
insert!
shift!
unshift!

も実装しないとな

あと

clear!
replece!

も必要だな
90デフォルトの名無しさん:2006/07/31(月) 20:03:42
>>89
別にその程度なら実装しちまえって気もするけどな
91デフォルトの名無しさん:2006/07/31(月) 20:38:53
>>89
実際、insert と insert! はたまに欲くなる。

作れば?っていうのはその通りなんだけど、
今さらinsertの挙動が変わると、それはそれで困る。

なんか、よいメソッド名ないかなーと考え始めた段階で
どうでも良くなるのです。
92デフォルトの名無しさん:2006/07/31(月) 20:58:06
>89
その世界では、!なしの pop とか unshift とかは何を返すの?
93デフォルトの名無しさん:2006/07/31(月) 21:37:56
self が返って、メソッドを繋げたいのではなかろうか
94デフォルトの名無しさん:2006/08/01(火) 08:53:13
俺はこうしてる
class Array
def deleted(arg)
self.delete(arg)
return self
end
end
95デフォルトの名無しさん:2006/08/01(火) 10:19:02
先生、受動態メソッドでselfが返るのには強烈な違和感を感じます
96デフォルトの名無しさん:2006/08/01(火) 10:40:37
うーむ、MinGWでrubyのコンパイルやってみたんだが罠ありまくり(以下チラシの裏)
前提として>>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では誤検知されないようですが…
97デフォルトの名無しさん:2006/08/01(火) 10:41:45
>>95
感じるんじゃない、考えるんだ。
98デフォルトの名無しさん:2006/08/01(火) 11:02:25
[ruby-list:41698] Exerbコアからのトロイの木馬検出について
99デフォルトの名無しさん:2006/08/01(火) 12:10:37
>>96
> ちなみに、--with-static-linked-extはExerbバイナリ実行時にnkf.soの呼び出しに失敗するのでダメでした
kwsk
100デフォルトの名無しさん:2006/08/01(火) 12:25:42
勝手に推測すると、Exerbが使うRubyをすげかえる場合は、
coreを入れ替えてExerbを作り直す必要があるのではないか?
101デフォルトの名無しさん:2006/08/01(火) 13:10:52
>>99
Exerbコアにnkf.soが取り込まれてないからだと思います。

*.soを取り込んでいないExerbeコアと、
--with-static-linked-ext で*.soが欠けている状態の添付ライブラリを
統合する形になるので、出来上がったバイナリで*.so呼び出しに失敗するんじゃないかと…

iconv.dllとか、*.soがダイレクトに外部dll呼び出してるようなやつは
一つのexeに統合するのは難しいでしょうね。
添付ライブラリまとめられるだけでも、まxまぁ御の字かと…
102デフォルトの名無しさん:2006/08/01(火) 14:17:42
だからnkf.soを取り込んであるExerbコアを作ろうってことでMinGW入れたんじゃなかったんだっけ?
recipe.ja.htmlを見るとDLLも取り込めるようなことを書いてある気がするけど、まだ試してない。
103デフォルトの名無しさん:2006/08/01(火) 15:32:08
MinGWでExerbコア作るのはもうこりゃ全然ダメ、というのがわかった。
VC買った方がよさそうだネ。
104デフォルトの名無しさん:2006/08/01(火) 15:44:46
1.8系ならexerbでnkf普通に使えると思うが
105デフォルトの名無しさん:2006/08/01(火) 15:54:11
104は今までの話の流れをちゃんと読んでから出直せ。
106デフォルトの名無しさん:2006/08/01(火) 16:42:04
vc6って今でも買えるん?
107デフォルトの名無しさん:2006/08/01(火) 17:02:36
無理じゃない?
108デフォルトの名無しさん:2006/08/01(火) 19:20:20
Exerbのソース眺めてみたら、Win32APIのLoadLibraryやGetProcAddressといった
エントリポイントはフックしてるみたい。なのでdll組み込みも可能っぽい。やったことないけどさ…

具体的にはKernel32.dllのプロシージャテーブルにあるファンクションへのポインタを
自前の関数へのポインタに書き換えてフックする。で、LoadLibraryが呼ばれたら
該当のファイルがExerbコンテナにあるか探して、あったらテンポラリファイルに書き出して
LoadLibraryしてるみたい。ちなみに*.soファイルも一度テンポラリに書き出してからLoadLibraryしてる

このへん、LGPL的な解釈としてはどう扱われるのか個人的に興味あったりするけど
あれって日本語参考訳でも難解すぎてワケ分からん。誰か上手く解説してくれませんかね?

ExerbのMinGW化は、ざっと眺めた感じではやってできないことは無いと思うけど、
個人的にメリットが無いのでやりたくない作業。GNU的にはMinGWでできたほうがカッコいいと思うけど…
それとテンポラリに書き出すのはあまり美しくないから、思想的な問題か?

で、mingw32版でサイズが減った件は、単に添付ライブラリが少ないからでした
mswin32版にはtkとかopensslといった、rubyのソースには無いライブラリがついてるんですね
109デフォルトの名無しさん:2006/08/01(火) 20:02:42
xml-rpcを使ってブログに投稿するスクリプトを作ってるんですけど、
FC2ブログと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)
110デフォルトの名無しさん:2006/08/01(火) 20:12:11
>>109
なんでrubyなの?コメントスパム用のスクリプトと違う?
111デフォルトの名無しさん:2006/08/01(火) 20:32:10
nkfやiconvがdllなしで動かないのは、それらがスタティックリンクできるようにインストールされてないから
だろうね。
だから、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を持ってくるだけで動くと思うよ。
112デフォルトの名無しさん:2006/08/01(火) 22:09:11
>>108
>mswin32版にはtkとかopensslといった、rubyのソースには無いライブラリがついてるんですね
ext/tkやext/opensslを見たことがないのか?
113デフォルトの名無しさん:2006/08/01(火) 22:11:19

なんで >>96 が一からRuby作り直してるのか漏れには分からん

add_extension_library nkf.so ./exerb_ext/nkf.so
114デフォルトの名無しさん:2006/08/01(火) 22:19:06
>>112
ここは初心者スレッドです。
誰もがあなたと同等の知識を持っているとは思わないこと。
115デフォルトの名無しさん:2006/08/01(火) 22:27:45
いや俺自身も良く分かってなかったんスよ
--with-static-linked-extにすれば何かいいことあるのかと思ってやったら
別に大したことなかったわけで、単に*.soが消えただけだし

Exerbのコアのことも全然理解してなかったし、トラブルに遭遇して調べてみたら
Rubyのインタプリタが丸ごと(正確にはmsvcrt-ruby18.dllの部分が)コアってことが分かったくらいだからね

まぁ、前からCygwinの開発環境も整えたいとは思ってたんで、いい勉強になったと思うことにするよ
ここ初心者スレなんだから、あまり上から見ないでくれよ。最初から全部理解して使ってるわけじゃないからさ
116デフォルトの名無しさん:2006/08/01(火) 22:49:03
おまいさんが質問してからでも
ここで何度も指摘されたことだが?

ひとの話聞かないからそうなる
117デフォルトの名無しさん:2006/08/01(火) 22:54:04
>>114
もう全員初心者ってことで良いよ。おしまい。

>>115
もとから上も下も無いんだけどね。

>--with-static-linked-extにすれば何かいいことあるのかと思ってやったら
>別に大したことなかったわけで、単に*.soが消えただけだし

どんな夢のような機能を頭に描いていたのだろう。
118デフォルトの名無しさん:2006/08/01(火) 23:01:56
>>117
君、このスレに来なくていいから
119デフォルトの名無しさん:2006/08/01(火) 23:07:10
>>116
たとえばどのレスでしょ?初心者って言葉を免罪符にするつもりは無いけど
なにかしら誤解してしまったのかも知れませんね。こちらの理解力が足りなかったら謝ります

>>117
最初から言ってるように、俺は全部丸ごと一つに纏めたインタプリタが欲しかったんで
*.rbのライブラリまで含めたexeができるのかと思ってました
Exerbでできるんだから、ruby自体に元々そういう機能が備わってるのかな、と思った訳です
120デフォルトの名無しさん:2006/08/01(火) 23:08:04
>>117
その発言態度を「上から」と言わずしてなんと言おうか。
121デフォルトの名無しさん:2006/08/01(火) 23:22:19
あーあ、心無い馬鹿一人の為に>>199の疑問はもう2chでは解決しなくなっちゃったね
122デフォルトの名無しさん:2006/08/01(火) 23:24:28
>--with-static-linked-ext
にすると良くないことの方が多いと思う。

Exerbの場合、必要なsoだけ列挙して結合出来るから
exeを小さく出来るメリットもあるはずなのに、
それをわざわざ潰すような使い方してるのは何故でしょうか。

Exerbに関してぐだぐだ文句言う前にマニュアルくらい読んだらどうですか?
123デフォルトの名無しさん:2006/08/01(火) 23:25:39
ああ、soの意味を分かってないのか、納得した。
124デフォルトの名無しさん:2006/08/01(火) 23:27:24
>ここまで来て、わざわざmingw32版でExerb統合する意味ないじゃんと思いましたけど
>統合後にUPXで圧縮したら 1.13 MBになったので、mswin32版より小さくなったのが唯一の救いです

サイズ気にしてるのにどうして・・・
125デフォルトの名無しさん:2006/08/01(火) 23:31:15
上から見てるのは >>115 の方だと思うな
126デフォルトの名無しさん:2006/08/01(火) 23:33:13
>>119
>こちらの理解力が足りなかったら謝ります

理解力が足りなかったというより
自分が常に正しいと思い込んでるから
ひとの話が耳(目)に入らなかっただけでは?
127デフォルトの名無しさん:2006/08/01(火) 23:34:50
なんつーか、いちいち質問者にケチつけるのやめろよ。
答えたくないならスルーで。
128デフォルトの名無しさん:2006/08/01(火) 23:35:41
>>126
こんなところで日ごろのうさを晴らさないで下さい。
129デフォルトの名無しさん:2006/08/01(火) 23:36:38
煽りはスルーで。
130デフォルトの名無しさん:2006/08/01(火) 23:38:26
>>126
君の発言、全部「?」で終わってるよね。
131109:2006/08/01(火) 23:40:54
>>110
スパムになんて使いません。
xml-rpcで調べたらRubyの判りやすいサンプルが出てきたので
132デフォルトの名無しさん:2006/08/01(火) 23:43:09
俺は質問してる奴の質問方法に問題があると思った。

知識自慢はいいから、聞きたいことだけズバッと書け。
133デフォルトの名無しさん:2006/08/01(火) 23:54:56
>>122>>124
うーん、最初のほうで書いてるんだけど、途中から割り込んで
切り取った部分だけ読んで反応してませんかね?

特定のスクリプトを走らせるだけなら機能絞り込めますけど
rubyに添付されてるライブラリを含めたインタプリタ(一つのexe)が欲しかったんです
なるべく汎用なものが欲しかったんですよ

いま使ってるのは、全部の添付ライブラリをExerbで統合したもので
require "main.rb"するだけのexeでして、肝心のmain.rbは統合してないので
ふつうのテキストエディタで修正可能な状態になってます

要は、Exerb統合バイナリ(添付ライブラリ同梱)と、main.rb(notepadで修正可能なスクリプト)
という組み合わせでして、main.rbはいくらでも自分のやりたいスクリプトに置き換えできるんですよ
だから全統合型のインタプリタが欲しかったんです。
この説明で分かって頂けないようなら、水掛け論にしかならないので、
以降は、この論点に関しては議論するのを避けることにします

それと、Exerbに対して文句言ってるように受け取られましたら、
言い方が悪かったかもれません。すみません。そのような意図は全くありません
134デフォルトの名無しさん:2006/08/02(水) 00:41:41

RubyWin

ttp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ext/
rubywin-0.0.4.3-i586-mswin32-1.6.zip
135デフォルトの名無しさん:2006/08/02(水) 01:22:26
このスレが名前に反して、初心者に優しくなくなってきている件
136デフォルトの名無しさん:2006/08/02(水) 01:24:16
>>134 それは1.6用だし
137デフォルトの名無しさん:2006/08/02(水) 01:25:59
初心者っぽくない人が初心者のフリして頓珍漢なことを聞く釣りスレ
138デフォルトの名無しさん:2006/08/02(水) 09:06:46
そして本スレは漫才化
139デフォルトの名無しさん:2006/08/02(水) 09:16:36
>>138
ここが本スレ。
140109:2006/08/02(水) 13:59:43
自己解決しました。
kconvを使ってタイトルと本文をutf-8にエンコードしたらいけました。
141デフォルトの名無しさん:2006/08/02(水) 16:37:33
>>140
役に立ててよかったよ

142デフォルトの名無しさん:2006/08/02(水) 17:15:10
Rubyコンパイルするのに、VC買う必要はないよ。
VC++Toolkit+アルファでコンパイルできる
Expressではできなかった
143デフォルトの名無しさん:2006/08/02(水) 21:47:49
先週たのしいruby買ってお勉強中だが…

来週第2版出るんだ…




ノーチェックだった…orz
144デフォルトの名無しさん:2006/08/02(水) 21:51:02
第2版は店頭に並ぶまでが遠足です
145デフォルトの名無しさん:2006/08/02(水) 21:57:35
でもAmazonにもあるからきっと出るよすぐ出るよ!

たのしいRuby 第2版 Rubyではじめる気軽なプログラミング
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797336617/
146デフォルトの名無しさん:2006/08/02(水) 22:09:12
PythonのenumerateみたいなことRubyではできませんか?
147デフォルトの名無しさん:2006/08/02(水) 22:15:29
うおおおおおおおおおおおおおおおおおおおおお
Ruby関連本出過ぎぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃ
148デフォルトの名無しさん:2006/08/02(水) 22:18:48
railsどれがいいんだろ
149デフォルトの名無しさん:2006/08/02(水) 22:21:38
個人的にはatron本
150デフォルトの名無しさん:2006/08/02(水) 22:49:38
>>146
こゆこと?

for i,e in enumerate(["a","b","c"]):
 print i,e

なら、

["a","b","c"].each_with_index {|e,i| p i,e}
151デフォルトの名無しさん:2006/08/02(水) 22:57:54
正直、待ちすぎてプログラミングするの飽きた。
152うひょー:2006/08/02(水) 23:09:55
Ruby on Rails, Vim, and rails.vim
ttp://youtube.com/watch?v=30P8DSNOZuU&search=vim
153デフォルトの名無しさん:2006/08/02(水) 23:25:47
>>111
nkf.soは外部のDLLには依存しない。

static-linked-extなら$"に全部入っているから、>>108のようにテンポラリに
書き出したりする必要はないと思うんだが。
154デフォルトの名無しさん:2006/08/03(木) 02:46:59
>>150
それそれ
後ろにつくんですねd
155デフォルトの名無しさん:2006/08/03(木) 09:55:01
http-access2で2chに書き込むスクリプトを作っています
2chの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は失敗します。

似たような問題にあった人がいたら解決方法を教えてもらえませんか。
156デフォルトの名無しさん:2006/08/03(木) 16:40:35
スクリプトで2chに書き込まないでくれよ
157デフォルトの名無しさん:2006/08/03(木) 16:59:12
>>142
Expressでもできたよ。↓を参考にした。
ttp://homepage1.nifty.com/markey/memo/200602.html#020402
158デフォルトの名無しさん:2006/08/03(木) 17:17:01
>>156
毎日ある会社の株価を取得して貼っているんですが、
定型作業なのに面倒なので、自動化したいんです
159デフォルトの名無しさん:2006/08/03(木) 17:24:15
なんぼでも悪い応用verができそうなことを
親切丁寧に解説する奴がいると思う?
160デフォルトの名無しさん:2006/08/03(木) 17:25:51
ただでさえ、最近2ちゃんは不安定だからな。
161デフォルトの名無しさん:2006/08/03(木) 18:07:50
ruby と http-access2 のバージョンくらい書くべきだと思う
162デフォルトの名無しさん:2006/08/03(木) 18:46:03
>host名を含んだ絶対パスを指定しなければならない
こんな仕様あったっけ?
163デフォルトの名無しさん:2006/08/03(木) 18:59:14
httpの仕様にあってないし、それはないかと。
プロキシを通してでアクセスするときのリクエストに見えるね。
きっと横取り丸を通すことで、そういうリクエストになったのだろう。
とりあえずいまのあなたには無理だからやめときなさい。
164デフォルトの名無しさん: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を介さず、直接接続しても↑の結果になります
165デフォルトの名無しさん:2006/08/03(木) 19:30:33
リクエスト情報の比較を貼ります
cookieのホスト名のところは控えさせてください

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
166デフォルトの名無しさん:2006/08/03(木) 19:33:16
すみません 解決してしまいました。
よく見ると rubyスクリプトの方には
Host: anime.2ch.net
が2つありますね。
1つにするようにソースをいじったら書き込み成功しました


ごめんなさい
167デフォルトの名無しさん:2006/08/04(金) 11:30:06
String#/ が無いのは何故ですか?


class String
def /(pattern)
self.split(pattern)
end
end

["foo", "bar", "baz"] * "," # => "foo,bar,baz"
"foo,bar,baz" / "," # => ["foo", "bar", "baz"]
168デフォルトの名無しさん:2006/08/04(金) 12:13:41
split のマニュアル見るとわかるかも
169デフォルトの名無しさん:2006/08/04(金) 13:24:56
見たけどわかんないや。
170デフォルトの名無しさん:2006/08/05(土) 05:59:03
オモロいかも。
pattern が正規表現リテラルだったら読みづらそうだがw
"foo bar baz".split(/ /)
→ "foo bar baz" / / /
171デフォルトの名無しさん:2006/08/05(土) 19:56:14
>>145のたのしいRuby第2版が店頭に並んでた

この言い方からわかると思うが手に取っただけで買わなかった(w
172デフォルトの名無しさん:2006/08/05(土) 20:59:29
CUIのプログラムで矢印キーで
メニューを選択できるようにしたいのですが,
簡単にできるライブラリはあるでしょうか?
参考になるサイトなど教えていただけるとありがたいです.
173デフォルトの名無しさん:2006/08/05(土) 21:16:20
>>172
高度な機能はないがruby付属のcurses
174デフォルトの名無しさん:2006/08/05(土) 23:36:08
>>173
やっぱり自分でウィンドウ作ってメニュー書いてってしないとダメですかorz
よくありそうなので楽できないかなあと思ったのですが…
175デフォルトの名無しさん:2006/08/05(土) 23:44:51
>>174
RAAは見た?
TUIの項目にそれらしいのがいくつかあるけど。
176デフォルトの名無しさん:2006/08/06(日) 07:11:58
3項演算子で、?と:を縦に並べるのをperlでよくやってたんですが、
rubyだと無理ですか?
177デフォルトの名無しさん:2006/08/06(日) 07:29:39
p 1 == 3 ? \
7 \
: \
8
178デフォルトの名無しさん:2006/08/06(日) 10:04:04
だせぇwwww
なんだ、そりゃwwwww
179デフォルトの名無しさん:2006/08/06(日) 10:12:03
夏だしARIAについて語ろうぜ
180デフォルトの名無しさん:2006/08/06(日) 11:59:40
アリャまぁ。
181デフォルトの名無しさん:2006/08/06(日) 12:06:06
rubyって奇跡でできてるんだよねー
182デフォルトの名無しさん:2006/08/06(日) 12:33:24
恥ずかしいセリフ禁止っ
183デフォルトの名無しさん:2006/08/06(日) 14:53:43
今日もRubyの素敵を探して
184デフォルトの名無しさん:2006/08/06(日) 18:14:18
なんなんですかっ、言語オタクですかっ、言語オタク気取りなんですかっ!
185デフォルトの名無しさん:2006/08/06(日) 20:24:22
>>175
rubytui と ncurses-ruby を見てみましたが
まだ私のスキルでは難しそうでした.
サンプルとかあるとうれしいんですが
186デフォルトの名無しさん:2006/08/06(日) 21:47:43
1版読み書けなのに
無駄に2版買ったぜ
2版でるなら1版買う前にいえよ糞め
さて1版どうすんべか
187デフォルトの名無しさん:2006/08/06(日) 22:34:56
ちょうだい
188デフォルトの名無しさん:2006/08/06(日) 23:12:18
たのしいRubyって糞本だよな。
断片的な情報しか紹介してねえ。
初心者がこれ見て何か組めるかってったら組めないよ。
それに全然楽しくないしな。
189デフォルトの名無しさん:2006/08/06(日) 23:30:34
>>188
あなたにはレシピブックをお薦めします

さておき、たのしいRubyが糞本だという意見に反論したいが
実際に読んだ初心者(or元・初心者)の感想がないと何とも言えないな
190175:2006/08/06(日) 23:37:36
>>185
すまん。それらしいものがあるという事を知ってただけで
使った事はなかったんだ。試しにその2つとrdialogを見てみたが、
どれも望みのものとは違うようだ。

外部コマンドを使って良いのならdialogとかiselectとか
shmenuとかを呼ぶのが楽かも。
191デフォルトの名無しさん:2006/08/07(月) 05:00:27
>>177
バックスラッシュを使わないと無理なんですね・・・
あきらめて普通の制御構造にします・・・
192デフォルトの名無しさん:2006/08/07(月) 05:28:05
>191
ケータイからでスマンが、実は()で括ると出来たりしない?
193デフォルトの名無しさん:2006/08/07(月) 05:48:42
>>192 無理。

そもそも何がやりたいのか分からんし。

if 〜
 then 〜
 else 〜
end

じゃ駄目なんだろうか。
194デフォルトの名無しさん:2006/08/07(月) 05:58:05
Ruby/SDL で mixer の初期化に失敗するのですが、どなたか解決法ご存じでしたらご教授よろしくお願いします。

ディストリは 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」です。
195デフォルトの名無しさん:2006/08/07(月) 08:26:52
すいません。スレ違いかもしれませんね。SDLスレに行ってみます。
196デフォルトの名無しさん:2006/08/07(月) 09:55:21
>189
おれはたのしい Ruby で Ruby を勉強したよ。
「何か組めるか」って、小さなスクリプトの用途にはすぐ使えるようになって
いるし、基本的な使い方の解説はきちんとしていてわかりやすくて良いと思う。

あの本は Ruby の楽しさのある面を伝えているのもあるが、著者自身の面白さ
が滲み出ているのがいい本だと思う。
まあその辺の感じかたは人それぞれだろうけど。
197デフォルトの名無しさん:2006/08/07(月) 15:09:48
ネットにアクセスできるかどうかはどうやって判定すればいいんでしょうか?
状況によってローカルのファイルを使うか、ネット経由でデータを取得するか分岐させたいのですが
198デフォルトの名無しさん:2006/08/07(月) 15:14:54
ネット経由でファイル取得して失敗したらローカルのファイル使えばいいじゃない
199デフォルトの名無しさん:2006/08/07(月) 15:16:34
>>198
例外で呼べばいいんですかね?
200デフォルトの名無しさん:2006/08/07(月) 15:27:18
いいんじゃないの?
201デフォルトの名無しさん:2006/08/07(月) 18:18:32
erbなんですが、

do_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 %>
202デフォルトの名無しさん:2006/08/07(月) 18:19:23
ちなみに今は、textをグローバル変数にして、しのいでいます。
$textで
203デフォルトの名無しさん:2006/08/07(月) 18:23:35
ちなみに今は、textをグローバル変数にして、しのいでいます。
$textで
204デフォルトの名無しさん:2006/08/07(月) 18:24:23
do_erbを展開すればいいんじゃない?と思われるのですが、
いろいろなところから、do_erbを使いたいので・・・
205デフォルトの名無しさん:2006/08/07(月) 18:57:00
>>201
これだとどう?

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
206デフォルトの名無しさん:2006/08/07(月) 23:41:35
>>187
よしおちんちんなめあいっこしようぜ
207デフォルトの名無しさん:2006/08/08(火) 13:59:00
>>191
p 1 == 3 ?
7 :
8
208デフォルトの名無しさん:2006/08/08(火) 21:44:22
パトラッシュ?
209デフォルトの名無しさん:2006/08/08(火) 22:58:29
>>201
ローカル変数の情報を渡すには、Bindingオブジェクトを使う必要がある。
>>205のように、binding()で現在のローカル変数情報をもつBindingオブジェクトを作成し、
それをerb.result()に渡してやる。
それが省略されたときは、デフォルトでTOPLEVEL_BINDINGという定数に入っているBindingオブジェクトが使われている。
210宿題じゃないよ:2006/08/09(水) 16:28:08
n種類のキャラクタを1回ずつ使ってn文字の文字列を作るとします。
この条件で作ることができる文字列をすべて列挙するにはどうすればよいか?

例えば、A,B,C,Dの4つのキャラクタを使う場合、
ABCD
BACD
BCAD
BCDA
CABD
 :
みたいな結果がほしいです。

具体的なコードでなくてもいいので、とっかかりになるヒントをください。
211デフォルトの名無しさん:2006/08/09(水) 17:12:03
>>210
ヒント: 順列
212デフォルトの名無しさん:2006/08/09(水) 17:35:27
>>210
Omotiか?w
213宿題じゃないよ:2006/08/09(水) 17:37:12
>>211
だいぶ早くできそうだ。サンクス
214デフォルトの名無しさん:2006/08/09(水) 17:40:47
238 名前: 1.0011(ピンボール) ◆rzOmotimAo 2006/01/04(水) 02:46:04 ID:???
>>234
「部品を何個使いますか?」
って聞かれて、
「17個」
とか数値を入力する。そんで、17個分の入力ボックスが用意されて
【A:預金準備率】
【B:窓口指導】
【C:徴税】
、、、
とか、ぽちぽち入力していく。そんで
「入力終了」
ボタンを押すと、
「配置パターン1:A→B→C」
「配置パターン2:B→A→C」
「配置パターン3:C→A→B」
、、、、、
「配置パターン289:○○」
まで、ずらずらーーっと表示される。

そんで、オレ様はそのリストをながめて、
一番いいのを選べばいいだけ。すごいでしょ?
215デフォルトの名無しさん:2006/08/09(水) 18:02:00
>>210
ヒント:再帰

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
216デフォルトの名無しさん:2006/08/09(水) 18:02:18
そのリストがどれだけの長さになるかぐらい考えないのかなこの人w
217デフォルトの名無しさん:2006/08/09(水) 18:04:09
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 "CHOI_TEISEI"
218210:2006/08/10(木) 09:10:52
あぅ。寝てる間に答えが出てる。
ありがとうございます。>215
219デフォルトの名無しさん:2006/08/10(木) 21:06:21
Python でいうところの
if s in ('y', 'Y'):
を Ruby 的にはどう書きますか?
220デフォルトの名無しさん:2006/08/10(木) 21:44:34
if ['y','Y'].include?(s)
じゃださいかな?
221デフォルトの名無しさん:2006/08/10(木) 22:54:22
>>219
Pythonにはそんな記法があるのか!
これはぜひRubyでも欲しいな
222デフォルトの名無しさん:2006/08/10(木) 22:59:17
オブジェクト指向的じゃないな
223デフォルトの名無しさん:2006/08/10(木) 23:06:07
オブジェクト指向的には>>220のような形にならざるを得ないのかも

そうするとあまりカッコよくない…
224デフォルトの名無しさん:2006/08/10(木) 23:12:38
case s
when 'y','Y'
end
じゃだめ?
225デフォルトの名無しさん:2006/08/11(金) 00:17:09
rubyのソースをexeにすることってできますか?
226デフォルトの名無しさん:2006/08/11(金) 00:19:12
ちょっと言い方まずったかな?
rubyのソースをコンパイルしてexeを生成することはできますか?
227デフォルトの名無しさん:2006/08/11(金) 01:08:18
>>224
===演算子による比較しかできないという問題が……
やっぱ==比較したいときもあるわけで

>>225-226
exerb
228デフォルトの名無しさん:2006/08/11(金) 02:12:56
if s =~ /y/i

とか?
229デフォルトの名無しさん:2006/08/11(金) 02:17:55
>>222-223

でもRubyにも
for i in [1,2,3]
p i
end
という記法があるので、


if s in ('y', 'Y')
があってもいいと思う。

230デフォルトの名無しさん:2006/08/11(金) 02:54:31
class Object
def in(*args)
args.include?(self)
end
end
if s.in('y','Y') then
みたいなのはどうだろ
231デフォルトの名無しさん:2006/08/11(金) 07:19:23
>>229
Pythonでの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)
232デフォルトの名無しさん:2006/08/11(金) 08:58:13
演算子として実装するなら、include?の糖衣構文とすべきかな

s in array

array.include?(s)
と等価、という風に。これならHashに対しても使えるし
233デフォルトの名無しさん:2006/08/11(金) 12:23:35
enumerable.include?(s) かな
234デフォルトの名無しさん:2006/08/11(金) 12:59:33
include?がもうすこし短くなればいいんじゃない?
235デフォルトの名無しさん:2006/08/11(金) 13:05:22
member?
236デフォルトの名無しさん:2006/08/11(金) 13:14:30
"犯人".は、この中にいますか? "鈴木", "田中", "山田", "犯人" # => true
237デフォルトの名無しさん:2006/08/11(金) 15:16:22
3人は無実か。
238デフォルトの名無しさん:2006/08/11(金) 16:05:16
文字列としての"犯人"なら"犯人"以外の3人は無実だけど
意味的に"犯人"がいるかどうかなら共犯者がいる可能性もあるでしょ
239デフォルトの名無しさん:2006/08/11(金) 16:51:47
>>238
236のメソッドを意味的に考えてみなよ
240デフォルトの名無しさん:2006/08/11(金) 17:09:56
集団に対して判断基準を渡すと該当が返ってくるというのが動作としてよいと思う
241デフォルトの名無しさん:2006/08/11(金) 17:46:18
犯人は田中が怪しいな。

つまりは、=== で比較すればいいってことかな。
242デフォルトの名無しさん:2006/08/11(金) 17:53:58
>>240
if not members.find_all { |e| e === member }.empty? ってやれってこと?面倒じゃね?
243デフォルトの名無しさん:2006/08/11(金) 18:00:33
容疑者 = ["鈴木", "田中", "山田", "佐藤"].sort{|a,b| 事件.容疑関連性(a) <=> 事件.容疑関連性(b) }
puts "犯人は#{容疑者.first}だ!"

# 一番疑わしい者が自動的に犯人になる冤罪メソッド
244デフォルトの名無しさん:2006/08/11(金) 18:15:45
1.9 だと max_by, min_by でスッキリ書けそう。
puts "犯人は %s だ!" % 関係者.max_by { |e| 事件.容疑関連性(e) }
245田中:2006/08/11(金) 18:33:31
俺、やってないって。まじ。
246デフォルトの名無しさん:2006/08/11(金) 18:47:09
>>243
それじゃ事件関連性が小さいやつが犯人になる気ガス
247デフォルトの名無しさん:2006/08/11(金) 20:02:45
cookieの処理ってどうやってますか?
248田中:2006/08/11(金) 20:45:42
>>247
クライアントサイドかサーバサイドかによるな。
249デフォルトの名無しさん:2006/08/11(金) 21:34:00
クライアントです
250デフォルトの名無しさん:2006/08/11(金) 21:49:14
うわマジレス返ってきたよ
本気で答もらう気なんだ


これで
251デフォルトの名無しさん:2006/08/11(金) 23:00:44
>249
Webブラウザに任す。
自力でHTTPクライアント作ってるのなら黙ってRFCを理解しろ。
252デフォルトの名無しさん:2006/08/11(金) 23:50:14
net/httpならset-cookieとget-cookieを自前で処理するのかな。
前やったことあるけど、うまくいった気がする。
WebAgentなら自動でやってくれた気がする。
253デフォルトの名無しさん:2006/08/11(金) 23:52:58
どんなことしたいかくらい教えて欲しいよな
254デフォルトの名無しさん:2006/08/12(土) 00:08:48
みなさんの考えるRubyの良さってなんですか?
僕は今のところコーディング量がCに比べて少なくてすむのが気に入ってます。
255デフォルトの名無しさん:2006/08/12(土) 00:13:51
>>244
オリエント急行かよ。
256デフォルトの名無しさん:2006/08/12(土) 00:21:31
美しい魔闘家
257デフォルトの名無しさん:2006/08/12(土) 00:27:41
Ruby 1.9マダァー?
258デフォルトの名無しさん:2006/08/12(土) 00:31:12
美しく待とうか
259デフォルトの名無しさん:2006/08/12(土) 01:50:40
>>229

もしかして、

>for i in [1,2,3]
>という記法があるので、

逆に

>if s in ('y', 'Y')

が実現出来ない、という関係になっていたりして。
260デフォルトの名無しさん:2006/08/12(土) 02:04:26
なんでだ?寝ながら書きこんでるのか?
261デフォルトの名無しさん:2006/08/12(土) 02:06:59
「逆に」を使うのは未成年だという報告が届いております。
262デフォルトの名無しさん:2006/08/12(土) 03:38:53
逆に、に罪は無い
263デフォルトの名無しさん:2006/08/12(土) 06:20:08
>>224
caseだとcaseの後ろに定数を置いて、whenの方に変数を置く
ことになるけど、それだとニュアンスが逆になるような・・・
まあ、それでも出来てしまうけど・・・

>>249
クライアント側でやるってことは、もうrubyの出番はない。スレ違い。(板も違う
264デフォルトの名無しさん:2006/08/12(土) 06:53:01
>>263
クライアントがWebブラウザであるとはだれもいっていない。
Rubyでクライアントプログラム書くはなしじゃないか。
265デフォルトの名無しさん:2006/08/12(土) 07:55:52
初心者スレは楽しいなあ
266デフォルトの名無しさん:2006/08/12(土) 08:52:09
いろいろ案がでてるけど、やっぱり

if s in ['Y' , 'y']

が実装されるといいなあ。

267デフォルトの名無しさん:2006/08/12(土) 09:02:25
べつに include? でいいよ
268デフォルトの名無しさん:2006/08/12(土) 09:05:36
>>266
オブジェクト指向的ではないな
269デフォルトの名無しさん:2006/08/12(土) 09:34:16
forのように超便利なら入れてくれるかもしれん

んで、これ超便利?
270デフォルトの名無しさん:2006/08/12(土) 09:48:20
みみょ

ていうか俺はforもRange#eachで書いてしまうんだが
これはおかしな書き方かな?

スコープがみみょに違うのは知ってるんだが
大体なんとかなっちゃうからなー
271デフォルトの名無しさん:2006/08/12(土) 09:50:29
俺はfor i in 1..10みたいな書き方をほとんどの場合するんだけど、何でだっけ?忘れた。
272デフォルトの名無しさん:2006/08/12(土) 12:42:37
D言語のopApply&foreachみたいなことをやりたいのですが、
どうしたらいいでしょうか。
273デフォルトの名無しさん:2006/08/12(土) 12:46:11
for あんまり使わない。
ほとんど each と times 使ってる。

>>271
for の方が range#each よりも速いとかいう話が前あったけど、それじゃないかな。
でも、0オリジンなら Integer#times の方が速そう。
274273:2006/08/12(土) 12:52:51
eachとtimesとforで実際に計ってみたら、for が一番速かった。
変数のスコープの違いが速度に反映されてるっぽいね。
275デフォルトの名無しさん:2006/08/12(土) 17:28:00
>>272
どういうもん?
276デフォルトの名無しさん:2006/08/12(土) 17:39:24
マジでMLに投げてみるか
277デフォルトの名無しさん:2006/08/12(土) 17:42:29
>>266
278デフォルトの名無しさん:2006/08/12(土) 17:57:19
>>275
自分でコレクション的なクラスを作ったときにその要素を巡回するのに
foreachが使える。
http://www.kmonos.net/alang/d/statement.html
279デフォルトの名無しさん:2006/08/12(土) 18:46:44
yield使えば。
280デフォルトの名無しさん:2006/08/12(土) 18:59:31
forなんて一回も使ったことない
281デフォルトの名無しさん:2006/08/12(土) 19:56:17
ふぉうふぉうそれはそれは
282デフォルトの名無しさん:2006/08/12(土) 20:00:02
>>278
コードと説明を自分で書け、馬鹿
283デフォルトの名無しさん:2006/08/13(日) 10:17:04
>>278
そこにはopArrayという言葉はないようだが。

>>279も書いてるとおり、inの後の式の結果のオブジェクトにはeachが定義さ
れている必要があり、そこからyieldされる値でループする。

class MyCollection
  def each
    yeild 2
    yeild 3
    yeild 5
    yeild 7
    yeild 11
  end
end
284デフォルトの名無しさん:2006/08/13(日) 10:24:07
すいません、mkexr.rbというコードが見つからなくて困ってます。
あと、.exrと.exyはどっちが新しい形式でどっちを使った方がよいですか?
285283:2006/08/13(日) 10:25:36
しまった、s/yeild/yield/g
286283:2006/08/13(日) 10:26:37
>>284
たしか、新しくyamlに移行したのが.exyじゃなかったか?
287デフォルトの名無しさん:2006/08/13(日) 10:34:51
debianでは、apt-get install ruby1.8 しただけでは、必要なライブラリがインストールされない。
そんなとき、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/

288デフォルトの名無しさん:2006/08/13(日) 13:37:38
>>287
仮想パッケージ化希望
289デフォルトの名無しさん:2006/08/13(日) 14:29:15
>>283
opArrayじゃなくてopApplyです。
yield使ってみます。
ありがとうございます。
290デフォルトの名無しさん:2006/08/13(日) 16:50:34
すいません、これと同じ結果を得るコードを書きたいのですが、sscanf()に相当する関数はあるのでしょうか?
#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

291デフォルトの名無しさん:2006/08/13(日) 16:55:02
>>290
その変態コードの機能に相当するものは無い。
292デフォルトの名無しさん:2006/08/13(日) 17:55:12
text = "f75632"
0.upto(text.length-2){|i| puts text[i..i+1].to_i(16)}
293デフォルトの名無しさん:2006/08/13(日) 19:03:45
>>292
すげぇ。
これがモノグサ野郎御用達言語
Rubyの真の威力なのか…
Cがいかに文字列処理に弱い言語か
よくわかるな。
294デフォルトの名無しさん:2006/08/13(日) 19:05:18
require 'scanf'
text = "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)
295デフォルトの名無しさん:2006/08/13(日) 19:51:59
>>276-277
>マジでMLに投げてみるか
>↑>>266

お願いします。
296デフォルトの名無しさん:2006/08/13(日) 20:45:58
>>266
>いろいろ案がでてるけど、やっぱり
>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
と、短い記述に置き換わったら、とてもいい感じになる。

297デフォルトの名無しさん:2006/08/13(日) 21:06:45
確かに微妙なストレスってあるよな。
結構大事だよな。書き心地。
298276:2006/08/13(日) 21:52:01
>>295
よし、投げてみる。提案をまとめると
「includeメソッドの糖衣構文としてのin演算子の追加」ってことでいいんだよな?
必要な理由を要領よくまとめてくれた296に感謝

あと、ここのスレで出た案だってことは書いてもいい?
299デフォルトの名無しさん:2006/08/13(日) 21:57:31
馬鹿! このスレのことが世に知れたらどうするんだよ!
300デフォルトの名無しさん:2006/08/13(日) 21:58:45
なんでif s == 'y' || s == 'Y'って書かないんだろう?
301296:2006/08/13(日) 22:00:40
>>298
>あと、ここのスレで出た案だってことは書いてもいい?

良いのではないかと。ML投げよろしくです。


302296:2006/08/13(日) 22:03:36
>>300
>なんでif s == 'y' || s == 'Y'って書かないんだろう?

それは、 if s in ['y', 'Y' , 'n' , 'N' , 'q' , 'Q' , ""] のときにめんどうだから。

>>あと、ここのスレで出た案だってことは書いてもいい?
>馬鹿! このスレのことが世に知れたらどうするんだよ!

なんか、スレのこと知られたくない人がいるらしいので、内緒ということで。
>>298
303デフォルトの名無しさん:2006/08/13(日) 22:06:11
例は2つではなく3つで示せ、の原則から外れてるからわかりにくいんだろうな
if s in ['a', 'b', 'c', 'd'] とかのほうが混乱起きないかもしれん
304デフォルトの名無しさん:2006/08/13(日) 22:11:56
なんでif s.match(/^[yYnNqQ]$/って書かないんだろう?
305デフォルトの名無しさん:2006/08/13(日) 22:13:52
どうしてもPythonに近づけたい人がいるようです。
306デフォルトの名無しさん:2006/08/13(日) 22:15:51
>>304
君は ['y', 'Y' , 'n' , 'N' , 'q' , 'Q' , ""].include?(s) をそう理解してるのか
307デフォルトの名無しさん:2006/08/13(日) 22:16:10
>>304
う、遅かったか。
じゃあ、 if i in [1.5 ,4 ,7.2 , 9 ,12.3,45,78.1] のときに以下略
308デフォルトの名無しさん:2006/08/13(日) 22:18:11
なんでいちいちArrayにしてから比較したいのか意味不明だな。
多くの要素を持つArrayの中に文字列があるかどうかを調べたいなら、
Arrayがレシーバーになるのが自然だし。
309デフォルトの名無しさん:2006/08/13(日) 22:20:47
まぁまぁ。
提案するのは自由だ。
310デフォルトの名無しさん:2006/08/13(日) 22:39:52
え、これって「集団の中に目的のものがあればtrue」とかそういうのじゃないの
配列から文字列を探すとかそういう限定された動作じゃなくて
311デフォルトの名無しさん:2006/08/13(日) 22:42:37
なんだか変なのが沸いた
312デフォルトの名無しさん:2006/08/14(月) 06:44:06
私も変数は先に、比較対象は後に書きたい派だから
inかどうかはともかく、そういう書き方は欲しいかも。
無理矢理Object#in定義しても出来るだろうけどさぁ。
313276:2006/08/14(月) 09:13:55
スレを読み返していて、>>259で気がついたんだが
普通にin演算子を追加するとfor-in構文と被ってしまうな、どうしよう

1. if-in、unless-inに限定する
2. for-inだけ特例として扱う(forとセットで使われた場合のみ従来の機能)
314デフォルトの名無しさん:2006/08/14(月) 09:57:00
>>313

inではなくて、 in? にするとか。

if s in? [1,2,3] then

315デフォルトの名無しさん:2006/08/14(月) 10:22:27
どんどん気持ち悪くなっていく
316デフォルトの名無しさん:2006/08/14(月) 10:47:06
Perlで1...1000000とかやるとメモリ取るとかいう話があった気がするけど
Rubyはどうなの?
317デフォルトの名無しさん:2006/08/14(月) 11:09:34
>>313
え?
>>229でもいってるように、for i inがあるからこそ、if s inがあってもいいんじゃないかということでは?
318デフォルトの名無しさん:2006/08/14(月) 11:23:36
>314
末尾?ならもうメソッドで良いよ
if s.in?([1,2,3])
319デフォルトの名無しさん:2006/08/14(月) 11:25:39
>>318
ますますPythonだなw
320デフォルトの名無しさん:2006/08/14(月) 11:29:16
>>318
それなら順番変えて、if [1,2,3].in?(s)でもいいんじゃね?
アレ?
321デフォルトの名無しさん:2006/08/14(月) 11:32:02
そもそもfor i inもRuby的じゃないんだから、if s inでいいよ。
さっさと提案してくれ。
322デフォルトの名無しさん:2006/08/14(月) 11:48:21
>320
ちょwそれまんまinclude?だしw
323デフォルトの名無しさん:2006/08/14(月) 11:50:05
>>317
>>>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?メソッドをもつものをカバー
・比較対象、演算子?、比較条件の順序で書ける。

は満たしている。
324デフォルトの名無しさん:2006/08/14(月) 11:57:05
>>323
> メソッドで妥協もいいかな
すんなよ
メソッドでいいなら自力で定義しろ
他人巻き込むな
325デフォルトの名無しさん:2006/08/14(月) 12:05:52
>>324
もちろん、言語として初めからあったほうがいい演算子またはメソッドとしての提案という意味。
本当にあった方がいいのか無くてもいいのかは、MLで提案されれば適切に議論されるでしょ。
326デフォルトの名無しさん:2006/08/14(月) 13:39:19
別にfor inあっても大丈夫でしょ
JavaScriptもfor inとは別にin演算子がある
意味は違うが
327デフォルトの名無しさん:2006/08/14(月) 14:54:07
rubyはソースがendだらけになるのは困るね。
どうして{}を使わせてくれなかったのだろう。
328デフォルトの名無しさん:2006/08/14(月) 14:57:12
>>313
やっぱりいくらか制限が必要だな。

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
     {
329デフォルトの名無しさん:2006/08/14(月) 14:57:17
 { } だらけになるからだろ
330デフォルトの名無しさん:2006/08/14(月) 14:57:54
>>327
頻出。過去ログ嫁。
331328:2006/08/14(月) 15:01:58
タブは無理か。

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: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
 ;
332デフォルトの名無しさん:2006/08/14(月) 16:04:08
>>328 >>331
はたしてどっちがいいのか。うーーん。初心者だからわかんないや。
333デフォルトの名無しさん:2006/08/14(月) 16:08:09
あんま初心者スレで煮詰めるような案件でもないな

「Pyの A in B をRubyでも使いたい」って素直にMLに投げてからのほうがいいと思う
334デフォルトの名無しさん:2006/08/14(月) 16:16:05
puts "x is a member of a, b or c" if true in x in a, x in b, x in c
335276:2006/08/14(月) 17:31:11
とりあえず技術的な問題については書かないことにして
メール本文を考えてみました
ttp://www.uploda.org/uporg479135.txt.html
受信パスワードはin

この本文で問題がなければruby-devへ投下する
336デフォルトの名無しさん:2006/08/14(月) 17:55:07
技術的な問題について書かないならruby-listでいいんじゃね?
337デフォルトの名無しさん:2006/08/14(月) 17:56:45
>>335
素直にとても良く書けてると思う。導入に議論の余地はあれど、提案としてはOKではないかな。
338デフォルトの名無しさん:2006/08/14(月) 17:59:32
>>336
漏れもそう思う。実装する段になったら ruby-dev に行けばいい。
339デフォルトの名無しさん:2006/08/14(月) 18:30:40
>>35
>私はこうした書き方に、少なからずストレスを感じます。
と書いているのに、

>かなり書き心地が良くなるのではないでしょうか。
はおかしい。人事みたいだ。

自分がそうなれば幸福だから、というスタンスで書いたほうがいいと思うよ。
340デフォルトの名無しさん:2006/08/14(月) 19:02:16
妥協もいらんわな
無理ならメソッドでもいい、みたいな
341デフォルトの名無しさん:2006/08/14(月) 20:38:20
1192作ろう鎌倉幕府
342デフォルトの名無しさん:2006/08/14(月) 21:30:08
非常に些細なことだけど、

> まつもとゆきひろ様、ぜひ導入をご一考ください。
Rubyの実装ってMatzが決定権持ってるの?
作者といえども、他の開発メンバと同等のレベルにしか思ってなかった。
343デフォルトの名無しさん:2006/08/14(月) 22:11:18
開発メンバーも明らかにここを読んでるけどな
344デフォルトの名無しさん:2006/08/14(月) 22:19:18
つべこべ言わずに、さっさとMLに投げろ
345デフォルトの名無しさん:2006/08/14(月) 22:21:11
>>343
え、そうなんですか?(ドキドキ
346デフォルトの名無しさん:2006/08/14(月) 22:21:27
実は276は開発メンバーの一人なんだけど、
いきなり提案しても無駄だから、2chでバックを固めてから提案する、
という戦略なのかも、と妄想してみる
347デフォルトの名無しさん:2006/08/14(月) 22:31:06
348デフォルトの名無しさん:2006/08/14(月) 23:04:05
>>342
> Rubyの実装ってMatzが決定権持ってるの?
そりゃもちろん。
少なくともcoreの新機能なんかは彼が「うん」といわなきゃ入らない。
349デフォルトの名無しさん:2006/08/14(月) 23:09:40
>>335
ついでに>>331のパッチもつけとけ。
350デフォルトの名無しさん:2006/08/15(火) 00:16:26
どういう返答が返ってくるか予想しようぜ
351デフォルトの名無しさん:2006/08/15(火) 00:29:46
「2ちゃんねら必死だな」
352デフォルトの名無しさん:2006/08/15(火) 00:35:25
いっそのことruby-coreに投げろ。
353デフォルトの名無しさん: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"

のようなことを行いたいです。
文字列中の[ ]の数は不定で、存在しない場合もあります。
また、[ ]内の文字には文字"["と文字"]"は使用さません。
354デフォルトの名無しさん:2006/08/15(火) 08:31:12
>353
def 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)
355デフォルトの名無しさん:2006/08/15(火) 08:39:14
>>354
全角スペースとは質が悪い。
コピペで動かなかったorz
356354:2006/08/15(火) 08:42:17
あ。|s| は使ってないから無しでも良いか。
357354:2006/08/15(火) 08:45:14
>355
ごめんごめん。
358353:2006/08/15(火) 10:06:59
>>354
ありがとうございました。
gsubでもブロック?が使えるんですね知りませんでした。
359デフォルトの名無しさん:2006/08/15(火) 14:32:01
半角スペースは表示上消えるから全角スペースを使うのはお約束なのでは。
360デフォルトの名無しさん:2006/08/15(火) 14:39:58
とりあえずは、全角スペースを警告しない>>355の環境が悪い
361デフォルトの名無しさん:2006/08/15(火) 19:10:41
>>360
コンソール上のirbで全角の警告がでるようにする設定を教えてくれ。
362デフォルトの名無しさん:2006/08/15(火) 23:24:32
だからそういう環境が悪いと。とくにirbの外側、態度なども含めて。
363デフォルトの名無しさん:2006/08/15(火) 23:46:56
curses で getstr や getch で入力待ちになってるとき
Ctrl-C を押してもすぐには終了されずに
Enter を押して入力を確定させたあとで終了します。
Ctrl-C ですぐに終了するようにできませんか?
364デフォルトの名無しさん:2006/08/15(火) 23:50:03
全角スペースを使うのは厨。
365276:2006/08/16(水) 00:54:38
遅くなったが、少し修正してruby-listに投下した
[ruby-list:42693]
あとは返答をお楽しみにってことで
366デフォルトの名無しさん:2006/08/16(水) 02:40:33
>>362
なんか嫌なことでもあったのか?
367デフォルトの名無しさん:2006/08/16(水) 03:41:33
予想通り>>230と同じ趣旨のレスが返ってるな>ML

まぁ頑張って反論してよ>>276
368デフォルトの名無しさん:2006/08/16(水) 04:44:50
>>364
む〜、どのようにすれば良いのじゃ?!
369デフォルトの名無しさん:2006/08/16(水) 08:11:32
attr_accessorのクラス変数版はありますか。

def self.foo
@@foo
end

def self.foo=(val)
@@foo = val
end

がもっと簡単にかけてほしい。
370デフォルトの名無しさん:2006/08/16(水) 08:46:10
rubyのクラス変数ってなんか変じゃね?
継承したとき。
371デフォルトの名無しさん:2006/08/16(水) 09:05:35
クラス変数なんか使うな氏ね

ってことなんじゃないの
372デフォルトの名無しさん:2006/08/16(水) 11:19:20
>>370
何を期待していて実際の動作とどう違って変だと感じるのか、
書いてくれんとrubyが変なのか>>370の頭が変なのか判断しかねる。

ちなみに1.9ではクラス変数は継承されなくなった。
373デフォルトの名無しさん:2006/08/16(水) 12:21:23
uniqよりuniq!のほうが実行速度が速いということはありますか
374デフォルトの名無しさん:2006/08/16(水) 12:37:50
>>373
あったり無かったり。色々。
375デフォルトの名無しさん:2006/08/16(水) 13:06:40
in? とか is_in? とかメソッド名にセンスがないよな。

inは動詞だと意味変わるし、is_in? なんて妙な英語使う奴の気がしれん。
せいぜい is_included? だろ。 (←釣りのつもり。念のため。)
376デフォルトの名無しさん:2006/08/16(水) 13:17:20
この意味で最初に IN を使いはじめた言語は何なんだろうね? SQL ?
377デフォルトの名無しさん:2006/08/16(水) 13:22:53
英語だと思う
378デフォルトの名無しさん:2006/08/16(水) 13:26:52
>>372
>>370 じゃないけど、漏れの場合は、
「継承しつつ、オーバーライドもできる (サブクラスで代入したらそちらが優先)」
ような動作になって欲しい。
確か Smalltalk のクラス変数はそういう感じじゃなかったっけ。

でも、
> ちなみに1.9ではクラス変数は継承されなくなった。
みたいに仕様がコロコロ変わるようだと、 >>371 が正解かも知れないなあ。
379デフォルトの名無しさん:2006/08/16(水) 13:40:22
つーか、1.9の仕様はまだ確定じゃないでしょ?
いいたいことがあるならMLで発言すれば考え直してくれるかもよ?
380デフォルトの名無しさん:2006/08/16(水) 13:59:30
>>377
ラテン語の方が古い気がする。

というのは、置いといて、Objectクラスにメソッドを追加しないと使えないんだったら
使う気にならない。in演算子がRuby自体に含まれていることが重要だと思う。
381デフォルトの名無しさん:2006/08/16(水) 14:13:28
メソッドじゃなくて、Rubyのシンタックス/制御構造レベルで糖衣してほしいってのが
願いなのに、どうしてああいう的外れな回答ばかり帰ってくるんだろう。
ま、rubikichiはそういうキャラだから仕方ないとして。
382276:2006/08/16(水) 14:47:50
>>367
[ruby-list:42704]
383デフォルトの名無しさん:2006/08/16(水) 14:58:48
まあ matz も「このリリース間際のクソ忙しい時期に in 演算子なんかにかかずらってられるか!」って気分かね?
384デフォルトの名無しさん:2006/08/16(水) 15:46:14
>>381
今までだって「こうやればいい」的な解決がほとんどだったでしょ
385デフォルトの名無しさん:2006/08/16(水) 16:20:14
>>276
スレッドが繋がるMUA使えよ
ML初心者かよ
386デフォルトの名無しさん:2006/08/16(水) 16:25:13
>>385
omoti は黙ってろよ。

wl だと繋がって見えるが。
387デフォルトの名無しさん:2006/08/16(水) 16:32:05
>>386
はぁ?誰がomotiやねん。
In-Reply-ToとかReferencesをつけるMUA使え、アホ
388デフォルトの名無しさん:2006/08/16(水) 16:35:29
Omoti並みのやつは黙ってろよ。
389デフォルトの名無しさん:2006/08/16(水) 16:37:24
多分どこかのWebメールでも使ってるんでしょう。
はっきり言って、スレッドつなげない奴は「議論する気あんの?」と思われてもしかたないぞ。
390デフォルトの名無しさん:2006/08/16(水) 16:39:47
「スレッド」が2ちゃんねる用語だと思っている馬鹿が一人いるみたいだな
391デフォルトの名無しさん:2006/08/16(水) 17:08:05
wl だと繋がってて気が付かなかったが、In-Reply-To 等は ML では礼儀だろ。
あと(笑)もどうかと。
392デフォルトの名無しさん:2006/08/16(水) 17:17:03
漢ならwを連発しないと…
393デフォルトの名無しさん:2006/08/16(水) 17:46:11
メーリングリストという古式ゆかしいコミュニケーション媒体においては

走召糸色木亥火暴

などと口走るほうが好ましいと思われます
394デフォルトの名無しさん:2006/08/16(水) 17:57:35
ガキが多いな
395デフォルトの名無しさん:2006/08/16(水) 18:01:13
夏だし
396デフォルトの名無しさん:2006/08/16(水) 18:40:49
>>395
夏に謝ってください
397デフォルトの名無しさん:2006/08/16(水) 18:50:52
>>395
そうだそうだ夏に謝れ
来年から来てくれなくなったらどうするんだ
398デフォルトの名無しさん:2006/08/16(水) 19:02:29
涼しくていいな。
399デフォルトの名無しさん:2006/08/16(水) 19:15:01
>>205
いけました!半分は、できないものだと思っていました。
ありがとうございました。
400デフォルトの名無しさん:2006/08/16(水) 20:20:25
>>369
class 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
とか
401デフォルトの名無しさん:2006/08/16(水) 20:25:45
走召糸色木亥火暴
あたりはむしろ相当オッサンだと思うが。
402デフォルトの名無しさん:2006/08/16(水) 20:34:22
走召糸色木亥火暴光軍日月ネ申女臣
403デフォルトの名無しさん:2006/08/16(水) 20:46:34
>>378
オーバーライド?
404デフォルトの名無しさん:2006/08/16(水) 22:15:46
>>403
ん?何か変ですか?
405276:2006/08/16(水) 22:55:11
>>385 >>387 >>389 >>391
ごめん、初心者です

>>392
そんな恥ずかしい書き方できるわけないwwww
406デフォルトの名無しさん:2006/08/17(木) 01:35:03
>>400
それが標準メソッドになったりしないでしょうか。
そうでないとRDocでサポートされないので、ドキュメント生成時にこまるんですよ。
つまり attr_class_accessor :foo とかしても、RDocが解釈してくれるわけじゃないので、
ドキュメントに現れないです。
逆に言えば、RDocさえ対応してくれれば標準メソッドじゃなくてもいいんですけど。
407デフォルトの名無しさん:2006/08/17(木) 02:25:22
RDocに手を入れればいいんじゃあるまいか
408デフォルトの名無しさん:2006/08/17(木) 02:34:33
RDocの--accessorオプションじゃ駄目?
409デフォルトの名無しさん:2006/08/18(金) 08:10:58
410デフォルトの名無しさん:2006/08/18(金) 20:00:54
public なインスタンス変数をいくつか用意して、その一部については
変数への代入時に特別な処理をしたい、ということを考えています。
各インスタンス変数 @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 では期待通りの実行結果になるのですが、
上から順にメソッド定義が実行されることを仮定してよいのかしら。

411デフォルトの名無しさん:2006/08/18(金) 20:20:19
attr_accessor は特別な構文ではなく、たんなるメソッドにすぎない。
で、クラス定義の内部は上から順番に実行されると考えてよい。

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 がそのクラスであることと、呼び出し制限のデフォ
> ルトが異なること以外にトップレベルとの違いはありません。クラス定義式
> 中には任意の式を書くことができクラス定義の際に実行されます。
412410:2006/08/18(金) 22:22:12
- attr_accessor は構文ではなくメソッド
- 定義(というか ruby プログラム)は上から順番に実行されることが保証されている

ということですか。
勉強になりました 、どうもありがとうございます >411 さん
413デフォルトの名無しさん:2006/08/19(土) 02:09:29
プログラミングRuby 第2版 言語編 (大型本)
ttp://www.amazon.co.jp/gp/product/4274066428/
おー
414デフォルトの名無しさん:2006/08/19(土) 03:33:16
値段安くなったね。需要が出てきたってこと?
415デフォルトの名無しさん:2006/08/19(土) 11:33:20
>>410
> この場合ですと特別な処理をしたい @foo に対して、foo=(x) を再定義している
> (ことになると理解しています)のが気になるのですが…

-wで警告が出るのを気にしないなら問題ない。
416デフォルトの名無しさん:2006/08/19(土) 11:52:07
attr_accesorでアクセサをreadonlyにすることは出来ますか?お目害しますm(_ _)m
417デフォルトの名無しさん:2006/08/19(土) 12:23:30
attr_readerを使う
418デフォルトの名無しさん:2006/08/19(土) 12:25:22
ありがとうございます。
419デフォルトの名無しさん:2006/08/19(土) 12:26:38
>>414
4部を分離、加筆ということで2冊に分けたような気がする。
併せて買うと高くなっている。
420410:2006/08/19(土) 12:42:09
> 415 さん、ありがとうございます。
-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)ではこれで期待通りの動作になりました。
421デフォルトの名無しさん:2006/08/19(土) 13:52:39
>>414
ライブラリ編の方は高いままか。
でも、これなら言語編だけでも買う気が起きるな。
さすがに、2冊同時の値段は厳しかったから。
422デフォルトの名無しさん:2006/08/19(土) 14:00:03
プログラミングRuby(゚听)イラネ
誰か欲しい人いる?
2000円くらいで売る
423デフォルトの名無しさん:2006/08/19(土) 14:32:31
Amazonなら法外な値段で売れるよ。
424デフォルトの名無しさん:2006/08/20(日) 07:53:19
Ruby本で1万越えとかあるけど、あれ売れてるの?>アマゾンの中古
425デフォルトの名無しさん:2006/08/20(日) 08:29:19
話が有名になるくらいだから昔から売れてないんじゃね
426デフォルトの名無しさん:2006/08/20(日) 08:53:43
あれは出品者が本屋か何かだからなあ
キープした本を倍くらいの高値で出品してるんだ

評価履歴見る限りではものによっては売れてるみたいだけど、
初心者向け書籍でふっかけても売れるもんかねえ
427デフォルトの名無しさん:2006/08/20(日) 17:22:16
rakeについて質問させてください

file '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

と書いてもうまくいきません
428デフォルトの名無しさん:2006/08/20(日) 17:24:25
makefileだと

%.o: %.c Makefile
 なんとかかんとか

で、できるんですが・・・
429デフォルトの名無しさん:2006/08/20(日) 17:37:15
ここのrakeの例を見ると
http://www.kuwata-lab.com/kwartz/kwartz3-users-guide.03.html
できそうではあるのですが・・・
430427:2006/08/20(日) 19:18:13
rakeのソース見てました。
def make_sources(task_name, extensions)
このあたりを見るに、ソースに対応した拡張子しか対応してなさそうです。

しかし、procを渡すと、その返却値のファイルで見てくれるので、
無理やり、

file 'hoge.o' => ['hoge.c', lambda{'Rakefile'}] do
 p "hoge.o hoge.c Rakefile"
end

とやるとうまくいきました。

普通のファイルも扱えるように、
要望だそうかな・・・って、どこに出せばいいんだろ。
431427:2006/08/20(日) 19:19:03
fileじゃなかった・・・

rule '.c' => ['.o', lambda{'Rakefile'}] do
 p "#{t.name} #{t.source} Rakefile"
end

です。すみません。
432デフォルトの名無しさん:2006/08/20(日) 22:38:47
>>430
rake-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
433patch:2006/08/20(日) 22:41:32
Index: lib/rake.rb
===================================================================
--- 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}"
434427:2006/08/20(日) 23:41:05
>>432
.cと.o逆でした。書き込むときに間違えました orz
手元では、あってます。

435デフォルトの名無しさん:2006/08/21(月) 08:25:25
Log4R::Logger.rootでとれるloggerに出力したログはどこに吐かれますか?
436デフォルトの名無しさん:2006/08/23(水) 23:15:03
CとかJavaとかの経験は普通にあるのですが、
Rubyは初めてです。
この度Ruby on Railsの学習を始めたのですが、
Rubyの仕様なのかRailsのしくみなのかよく分からずに覚えていってます。

それでRubyの基礎というか本質的な部分を勉強したいと思っています(入門ではなく)。
なんか良い書籍はありませんでしょうか?
437デフォルトの名無しさん:2006/08/23(水) 23:21:16
438デフォルトの名無しさん:2006/08/23(水) 23:50:23
なんだかんだ言って入門読んでからのほうがいいと思うんだけどなあ

いや、例のでかい本の内容がわからないからなんとも言えないけど
プログラミング慣れしてる人なら入門補助的に機能する本かもしれないし
439デフォルトの名無しさん:2006/08/23(水) 23:53:27
ヘルプでいいと思うけどなぁ
440436:2006/08/24(木) 00:13:09
みなさん返事ありがとう。
返事を待たずに比較考慮して

「オブジェクト指向スクリプト言語 Ruby」
http://www.amazon.co.jp/gp/product/4756132545

を注文しちゃった。
ちょっとミスったかな?
>>413
のが良さそうな表紙だ。
441デフォルトの名無しさん:2006/08/24(木) 00:17:03
>>440
バージョン 1.4 ベースだからかなり古いと思われ。
442デフォルトの名無しさん:2006/08/24(木) 00:18:25
ミスったと思うよ。
Ruby on Rails の本が何冊か出てるから
そっち買った方がいいと思う。

その本は Ruby を使うこと以外のこと
(言語のつくりとか)の解説も多く、
入門的に使うにはあまり向いてないよ。
443デフォルトの名無しさん:2006/08/24(木) 00:21:02
>>440
速攻でキャンセルしろ
スレ的にはもはや漬物石にしか使えない本だ

RoRはRoR本に任せるべし
Rubyを知りたい場合はたのしいRuby第2版か>>413買え
444436:2006/08/24(木) 00:37:11
まじすかー!
amazonで注文したんだけど速攻でキャンセルしようと思ったらできなかった。
返品できるみたいなんでやってみる。ごめんよamazon

>>443

RoR本は1冊もってます。RoRの作者が書いたやつ。
達人プログラマも惹かれましたが、作者の書いた本にも惹かれ
>>440を選択してしまいました。
>>413にしようかな。Ruby第2版ってなんですか?>>413とは違うの?
445444:2006/08/24(木) 00:38:09
すいません。

> Ruby第2版ってなんですか?>>413とは違うの?

ですが、たのしいRuby第2版ですね。たのしいを見逃してました。
446デフォルトの名無しさん:2006/08/24(木) 02:01:05
定数のaliasって定義できないんでしょうか?
継承を用いないで、あるクラスの別名を定義したいのですが。。。
447446:2006/08/24(木) 02:14:33
すみません。普通に新しい定数名に旧定数を代入すればよかったんですね。寝惚けてました。
448デフォルトの名無しさん:2006/08/24(木) 11:31:23
配列aとbがあります。
aから、bの要素でないものを抜き出す一番スマートな方法を教えてください
その際、計算量がどれくらいになるかも教えて欲しいです。

例)
a = [1,2,3,4,5]
b = [2,5]
のとき、
[1,3,4]が欲しい
449デフォルトの名無しさん:2006/08/24(木) 11:35:52
計算量は知らんけど a - b とか。
450デフォルトの名無しさん:2006/08/24(木) 12:28:02
引き算させるのが素直だと思うなあ
grepとかと比べてどうかとかそういう話だと思うけど
451デフォルトの名無しさん:2006/08/24(木) 14:21:46
>>449
ソースを見たところ、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
452デフォルトの名無しさん:2006/08/24(木) 14:26:16
>>451
「何を」計測・比較しようとしてるのかを詳しく
453デフォルトの名無しさん:2006/08/24(木) 15:08:24
>>452
同じ要素数でオブジェクトが違う状態で実行に掛かる時間を比較しているつもり。
File読み込んだときは要素数が違うけど。
っていうか時間って書いてあるね。
454デフォルトの名無しさん:2006/08/24(木) 15:12:02
計算量ってベンチマークとは違うと思うけどな.ソースを見たとこまでは良いが。
455デフォルトの名無しさん:2006/08/24(木) 16:19:01
>>454
そもそも、計算量はこうです、と言って出したデータじゃないから文句言われてもな。

ベンチマークはHashがhashメソッドの値を使うって書いてあったので
オブジェクト毎に違いがあるか試すためにやってみたんだけどFloatが遅すぎるのが不思議。
456デフォルトの名無しさん:2006/08/24(木) 17:15:17
>>453
計算量ってオーダーのことを聞いてると思うので、
オブジェクトの違いによる差よりも、同じ種類のオブジェクトで、
配列要素の増加に対して処理時間がどう増加するかを提示するのが良いと思われ。
457デフォルトの名無しさん:2006/08/24(木) 17:25:47
>>456
だから計算量のデータじゃないって言ってんじゃんかよ。うぜーよ。
458デフォルトの名無しさん:2006/08/24(木) 17:39:33
そんなくだらんデータで>>449にレスすんなよ、とみんな言ってるんだと思う。
459デフォルトの名無しさん:2006/08/24(木) 18:11:25
確かに、キーが Float の場合、 Hash へのデータ追加とか検索が異様に遅いみたいね。
何だろこれ?
460デフォルトの名無しさん:2006/08/24(木) 18:13:22
>>456
オーダーって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/
461デフォルトの名無しさん:2006/08/24(木) 23:42:20
>>459
[ruby-dev:29352]
462デフォルトの名無しさん:2006/08/24(木) 23:57:00
>>461
意味わかんないんだけど、何?
463デフォルトの名無しさん:2006/08/25(金) 00:16:15
>462
「ruby-devメーリングリスト過去ログの29352番嫁」
という意味だとオモ
ちなみにruby-devでぐぐればMLの過去ログ見つかる
464デフォルトの名無しさん:2006/08/25(金) 00:19:37
>>463
じゃなくてそれ読んだけどどう関係があるの?
465デフォルトの名無しさん:2006/08/25(金) 01:01:50
>>461
よくhashが衝突するので、それを回避するために、計算しているから、遅くなってる、
でよい?
466デフォルトの名無しさん:2006/08/25(金) 01:36:33
>>465
ちょっと誤解される表現かも。
「衝突を回避するための計算」のために遅いんではなく、
衝突してしまってるのでhashとしての効果が出ない状態。

「回避するための計算」が十分に回避できてないといってもいいけど。
467デフォルトの名無しさん:2006/08/25(金) 12:54:50
計算量計算量って唱えてた香具師の出した計算量マダー?
それとも宿題終わってもう見てないのか?
468デフォルトの名無しさん:2006/08/25(金) 14:01:25
FloatのHashってこれだな。

d = 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倍しているだけだな。
そりゃあ衝突もするわ。
469デフォルトの名無しさん:2006/08/25(金) 15:40:55
971っつー素数はどっから来てるんだろ?ん
971 = 2^(8+1) + 2^(8+0) + 2^(1) + 2^(0) って分解できるけど何か便利なのかな。

470デフォルトの名無しさん:2006/08/25(金) 16:01:19
適当
471デフォルトの名無しさん:2006/08/25(金) 16:08:20
そこで素数を使うと、適当に値がばらける。
また、その素数についても、下位ビットが全部消えちゃうことがないように
ある程度下位ビットが生き残るような値が望ましい。

だいたいそんなところ。
472デフォルトの名無しさん:2006/08/25(金) 16:22:18
hash = hash * 971 + c[i];

とかの間違いだよな。
473469:2006/08/25(金) 16:28:04
>>471
参考になりますた。

>>472
ビットが反転するだけで、同じことでは?
474デフォルトの名無しさん:2006/08/25(金) 16:34:16
>>472
ばらけすぎ。
それ7回繰り返したらいくらになると思う?
475デフォルトの名無しさん:2006/08/25(金) 16:43:41
>>474
ばらけたほうがいいんじゃないの?
桁が増えると乗算命令のコストが増える(実際どうか知らんけど)とか言う関係かな。

>>473
> ビットが反転するだけで、同じことでは?
よくわかんない。

なんか勘違いしてる?
476デフォルトの名無しさん:2006/08/25(金) 17:56:16
p [0,1,2,3,4,5,6,7,8,9][0..-2]  #=> [0, 1, 2, 3, 4, 5, 6, 7, 8]
となるので
(0..-2).each{|i| p i}
としてみたけど何にも表示されません。これは,なにが起こってるんですか?
477デフォルトの名無しさん:2006/08/25(金) 18:33:52
勘違いが起こってるとしか

(0..-2)じゃ配列じゃなくてRangeオブジェクトだし降順だとeach動かないぞ
478476:2006/08/25(金) 20:40:58
なるほど,降順だとeachが動かないわけですね
[0..-2]というのは配列にRangeオブジェクトを渡してるんですよね?

昨日から勉強し始めたのでまだよくわかってません
精進します
479デフォルトの名無しさん:2006/08/25(金) 21:08:18
class Foo
include 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にする良い方法はないでしょうか?
480デフォルトの名無しさん:2006/08/25(金) 21:29:33
hash.has_key() / hash.keys.include?() 使えば?
481デフォルトの名無しさん:2006/08/25(金) 21:37:04
class Foo
 def hash
  @str.hash
 end
 def eql?(other)
  @str == other.str
 end
end
みたいな
482479:2006/08/25(金) 21:49:42
ありがとうございました

>>480
hash.keys.include?でできました

>>481
こちらでもできました
でも意味が理解できません、勉強します。
483479:2006/08/25(金) 21:56:09
マニュアルのObject#eql? をみたら理解できました
hashのkeyの等しさの判断は、これを使用するのですね勉強になりました。
484デフォルトの名無しさん:2006/08/27(日) 06:12:31
標準で、簡単にオブジェクトのメソッドをProcオブジェクト化する関数は定義されていませんか?

class 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)

こんな感じのことがやりたいのですが・・・。
485デフォルトの名無しさん:2006/08/27(日) 06:21:13
(1..2006).each &a.method(:a)
486デフォルトの名無しさん:2006/08/27(日) 06:25:36
おお、それこそ、まさに願った通りのものです。
本当にありがとうございました!
487デフォルトの名無しさん:2006/08/29(火) 21:30:44
Log4R::Logger.rootでとれるloggerに出力したログはどこに吐かれますか?
488デフォルトの名無しさん:2006/08/30(水) 07:58:06
プログラミングRubyの第二版は
うさぎ本ではなくピッケル本というのが正しいのですか?
489デフォルトの名無しさん:2006/08/30(水) 13:40:18
「ピカチュウ本」というのが正しいのかどうかはよくわからない。
490デフォルトの名無しさん:2006/08/30(水) 19:54:01
>>488
The Pickax Book ツルハシ本
491デフォルトの名無しさん:2006/08/31(木) 10:10:52
>>490
"Pickaxe" じゃね?
492490:2006/08/31(木) 11:10:31
>>491
ふむ。裏表紙には
Welcome to the PickAxe (named for the tool on the cover).
と書いてあった。Aも大文字。
493デフォルトの名無しさん:2006/08/31(木) 22:18:37
二進表示をprintf,sprintfを使わず、正の整数を入力して
その二進表示を出力するプログラムを作成しよ。
ただし整数から二進表示文字列を作るメソッドi2bを
作成してそれを呼び出すように書くこと。

出来る人誰かいませんか?できるだけ簡単なプログラムでお願いします。
Ruby初心者なのでわからなくて困ってます。
494デフォルトの名無しさん:2006/08/31(木) 22:25:01
この期に及んでマルチとは恐れ入った
495デフォルトの名無しさん:2006/08/31(木) 22:26:54
どうせ宿題スレにブン投げる気だったんだし手間省けていいじゃん
496デフォルトの名無しさん:2006/08/31(木) 22:27:14
プログラムというよりは数学の問題に近いね
497デフォルトの名無しさん:2006/08/31(木) 22:28:11
マルチってなんですか?
498デフォルトの名無しさん:2006/08/31(木) 22:45:57
耳に変な機械をつけた小便小娘型ロボット
499デフォルトの名無しさん:2006/08/31(木) 22:59:06
変換テーブル作ればいいよ。高速だから
500デフォルトの名無しさん:2006/08/31(木) 23:14:27
IKEAに変換テーブルあったよ
501デフォルトの名無しさん:2006/08/31(木) 23:21:14
>>493 しょうがないなぁ、今回だけだぞ。

def i2b(i)
i.to_s.unpack("b*)
end

くれぐれも他の奴は俺みたいに親切にならないように。
こんな簡単な問題なんだから、間違いを指摘してあげるのもナシで。

502デフォルトの名無しさん:2006/08/31(木) 23:21:47
" がひとつぬけてた... orz
def i2b(i)
i.to_s.unpack("b*")
end

503デフォルトの名無しさん:2006/08/31(木) 23:37:06
>>501>>502
親切にありがとうございます。
助かりました。
504デフォルトの名無しさん:2006/08/31(木) 23:38:43
i.to_s.unpack("b*") 使わず二進表記を出す方法は?
505デフォルトの名無しさん:2006/08/31(木) 23:41:00
+
506デフォルトの名無しさん:2006/08/31(木) 23:41:55
"%b"%i
507デフォルトの名無しさん:2006/08/31(木) 23:44:16
ほ〜
508デフォルトの名無しさん:2006/09/01(金) 00:12:35
>>501
そこで >>502 みたいなレスしなきゃ良い回答だと思ったのに。
509デフォルトの名無しさん:2006/09/01(金) 15:02:09
perl でいう use encoding 'shiftjis'; みたいなものはありますか。
ソースコード・標準入出力はShift-JISで、内部演算はUTF-8みたいな感じで。
510デフォルトの名無しさん:2006/09/01(金) 15:06:17
>>509
ないよ。
諦めな。
511デフォルトの名無しさん:2006/09/01(金) 15:16:21
>>510
サンクス。
512デフォルトの名無しさん:2006/09/01(金) 15:38:35
こんな本が出てるな。 「O'Reilly 初めてのプログラミング」
ttp://www.oreilly.co.jp/books/4873112923/
さっきちょっと見てきたけど、とてつもない初心者に勧めるにはいいんじゃないかな?
513デフォルトの名無しさん: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は内部コードというものがないのでソースコード読むときに考慮されるのとメソッドが何個か考慮するようになるくらいという認識だが。
あんまり深く考えたことない。
514デフォルトの名無しさん:2006/09/01(金) 18:14:00
un*x の file コマンドのように拡張子によらず mimetype を判別することは可能でしょうか?
成り済ましファイルの判定に使いたいと考えています。
ご存知の方おられましたら、教えてください。
環境は 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%
515デフォルトの名無しさん:2006/09/01(金) 18:43:54
>>514
Windows で使えるかわからないけど、このへんとか?
http://raa.ruby-lang.org/project/filemagic/
516デフォルトの名無しさん:2006/09/01(金) 18:49:31
unix の file コマンドは、ファイルの冒頭部分の数バイトを読んで判定して
いる。で、その判定ルールそのものは 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
517デフォルトの名無しさん:2006/09/01(金) 18:59:00
>515>516
ありがとうございます!
残念ながら >515 のものは magic.lib を用いるので
素のwindows ではだめなようです。

windowsでは magic がないので、そもそもmagic.lib のロジックから
作らないとだめみたいですね。cygwinやSFUで動くかも…

ともあれ参考になりました。ありがとうございました。
518デフォルトの名無しさん:2006/09/01(金) 19:56:09
>>513
ソースをUTF-8で書いて、$KCODE = "UTF8" にすれば一応、文字処理はクリアできそう
ですね。

携帯サイトのCGIなので、標準出力はShift-JISにしたいのですが、kconv を使って、
UTF-8 → Shift-JIS に変換して出力するものでしょうか?

それとももっと違う方法を取るものなのでしょうか?
519デフォルトの名無しさん:2006/09/01(金) 22:26:13
>>518
基本的にはそういうこと。
初期化の順番を考えると#!行で-Kuを指定した方が良い。
フレームワークとかテンプレートエンジンでコード変換を吸収してくれるならそれを使うといいと思うけど寡聞にして知らない。
520デフォルトの名無しさん:2006/09/01(金) 22:50:25
>>509
encoding.pm は非推奨
encoding.pm は非推奨
encoding.pm は非推奨
521デフォルトの名無しさん:2006/09/01(金) 23:34:00
>>519
サンクス
522デフォルトの名無しさん:2006/09/01(金) 23:58:48
Ruby+AjaxなWEBシステムはリッチクライアントと呼べますか?
523デフォルトの名無しさん:2006/09/02(土) 00:06:34
Delphi+VCLで作ったWindowsアプリはリッチクライアントと呼べますか?
って聞いているもんじゃね?
つくりによるとしか
524デフォルトの名無しさん:2006/09/02(土) 07:58:02
gonzuiを使おうと思ってruby1.9をダウンロードしようとしたけど、
やり方がわかりません。
http://www.ruby-lang.org/ja/20020106.html
を読んで
cvs -z4 -d :pserver:[email protected]:/src co ruby
をしてみたけど、これって1.9ではないですよね。
どなたかruby1.9のダウンロード方法教えてください。
525デフォルトの名無しさん:2006/09/02(土) 09:05:46
初心者は1.8。インストーラ付きの物を。
Windows で Ruby を使うなら ActiveScriptRuby など。
526デフォルトの名無しさん:2006/09/02(土) 09:16:43
WinならRubyInstallerや↑のASR
LinuxならRPM/debなど。

ソースからのビルドは慣れた人や
インストーラの存在しない環境向け。

あと勘違いしてるようだが言語の場合
必ずしも最新版が良い訳ではない。
基本的に安定版と呼ばれるものを使うべし。
527デフォルトの名無しさん:2006/09/02(土) 09:22:05
…と思ったらgonzuiが1.9要求するのか。
んー……ちと帰宅したら試してみる。
528524:2006/09/02(土) 11:56:40
自己レス。
>>524のやり方でダウンロードしたものが1.9のようです。
version.h見たら1.9.0と書いてありました。
お騒がせして申し訳ない。
529デフォルトの名無しさん:2006/09/02(土) 20:00:45
Rakefile書いてて思ったんですが、

  ↓ruleと(の間にスペースが入っている
rule (/#{DEST_DIR}/ => lambda{|f| File.basename f }) do |t|
 p t.name
end

って書くと、
warning: don't put space before argument parentheses
って、言われるのですが、これって何でですノン?
スペースなくすと、大丈夫です。
文法上、あいまいさが出るんですか?
530デフォルトの名無しさん:2006/09/02(土) 21:03:40
関数の定義の前で関数を使うことは可能ですか?

a = func1()
def func1
 return 1
end

みたいな使い方をしたい。
理由は、関数定義がファイルの先頭にあると、読みにくいからです
531デフォルトの名無しさん:2006/09/02(土) 21:16:53
>>529
Rubyが関数呼び出しの際カッコを省略できるのは知ってる?
foo (a + b + c) * x
どうなるかぱっと見わかりづらくね?

>>530
無理。
関数定義と実行ファイルを別にすりゃいいだけじゃないか。
末尾が実行開始位置だと読みにくいくらい既に長くなってるってことでしょ?
532デフォルトの名無しさん:2006/09/03(日) 00:00:01
CGIプログラミングで、フォームの値をあらかじめ入れ終わってからプログラム本体を実行させたいのですが

「フォームの値が入っているものとしてローカルで実験」の項がWeb上の最新マニュアルから消えているんですが
これが出来るほかの方法知りませんか?
533デフォルトの名無しさん:2006/09/03(日) 00:07:22
534デフォルトの名無しさん:2006/09/03(日) 00:14:13
>>533
回答ありがとうございます

…でも、ごめんなさい現在ruby1.8.4(Winバイナリ)を使っているのですが、該当のサンプルコードを丸々コピペでも
「do not use CGI_PARAMS and CGI_COOKIES」と表示されて。
恐らく、現在のバージョンでは消されてしまったのではないかと思うのです、わかりませんが…。
535デフォルトの名無しさん:2006/09/03(日) 00:19:00
ワンライナーで、ファイルの中身を読み込みたいとき
open("hoge.txt").read
ってやっちゃてよいものなんでしょうか。
close呼ばれる?
536デフォルトの名無しさん:2006/09/03(日) 00:25:29
ここみると、やらない方が無難ですね
http://www.ruby-lang.org/ja/man/?cmd=view;name=trap%3A%3AIO

IO.read "hoge.txt"

とやればいいようですね。
537デフォルトの名無しさん:2006/09/03(日) 01:06:19
>>535
普通は {} を使ってブロック内で処理させるな。(ただし、普通=俺の普通)
538デフォルトの名無しさん:2006/09/03(日) 02:05:40
>>535
プロセスが終わるときには閉じるでしょう。それで大丈夫なら大丈夫じゃないか。
でも、IO.readで代用できるんだったらそっちのほうが安全で楽かと。
539デフォルトの名無しさん:2006/09/03(日) 04:15:02
>>530
def main
a = func1()
end
def func1
 return 1
end
main

みたいな方法はどう?
540デフォルトの名無しさん:2006/09/03(日) 10:35:52
>>529
>文法上、あいまいさが出るんですか?
その通り。関数のカッコの前にスペースを入れられるようにすると、>>531のように、
(foo(a+b+c)) * x
foo((a+b+c) * x)
の2通りに解釈できてしまう。
541デフォルトの名無しさん:2006/09/03(日) 13:59:16
>>540
ああ、そうっかー。カッコなしでも関数呼べますもんね
542デフォルトの名無しさん:2006/09/04(月) 00:34:13
ruby便利ですね。
rubyのshellってないんですかね。
543デフォルトの名無しさん:2006/09/04(月) 01:00:52
544デフォルトの名無しさん:2006/09/04(月) 01:14:59
るびきちプロダクトは使わない主義
545デフォルトの名無しさん:2006/09/04(月) 01:17:12
>>544
なんで?
546デフォルトの名無しさん:2006/09/04(月) 01:35:31
>>543
emacsでしか使えないか・・・
547デフォルトの名無しさん:2006/09/04(月) 12:42:50
これだけメソッドが揃ってるのに [1,2,3].sum -> 6 が無いのは不思議だと思うんですが
548デフォルトの名無しさん:2006/09/04(月) 12:49:49
>>547
そんなアドホックなメソッドいらん。inject使うか自分で定義すれ。
549デフォルトの名無しさん:2006/09/04(月) 18:38:33
>>547-548
俺は定義してるな
既存クラスへのメソッド追加は結構やる
大きいコードではやりたくないがな
550デフォルトの名無しさん:2006/09/04(月) 19:26:11
そういう、標準で定義される必要はないけど、
結構使うだろ? というようなメソッドを
いろいろ教えて欲しいなと思うのです。

まあ、「そんなの使わねぇよ、バカ」とか言われそうなので
敷居高そうですけど。
551デフォルトの名無しさん:2006/09/04(月) 19:50:41
[1,2,3,4,5,7,8,9,10,13,14,15,19].to_ranges
=>[1..5,7..10,13..15,19]

とか使ってます。たまにだけど(こういうこと?>>550)
552デフォルトの名無しさん:2006/09/04(月) 20:13:39
すみませんが、質問です。
ftp://ftp.ruby-lang.org/pub/ruby/snapshot.tar.gz
のRubyのMakefileで、アンインストールを行うターゲットはどれなのでしょう?
uninstallという名のターゲットは無いようなので。
553デフォルトの名無しさん:2006/09/04(月) 20:21:41
>>551
そういうの。
というか、ほんとはその中身が知りたい。
どうやんの、それ。

あと、Enumerable#max も割とアドホックな気がする。
554デフォルトの名無しさん:2006/09/04(月) 20:44:25
>>553

class 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

いらない?あっそ
555デフォルトの名無しさん:2006/09/04(月) 20:47:27
>>552
無かったはず。
たしか、インストールされたファイルのリストがどっかに出力されてるから
それを元にしてインストールされたファイルを全て削除すればおしまい。
556デフォルトの名無しさん:2006/09/04(月) 20:51:25
Array#each_permutation や Array#suffle は20回以上書いた気がする。
こういうのって自分用のライブラリに纏めて使ってる人はいるかな。
557552:2006/09/04(月) 20:53:28
>>555
了解です。ありがとうございました。ちょっと落胆。
558デフォルトの名無しさん:2006/09/04(月) 21:19:27
>>556
shuffleは使うよねー
こういうのはActiveSupportでまとめてくれるとうれC
559デフォルトの名無しさん:2006/09/04(月) 21:23:15
>>558
てゆか、プ板でまとめないか?
560デフォルトの名無しさん:2006/09/04(月) 21:30:10
数値にカンマ付けするのもしょっちゅう使うけど、
今は標準でサポートされたんだっけ?
561デフォルトの名無しさん:2006/09/04(月) 21:31:54
>>559
プ板って初めて見た。
ム板、マ板ならよく見るけど。
562デフォルトの名無しさん:2006/09/04(月) 21:48:47
>>554
俺の場合、
Time#to_sで、月が英語表記なのがいやで(=読めない)
"%Y/%m/%d %H:%M:%S"を
俺用to_sとして使ってます。
(実際はメソッド名変えてます。)

ええ、ばかですよ。

あと、>>554氏のやつで
引数formatを破壊的メソッドgsub!で書き換えちゃうのって
まずくない?
(意図的だったらスミマセン)

こういう時、俺の場合、dupで複製してから、
複製に対してごにょごにょするんだけども、
そういうのって一般的なのでしょうか?
563デフォルトの名無しさん:2006/09/04(月) 21:51:38
>>559
最終的にcookbookみたいなレベルのになるのでもいいから見てみたい
564デフォルトの名無しさん:2006/09/04(月) 22:17:46
>>558
Array#shuffleとArray#shuffle!は先週1.9に追加された。
565デフォルトの名無しさん:2006/09/04(月) 22:18:04
>>559
wiki立てようか?
566デフォルトの名無しさん:2006/09/04(月) 22:25:41
567デフォルトの名無しさん:2006/09/04(月) 22:50:21
>>564
まじっすか!
568デフォルトの名無しさん:2006/09/04(月) 22:55:57
ちょっと、質問。
Rubyって関数内関数って使える?
569デフォルトの名無しさん:2006/09/04(月) 22:57:14
使えない。
570デフォルトの名無しさん:2006/09/04(月) 23:17:03
あれ?irbだと使えるな・・・変な挙動だが。
571デフォルトの名無しさん:2006/09/04(月) 23:22:35
メソッドの中に def 宣言を置くのは、文法的には valid だよ。
そのメソッドを一回呼び出すと、内部で宣言したメソッドが当該クラスに追加
される、という挙動になる。ので、外からも呼べるようになるので、メソッド
内メソッドではないというだけ。

ああいうのが欲しくなったときは、仕方ないので lambda とかを使っている。
572552:2006/09/04(月) 23:31:25
すみません、先ほどのものですが、相談させていただきたいことがございます。
1.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が呼ばれるようにはならないでしょうか?

恥ずかしい相談で恐縮ですが、どうかアドバイスをお願いします。
573デフォルトの名無しさん:2006/09/04(月) 23:41:09
>>571
サンクス
ほんとだ。関数内関数にはならないけど、宣言はできるのか


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
574デフォルトの名無しさん:2006/09/04(月) 23:41:54
hoge:
hoge
moge
moge:
moge
hoge.moge:
hoge
moge
moge

ん?mogeが再定義できていないのは?
575デフォルトの名無しさん:2006/09/04(月) 23:50:05
すいませんが、教えてください。
yieldの使い方がリファレンスを読んでも理解できません。
Procは分かるのですが、どう違う物なんでしょうか。

なにか分かりやすいページとかあったら教えてください。
576デフォルトの名無しさん:2006/09/04(月) 23:52:02
1.9Betaなんてものはないが。

> ・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
でインストール先を指定できるので、なにがインストールされるか
確認してみればいい。
577デフォルトの名無しさん:2006/09/04(月) 23:52:51
576は>>572へ。
578572:2006/09/04(月) 23:57:04
>>576
ありがとうございます。明日、試してみます。
579デフォルトの名無しさん:2006/09/05(火) 00:04:30
今度から 1.9 は ./configure --program-suffix=19 でインスコしような。
580573:2006/09/05(火) 00:12:42
>>573についかして、

puts "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に登録されているんですけど、よいのですか?
581デフォルトの名無しさん:2006/09/05(火) 01:30:40
methodsの代わりにprivate_methodsでどう?
582デフォルトの名無しさん:2006/09/05(火) 01:45:51
def hoge
def 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 も呼べる罠。
583559:2006/09/05(火) 02:25:23
>>565
でも、スレ違いっぽい気もする。
本スレいくか?それとも新スレ立てるか?
584559:2006/09/05(火) 02:32:02
>>573
"new moge" は全然newじゃない。

puts "moge:"
moge

puts "hoge:"
hoge

puts "moge:"
moge

の結果

moge:
new moge
hoge:
hoge
moge
moge:
moge
585デフォルトの名無しさん:2006/09/05(火) 06:56:13
>>583
標準登載するまでもないかもしれないが、
良く使うメソッドコード集ってすげぇ欲しいわw
できれば、ライセンスフリーで使えることを謳っておいてくれると嬉しい。
2ch はライセンス的にダメなので wiki が良いな。
586デフォルトの名無しさん:2006/09/05(火) 10:34:49
環境:ruby 1.8.4 (2005-12-24) [i386-mswin32]
WEBrick使ってるんですけど、特定のホストで例外が起きます。
調べてみると、ホスト名の認識がまずいようで、

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にしたがってるんだと思いますが
どうにかして上手く回避する方法はないでしょうか?

たぶん、アンダースコアを含めれば上手くいくんでしょうけど、
この手の問題って、過去に問題になってる気がするので、賢い方法があったら教えてください
587572:2006/09/05(火) 12:22:00
すみません、Ruby1.9の削除について質問した者です。本日、社の者に問い合
わせたところ、1.8はソースではなくRedHat提供のRPM(バイナリ)パッケージ
からインストールしたということでした。

>>576氏の
>1.8もソースからインストールしていたということだな。
という言葉と矛盾してしまい、少々当惑しております。もしかしたら、他の方
法で1.8をインストールしようとした人がいたのかも知れません。

ということで、追加で質問させていただきたいのですが、

RedHat提供のRPM(バイナリ)パッケージでRuby1.8を再インストールしようと
思っているのですが、>>576で教えていただいた手順の実行後、RPMのインストー
ルをすればよいのでしょうか?

何度もすみませんが、よろしくお願いします。
588デフォルトの名無しさん:2006/09/05(火) 12:58:45
>>586
俺もいつも困ってるんだが、なんかうまい方法ないかねえ。
589デフォルトの名無しさん:2006/09/05(火) 13:10:33
>>588
本スレにぶん投げるといいことあるかも
590デフォルトの名無しさん:2006/09/05(火) 13:27:47
>>586
関連しそうなRFC1738, 2396, 2616を眺めてみたけどアンダースコアは使えるよ。
というかそれ全然RFCに従ってないと思う、WEBrick使って無いんで知らないけど
ttp://ja.wikipedia.org/wiki/%E3%83%AB%E3%83%93%E3%83%BC
とかも失敗しない?
591デフォルトの名無しさん:2006/09/05(火) 13:37:09
>>586
ホスト名
592デフォルトの名無しさん:2006/09/05(火) 13:54:36
>>590
さすがに ttp:// に対応してるわけはなかろう。
593デフォルトの名無しさん:2006/09/05(火) 13:57:39
>>586
漏れは、アンダースコアを含んだパターンも解釈するように URL::parse を修正して使ってる。
594デフォルトの名無しさん:2006/09/05(火) 14:14:08
>>592
あ、ごめん癖でh抜いちゃったけど要はURLエスケープした文字列含んでるとって事。
595デフォルトの名無しさん:2006/09/05(火) 14:23:21
>>594
URL エスケープしててもいけるよん。試してみた?
596デフォルトの名無しさん:2006/09/05(火) 15:08:40
話を理解してない奴が一人いるっぽいのはおいといて、
URI::parseの制限をゆるくするオプションかなんかは欲しい。
WEBrickでproxy作ったりするとかなり迷惑する。
597デフォルトの名無しさん:2006/09/05(火) 16:01:20
どこをどの程度緩くするかって利用のケースによって変わってきそうなので、
オプションで指定といっても難しそうな気はするね。

uri = URI::Parser::new(:host=>host_pattern, :path=>path_pattern, :fragment=>fragment_pattern).parse(url)
みたいにカスタマイズできると良いのかなあ?
598デフォルトの名無しさん:2006/09/05(火) 16:28:22
すみませんが質問です。
日時をあらわす文字列と、そのフォーマットを表す文字列を指定して、
Timeオブジェクトを生成するにはどうしたら良いでしょうか?
Rubyは1.8.1です。
599デフォルトの名無しさん:2006/09/05(火) 16:36:20
Timeオブジェクトを生成する話と、それをフォーマットして出力する話と混同してない?
Time#strftimeを参照のこと。
600デフォルトの名無しさん:2006/09/05(火) 16:40:36
Array#shuffleを自分で実装するとした場合、これよりシンプルなのある?
def shuffle(ary)
ary.map{|x| [rand,x]}.sort.map{|x| x[1]}
end
601598:2006/09/05(火) 16:49:09
>>599
すみませんが、混同しているわけではありません。
やりたいことは、Time#strftime の逆です。
文字列から、Timeオブジェクトを作りたいのです。
602デフォルトの名無しさん:2006/09/05(火) 16:55:32
>>598
こんなのとか? 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))
603599:2006/09/05(火) 17:04:33
>>601
ふんじゃ、require 'time'だな。 添付ライブラリの。
604598:2006/09/05(火) 17:08:28
>>602
大変ありがとうございます。うまく行きました!

>>603
Time::strptime は1.9からのようです。
605デフォルトの名無しさん:2006/09/05(火) 17:12:04
乗り遅れたけど、正規表現でもいいなら。
Date必要なし。
Time.local(*"2006-09-05 17:00:00".match(/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/).captures)
606デフォルトの名無しさん:2006/09/05(火) 17:20:08
>>600
MLか日記で読んだやつ。
ary.sort_by{0.5<=>rand}
shuffle!するにはreplaceしてくれ。

短くしたいなら
ary.sort{rand(3)-1} #0..2を返すので-1で-1..1
とかだけどsort_byより遅いかも。
607デフォルトの名無しさん:2006/09/05(火) 17:25:18
ttp://phinloda.jugem.cc/?eid=487
の問題は、イテレータで書くと綺麗に書けそうな予感がしますが
(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
608デフォルトの名無しさん:2006/09/05(火) 17:26:24
>>606
それならarr.sort_by{rand}でもいける

下の方法は偏るよ
609デフォルトの名無しさん:2006/09/05(火) 18:10:52
>>607
やってみた。
ルビーらしいかどうかはわからんけど。

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
610デフォルトの名無しさん:2006/09/05(火) 18:21:00
>>565
立てて欲しいな。
611デフォルトの名無しさん:2006/09/05(火) 19:07:47
>>608
偏るね。
低脳だった。
忘れてくれ。
612デフォルトの名無しさん:2006/09/05(火) 19:45:01
お詫びに速度を測ってみた@ruby-1.8.5。

irb(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)

整数値作ってからのほうが早いがもっと僅差だと思っていた。勉強になった。
613600:2006/09/05(火) 20:37:04
すごく勉強になりました。ありがとうございました。
614デフォルトの名無しさん:2006/09/05(火) 20:41:53
sort_by{0.5<=>rand} は偏らない?
Float#<=> は 0, 1, -1 しか返さなくない?
615デフォルトの名無しさん:2006/09/05(火) 21:58:53
>>614
偏る。やっぱアホだったorz
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/39588
やるならsort_by{rand(ary.length)}かな。
でも整数だと偏るという話もあるみたい。
616デフォルトの名無しさん:2006/09/05(火) 22:02:14
あと最近のだとこのスレッド。
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/40891
617デフォルトの名無しさん:2006/09/05(火) 22:22:18
>>587
> RedHat提供のRPM(バイナリ)パッケージでRuby1.8を再インストールしようと
> 思っているのですが、>>576で教えていただいた手順の実行後、RPMのインストー
> ルをすればよいのでしょうか?
再インストールしなくても、prefixがわかれてるようだからRPMのほうはその
まま残ってるだろ。

/usr/local/binが/usr/binよりもPATHの先にセットされてるんで
/usr/local/bin/rubyが使われてるだけだと思う。1.9を消すだけで十分なはず。

PATHの順序を変えてためしてみればいい。
618デフォルトの名無しさん:2006/09/05(火) 22:30:09
やっぱりArray#shuffleは実装された方がいいような、教材としては実装されないほうがいいような。
619デフォルトの名無しさん:2006/09/06(水) 00:19:07
俺のshuffle

class Array
def shuffle
r=[]
while i=slice!(rand(size)) do
r.push i
end
return r
end
def shuffle!
replace shuffle
end
end
620デフォルトの名無しさん:2006/09/06(水) 00:20:23
あw
御免これじゃshuffleが元データ破壊しちまうw
書き直すわw
621619:2006/09/06(水) 00:24:12
書き直し。shuffle!を基本に。

class Array
def shuffle!
r=[]
while i=slice!(rand(size)) do
r.push i
end
replace r
end
def shuffle
dup.shuffle!
end
end
622デフォルトの名無しさん:2006/09/06(水) 00:54:34
どうしても言いたいので言ってしまおう
おーさまのみみはろばのみみー(メル欄)
623デフォルトの名無しさん:2006/09/06(水) 01:15:52
ID無し板って王ロバするにはちょうど良いよね
624デフォルトの名無しさん:2006/09/06(水) 01:21:12
arr.sort_by{rand} はきれいだな。
bangなメソッドも似たような感じでかけないかな。
625デフォルトの名無しさん:2006/09/06(水) 01:21:29
俺はiPodかな。持ってるのがshuffle
無駄な電池消費しないのは良いが流し聴く以外には向かない
626デフォルトの名無しさん:2006/09/06(水) 06:07:44
>>550
こういうのがあるけど。
http://facets.rubyforge.org/
 Ruby Facetsは単一の大きなライブラリであり、コアとなる拡張メソッドと、標準ライブラリを含んでいます。

Array#shuffleだけでなく、String#shuffleやHash#shuffleもある。
ソース付きで見られるから勉強にも良い。
627デフォルトの名無しさん:2006/09/06(水) 06:58:41
JavaのString#substring(int index)に相当するのは、Rubyでは何になりますか。
やりたいのは、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番目以降の部分文字列」をとってくるスマートな方法をお願いします。
628デフォルトの名無しさん:2006/09/06(水) 07:31:32
s = "abcdefg"
puts s[3..s.size] #=> "defg"

でダメ?
629デフォルトの名無しさん:2006/09/06(水) 07:40:58
s = "0123456"
puts s[3..-1] #=> "3456"

もあり。
630デフォルトの名無しさん:2006/09/06(水) 11:33:28
>>622
うるさいよ童貞
631デフォルトの名無しさん:2006/09/06(水) 13:16:03
すみません、Rubyにはコンソール環境のヘルプはないのでしょうか?
Pythonのhelp()はとても便利なのですが、あんな感じのものが、irbから対話
的に呼び出せたり、といったものはないのでしょうか?
632デフォルトの名無しさん:2006/09/06(水) 16:38:17
ary.sort_by{0.5<=>rand}
いまひとつこれのしくみがよくわからない。
2つの要素を比較するときの比較結果がランダムになるんだよね。
ソートが終了することは保証されるの?
633デフォルトの名無しさん:2006/09/06(水) 16:47:02
>>632
どうでもいいけど、それ sort_by の使い方を勘違いしてるでしょ。 >>608 が正しい。
634デフォルトの名無しさん:2006/09/06(水) 19:53:52
>>631
Pythonのhelp()はどんなのかしらないんだけど、
ttp://rubyist.g.hatena.ne.jp/yamaz/20060831 はどうよ。
635631:2006/09/06(水) 20:44:11
>>634
ありがとうございます。試してみます。
636デフォルトの名無しさん:2006/09/06(水) 21:32:16
スクリプトの2重起動を防ぐ方法はありますか?
637デフォルトの名無しさん:2006/09/06(水) 22:01:13
すみません、教えてください。
RDEを使って勉強を始めましたが、複数行をコメントアウトしたり復帰したりする方法がわかりません。
RDEマニュアルを見てみましたが、特にふれられてないような気がします。メニューをみても(複数行のインデントはありましたが)コメントに関するコマンドはなかった気がします。
どなたか教えていただけませんでしょうか。
お願いいたします。
638デフォルトの名無しさん:2006/09/06(水) 22:05:58
>>636
・他の同プロセスが動いてないことを確認してから起動させる。
・特定のポートを開くとか、なにかをロックしてから起動させる。

・起動したらまずそのスクリプト自身を削除するようにする。
みたいなのはダメで、厳密には外部からの制御が必須。
639デフォルトの名無しさん:2006/09/06(水) 22:18:41
なるほど
windowsみたいに言語でサポートされてる訳ではないんですね
640デフォルトの名無しさん:2006/09/06(水) 22:18:46
>>636
DBのロックやファイルのロックを使う。
具体的にはこんな感じ。(ファイルロックの例)

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
641デフォルトの名無しさん:2006/09/06(水) 22:21:38
>>640
その例の応用だとファイルのロックを外さずに終了しちゃう場合も出てきそうだな。
642デフォルトの名無しさん:2006/09/06(水) 22:22:47
>>639
プロセスの監視を使う方法もあるが
スクリプト言語の場合
二重起動してるのはインタプリタ本体。

それらが同じスクリプトを実行してるのかどうかまでは
OSからは判らん話だろ。
だからスクリプト側でやるしかない。
643デフォルトの名無しさん:2006/09/06(水) 22:24:33
>>641
rubyインタプリタが終了したらロックは外れる。
気持ち悪いならもっと作り込めば良いが。
644デフォルトの名無しさん:2006/09/06(水) 22:35:15
>>642
なんでOSが出てくるの?
645デフォルトの名無しさん:2006/09/06(水) 22:37:54
>>643
そりゃ嘘だな。killしてみた?
646デフォルトの名無しさん:2006/09/06(水) 23:31:33
>>637
http://rubyde.sourceforge.net/hiki/ja/Sample%2Bscripts.html あたりに
こっそり書いてあったりします。
647デフォルトの名無しさん:2006/09/07(木) 02:24:01
>>645
それは特殊な場合だろ。
基本的にはロックがちゃんとはずれるように作るんだよ。
正常系のテストをちゃんとしとけ。
その上で、ロックファイルのタイムスタンプを見て、時間が掛かりすぎてると思うならロックファイル消してやりなおすなりすりゃいいだろ。
やり直していいかどうかは、何をどういう仕様でやるか次第だが。
648デフォルトの名無しさん:2006/09/07(木) 03:14:14
>>641
でしたら、もっと良い例をお願いしても構いませんでしょうか?
649デフォルトの名無しさん:2006/09/07(木) 06:07:24
>>628,629
thanks
650641:2006/09/07(木) 14:19:07
>>648
自分だったらRinda使ってtuple space上にLockを実現します。
651デフォルトの名無しさん:2006/09/07(木) 17:34:54
Debian 上で

$ /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 の間で
このあたりのバグフィックスがなされているのでしょうか、あるいは私の環境が変なだけ?
652デフォルトの名無しさん:2006/09/07(木) 17:43:39
cygwinでRubyを使ってるんですが、コンソールを出さないでバックグラウンドでスクリプトを
動かすことは可能ですか?
cronはなしでお願いします
653デフォルトの名無しさん:2006/09/07(木) 19:28:54
>>652
rubyscript2exe で --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経由でスクリプト起動してプロンプト非表示にするオプション指定するとか
俺はこんな感じでやってる
654デフォルトの名無しさん:2006/09/07(木) 21:05:24
参考になります
655デフォルトの名無しさん:2006/09/07(木) 22:24:46
>>647
>>640はflockだからcloseしたら解除される。
プロセスが終了すればfdはcloseされる。
656デフォルトの名無しさん:2006/09/08(金) 01:21:42
>>652
俺には質問の意味がわからない・・・
「コンソールを出す」起動方法ってどんなの?
657デフォルトの名無しさん:2006/09/08(金) 01:31:04
関連付けしてダブルクリックとかじゃね?
つか、>>656 は元から端末が出してるだろ。
658デフォルトの名無しさん:2006/09/08(金) 01:56:48
いちいちscriptを変換するより、素直にrubyw.exeを使えばいいんじゃあるまいか。
659デフォルトの名無しさん:2006/09/08(金) 05:35:03
cygwin版てrubywあるの?
あるならrubywに関連付けれ
660デフォルトの名無しさん:2006/09/08(金) 09:05:09
cygwin使いながらコンソール嫌ってどういうことよ
661デフォルトの名無しさん:2006/09/08(金) 09:53:25
>>660はわかってない
662デフォルトの名無しさん:2006/09/08(金) 12:38:14
>>659
ある。
663デフォルトの名無しさん:2006/09/08(金) 12:59:14
すみませんが、質問です。
Rubyのソースに、関数やクラスの説明のコメントを付けたいのですが、
JavaDocのような標準的な形式はないのでしょうか?
参考になるようなコードやWebページをご紹介いただければ、いっそう助かります。
664デフォルトの名無しさん:2006/09/08(金) 13:00:39
RDocでぐぐる。
665663:2006/09/08(金) 13:05:50
こんなものが見つかってしまったのですが…。

[ネタ] Rubyってドキュメントあるの?樹形図
http://d.hatena.ne.jp/kzys/20050314/p1
666デフォルトの名無しさん:2006/09/08(金) 15:16:38
RDEというエディタと、ruby 1.8.4 (2005-12-24) [i386-mswin32] を使用しています。
デバッグで、ブレイクポイントまで実行してからステップを実行すると、また最初からやり直します。
どのようにすれば正常に動くようになるのでしょうか?
667デフォルトの名無しさん:2006/09/08(金) 21:17:58
$debugger_restart = false
668デフォルトの名無しさん:2006/09/08(金) 23:11:06
>>663
http://www.ruby-doc.org/core/
俺はRDoc調べつつ、上記のURLと*.rbのソースを比較して覚えたな。
669デフォルトの名無しさん:2006/09/09(土) 00:32:25
ASR使ってます。
ruby.exeにファイル名を渡した時
自動でワイルドカードが展開されますが
これを止める方法はありますか?
670デフォルトの名無しさん:2006/09/09(土) 00:56:17
>669
ワイルドカードを含む引数を' (シングルクオート)でくくる。
……って話ではない?
671デフォルトの名無しさん:2006/09/09(土) 08:56:17
http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby%A4%CE%B5%AF%C6%B0

標準のシェルがワイルドカードを展開しない環境 (Win32)では、
Ruby インタプリタが自前でワイルドカードを展開して ARGV に設定します。
この場合ワイルドカードとして `*', `?', `[]', `**/' が使用できます
(Dir.glob と異なり `{..}' は使えません)。
Win32 環境で、ワイルドカード展開を抑止したい場合は引数を
シングルクォート(') で括ります。
672デフォルトの名無しさん:2006/09/09(土) 12:36:02
rubyでjarみたいが概念ないの?
673デフォルトの名無しさん:2006/09/09(土) 13:17:24
日本語でおねがいします
674デフォルトの名無しさん:2006/09/09(土) 15:31:21
ありません
ソースを全部コピーしてください
675669:2006/09/09(土) 15:41:09
>670-671
う〜ん、やっぱりそれしか無いですか…
バッチファイルを作ってデフォルトで括られるようにするかな
お答えありがとうございました
676デフォルトの名無しさん:2006/09/09(土) 16:26:24
>>672
exerb
677デフォルトの名無しさん:2006/09/09(土) 18:09:38
FileTest.exist?("#{dir}#{num}*")
こういうのがやりたいのですが、これワイルドカードに対応してないようなのです
別の方法があるでしょうか?
678デフォルトの名無しさん:2006/09/09(土) 18:09:54
exerbの仕組みをRuby組み込みで使えないかねえ。
具体的には、ソフトにRuby組み込むときって、dllと、ライブラリのソースがいるじゃないですか?
ライブラリのソースがバババと入っているのはなんとかならんのかなー、と思った次第。
まとめられたらなあ。
679デフォルトの名無しさん:2006/09/09(土) 19:04:45
>>677
Dir.glob("#{dir}#{num}*")
680デフォルトの名無しさん:2006/09/09(土) 19:11:56
>>678
この辺のを改造すればなんとかなるかも
ttp://bruby.sourceforge.jp/
681デフォルトの名無しさん:2006/09/09(土) 22:24:29
リファレンスを一通り読んでも解決しなかったので、ここで質問させて頂きます。

インスタンス変数はサブクラスと共有されている様ですが、
これを制限する方法は存在しますか?

ほぼブラックボックス化したクラスを継承したとき、
いずれかのクラスに共有やクラス外からの変更を意図しないインスタンス変数があった場合、
サブクラス内で使われるインスタンス変数名と親クラスのそれとが被ってしまうことは非常に大きな問題に思えるのですが、
まさか解決法が無いなんてことは…ないですよね?
682デフォルトの名無しさん:2006/09/09(土) 22:30:49
AjaxとかRailsとか最近よく見るけど一体何なんですか?
683デフォルトの名無しさん:2006/09/09(土) 22:57:46
>682
とりあえずAjaxは板違いなのでWeb製作かWebプログラミング辺りへGo
Railsも専用のスレはWebプログラミング板にある。>2 参照
684デフォルトの名無しさん:2006/09/09(土) 22:58:42
オブジェクト指向を分かってない香具師が混ざってる
685デフォルトの名無しさん:2006/09/09(土) 22:58:50
ありがとうございます。
いろんなこと勉強してみます。
686デフォルトの名無しさん:2006/09/09(土) 23:09:51
>>684
お前は分かってるつもりなの?w
687デフォルトの名無しさん:2006/09/09(土) 23:13:41
CGIモジュールを使ってマルチパートのフォームデータを送信しようろしています。

<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
の値がなぜか空になっています。
どうすればこの値をきちんと取得できるでしょうか?
688デフォルトの名無しさん:2006/09/09(土) 23:28:09
cgi['id'].first.read
あと、読めるのは一回だけだから、
最初に読むときに別の変数に代入しようね
689デフォルトの名無しさん:2006/09/09(土) 23:29:19
>>688
ありがとうございました。
解決しました。
690デフォルトの名無しさん:2006/09/09(土) 23:49:48
>>681
俺も初心者なんで眉に唾つけてね。可視性の制御対象は、メソッドと定数だけ
で、インスタンス変数は含まれないみたい。
君の心配はわかるけど、そもそもブラックボックスをホワイトボックス再利用
しようとすることが間違いなんで、実用上問題になるとは思えない。
691デフォルトの名無しさん:2006/09/10(日) 00:00:16
>>681 で困った事は俺は無いが、興味ある話題ではあるな
要は親クラスと子クラスの同名のインスタンス変数を別として扱いたいと。

う〜ん……逆にアクセサメソッド用意しちゃったら?
アクセサ付いてる変数名は使わないでしょ多分。
んでアクセサメソッドのコメントに「みだりに使うな」とか。
692デフォルトの名無しさん:2006/09/10(日) 00:22:17
>>690
>>691
非常に参考になりした。ご返答ありがとう御座いました。
アクセサを作った心理作戦ですか・・・なかなか面白そうです。今後の参考にさせて頂きます。
693デフォルトの名無しさん:2006/09/10(日) 00:58:35
>>692
PickAxeを見てたら、mixinでよく似た問題が取り上げられていました(cf. pp. 122-123)。
曰く「固有の名前を付けよ」だそうです。モジュール名を接頭辞につけるなど。
その他、ハッシュ定数を使う手もあるみたいです。
694デフォルトの名無しさん:2006/09/10(日) 02:55:13
695デフォルトの名無しさん:2006/09/10(日) 07:43:10
>>690
>君の心配はわかるけど、そもそもブラックボックスをホワイトボックス再利用
>しようとすることが間違いなんで、実用上問題になるとは思えない。
違う。ブラックボックスにしたいのに、親クラスで使っているのと同じ名前のインスタンス変数をサブクラスで偶然定義してしまった場合、それが親クラスにも影響を与えてしまうことが問題。
つまり、ブラックボックスにしたいのに、それができないことが問題。ホワイトボックスうんぬんは関係ない。

これは多人数でプログラムを開発するうえでは、けっこう致命的。
あまり発生しない問題ではあるが、発生した場合に発見するのが難しい。なぜなら単体テストはどれも通ってて、結合テストになってはじめて発生するから。
残念ながらRubyでは解決方法は特になく、別名をつけるしかない。
Javaならprivateにすればいいし、Pythonなら__varとかすると自動的にクラス名をつけて_MyClass_varとかしてくれるんだけどね。

というわけで、プライベートな変数の名前衝突がどうしても気になるなら、RubyよりPython使ったほうがいいかも。
696デフォルトの名無しさん:2006/09/10(日) 08:06:48
>>677
ども
697デフォルトの名無しさん:2006/09/10(日) 12:03:01
>695
困るのはその通りだね。

ただちょっと言うと、 Ruby では継承そのものを利用する局面がそれほど多く
ないと感じる。 Java とかと違って、継承しないと利用できない局面がそもそ
もなく、同名のメソッドさえ用意しておけば問題ないから。

だからそれほど問題視されていないんじゃないかなと思う。
実際、 Ruby のプログラムで継承を使ったことはおれはほとんどない。まあそ
んな大規模なプログラムを Ruby でやった経験もないけれど……。


mixin の場合はちょっとまずいのかな。
698デフォルトの名無しさん:2006/09/10(日) 14:31:07
>>695
与えないよ
699デフォルトの名無しさん:2006/09/10(日) 14:43:35
>698
えー、どうやったら与えないの?
ちょっとコード例見せて(はぁと
700デフォルトの名無しさん:2006/09/10(日) 14:47:42
>>689
Smalltalkの記事探してたら、偶然見つけた。
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.
701デフォルトの名無しさん:2006/09/10(日) 14:47:52
>>680
exerbの作者、面白いもん作ってんなー。
さすが、未踏ユースゲッターだ。
いじってみるか
702デフォルトの名無しさん:2006/09/10(日) 14:48:30
gsub! />>689/ ">>698"
703デフォルトの名無しさん:2006/09/10(日) 15:08:49
>>701
1.6だけどね
704デフォルトの名無しさん:2006/09/10(日) 15:12:53
nodedumpとどこが違うんだ?
705デフォルトの名無しさん:2006/09/10(日) 15:15:53
>700
それ、思いっきり影響与えてるじゃんw
706デフォルトの名無しさん:2006/09/10(日) 15:19:08
影響与える例では?
707700:2006/09/10(日) 15:21:16
すまんすまん、俺は698ぢゃないよ。これは影響を与える例。
708デフォルトの名無しさん:2006/09/10(日) 15:35:06
じゃあやっぱり>698が出てこない事には始まらんな
709デフォルトの名無しさん:2006/09/10(日) 15:49:00
まあ、private変数がないんだから、Pythonの__varと同じく命名法でしのぐか、ハッシュ
定数でしのぐしかないわな。
710デフォルトの名無しさん:2006/09/10(日) 16:01:33
Pythonの__varはクラス名が連結されるから状況は大分違う罠。
ハッシュ使えばほぼ解決できるな。醜くなりそうだけど。
711デフォルトの名無しさん:2006/09/10(日) 16:15:50
>>700
ちょwwww

手元でも確かめた、マジこれまずいでしょ。
何がまずいかっていうと、他の言語の感覚で使うと非常に困るんだな。
Rubyは、継承ってあまりしないのかもしれないけど・・・。

>>709
ハッシュ定数ってどゆこと?
perlみたいに、全部Hashに突っ込むの?
712709:2006/09/10(日) 17:38:59
>>710 Rubyでも @_class_var みたいに(手で)連結すればいいやん。
>>711 ハッシュ定数は想像の通り。ところでそんなにマズイか?Mixin以外に困る事態が想像しにくいのだけど。
713デフォルトの名無しさん:2006/09/10(日) 17:44:52
マズイのは、完全に親クラスの変数名を把握しておく必要があることだな。
下手に安易な変数名をつけられないよ。
まさか、ドキュメントに変数名が全部網羅してあるとは、限らない。
ソース読まないと安全に使えないということになる。
他の言語だと気にしないですむだけに、怖いな・・・
714デフォルトの名無しさん:2006/09/10(日) 17:48:06
結局変態的な名前を使うことで落ち着く
715デフォルトの名無しさん:2006/09/10(日) 18:22:38
ハンガリア〜ン
ハンガリア〜ン
716デフォルトの名無しさん:2006/09/10(日) 18:25:21
ruby 1.8.4 (2005-12-24) [i386-mswin32]
すみませんrubyマニュアル当たってもなかなかヒットしないので教えてください
Windows環境でputsしたりするときに、改行コードをLFにしたいのですが
どのようにすればいいのでしょうか?
717デフォルトの名無しさん:2006/09/10(日) 18:43:11
それはputsの仕事じゃない

と思う
718デフォルトの名無しさん:2006/09/10(日) 18:52:38
そもそもプロトタイプがなくてソースを上から順番に
書いて行かないといけないというのもかなり違和感あります。
719デフォルトの名無しさん:2006/09/10(日) 19:14:45
>>716
puts "改行で終わる文字列オブジェクトが引数になった場合puts自身は改行しません\f"
720デフォルトの名無しさん:2006/09/10(日) 19:18:49
p Dir.glob(" M 字 開 脚 /*")
とすると必ずnilが返ってくるのですがバグですか?
mswin32です
721デフォルトの名無しさん:2006/09/10(日) 19:21:36
ディレクトリ名の最後に空白があると駄目なようでした
722デフォルトの名無しさん:2006/09/10(日) 19:34:48
Dir.globってここぞという時に限って動作微妙だよな
723デフォルトの名無しさん:2006/09/10(日) 20:23:38
それよりそのフォルダ名の方が気になるワケだが
724デフォルトの名無しさん:2006/09/10(日) 22:18:15
>>721
Windowsじゃそういうファイル名は付けられないから。
725デフォルトの名無しさん:2006/09/10(日) 22:39:53
わお

> 指定されたパスの最初にある空白文字は除去されます。
> 指定されたパスの最後にある空白文字は除去されます。
> コロンの後ろにあり、パス区切り文字の前にある空白文字は除去されます。
> ディレクトリ名あるいはファイル名の最後にある空白文字は除去されます。
726デフォルトの名無しさん:2006/09/10(日) 22:42:48
>>725
それ何の仕様?
727デフォルトの名無しさん:2006/09/10(日) 22:47:51
.NET Framework Developer Center: System.IO に関する FAQ
ttp://www.microsoft.com/japan/msdn/netframework/programming/bcl/faq/SystemIOFAQ.aspx
> 特定の空白文字は、最後、最初、あるいはスペースが意味を持たない文字列内の
> すべての場所において除去されます。
> 次のコードは、c:\Windows\System32 のようなパスを探す場合の空白文字の除去の例です。
> 次のような規則に従います。
         :

728デフォルトの名無しさん:2006/09/10(日) 23:20:31
Dir.mkdir("表")
729デフォルトの名無しさん:2006/09/11(月) 08:04:05
>>725
ディレクトリ名ってWindowsじゃフォルダって言うんじゃないのか代
730デフォルトの名無しさん:2006/09/11(月) 08:34:40
Windowsではディレクトリもフォルダとして扱うというだけのことであって、
別にフォルダをディレクトリのように扱えるということではない

マイ コンピュータ や コントロールパネル を移動したりすることはできないという意味なのだろう
731デフォルトの名無しさん:2006/09/11(月) 09:11:11
>>728
作れないよ
732デフォルトの名無しさん:2006/09/11(月) 09:13:07
>>730
>マイ コンピュータ や コントロールパネル を移動したりすることはできない

出来ますが何か?
733デフォルトの名無しさん:2006/09/11(月) 09:41:56
ruby-mode で指定領域を一気にインデントする方法ってある?
734デフォルトの名無しさん:2006/09/11(月) 09:45:38
>>733
region を指定した上で indent-region では何か不足?
735デフォルトの名無しさん:2006/09/11(月) 09:47:41
>>732
あれはレジストリ内の参照用パスの再設定じゃね?
ディレクトリの移動とは別物だと思う

概念的存在のフォルダの移動はできない、でよいかと
736デフォルトの名無しさん:2006/09/11(月) 10:06:11
>>667
どうもです。
ソースコードにその一文を追加してもダメでした。
どこかに設定欄があるのでしょうか?
737デフォルトの名無しさん:2006/09/11(月) 12:14:11
>>734
いいえ。
ruby-mode.el を見ても、そんなの無かったので気が付きませんでした。
そういったものの一覧を知るにはどうしたら良いですか?
738デフォルトの名無しさん:2006/09/11(月) 12:29:09
http://itpro.nikkeibp.co.jp/article/OPINION/20060909/247602/?ST=enterprise&P=2

> 記者はTurbo Rubyでも出せば結構ヒットするのでは,とも思うのだが。
ヒットするかねぇ……
739デフォルトの名無しさん:2006/09/11(月) 12:53:08
>>734 いろいろあるが、まず基本はこれだろ。
M-x info -> Emacs
740デフォルトの名無しさん:2006/09/11(月) 13:08:51
Turbo Emacs
741デフォルトの名無しさん:2006/09/11(月) 13:13:23
>>738
>ボーランドにとっての最大の資産は,忠誠心の高いユーザーからなるコミュニティであろう。
>彼らが「このツールいいよ」とネット上でクチコミで広めてくれたり,積極的にカスタム
>・コンポーネント(ソフトウエア部品)を作ってくれたりするようになれば,それなりに勝機はある。

いまは逆の展開になってるよな・・・
742デフォルトの名無しさん:2006/09/11(月) 14:49:13
>>741
ワロタ
確かに逆だww

(公証は)Turboは外部コンポーネント使えないしなw
743デフォルトの名無しさん:2006/09/11(月) 15:05:10
ネイティブでも.netでも何でもいいから
本当の意味でのコンパイラがでてくれれば買っちゃうよ
744デフォルトの名無しさん:2006/09/11(月) 22:34:19
print "abcdefghijklmn"
print "\ropq"
とすると
opqdefghijklmn
となってしまうのですが
opqだけ表示するために表示行を一度クリアするには
どうすればいいんでしょ?
745デフォルトの名無しさん:2006/09/11(月) 22:49:29
>>744
UNIX/Linuxなら
print `tput el` # 行末まで削除
print `tput el1` # 行頭まで削除
746デフォルトの名無しさん:2006/09/11(月) 22:55:42
>>745
winなんで駄目ですねぇ
規格を定めた人もその辺まで考えといてくれよと
747デフォルトの名無しさん:2006/09/11(月) 23:15:46
>>744 やっぱり
print "\ropq" + ' ' * ("abcdefghijklmn".length - "opq".length)
じゃないか?
748デフォルトの名無しさん:2006/09/11(月) 23:18:24
それなら\b使った方が。
749デフォルトの名無しさん:2006/09/11(月) 23:20:06
最近のwinではANSIエスケープシーケンスも解釈しないんだっけ?
750デフォルトの名無しさん:2006/09/11(月) 23:28:35
print "abcdefghijklmn"
print "\r              "
print "\ropq"
751デフォルトの名無しさん:2006/09/11(月) 23:29:27
system 'cls'
752デフォルトの名無しさん:2006/09/11(月) 23:31:00
>>749
XP以降では標準でANSIエスケープシーケンス無視するね
解釈するように設定変更はできるけど
753デフォルトの名無しさん:2006/09/11(月) 23:39:34
754デフォルトの名無しさん:2006/09/12(火) 00:22:48
>>752
Win2000でも無視する。NT4でもそうだったような。

> 解釈するように設定変更はできるけど
できるの?
755デフォルトの名無しさん:2006/09/12(火) 08:25:32
できる
756デフォルトの名無しさん:2006/09/12(火) 16:07:23
どうやって?
757デフォルトの名無しさん:2006/09/12(火) 19:40:54
758デフォルトの名無しさん:2006/09/12(火) 19:50:58
あのー、ansi.sysを組み込んでのエスケープシーケンスの利用って、
16bitアプリケーションの場合しか有効にならないんですけど、
そのことを考慮していらっしゃいますか?
759デフォルトの名無しさん:2006/09/12(火) 20:17:22
$ ruby -e 'print "\x1b[35ma\x1b[36mb\x1b[31mc"'

cygwinで実行したらOKだった
760デフォルトの名無しさん:2006/09/12(火) 20:20:23
C:\nullpo> ruby -e 'print "\x1b[35ma\x1b[36mb\x1b[31mc"'
cmd.exeで実行してもOKだった
761デフォルトの名無しさん:2006/09/12(火) 20:28:14
C:\>ruby -e 'print "ガッ!!"' >>759
762デフォルトの名無しさん:2006/09/12(火) 20:35:38
command.com上なら動いたみたいだが
cmd.exe上は動かないみたい

さてどうしたものか
763デフォルトの名無しさん:2006/09/12(火) 20:38:45
素直にwin32console使えばいいべさ
764デフォルトの名無しさん:2006/09/12(火) 21:57:33
>>744

print "\x1b[s"
print "abcdefghijklmn"
print "\x1b[2K"
print "\x1b[u"
print "opq"
765デフォルトの名無しさん:2006/09/12(火) 22:56:30
iconvとkconvで

puts Iconv.conv('utf8', 'sjis', '\\\\/') # 促促/
puts '\\\\/'.tosjis.toutf8 # \\/

と結果が違うのですが、Iconvの方なんかおかしくないですか?
ruby 1.8.4 (2005-12-24) [i686-linux] です。



766デフォルトの名無しさん:2006/09/13(水) 00:46:35
>>765
iconvも\\/になったけど。

libiconvのバージョンは?
767デフォルトの名無しさん:2006/09/13(水) 04:35:59
[ruby-list:42796] Re: in演算子の提案
きたね。
個人的にはイラネと思うが、まぁ直感的な記法だから邪魔にはならないかな。
768デフォルトの名無しさん:2006/09/13(水) 09:12:50
文字列中の半角と全角を分割する方法ってないでしょうか?
文字コードは変換可能なので気にしません。

str = 'abcあいうdefえお かき<?>くけこ'
array = hoge(str)
p array #=> ['abc, 'あいう', 'def', 'えお', ' ', 'かき', '<?>', 'けこ']
769デフォルトの名無しさん:2006/09/13(水) 11:01:25
こんな感じ?「半角」の範囲は適当。
str.scan(/[\x21-\x7e\s]+|[^\x21-\x7e\s]+/).to_a
770デフォルトの名無しさん:2006/09/13(水) 13:11:07
著作権の関係で実際のコードをここに貼れないんだけど、
(1) NKF.nkf などを使って ISO-20200-JP に変換する
(2) String#scan で ESC を検索して分割
(3) それぞれの部分文字列を再度 NKF.nkf で適当に変換
という処理なら昔やったことがある。
771デフォルトの名無しさん: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えお かき<?>くけこ")


772765:2006/09/13(水) 15:13:34
>>766 どもです。
$iconv -version
iconv (GNU libc) 2.4
でした。2.3.5のdebianやMacOSX10.4でも>>765と同様の結果です。
うーん、何がおかしいんだろう
773デフォルトの名無しさん:2006/09/13(水) 15:55:03
うちでもなるねえ。 Shift_JIS の代わりに CP932 にしてみるとどう?
774デフォルトの名無しさん:2006/09/13(水) 15:56:08
ああ、うちの iconv (GNU libc) 2.3.6 でも発生した。
バックスラッシュで iconv が狂うみたいだな。 Ruby の問題ではない。

SJIS のかわりに CP932 を指定すれば化けないよ。たぶん。
775765:2006/09/13(水) 16:11:08
おお。CP932でひとまず解決しました。ありがとうございました。
776デフォルトの名無しさん:2006/09/13(水) 18:27:31
>>767
if x in [1,2,3] って is を補いたくなるね
[1,2,3].has? 4 というのがあれば読み下せるんだけど、[ruby-list:24603]で切り捨てられてるか
777768:2006/09/13(水) 18:30:07
>>769-771
ありがとうございました、いろいろ方法があるんですねー
769さんの方法がシンプルで良さそうなんですけど
使う文字コードによってマズイことがあるのかな?
778デフォルトの名無しさん:2006/09/13(水) 18:56:29
>777
むろん。 shift-jis や 7bit jis では問題が起こる可能性がある。
ふだんから euc-jp や utf-8 を使ってるなら問題ナシ。
779769:2006/09/13(水) 19:02:43
>>777
>>778 の言う通りで、 7bit jis (ISO-2022-JP) だとダメだね。
Shift_JIS なら -Ks か $KCODE = "s" する (あまりおすすめできない) か、
/.../s みたいに Shift_JIS と見做すオプションを付ければ問題ないと思う。
780デフォルトの名無しさん:2006/09/14(木) 01:32:11
class Foo
def bar(str)
str =~ /(hoge|huga|hage)/
...
end

みたいな感じで正規表現を使う場合、インスタンスが生成されるたび、
あるいはメソッドが呼ばれるたびに正規表現のインスタンスが作成されるのでしょうか?
/(hoge|huga|hage)/が静的な場合、定数を定義した方がよかったりしますか?
781デフォルトの名無しさん:2006/09/14(木) 02:06:21
新サイト、両脇の紺色の無駄な空間は大き過ぎるだろ。
空間効率悪過ぎ。
782デフォルトの名無しさん:2006/09/14(木) 02:19:21
783デフォルトの名無しさん:2006/09/14(木) 02:21:09
>>780

生成されちゃいますね〜。
ご名答ですw
784デフォルトの名無しさん:2006/09/14(木) 03:30:24
>>780
静的なRegexpはparse時にインスタンスが作られる。

>>783はネタのつもりなのかただの勘違いか。
785デフォルトの名無しさん:2006/09/14(木) 07:09:26
勉強するならCとRubyとSchemeだな
RubyやめてJavaでもいいが
786デフォルトの名無しさん:2006/09/14(木) 10:09:49
Rubyやめて、Javaはない。
全然、性格が違うではないか
787780:2006/09/14(木) 12:54:09
>>782,>>783 そして >>784さん。ありがとうございました。
788デフォルトの名無しさん:2006/09/14(木) 13:37:24
CとPerlに触れてみてから、そのときの経験を元にして
足りないものを満たしてくれたり自分のやりたいことのできる言語を探したほうがいいと思う

最初にRubyというのは、最初にPHPと同じくらい悲惨だ(悲惨のベクトルは真逆だが)
っていうか脈絡なさ杉

>>784
そうなんだ
変数が入ってる場合はるびま添削の第1回みたく括り出したほうがいい?
789デフォルトの名無しさん:2006/09/14(木) 13:44:27
o オプションを使う香具師はいないか。
790デフォルトの名無しさん:2006/09/14(木) 20:55:50
>>788
悲惨というのはどういう意味?

他の言語がかったるくて使えなくなるみたいなこと?
791デフォルトの名無しさん:2006/09/14(木) 21:28:46
すみません、質問させてください。
Rubyでbz2圧縮のファイルを扱えるモジュールはないでしょうか?

「Rubyアプリケーションプログラミング」という本に、bz2拡張ライブラリ
の作り方が載っているようなんですが、それを参考に自作する以外に
何か方法があればうれしいのですが。
792デフォルトの名無しさん:2006/09/14(木) 21:45:28
793デフォルトの名無しさん:2006/09/14(木) 22:17:01
>>792
実はWindowsでRubyのスクリプトからbz2で圧縮されたファイルを展開
する、ということをしたいのですが、ご教示いただいたライブラリでは、
無理みたいです(たぶん)。

現在はbz2のwin32バイナリをコマンドラインから呼び出す形にしています。
ただ、他の人がスクリプトを使うとき、いちいちbz2を落としてきてもらう
必要があるので、もっとスマートな方法があるといいんですが。
794デフォルトの名無しさん:2006/09/14(木) 22:31:25
Ruby/Tkでテキストウィジェットの背景に指定した画像ファイルを表示させるにはどうしたらいいですか?
795デフォルトの名無しさん:2006/09/15(金) 01:13:32
>>793
どう無理だったか知りたい。
796デフォルトの名無しさん:2006/09/15(金) 02:03:48
みなさんエディタは何使ってますか?
自分はRDE(Ruby Development Environment)を使ってるんですけど。
もっといいやつありますかね?
797デフォルトの名無しさん:2006/09/15(金) 02:55:22
emacs
vim
xyzzy
798デフォルトの名無しさん:2006/09/15(金) 03:28:32
>>797
補完機能ありますか?
RDEはメンバメソッドの一覧とか表示してくれて便利なんですけど。
799デフォルトの名無しさん:2006/09/15(金) 04:05:15
>>796
俺はemacs一本。
winだったらmedowっていうemacsがあるよ
800デフォルトの名無しさん:2006/09/15(金) 04:43:45
xyzzyのruby-mode使ってるが、機能がないに等しいw
801デフォルトの名無しさん:2006/09/15(金) 05:48:22
>>793
win32バイナリも一緒に配布するってのじゃだめなのかな。
それより、「ファイルを展開したい」とあるけど、もし *.tar.bz2 なファイルのことをいってるのなら、
bzライブラリは圧縮ファイルを解凍するだけで、tarの展開は別のライブラリを使わないとできないよ。
rubyforgeにmini-tarというライブラリがあるからそれをつかうといい。
802デフォルトの名無しさん:2006/09/15(金) 09:03:37
>>799
maedow => Meadow
emacs => Emacsen
803デフォルトの名無しさん:2006/09/15(金) 09:30:40
p "abc".to_a.pack('m') #=> "YWJj\n"
p "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]です。
804デフォルトの名無しさん:2006/09/15(金) 09:43:30
そこでto_aを使うのが間違ってる。
String#to_a は $/ で分割する。

p ["a\012c"].pack("m")' #=> "YQpj\n"
805803:2006/09/15(金) 10:08:45
ありがとうございました。
バイナリデータの途中の処理だったので思いもつきませんでした。
p "a\012b".to_a #=> ["a\n", "b"]
806デフォルトの名無しさん:2006/09/15(金) 10:33:49
vimに決まってるだろ馬鹿か。
大抵Emacsが良いとかいってるやつはvimを使ったことがないんだ
807デフォルトの名無しさん:2006/09/15(金) 10:40:34
ed いや、なんでもない。
808デフォルトの名無しさん:2006/09/15(金) 10:42:06
しかし、エディタネタは定期的に出てくるよな。

ってレスも定期的に出てくるよな。
809デフォルトの名無しさん:2006/09/15(金) 10:50:23
大体Emacsなんて起動させるのにemacsと5文字も入力しないといかん。
vimなんてviの2文字で起動する、しかもvとiは打ちやすい位置に配置されてる。
この時点でvimの完全勝利だが起動時間もvimのが速い。
Emacsなんて起動が遅すぎて待ってる間にプログラミングしようという気力が萎えちゃうね。
vim is the best editor. all other editors are sucks.
810デフォルトの名無しさん:2006/09/15(金) 11:20:48
Emacsって常駐させているもんなんじゃないの?
811デフォルトの名無しさん:2006/09/15(金) 11:34:23
aliasやTab補完……いやなんでもない
まじれすなんてするものか
812デフォルトの名無しさん:2006/09/15(金) 12:28:47
s=<<EOS
hoge
moge
mage
EOS

という文字列があったとき、
先頭と末端に文字を追加したいのですが、

puts s.gsub(/(.+?)\n/, "++" + $1 + "++\n")
では、
moge
moge
moge
となりうまくいきません。
どこが間違っているのでしょうか?
813デフォルトの名無しさん:2006/09/15(金) 12:49:16
>>812
その文章からはどう追加したいのかわからんのだが。
結果としてどういう文字列が欲しいか書け。
814デフォルトの名無しさん:2006/09/15(金) 12:50:44
エスパーすると
puts s.gsub(/(.+?)\n/, "++\\1++\n")
または
puts s.gsub(/(.+?)\n/) { "++" + $1 + "++\n" }
でいいと思う、というかリファレンスよめ
815デフォルトの名無しさん:2006/09/15(金) 13:35:02
>>809
vi の 2文字で nvi が起動してしまう私は FreeBSD ですかそうですか。
816デフォルトの名無しさん:2006/09/15(金) 15:22:40
>>795
こういうインタフェイスを使うには、とりあえずbzip2をソースからコンパイル
しないといけないんだろうと思い、VisualC++のトライアル版をインストール
してみました。が、windows.hがないとか言われて上手くいきませんでした。
なんかRuby云々よりも私自身のスキルの問題のようです・・・。

>>801
あ、なるほど。バイナリ自体を含めてしまったらいいんですね。
思い至りませんでした。

あと対象のファイルは単なる.bz2なのですが、mini-tarのこと教えていただき
ありがとうございました。覚えておこうと思います。
817デフォルトの名無しさん:2006/09/15(金) 16:14:51
コンパイルに失敗してるんだったら、
ttp://ftp.ruby-lang.org/pub/ruby/binaries/mingw/1.8/ext/
ここのコンパイル済みのbz2でなんとかならんかな。
使ってないからわからんけど。
818791:2006/09/15(金) 17:10:23
>>817
こういうものがあったとは知りませんでした!
近々試してみたいと思います。
取り急ぎお礼まで。
819デフォルトの名無しさん:2006/09/15(金) 17:31:43
Emacsは最初に起動してその中でファイル操作をするべきだろう
まさかとは思うがいちいち
$ emacs hogehoge.rb
という起動の仕方をさせているわけでもあるまい


とか言う俺はviやlessで新たにファイルを読み込むキーバインドを覚えらんね
820デフォルトの名無しさん:2006/09/15(金) 17:33:28
んな Emacs の起動の仕方なんてどうでもいいだろ。

Ruby スレでは。
821812:2006/09/15(金) 18:09:43
++hoge++
++moge++
++mage++

にしたかったのでした。

>>813
>>814
うぉぅ、デキターーーー。
エスパーサンクス!!
リファレンス読みます。すまん。

822デフォルトの名無しさん:2006/09/15(金) 18:34:09
emacsの利点はカスタマイズ性。
あれはviには真似出来んよ。
823デフォルトの名無しさん:2006/09/15(金) 18:51:39
ruby入門者だけど、さっそくruby-modeやrrseいじったりして肝心のrubyが(ry
824デフォルトの名無しさん:2006/09/15(金) 19:27:37
Emacsはキーを二つ使うコマンドが多すぎ。
その点viはシンプルで素晴らしい。viの完全勝利。
825デフォルトの名無しさん:2006/09/15(金) 19:34:41
viは便利かも知らんが、覚えるまでが大変そう。
826デフォルトの名無しさん:2006/09/15(金) 19:51:45
>824
そう思ったら自分好みに変えるのがemacs
827デフォルトの名無しさん:2006/09/15(金) 22:01:03
2ストロークのキーの最初の1つめは、よく使われてるのは数個しかないだろ。

Ruby 1.9.1 マダァー?
828デフォルトの名無しさん:2006/09/15(金) 23:38:54
EDLIN ...
829デフォルトの名無しさん:2006/09/16(土) 00:09:41
>>827
あと1年3ヶ月ちょい待て。
830デフォルトの名無しさん:2006/09/16(土) 00:27:46
>>825
viの方が覚えやすい
831デフォルトの名無しさん:2006/09/16(土) 04:00:01
さー、恒例のお互い決着などつける気が全く無い世紀のぐだぐだ討論
"Vi vs Emacs" がまたはじまったぁぁぁーーー!!
今回は一体何レス無駄に消費するのかっ! するなら本スレでやってくれっ!
832デフォルトの名無しさん:2006/09/16(土) 04:13:36
Rubyのコンパイラっていつごろできそうなの?
833デフォルトの名無しさん:2006/09/16(土) 04:14:36
>>832
すまん
板ちがいだったかも
834デフォルトの名無しさん:2006/09/16(土) 19:09:24
いや、全然。
少なくともvi vs Emacsの話よりかはこのスレに合ってる。
835デフォルトの名無しさん:2006/09/16(土) 20:09:23
むかしr2cってなかったっけ?
836デフォルトの名無しさん:2006/09/16(土) 20:15:12
ttp://easter.kuee.kyoto-u.ac.jp/~hiwada/ruby/rb2c/

をみるかぎり1.4.3時代に取り残されたままっぽい。
そういえばSqueakはVM部分がSmalltalkで出来てて
Cのトランスレータで云々っていうけど充分な速度でてるよね。
ってスクリプトをコンパイルってのとは微妙にはずれてるか。スマン
837デフォルトの名無しさん:2006/09/16(土) 21:08:16
Emacsからviに乗り換えた途端に
宝くじに当たるわ女にモテるわ仕事も順調になるわで幸せになれました。
みんなもEmacsからviに乗り換えて幸福になりましょう^^
838デフォルトの名無しさん:2006/09/16(土) 22:39:19
乗り換えた途端に不幸になったら



責任とって……くれますか?
839デフォルトの名無しさん:2006/09/16(土) 23:22:51
もちろんとるよ。
840デフォルトの名無しさん:2006/09/17(日) 11:40:21
open-uriはリクエストメソッドをPOSTでファイルを読み込むにはどうすればいいのでしょうか。
また、Net::HTTPで、レスポンスボディをIOで読みたいのですが、それをするにはどうすればいいのでしょうか。
841デフォルトの名無しさん:2006/09/17(日) 13:18:14
任意長の文字列が数百個からなる集合があったとして
ある文字列がその集合に含まれるかを高速に確認する方法はどのようにすれば良いでしょうか
・Arrayにいれて、Array#include?
・Hashにいれて、Hash#include?
・Hashのkeyで判断、if hash(str) ……
・その他
842デフォルトの名無しさん:2006/09/17(日) 13:21:48
訂正
× ・Hashのkeyで判断、if hash(str) ……
○ ・Hashのvalueで判断、if hash[str] ……
なお、グループ内の文字列は同じものの複数存在することはありません。
843デフォルトの名無しさん:2006/09/17(日) 13:42:36
こんにちは。
コマンドラインのツールを作ろうとしていますが、
コマンドライン引数を便利に扱うライブラリは
ないでしょうか?
844デフォルトの名無しさん:2006/09/17(日) 13:45:12
845デフォルトの名無しさん:2006/09/17(日) 13:48:30
>>841
数百個程度ならArray#include?で十分だと思われ。
846デフォルトの名無しさん:2006/09/17(日) 14:13:12
>>841
Hash が使えるなら Hash で。O(1) だし。
847デフォルトの名無しさん:2006/09/17(日) 14:27:38
>>841
Set が使えるなら Set で。O(1) だし。
848デフォルトの名無しさん:2006/09/17(日) 14:28:10
>>846
まじでー

ハッシュってなんというか処理重いイメージあるんだけど探し物には便利?
849デフォルトの名無しさん:2006/09/17(日) 14:28:31
何度も使い回すんならHashでもいいかな。
使い捨てならArrayの方が良さそう。
850デフォルトの名無しさん:2006/09/17(日) 14:29:55
>>848
アルゴリズムの勉強くらいしよう
851デフォルトの名無しさん:2006/09/17(日) 14:37:26
正規表現で探したりするならArray
キー一発でそのものだけを見付けたいならHash
データがものすごく多いならRDBMS使用
852デフォルトの名無しさん:2006/09/17(日) 14:55:47
>>844
おう、それだそれだ、サンクス!!
853デフォルトの名無しさん:2006/09/17(日) 14:56:47
Array#joinして=~するのは遅い?
854デフォルトの名無しさん:2006/09/17(日) 15:01:26
>>853
物によるだろうね。大抵は遅くなりそうだけど。

知りたいなら、計って見ればいいじゃない。
855841:2006/09/17(日) 15:11:08
ありがとうございました。
正規表現は使用しないのでHash使用が良さそうですね。

いま思ったのですが、Hashっていうのはハッシュソートのハッシュのことなのでしょうか?
856デフォルトの名無しさん:2006/09/17(日) 15:23:28
>>855
ハッシュのアルゴリズムを使った配列のこと
perlの連想配列って言ったらわかる?
857デフォルトの名無しさん:2006/09/17(日) 16:03:05
このRailsアプリがexeで配布されているのですが、
度いういうツールをつくったかわからないでしょうか?
http://llamerada.ty.land.to/brails.html

ここによると、Ruby2Exe らしいのですが、どこにあるんでしょう。
http://d.hatena.ne.jp/babie/20060713/p6
858デフォルトの名無しさん:2006/09/17(日) 16:15:16
>>857
アイコンから見るに、rubyscript2exeですね
http://www.erikveen.dds.nl/rubyscript2exe/index.html
859デフォルトの名無しさん:2006/09/17(日) 19:25:51
シンボルが実質的に廃止されそうな流れになってるとは知らなんだ。
やだなー。
860デフォルトの名無しさん:2006/09/17(日) 19:34:12
ruby-1.8.5 に portupgrade しようとおもってやってみてるんですけど、
ログをみると、

ruby lib version (1.8.4) doesn't match executable version (1.8.5) (RuntimeError)

といわれてとまってしまいます。
だれかおしえてください。
861デフォルトの名無しさん:2006/09/17(日) 20:07:35
>>860
環境kwsk書かないヤツに教えることは何もない。
862デフォルトの名無しさん:2006/09/17(日) 20:17:42
rubyの小数点の精度ってどれくらいですか?
Σ1/n^12
の話を計算したいんですが、n = 100程度までの値を正確に出したいのです。
小さな少数を扱うクラスがあれば教えて欲しいです。
863デフォルトの名無しさん:2006/09/17(日) 20:26:08
BigDecimal
864デフォルトの名無しさん:2006/09/17(日) 20:29:51
ごめんなさい。
FreeBSD 6.0-RELEASE-p7
です。
現在の ruby のバージョンは 1.8.4 です。
865デフォルトの名無しさん:2006/09/17(日) 20:42:45
有理数の範囲内なら、Rationalもあるよ。
866デフォルトの名無しさん:2006/09/17(日) 22:47:30
>>860
1.8.5のrubyが古い1.8.4のrbconfig.rbをロードしてるメッセージだな。
FreeBSD使ってないので、どこの何がまずいのかはわからん。
867デフォルトの名無しさん:2006/09/17(日) 23:16:22
funcの中で「a」を書き換えたいのですけど、どうやるのでしょうか?
Stringの場合はreplaceで出来たのですが。
初歩的な質問してすみません。

def func(d, s)
end
a = 0
func(a, 10)
p a
868デフォルトの名無しさん:2006/09/17(日) 23:43:31
>>867
基本的に無理。
Fixnumはimmutable

どうしてもやりたければ配列使うとかしないとダメ。
869デフォルトの名無しさん:2006/09/17(日) 23:45:38
>>868
なんとそうですか。
こういうプログラムは設計自体がRubyの仕様に合ってないのでしょうね。
見直した方が良さそうです。ありがとうございました。
870デフォルトの名無しさん:2006/09/17(日) 23:56:08
Rubyは、参照渡しができないんだっけか?
871デフォルトの名無しさん:2006/09/18(月) 00:06:02
>870
FortranとかVBとかC++にあるような「参照渡し」はない。
872デフォルトの名無しさん:2006/09/18(月) 01:03:34
rubyでlameを呼び出してmp3のエンコードしているんだけど
system()でプロセスの優先度指定できない?
裏で作業させているとちょっと重くて・・・。

ruby 1.8.5 (2006-08-25) [i386-mswin32] なんだけど、厳しいかな。
873デフォルトの名無しさん:2006/09/18(月) 01:16:42
lame コマンドなら --priority オプションつかえばいいっしょ
874デフォルトの名無しさん:2006/09/18(月) 01:24:03
>>873
ありがとう。気が付かなかった。
875デフォルトの名無しさん:2006/09/18(月) 08:43:35
クラス名の文字列からクラスまたはインスタンスを得るにはどうしたらよいですか?
876ヽ(´ー`)ノ ◆.ogCuANUcE :2006/09/18(月) 10:08:20
>>875
http://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 に欲しいけど。
877デフォルトの名無しさん:2006/09/18(月) 10:15:56
>>875
const_getを使うといいよ
878デフォルトの名無しさん:2006/09/18(月) 10:24:19
ありがとうございます
879デフォルトの名無しさん:2006/09/18(月) 11:21:48

eval の第2引数に、stringじゃなくてprocを指定できませんかね。
bindobj = binding()
eval '...', bindobj
だと毎回文字列をパースして効率が悪いので、あらかじめprocオブジェクトに
しておいてそれをevalできればいいかなと思ったのですが、どうしたらいいで
しょうか。
(関数に出来ないのは、bindingオブジェクトをつかうから。)

instance_eval だとprocオブジェクトを渡せるみたいなんですが、そうすると
今度はbindingオブジェクトを渡せなくて困ってます。
880デフォルトの名無しさん:2006/09/18(月) 11:49:13
>860
portupgrade の途中でそうなるの? おれの環境ではそういうことは起こらなかったが。
なんにせよ、 portupgrade を使わず、ふつうに ports でビルドすれば問題ないだろう。

あと、このスレより FreeBSD 関連のところで聞いた方が実りがあると思うよ。
881デフォルトの名無しさん:2006/09/18(月) 11:57:08
>>875
str = eval("String").new
p str.class
かな。素人だから知らないけど、そーゆーのはとにかくevalっとく。
変数の場合は、instance_variable_get みたいのがあるけど。

>>872
Win32 API を叩く話になるんじゃないかな、そーゆーのって。
882881:2006/09/18(月) 11:59:30
俺、読み込んでから、どんだけ放っておいたんだよ orz
883デフォルトの名無しさん:2006/09/18(月) 14:03:10
>>879
> eval の第2引数に、stringじゃなくてprocを指定できませんかね。
できない。

> (関数に出来ないのは、bindingオブジェクトをつかうから。)
bindingをかえるということは、一回目はローカル変数と解釈されたものが
二回目はメソッド呼び出しと解釈されるかもしれないということだ。
884デフォルトの名無しさん:2006/09/19(火) 05:41:29
>>883
thanx
885デフォルトの名無しさん:2006/09/19(火) 19:44:50
手元の perl のプログラムで、集計にハッシュを使って $x->[$a][$b] += 1 なんてかんじのコードがあるのですが、これを ruby で書き直そうと思っています。

x = 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 を捕捉するとかいう、苦し紛れの方法しか私の頭では思いつかないので…。
886デフォルトの名無しさん:2006/09/19(火) 19:59:28
>>885
自前でそういう働きをするクラスを作ればよい。

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"
887886:2006/09/19(火) 20:08:27
あ、全角スペース使ってるから、コピペする際は半角スペースなどに置換してね。
888デフォルトの名無しさん:2006/09/19(火) 21:35:28
Kernelで定義されている関数はなぜprivate?
publicだったら、関数をオーバーライドしてしまったときでも Kernel.puts とかで呼び出せるのに。
889デフォルトの名無しさん:2006/09/19(火) 21:54:09
__send__
890デフォルトの名無しさん:2006/09/19(火) 23:00:36
"hoge".putsなんてできたら明らかに気持ち悪いと思う
891デフォルトの名無しさん:2006/09/19(火) 23:16:33
>>872
startコマンド経由で実行させるというのはどうでしょうか
start /b /idel lame ”WAVEファイル名” "MP3ファイル名"
みたいに
892デフォルトの名無しさん:2006/09/20(水) 00:05:49
>>885
x.default = nil
Marshal.dump(x)
893888:2006/09/20(水) 19:02:45
>>889
__send__ でできるのはしってるんだけど、それを聞いているんじゃなくて、なぜprivateなのかを聞いているんですけど。

>>890
説明が足りなかった。インスタンスメソッドとしてはprivateでもいいんだけど、モジュールメソッドとしてはpublicでもいいんじゃないか、ということ。
それなら "hoge".puts はできないけど Kernel.puts はできるよね。それが自然に思える。
894デフォルトの名無しさん:2006/09/20(水) 23:02:42
>>893
何を問題にしているのかわからない。
Kernelのプライベートメソッドってあまりないし、
Kernel.putsはpublicだし、
何か問題あった?
勘違いしてたらごめん。まじでわかんない。
895デフォルトの名無しさん:2006/09/21(木) 00:30:11
Cで言うところのファイルスコープのメソッドがKernelのプライベートメソッド。
896デフォルトの名無しさん:2006/09/21(木) 01:07:24
>>893
トップレベルはデフォルトでmodule_functionにしろってか。
897デフォルトの名無しさん:2006/09/21(木) 01:49:40
>>895
だうと。他のファイルも影響を受ける。

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
898885:2006/09/21(木) 02:37:41
>>886,887
そうか自分でクラス定義すればよいわけですね。

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

# インデントに全角スペースを使っています
899デフォルトの名無しさん:2006/09/21(木) 17:19:59
ポスト安倍は?,2006/09/21,麻生太郎,谷垣禎一,福田康夫,小沢一郎,石原慎太郎,小泉純一郎,その他
こういうデータを
data = str.split(',')

p data.size
とすると
10が帰ってきて難儀しています。
エンコードのせいでしょうか?
900デフォルトの名無しさん:2006/09/21(木) 17:24:48
いいえ、違います
901デフォルトの名無しさん:2006/09/21(木) 17:59:13
その他を考慮してるんだよな>1個増える
902デフォルトの名無しさん:2006/09/21(木) 18:01:58
試してみたが、9がかえってくるぞ
903899:2006/09/21(木) 18:19:26
手元のスクリプトではdate.sizeになってました
3時間くらい悩みました
904デフォルトの名無しさん:2006/09/21(木) 18:25:13
ピーすりゃいいのよ、ピー
905デフォルトの名無しさん:2006/09/21(木) 20:15:44
きたねーな
906デフォルトの名無しさん:2006/09/21(木) 22:39:48
any? や find? や map に渡されたブロックの評価順序ってどうなっているのでしょうか。
たとえば
a = [0,1,2]
x = nil
puts(x) if a.any?{|e| (x = e) < 3} # => 0
が仕様として保証されるのか、ということです。マニュアル読むとけっきょく該当クラスにおける each メソッドの定義しだい、ということのようですが…。
907デフォルトの名無しさん:2006/09/21(木) 23:38:04
>>894
Kernel.putsはpublicじゃないだろ。
Rubyでのpublic/privateはJavaやC++と違うんだけど、それはわかってるよね?
908デフォルトの名無しさん:2006/09/22(金) 03:47:21
>>907
putsはKernelのモジュール関数として定義されてるからpublicでしょ
Kernel#putsはprivate
909デフォルトの名無しさん:2006/09/22(金) 08:15:04
> more test.rb
module 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)
910デフォルトの名無しさん:2006/09/22(金) 08:22:45
> more test2.rb
class 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)
911909:2006/09/22(金) 08:30:49
この辺の挙動がよく解らないのですがどうなってるのですか?
912デフォルトの名無しさん:2006/09/22(金) 09:32:46
>>906
> puts(x) if a.any?{|e| (x = e) < 3} # => 0
あたりまえだが、ifの条件式が先に評価される。
ブロックも(呼ばれれば)いっしょに評価される。
もちろん、ブロックが呼ばれるかどうかはeachの定義次第。
913デフォルトの名無しさん:2006/09/22(金) 09:37:45
ああ、yieldされる順序のはなしか?
それはもちろん、何をどういう順序でyieldするかeach次第。
というか、eachの役目はそれを定義すること。
914906:2006/09/22(金) 11:21:59
>>911,912
> ああ、yieldされる順序のはなしか?

そうです、用語がわからなかったので妙な書き方になっていてすいません。

> それはもちろん、何をどういう順序でyieldするかeach次第。
> というか、eachの役目はそれを定義すること。

なるほど、Klass#any? や Klass#find や Klass#map の yield する順序は Klass#each の定義しだいと。
うーむ、Array#each の「仕様」はどこで決まっているのかなあ(実装 == 仕様 ?)…ユーザ側でメソッド再定義できるからそのあたり気にするべきでない(each の定義に依存するコードは書かない)というのが正しい姿勢?

915906/914:2006/09/22(金) 11:23:51
わあ、すいません
>>912,913 さん
の間違いです、インデックスが1つずれてしまった。
916デフォルトの名無しさん:2006/09/22(金) 17:54:46
Arrayのeachって、[a, b, c, ...]の順番どおりなんじゃないの?
Hashは順不同だけど
917デフォルトの名無しさん:2006/09/22(金) 18:17:45
Arrayはreverse_eachなんてのもあるくらいだし、先頭からと決まってる。
あとはIOなんかも先頭からだ。
918デフォルトの名無しさん:2006/09/22(金) 19:45:05
というか、Arrayって単なる集合ではなく配列だしな
勝手に順番かわったりしたら困る
919デフォルトの名無しさん:2006/09/22(金) 19:50:34
だけど、any? が順序付けされてることを保証すると考えるのもなあ。
せっかく順序なんかを捨象して抽象化したところに副作用を持ち込んだ上に
直感に反する目的に使うのはださい。

>>906 を普通に書くと
puts(x) if x = a.find{|e| e<3}
じゃないの。
920906/914:2006/09/22(金) 21:51:28
>>919
> せっかく順序なんかを捨象して抽象化したところに副作用を持ち込んだ上に直感に反する目的に使うのはださい。

う、たしかにそうですね、頭が悪いなあ > 自分
でも find (系?)のメソッドについては順序保証が欲しいような…たとえば

x = 'aaaaaaaaaaaa'
puts [/a/, /aa/, /aaa/].reverse.find{|r| r.match(x)}

で /aaa/ が返ると思ってよいか、とか。
- Array#each は配列の先頭から順番に各要素を yield へ渡す
- Enumerable#find の引数として渡されたブロックが Klass#each 内での yield の呼出し順に処理される
ことは保証済みと考えてよいのかしら、というあたりがモヤモヤっとしているのです。
921デフォルトの名無しさん:2006/09/22(金) 22:15:23
rubyでキャッシュを使うためのライブラリってないですか?

phpのPEAR(gemsみたいなの)には、Cache_Litetってのがあるのですが、
http://php.y-110.net/wiki/index.php?PEAR%A1%A7Cache_Lite
rubyにも似たようなのがないかと思いまして。
922デフォルトの名無しさん:2006/09/23(土) 00:29:13
>>921
キャッシュって言葉が指すものがいろいろあって何の話かわからん
923デフォルトの名無しさん:2006/09/23(土) 01:41:14
>>921
えと、ファイルにキャッシュする感じですね。

例えば、「なんでもRSS」みたいに、既存のページを他のものに変換するようなサービスを考えてください。
リクエストに応じて、毎回ページを変換していると、処理時間を食うので、
ファイルかなんかに、キャッシュしてくれるというイメージです。
時間切れ管理なんかもあるとよい感じです。
924デフォルトの名無しさん:2006/09/23(土) 01:47:24
MoonWolf氏の書いたライブラリ発見
http://raa.ruby-lang.org/project/cache/
925デフォルトの名無しさん:2006/09/23(土) 03:01:15
>>923
自分で書いてもすぐじゃないのか?
926919:2006/09/23(土) 07:59:06
>>920
find系は(順序がつくコンテナでは)順序保証があると思っていいと思うのよ。
919の後半はそういう意味。
なので、>>920で懸念されている点についてはOKだと考えていいと思う。

一方、any? とか include? とか、そういうのはコンテナ全般に対して
意味が定義される操作で、かつ述語なので副作用は本来考えて筈。
そういうのに順序を期待するのは変な感じがする。
927デフォルトの名無しさん:2006/09/23(土) 09:54:13
いや、eachを使うというのがEnumerableの仕様だから、
eachが保証するかぎりは保証されると思っていいよ。
928デフォルトの名無しさん:2006/09/23(土) 11:06:43
eachを無視するクラスもあるから微妙な希ガス。

class 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]
929デフォルトの名無しさん:2006/09/23(土) 11:13:05
何が言いたいんだろう。
930デフォルトの名無しさん:2006/09/23(土) 11:35:44
でもorとかandを分岐に使う奴だっているんだから
any?とかに副作用期待したっていいんじゃね?

まあfindで間に合うんだったら俺だってfind使うけど
931デフォルトの名無しさん:2006/09/23(土) 11:57:21
>>928
Array#collect
932デフォルトの名無しさん:2006/09/23(土) 12:42:21
>>929
eachを再定義してもcollectはそれを無視するということだろう
933デフォルトの名無しさん:2006/09/23(土) 14:57:05
http://ruby.mirror.easynet.be/ja/FAQ/rubyfaq-jp-6.html
moduleをincludeするとincludeしたクラスとis aの関係になると書いてありますがユーティリティメソッド集としてmoduleをincludeするのは間違った使い方?
934デフォルトの名無しさん:2006/09/23(土) 16:38:26
ActiveScriptRuby 1.8.5.1の環境で配列を[]のまま使おうとすると落ちるんですが、他の環境ではどうですか? 1.8.4のときは大丈夫だったような気がするんですが
c:\ruby>ruby -e"puts [2006, 9, 23] "
#=>
[BUG] cross-thread violation on rb_gc()
ruby 1.8.5 (2006-08-25) [i386-mswin32]
935デフォルトの名無しさん:2006/09/23(土) 16:41:58
ActiveScriptRuby 1.8.5.1 で問題なす
936デフォルトの名無しさん:2006/09/23(土) 16:44:00
>>934
やってみたがうちのASR1.8.5では普通に出力されるな。
937デフォルトの名無しさん:2006/09/23(土) 17:05:50
>>927
それはEnumerableをmixinするクラスを書く人に向けた仕様だろ。

mixinした結果得られるany?だとかのメソッドのユーザにとっては、それが
Enumerableの実装そのままだなんてのは関知すべきでない実装上の事情。
適宜コンテナの内部仕様に即した再定義がなされているかもしれない。

例えば、priority queueではinclude?なんかは値によっては前からでなく
後ろから探し始めるよう再定義されてもおかしくない。
938デフォルトの名無しさん:2006/09/23(土) 18:30:21
>>937
> 関知すべきでない実装上の事情

そうなのかな?
あるクラスのユーザは少なくともそのクラスが Enumerable を mixin しているかどうかは
関知しているべきじゃないの?
939デフォルトの名無しさん:2006/09/23(土) 19:35:26
べきじゃない
940デフォルトの名無しさん:2006/09/23(土) 20:48:05
>>939
じゃあどうするべきと思うの?

ユーザはそのクラスが何を mixin しているか知っているべきでないとすると、
そのクラスのメソッドそれぞれがどういう仕様かを
Enumerable の仕様とは別に全てのメソッドについて個別に知っておくべき?

>>937 では、「だからユーザはどうすべきなのか」が読み取れないんだけど。
941デフォルトの名無しさん:2006/09/23(土) 21:03:42
だからユーザはカプセルの中身が気になるなら中を見てそれに応じて実装、
気にならないor気にしたくないなら自分で実装すべきってだけなんでは?
942デフォルトの名無しさん:2006/09/23(土) 21:06:57
>>940
気の利いたマニュアルなら、どういう順番で戻るのか、あるいは順不同なのかが書かれてるはず。
Rubyのマニュアルが今どうなってるのかは知らんけど。
943デフォルトの名無しさん:2006/09/23(土) 21:08:25
>>941 >>942
うーん、それだと差分プログラミングの恩恵が半減な気がするんですが・・・
944デフォルトの名無しさん:2006/09/23(土) 21:11:08
>>943
なぜ?
945デフォルトの名無しさん:2006/09/23(土) 21:45:24
>>943
差分プログラミングが何だかわかってないだろ?
946デフォルトの名無しさん:2006/09/23(土) 22:30:54
>>937
何を寝言いってるんだか。

Enumerable#any?の仕様を知るのにEnumerableのドキュメントなんて読むべき
じゃないってのか?

> 適宜コンテナの内部仕様に即した再定義がなされているかもしれない。
eachに従うってのがEnumerableの仕様。

> 例えば、priority queueではinclude?なんかは値によっては前からでなく
> 後ろから探し始めるよう再定義されてもおかしくない。
そのpriority queueがそういう仕様なら、そいつが明記しておくべきことで、
Enumerableとはまったく関係ない都合だな。

なんでお前の脳内ライブラリの都合までEnumerableが全責任を負わなきゃならんのだ。
947デフォルトの名無しさん:2006/09/24(日) 01:22:40
>>945

差分プログラミングするのに何でカプセルの中まで見なきゃならんのだ?
948デフォルトの名無しさん:2006/09/24(日) 02:43:30
> Enumerable#any?の仕様を知るのにEnumerableのドキュメントなんて読むべき
> じゃないってのか?

Rubyの場合にはドキュメントを見るより、はじめからソースを読んだ方が早くて
正確なことの方が多いな。で、足りなければドキュメントを読む。
949デフォルトの名無しさん:2006/09/24(日) 02:58:20
これだからRubyは…
950デフォルトの名無しさん:2006/09/24(日) 03:04:03
これだからRubyは下手なドキュメントよりコード書く方が早くてわかりやすいと言われるんだよな
951デフォルトの名無しさん:2006/09/24(日) 03:05:35
これだからRubyistは…
952デフォルトの名無しさん:2006/09/24(日) 03:14:55
これだからRubyistは素晴しいコードを書くなんて言われるんだよな
953デフォルトの名無しさん:2006/09/24(日) 03:19:23
実際、他の言語より読むのはラクだ。
ソフトの内容の割に行数が少ないと感じる。
954デフォルトの名無しさん:2006/09/24(日) 03:19:47
ものすごくポジティブな切り返しだな。
955デフォルトの名無しさん:2006/09/24(日) 09:38:10
>>953
>実際、他の言語より読むのはラクだ。 
>ソフトの内容の割に行数が少ないと感じる。 

はたして、読みやすさと、ソフトの割りに行数が少ないことは共存するのだろうか?
956デフォルトの名無しさん:2006/09/24(日) 09:44:56
するでしょ
957デフォルトの名無しさん:2006/09/24(日) 09:54:10
ソフトってなんじゃらほいという話にはなるが、
Rubyスクリプトは高等な(w動作をさせられる場合でも
読み下しやすい短さで書けることが多いとは感じる
958デフォルトの名無しさん:2006/09/24(日) 10:02:48
pythonで定積分。
def 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で、関数を引数にするにはどうするの?
959デフォルトの名無しさん:2006/09/24(日) 10:06:12
いくら短くても inject 使われてたらあほな俺にはそれ以降読めん。
960デフォルトの名無しさん:2006/09/24(日) 10:27:37
>>958
pythonのコードでインデントが消えるのって致命的だなあ。

それはともかく、こんな感じかと。
コピペするなら全角スペースは適当に置換してね。

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}
961958:2006/09/24(日) 11:36:08
>>960 THX! すごく勉強になった
962デフォルトの名無しさん:2006/09/24(日) 11:43:57
p integrate(0.0, 1.0, 0.01){|x| x*x} の二番目の引数を増やしていくと
SEGVする件について。
963デフォルトの名無しさん:2006/09/24(日) 11:47:16
3.72まで大丈夫だった
964デフォルトの名無しさん:2006/09/24(日) 13:16:08
>>948
話がわかってないな。
965デフォルトの名無しさん:2006/09/24(日) 15:04:34
>935-936
あいや、再現条件が間違ってました。
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()
966デフォルトの名無しさん:2006/09/24(日) 15:09:28
折れは1.38で落ちた。mswin32。(Pythonは9.0でもOKだった)
967デフォルトの名無しさん:2006/09/24(日) 15:19:16
>>932
Enumerable を include しておきながら collect は Array でオーバーライドしてるとすると、
それは Array#collect のドキュメントに明記しておかないとまずくね?
968デフォルトの名無しさん:2006/09/24(日) 15:34:16
話が見えない。
969デフォルトの名無しさん:2006/09/24(日) 15:48:23
つまりこういうことさ。
Rubyだってソフトウェアなんだから、I/Fをドキュメントに書き、カプセル化された内部実装は参照する必要をなくすべき、って奴と、オプソなんだからソース嫁、って奴の意見が割れてるのさ。
970デフォルトの名無しさん:2006/09/24(日) 16:04:02
>>969
そんなことまで言ってないよ。

継承してるなら継承元のドキュメントだけあれば良いけど、
継承していながらオーバーライドしてるメソッドがあるなら、
サブクラスのドキュメントにはそう明記すべき。

ハナっからドキュメントがなければないで「ソース嫁」でもいいけどね。
ドキュメントがありながら、それがミスリードするようなものであるならそれはまずい。
971デフォルトの名無しさん:2006/09/24(日) 16:32:42
ソースが仕様だと、仕様とバグの区別がつかなくなる希ガス
972デフォルトの名無しさん:2006/09/24(日) 16:36:50
第二引数をいくら増やしてもSEGVしなかった。

あと、Rubyには関数内関数なんてのはないから
内側のdefは外に出すべき。
973デフォルトの名無しさん:2006/09/24(日) 16:38:10
>>965
system32ディレクトリの中に、違うバージョンの
msvcrt-ruby18.dllとかがはいってるんじゃない?
974デフォルトの名無しさん:2006/09/24(日) 17:41:35
>>967
---------------------------------------------------------- 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"]

975デフォルトの名無しさん:2006/09/24(日) 19:20:17
>>974
refe やリファレンスマニュアルには載ってないよ。
976デフォルトの名無しさん:2006/09/24(日) 20:47:58
エポック(1970/01/01)からの経過秒数が既知の場合に
日付と時刻を出力するにはどうすればよいですか?

input : 10 (数字)
output : 1970/01/01 00:00:10 (文字列)
977デフォルトの名無しさん:2006/09/24(日) 20:57:15
リファレンスマニュアルのTimeクラスについてよく読め。
978976:2006/09/24(日) 21:08:44
>>976

自己解決
Time.at()で可能。ただし指定する秒数があまり大きいとNGを返す。
:in `at': bignum too big to convert into `long' (RangeError)
979デフォルトの名無しさん:2006/09/24(日) 21:50:00
Windowsで、数MBから数百MBのテキストを変換するスクリプトを
作ったのでWxRubyで簡単なGUIを作りました、が、

実行するとCPUの使用率が100%になって、ウィンドウが応答不能に
なります。一応、処理が完了すれば復帰します。

少々処理速度を犠牲にしても、きれいにGUIから実行できるよう
にしたいのですが、もしあればノウハウをご教示いただけませんでしょうか。

GUIとは別のThreadで処理させるなどしてみたのですが、そうしたら
今度は待てど暮らせど変換が終わらなくなってしまいました・・・。
980デフォルトの名無しさん:2006/09/24(日) 22:06:46
>>979
うーん。普通に、他の言語で作っても、そうなると思うけど(GUIが固まる)
別スレッドにしないと。Threadが上手く行かないのは、技術力の問題では?
981デフォルトの名無しさん:2006/09/24(日) 22:14:53
foreach = flip mapM_
というのに気づいて腹が立った
982981:2006/09/24(日) 22:16:36
誤爆
983デフォルトの名無しさん:2006/09/24(日) 22:23:16
>>980

技術力、全くもってその通りだと思います・・・。
で、申し訳ないんですが、もうちょっとだけ質問。

ものすごく基本的なことかもしれませんが、スレッドには
優先順位はつけられるけど、リソース配分みたいなことは
できないんですよね?

あと、馬力のいる処理をさせるときCPU使用率が100%に
ならないようにするいい方法はあるでしょうか。とりあえず
sleepをはさんだりしているんですが、それってありですか?
984デフォルトの名無しさん:2006/09/24(日) 22:26:07
>>983
Windowsしかしらんが、優先順位はつけられなかったとおも。
適時sleepして、CPUに処理返すのは有効手段かと。
985デフォルトの名無しさん:2006/09/24(日) 22:28:08
> 優先順位はつけられなかったとおも。
優先順位しかつけられなかったとおも。
986デフォルトの名無しさん:2006/09/24(日) 22:35:05
http-access2で、http-clinentオブジェクトが勝手にクッキーを処理するのを
やめさせたいんですが
987デフォルトの名無しさん:2006/09/24(日) 22:40:33
>>985
やっぱりそうですか。
とりあえずsleepで微調整していこうと思います。
ありがとうございました。
988デフォルトの名無しさん:2006/09/25(月) 23:14:44
Windows、ActiveScript-RubyにMeCabのバインディングを入れているには、
どのようにインストールすれば良いのでしょうか。
989デフォルトの名無しさん:2006/09/25(月) 23:17:25
>>988
「てい」が余計でした
990デフォルトの名無しさん:2006/09/27(水) 21:03:05
>>988
前にいっぺんCygwin版でやったけど、結構めんどくさいんだよねー
今はあきらめてChaSenをWin32APIで呼び出して使ってる
(『恋するプログラム―Rubyで作る人口無能』を参考にした)
MeCabも同じような方法で呼び出せるかも知れんけど
俺も初心者なので、あんまり詳しいところはよくわからない
991デフォルトの名無しさん:2006/09/27(水) 21:28:53
# ruby -v
ruby 1.8.5 (2006-08-25) [i386-freebsd5]

なのに、<%= RUBY_VERSION %>が 1.8.4 なのはがい出?
気持ち悪いんだけどどこ直せばいいんでしょうか?
992デフォルトの名無しさん:2006/09/27(水) 22:21:42
>>991
どうやってインストールしたの?
993デフォルトの名無しさん:2006/09/27(水) 22:59:12
>>992
ごめんなさい
/usr/bin/env ruby -e "p RUBY_VERSION"
してみたら 1.8.5 だったので、調べてみたところ tdiary のキャッシュのせいでした
<%= RUBY_VERSION %>って eval されないのね。お騒がせしてすみませんでした
994デフォルトの名無しさん:2006/09/27(水) 23:32:34
>>990
レスありがとうございます。茶筅ためしてみます。
995デフォルトの名無しさん:2006/09/28(木) 14:42:47
apt-get install `apt-cache search -n ruby1.8 | cut -d ' ' -f 1` irb1.8 rdoc1.8 ri1.8
をしたところ、
E: パッケージ irb1.8 が見つかりません、となるのですが、どうしたらインストールできますか?
ubuntuです。
996デフォルトの名無しさん:2006/09/28(木) 14:46:54
>>995
お、俺もubuntu使い。奇遇だね。
apt-cache search irb
で、ちゃんと見つけてくれてる?
997sage:2006/09/28(木) 14:51:12
ruby1.8 - Interpreter of object-oriented scripting language Ruby 1.8
と表示されました。
998デフォルトの名無しさん:2006/09/28(木) 15:11:07
>>997
それだけ?ズラズラいくつか表示された中に
irb1.8 - Interactive Ruby (for Ruby 1.8)
って、無い?
999デフォルトの名無しさん:2006/09/28(木) 15:12:38
もしくは、
irb - Interactive Ruby (irb)
でもいいや。
1000デフォルトの名無しさん:2006/09/28(木) 15:29:39
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。