Ruby 初心者スレッド Part 34

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

★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
   (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に完全対応していないためです。)
 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 を習得すれば将来スムーズに 1.9 系に移行できるでしょう。

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

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

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
2デフォルトの名無しさん:2010/01/28(木) 08:40:04
【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?

A:
プログラム作成自体の初心者なら
 ・「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
  http://www.amazon.co.jp/dp/4797336617/
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
 ・「初めてのRuby」
  http://www.amazon.co.jp/dp/4873113679/

以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください。
 ・「Rubyレシピブック 第2版 268の技」(初心者向け)
  http://www.amazon.co.jp/dp/4797340045/
 ・「プログラミングRuby 第2版 言語編」(初心者向け)
  http://www.amazon.co.jp/dp/4274066428/
 ・「Ruby Way 第2版」(脱初心者向け)
  http://www.amazon.co.jp/dp/4798115339/
 ・ 「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
  http://www.amazon.co.jp/dp/4873113245/

以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません。
 ・「プログラミング言語 Ruby」(言語として深く知りたい人向け)
  http://www.amazon.co.jp/dp/4873113946/
3デフォルトの名無しさん:2010/01/28(木) 08:40:46
Ruby 公式・非公式便利サイト2009

・Ruby Home Page 【公式、お役立ち度が微妙】
 http://www.ruby-lang.org/ja/
・Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
 http://www.ruby-lang.org/ja/man/
 http://www.ruby-doc.org/ 【詳しい英語版】
・HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
 http://elbereth-hp.hp.infoseek.co.jp/ruby.html
・Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
 http://www.ruby-doc.org/docs/ProgrammingRuby/
・Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
 http://jp.rubyist.net/magazine/

・逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
 http://www.namaraii.com/rubytips/
・はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
 http://d.hatena.ne.jp/keyword/Ruby

・RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
 http://www.rubyforge.org/
・GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
 http://github.com/

・日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
 http://jp.rubyist.net/
4デフォルトの名無しさん:2010/01/28(木) 08:43:07
●関連スレ
・Rubyについて Part 38
http://pc12.2ch.net/test/read.cgi/tech/1257079004/
●アンチスレ
・Rubyについて(アンチ専用) Part004
http://pc12.2ch.net/test/read.cgi/tech/1249737531/
●Railsスレ
・【Ruby】Ruby on Rails Part8
http://pc11.2ch.net/test/read.cgi/php/1252842574/
●Windows用スレ
・【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
●Ruby 1.9 系列スレ
・魁け! Ruby 1.9.X
http://pc11.2ch.net/test/read.cgi/tech/1201603546/

●前スレ
Ruby 初心者スレッド Part 33
http://pc12.2ch.net/test/read.cgi/tech/1259990485/
Ruby 初心者スレッド Part 32
http://pc12.2ch.net/test/read.cgi/tech/1256332692/
Ruby 初心者スレッド Part 31
http://pc12.2ch.net/test/read.cgi/tech/1253176267/
5デフォルトの名無しさん:2010/01/28(木) 08:46:07
バージョンに関するよくある質問

・Ruby 1.8.5
 レンタルサーバ等にいまだに残ってる非安定な古いバージョン
 1.8.6 にすらなってない理由はたぶん管理の手抜きなので怒ってよい

・Ruby 1.8.6
 過去の長期政権と数の暴力で一大勢力圏を維持中の旧安定版
 公開スクリプトはこれでも動作するべきではあるんだがそろそろ 1.8.7 に譲ってくれ

・Ruby 1.8.7
 1.9 シリーズの機能をいくつか足したハイブリッドなバージョン、初学者にこそお勧め
 1.9 系機能は 1.8.6 では動かないが「えーマジ1.8.6!? 1.8.6が許されるのは小(AA略」と煽ってよい

・Ruby 1.9.0
 不安定にして先鋭機能が超満載の開発版バージョンだったもの
 1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に

・Ruby 1.9.1
 満を持して登場の 1.9 系列安定板(本体は 1.8.6 程度には使えるということになっている)
 本体と添付ライブラリの動作は問題がないのだが外部第三者ライブラリが全く追いついていない
 初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中
6デフォルトの名無しさん:2010/01/28(木) 09:42:59
本スレより。

764 名前:デフォルトの名無しさん[sage] 投稿日:2010/01/28(木) 07:15:32
初心者スレが落ちてるのでこっちで。
関数で呼び出し元のselfを自動で引数として受け取るようにす
ることってできますか。
こんな感じで。

def func(hoge=呼び出し元のself)
  p hoge
end

モジュールにしてMix-inさせるとかは無しでお願いします。
7デフォルトの名無しさん:2010/01/28(木) 09:47:11
スレ立て乙

>>6
呼び出し元で this を渡してやるしかないかなぁ。
8デフォルトの名無しさん:2010/01/28(木) 09:56:42
thisってなんですか?
thisってなんですか?
thisってなんですか?
thisってなんですか?
thisってなんですか?
9デフォルトの名無しさん:2010/01/28(木) 10:16:25
ルー語も知らないゆとりか
10デフォルトの名無しさん:2010/01/28(木) 10:19:38
そっちのほうが余計意味通らんわwwww
11デフォルトの名無しさん:2010/01/28(木) 10:33:06
渡す方が this で受け取る方が self っつーのもなんだかなぁ
12デフォルトの名無しさん:2010/01/28(木) 10:44:50
DateTimeとかで27時など、24時を過ぎた時間を上手く扱う方法はありますか?

「2010年1月28日 26時30分」
t1 = DateTime.new(2010, 1, 28, 26, 30)
はinvalid dateになります。

今はactive_supportを使って、
「2010年1月28日 26時30分」を
t2 = DateTime.new(2010, 1, 28, 0, 0)
t2 = t2.advance :hours => 26
t2 = t2.advance :minutes => 30

とやっています。これで月末や年末の年月日時の繰り上げもうまく動きます。

問題は逆方法で、
t2.to_s
をするときに、「2010年1月28日 26時30分」の形式にする、
便利なヘルパーメソッドとかはあるのでしょうか?

13デフォルトの名無しさん:2010/01/28(木) 10:47:19
>「2010年1月28日 26時30分」の形式にする
無茶言うな

あったらあったで楽しそうだが
14デフォルトの名無しさん:2010/01/28(木) 10:49:32
じゃあ翌日午前10時は前日の34時かというとそうではないわけで
(たぶんそれは10時のままにして欲しいと言うはず)
自前で適当だと思う範囲を変換して作るしかないね
15デフォルトの名無しさん:2010/01/28(木) 11:02:12
27時はありだけど28時はないんだそうだ
28時と表現したら怒られた
よくわからん
16デフォルトの名無しさん:2010/01/28(木) 12:29:14
関数ってなんですか?
Kernel.private_instance_methods(false)のことですか?わかりません><
17デフォルトの名無しさん:2010/01/28(木) 14:29:16
>>15
マスコミ関係の方ですか?
18デフォルトの名無しさん:2010/01/28(木) 16:25:43
str = 'first,second"a,b,c"second,third'

という文字列があったとして
ダブルクオーテーションの中以外のカンマにマッチする正規表現ってありませんか?
19デフォルトの名無しさん:2010/01/28(木) 16:57:00
Ruby関係ねえええ
20デフォルトの名無しさん:2010/01/28(木) 17:10:46
irb> str = 'first,second"a,b,c"second,third'
irb> p str.gsub(/".+?"/){' '}.gsub(/,/){' '}
"first second second third"

こんなんじゃ駄目なんだろうなあ
21デフォルトの名無しさん:2010/01/28(木) 17:24:03
>>18
最終的にしたいことは何でしょうか?

ダブルクオーテーションの中以外のカンマの数を数えたいとか、
ダブルクオーテーションの中以外のカンマでsplitしたいとか。
22デフォルトの名無しさん:2010/01/28(木) 17:30:18
>>21 後者です。
str.split(regexp) #=>["first", "second\"a,b,c\"second", "third"]
というのを期待しています。
ダブルクオーテーションはネストしないと仮定しています。
正規表現は難しいです。
23デフォルトの名無しさん:2010/01/28(木) 17:36:58
>>19
正規表現スレを見つけました。
正規表現スレに移動した方がよろしいでしょうか?
24デフォルトの名無しさん:2010/01/28(木) 17:47:26
>>22
うおめんどくさ
25デフォルトの名無しさん:2010/01/28(木) 18:08:58
題意に沿わず、長く、そして美しくない

str = 'first,second"a,b,c"second,third'

require 'strscan'
COMMA = /\A,\Z/
QUOTE = /".*?"/
SCAN_REG = /#{QUOTE}|./
def parse(str)
result = [""]
scanner = StringScanner.new(str)
while match = scanner.scan(SCAN_REG)
case match
when COMMA; result << ""
else ; result.last << match
end
end
result
end

p parse(str) #=> ["first", "second\"a,b,c\"second", "third"]
26デフォルトの名無しさん:2010/01/28(木) 18:11:07
>>23
多分、正規表現だけでは無理なのでここでいいんじゃないかな
27デフォルトの名無しさん:2010/01/28(木) 18:30:36
一応出来た。でもバグがあるかもしれないから(;_;)
僕にもっと考える時間と頭をください。

条件を満たすカンマにマッチする正規表現を考えるから難しいのかなー、と思って
違う考え方をしてみた。

str = 'first,second"a,b,c"second,third'
str.scan /(?:[^",]+"[^"]+"[^",]+)+|[^,]+/
=> ["first", "second\"a,b,c\"second", "third"]

あとは、これを頭のいい人が改良するだけでつ(;_;)
2827:2010/01/28(木) 18:47:21
うわ、やっぱりバグありまくりですね。

個人的には、正規表現は難しいし、魔法じゃないし
言語のチカラを借りて何とかする方が楽かなー、って思う。

んと、C使いだったら一文字ずつ調べてみるけど...
29デフォルトの名無しさん:2010/01/28(木) 18:49:45
30デフォルトの名無しさん:2010/01/28(木) 19:24:17
一旦NUL文字にして、後で戻すとかどう?

str = 'first,second"a,b,c"second,third'
arr = str.gsub(/".*?"/){|m| m.gsub(/,/, "\0")}.split(/,/).map{|a| a.gsub(/\0/, ',')}
p arr #=> ["first", "second\"a,b,c\"second", "third"]
3118:2010/01/28(木) 19:52:09
短時間にこれだけレスを頂けるとは思ってもみませんでした。

>>27
カンマ以外の文字列からアプローチする方法は思いつきませんでした。
発送の転換ですね。
一文字づつ調べるというのは>>25氏の方法に近いですね。

>>30
この方法は漏れが少なそうに思います。

>>27氏と>>30氏の方法をベースに検討してみようと思います。
ありがとうございました。

32デフォルトの名無しさん:2010/01/28(木) 20:03:12
/(?:[^",]*"[^"]*"[^",]*)+|[^,]+/

こんな感じニカ?
33デフォルトの名無しさん:2010/01/28(木) 21:18:59
鬼車の田中哲スペシャルってこーゆーとき活用できるもん?
34デフォルトの名無しさん:2010/01/28(木) 21:41:50
面倒臭いから区切りを " " にするよう説得して Shellwords.shellwords を使う。だめか。
CSV だと思って CSV.parse_line する。だめだって。通らないし。
35デフォルトの名無しさん:2010/01/28(木) 21:50:19
問答無用で , で豚切りしてから、
" を含む物から次の " を含むものまでを , で連結したものに置換える。
36デフォルトの名無しさん:2010/01/28(木) 22:19:46
>>35
それだと分割したリストを"求めて尋ねる歩く旅に出ないといけなくなるわけだが・・・
37デフォルトの名無しさん:2010/01/28(木) 22:52:03
基本、このタイプは無闇にめんどくさい
38デフォルトの名無しさん:2010/01/29(金) 06:11:42
RubyはC言語で出来ているのでしょうか?
39デフォルトの名無しさん:2010/01/29(金) 06:42:16
>>38
そうだよ。なんならソースをダウンロードして中身をのぞいてみたら?
それを知ってどうするのかは知らんけどさ。
40デフォルトの名無しさん:2010/01/29(金) 08:35:40
それでも鬼車なら・・・鬼車ならきっと何とかしてくれる
41デフォルトの名無しさん:2010/01/29(金) 10:03:32
Ruby 初心者スレッド Part 33
http://pc12.2ch.net/test/read.cgi/tech/1259990485/998

> 998 名前:デフォルトの名無しさん[sage] 投稿日:2010/01/27(水) 09:38:00
> Rubyですごい事が出来た実例を教えて下さい。

Ruby(Rails)で上場しちゃった会社(というと語弊があるがw)

クックパッド(株)【2193】:銘柄情報 - Yahoo!ファイナンス
http://stocks.finance.yahoo.co.jp/stocks/detail/?code=2193
42デフォルトの名無しさん:2010/01/29(金) 10:59:48
> 998 名前:デフォルトの名無しさん[sage] 投稿日:2010/01/27(水) 09:38:00
> Rubyですごい事が出来た実例を教えて下さい。

昔から使ってる人間としては、Rubyで生計を立ててる人がいる時点で信じられん
43デフォルトの名無しさん:2010/01/29(金) 11:16:40
>>42
20年も経てば、あなたがたはRubyに税金をかけるようになるでしょう
44デフォルトの名無しさん:2010/01/29(金) 11:18:45
>>18
出遅れた気がするけど、
str = 'first,second"a,b,c"second,third'
str.scan(/(?:^|\G,)([^",]*(?:"[^"\\]*(?:\\.[^"\\]*)*"[^",]*)*)/).map{|a|a[0]}
45デフォルトの名無しさん:2010/01/29(金) 11:19:48
>>43
すでに未踏経由で1000万以上税金突っ込ん出るよ、その成果の一つがYARVだ
46デフォルトの名無しさん:2010/01/29(金) 11:35:56
>>43
いや電気ほどにはすごくないw
47デフォルトの名無しさん:2010/01/29(金) 11:56:00
ファラデーか
48デフォルトの名無しさん:2010/01/29(金) 13:57:49
str.scan /(?:[^",]|"[^"]*?")+|(?=,,|^,|,$)/
49デフォルトの名無しさん:2010/01/29(金) 14:27:24
メンテナンスしたくない正規表現が続々届いております
50デフォルトの名無しさん:2010/01/29(金) 14:31:56
正攻法は>>25、LLっぽいのは>>35だと思う
51デフォルトの名無しさん:2010/01/29(金) 14:36:07
>>49
ちょっと変えたいときに悲惨だな
これくらいは読めて欲しい気もするが
52デフォルトの名無しさん:2010/01/29(金) 15:51:35
\Gの使い方がよくわからなかった自分としては>>44が勉強になった
53デフォルトの名無しさん:2010/01/29(金) 15:53:13
最終的には読めて欲しい
初級を脱したと思ってる人は読めて欲しいなー
54デフォルトの名無しさん:2010/01/29(金) 16:34:07
読めても変えたくないエンバグしそう
55デフォルトの名無しさん:2010/01/29(金) 16:36:13
>>44 の修正、一般にCSVでは"のエスケープは""
str.scan(/(?:^|\G,)([^",]*(?:"[^"]*(?:""[^"]*)*"[^",]*)*)/)
5627:2010/01/29(金) 16:45:09

なるほど。勉強になったthx
57デフォルトの名無しさん:2010/01/29(金) 19:46:41
>>49
正規表現をくれということだから仕方ない
58デフォルトの名無しさん:2010/01/29(金) 20:15:46
mingw版のRuby1.8.7バイナリって特にはない?
自力でMinGW導入して手元でコンパイルするしかないのかな
59デフォルトの名無しさん:2010/01/29(金) 20:30:14
コンパイルしてみたら?
きっと親切なおじさんたちが助けてくれるさ
60デフォルトの名無しさん:2010/01/29(金) 21:07:20
えー

ひとつだけ質問
Net::HTTPSが使うOpenSSLやirbが使うReadlinesとかは放っておいても入る?
んなわけないよね別途用意しなきゃ駄目だよね
61デフォルトの名無しさん:2010/01/29(金) 21:39:37
62デフォルトの名無しさん:2010/01/29(金) 21:41:31
%w記法で空文字列の要素はどうやって作るの?
6360:2010/01/29(金) 21:44:46
C:\Documents and Settings\俺\デスクトップ>gem install rake
C:/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_origin
al_require': no such file to load -- zlib (LoadError)

うひょう
64デフォルトの名無しさん:2010/01/29(金) 21:44:57
%Wならできるが、%wでは無理だね
65デフォルトの名無しさん:2010/01/29(金) 21:45:46
%wじゃむりじゃね?
大文字の方なら
p %W[hoge fuga #{nil} ] #=>["hoge", "fuga", ""]
66デフォルトの名無しさん:2010/01/29(金) 21:53:29
式展開じゃないとダメか
#{nil}はnilになるのかと思ったら""なのね。何で? nil要素は作れない?
67デフォルトの名無しさん:2010/01/29(金) 21:57:08
要素が文字列である配列を作る記法だからでしょう
またレスかぶりそう
68デフォルトの名無しさん:2010/01/29(金) 22:05:56
了解。みんなありがと
69デフォルトの名無しさん:2010/01/29(金) 22:11:45
>>66
irb(main)> "#{nil}"
=> ""
70デフォルトの名無しさん:2010/01/29(金) 22:25:58
>>58
いろいろあったんだが、Windowsの場合は自分だけMinGW32にしても意味がない、という結論に至った
配布されてるバイナリのバージョンと揃えておいて、同じようにエラー出したり同じように変な動きしたりするほうがいい
71デフォルトの名無しさん:2010/01/29(金) 22:30:02
普段CをMinGWでコンパイルしていて
Rubyの拡張ライブラリもMinGWでコンパイルしたいんだもん
という人がRubyをMinGWでコンパイルしているんだと思う。
あとメンテナか。
72デフォルトの名無しさん:2010/01/29(金) 22:36:41
これからMinGWにしてこうぜー、という動きがあるのはある気がするが
「よくわかんないいっぱんゆーざー」がわざわざコンパイルしてまで使用するようなもんでもない

ただしMinGWの知識がある人はどんどん使って色々言ってくれ
73デフォルトの名無しさん:2010/01/29(金) 23:09:14
class NiseArray < Array; end

a = NiseArray.new
p a.class #=> NiseArray

b = a.map{}
p b.class #=> Array

bがワナビーNiseArrayなんだがドゥーしたらいいんだ?
オレにティーチしてくれよ。
74デフォルトの名無しさん:2010/01/29(金) 23:25:11
セルフのクラスのオブジェクトをリターンするようにデファインされてないんだよな
継承を考慮してないもともとのクラスのデザインのミステイクではある
75デフォルトの名無しさん:2010/01/29(金) 23:31:20
Enumerableはeachさえあれば配列じゃなかろうと動くようにしてあるんだから仕方ない
ArrayのメソッドならちゃんとNiseArrayが返すはず
76デフォルトの名無しさん:2010/01/29(金) 23:36:39
ビルトインクラスは普通のオブジェクトと微妙に構造が違うから継承すんなボケ、
っつーかお前のそのクラスはビルトインクラスを継承するだけの動作をするのか、あー? という怖い感じのが一応スタンス

メソッドが欲しいだけなら普通は委譲を使う
77デフォルトの名無しさん:2010/01/29(金) 23:39:33
委譲遅いじゃん
はい論破
78デフォルトの名無しさん:2010/01/29(金) 23:41:22
委譲とかあのへんは遅いよね
継承を使いたくなるくらい遅いというのは実効上の説得力がない
79デフォルトの名無しさん:2010/01/29(金) 23:41:44
この例に限って言えば dup/clone してから map! すりゃいいんじゃね
80デフォルトの名無しさん:2010/01/29(金) 23:44:04
>>78
ディスパッチテーブルを
もう一回引く程度のコストが許容できないなら
その問題にRubyは使えないんじゃないかね
8173:2010/01/30(土) 00:17:48
Arrayオリジナルのメソッドでcollect/mapとselectはNiseArrayではなくArrayを返す。
ほかはNiseArrayを返す。
あとEnumerableは基本的にArrayを返す。
これらは継承では全滅ということでOKですか?

delegateに馴染みがないので軽いサンプルをいただけると助かります。
もちろん自分でリファレンスマニュアルを読んでみます。
82デフォルトの名無しさん:2010/01/30(土) 01:32:52
>>81
自作ライブラリのコード漁ってたらこんなの出てきた
でも、正直これは設計ミスだったと思ってる

%w{ find_all reject select sort sort_by }.each do |method|
class_eval %{
def #{method}
self.class.new(super)
end
}
end
%w{ & * + - grep }.each do |method|
class_eval %{
def #{method}(arg)
self.class.new(super)
end
}
end
8382:2010/01/30(土) 06:10:54
話の流れ上 delegate のサンプルを貼るべきところだったな、ごめんw
継承するとこうなるぞってことで
8473:2010/01/30(土) 10:50:29
#-----hoge1.rb
class NiseArray < Array
instance_methods.each do |method|
define_method(method) do |*args, &block|
result = super(*args, &block)
result.class == Array ? NiseArray.new(result) : result
end
end
end
p NiseArray.new.map{}.class #=> NiseArray

#-----hoge2.rb
require 'delegate'
class NiseArray < DelegateClass(Array)
def initialize
super(Array.new)
end
end
p NiseArray.new.map{}.class #=> Array

#なんでノットNiseArrayなのかミーにはホワイなんです><
85デフォルトの名無しさん:2010/01/30(土) 14:01:51
class A
def initialize(a=Array.new); @a=a; end
def method_missing(*arg, &block); A.new(@a.__send__(*arg, &block)); end
def to_a; @a; end
def to_ary; @a; end
end

irb> a = A.new([1, 2, 3, 4, 5])
irb> a.delete(5)
irb> p a
#<A:0xb7cf21c0 @a=[1, 2, 3, 4]>
irb> p a.map{|e| e*2}
#<A:0xb7cecb30 @a=[2, 4, 6, 8]>
irb> p a.class
A
irb> p a.to_a
[1, 2, 3, 4]
irb> p Hash[*a]
{1=>2, 3=>4}
8673:2010/01/30(土) 14:46:42
おおお素晴らしい
鮮やかに委譲してますね。
しかも直感的でわかりやすい。

#all?など返り値が委譲先のオブジェクトでないメソッドも少し手直しすれば動きそうです。
勉強になりました。参考にさせてもらいます。
87デフォルトの名無しさん:2010/01/30(土) 17:55:24
$KCODE='u'
'あ' =~ /\xe3/ #=> 0
'あ' =~ /[\xe3]/ #=> nil

となります。

$KCODEを指定しないとどちらも同じ挙動になるんですが。

これは意図した動作なんでしょうか。

手元の環境は
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
です。
88デフォルトの名無しさん:2010/01/30(土) 18:58:31
$KCODEのデフォルトは n なので、
$KCODE を設定しないということは
'あ' はただのバイト列として 0xe3 と比較される。
89デフォルトの名無しさん:2010/01/30(土) 19:11:04
おや、'u'のとき前者がマッチするのか…
90デフォルトの名無しさん:2010/01/30(土) 22:20:20
p BasicObject === BasicObject #=> true
p Class === Class #=> true
p Module === Module #=> true
p Object === Object #=> true

p String === String #=> false
p Array === Array #=> false

p BasicObject.class #=> Class
p Array.class #=> Class

p Kernel === Kernel #=> true
p Enumerable === Enumerable #=>false

p Kernel.class #=> Module
p Enumerable.class #=> Module

なんで?教えてえらい人!
91デフォルトの名無しさん:2010/01/30(土) 22:52:30
>>90
Module#===の定義をリファレンスで読むといいよ
selfがモジュールとすると「obj.kind_of?(self) が true の場合、 true を返します」だとさ
92デフォルトの名無しさん:2010/01/30(土) 23:00:03
驚き最小!
93デフォルトの名無しさん:2010/01/30(土) 23:21:41
>>90
===
94デフォルトの名無しさん:2010/01/30(土) 23:22:47
ミスったw
=== が再定義されているから

case value
when Integer
when String
end

みたいに書けるんじゃないか
95デフォルトの名無しさん:2010/01/31(日) 00:08:03
Proc#===の定義は見ただけでは何を意図したものか分からなかったな…
96デフォルトの名無しさん:2010/01/31(日) 07:39:30
||= って何なんでしょう?
代入文みたいに a ||= {} 使うみたいな
辞書の割り当てとかでしょうか?
97デフォルトの名無しさん:2010/01/31(日) 07:55:53
Marshal.dumpでsingleton can't be dumpedというエラーになって悩んでます
objの中身はライブラリから返されたもので詳細はわかりません

p obj.class #=> Hash
p obj.is_a? Singleton #=> false
Marshal.dump(obj) #=> TypeError: singleton can't be dumped

以下はエラーになりませんでした
obj.each {|k,v| Marshal.dump([k,v])} #=>エラーなし
98デフォルトの名無しさん:2010/01/31(日) 08:13:23
>>97
そのエラー分かりにくいよね
特異メソッド(およびそれが定義されているオブジェクト)はダンプできませんよって意味
dupしたものをダンプするようにするか、自分で言ってるように中身だけ出すのが正解
99デフォルトの名無しさん:2010/01/31(日) 08:40:37
>>96
これ書いてる解説少ないんだよな

a がNameErrorを返すか、変数 a が存在して偽を返す場合、 a = {} を実行する

という程度の意味
実際のスクリプトでは大量に使われているが、初心者用文法解説ではほとんど言及されていない謎の記述
100デフォルトの名無しさん:2010/01/31(日) 09:18:07
>>96
a += 1
a = a + 1

a ||= {}
a = a || {}

a が偽と評価される場合に限り a = {} となり、それ以外のときは a = a
変数の初期化を保証するために使われることが多い
101デフォルトの名無しさん:2010/01/31(日) 09:23:09
>>100
だいたいの意味はそうだからいいんだけど、厳密には
a || (a = b)
ってことになる
||= と &&= だけちょっと特殊

ってようなのをどっかで見た
102デフォルトの名無しさん:2010/01/31(日) 11:13:45
>>101
http://doc.okkez.net/187/view/spec/operator#selfassign

まあobj.foo = obj.fooに副作用がある設計のほうがどうかと思うけどな
103デフォルトの名無しさん:2010/01/31(日) 14:11:36
>>98
ありがとうございます
objは再帰的なHashなようでdumpできないオブジェクトが入っている場所は一定ではないようです
またTrueClassなどdupできないものも含まれているようです
一気に特異メソッドを取り除いてdumpする方法はないでしょうか?
104デフォルトの名無しさん:2010/01/31(日) 14:26:44
初めてRubyいじる必要が出てきて,このスレに来てみたが
ここ初心者レベルじゃないね。
初心者抜け出して中級者に手が届こうとしてる人たち向けの
初心者脱出スレだな。
105デフォルトの名無しさん:2010/01/31(日) 14:29:35
>>104
いや別に

puts と p はどう使い分けるんですかみたいな質問でも構わないよ
全く知らないと小難しそうな領域に踏み込めるようになるまでの時間が短い言語だとでも思ってくれ

実行速度がスクリプト言語として普通なレベル(つまり速いわけではない)という点以外は初心者にやさしいほうだと思うけどね
106デフォルトの名無しさん:2010/01/31(日) 14:41:46
初心者の質問にでも
初心者抜け出して中級者に手が届こうとしてる人たちも含めていろんな人が答えるスレでしょ
初心者の質問がなけりゃそのちょっと上の会話になるさ
107デフォルトの名無しさん:2010/01/31(日) 14:44:02
>>103
ライブラリ提供者が提供してないのなら目視で取り除くしかないよ
普通は dump というメソッドを作ってあったりするもんなんだけどね
108デフォルトの名無しさん:2010/01/31(日) 15:15:55
>>104
大丈夫、そういう場合は自分のような脱初心者(+ニート)が回答するから。
ただ、2chだから超初心者質問には悪態をつく人間がいることは覚悟しておいたほうがいいかも。
109デフォルトの名無しさん:2010/01/31(日) 16:12:23
相手は人間だから、あんまり馬鹿っぽい質問じゃねえ。
それなりに調べて来ないと駄目でしょ。

思考停止して単位欲しいとかなら

http://pc12.2ch.net/test/read.cgi/tech/1200175247/
Rubyの宿題教えてください。2限目

とか。
110デフォルトの名無しさん:2010/01/31(日) 16:22:38
自分の質問が馬鹿っぽいかどうかが分かるなら、
既にそいつは上級者だろw
まあ確かに、自力で最低限ぐぐるくらいのことはしてほしいとは思う
111デフォルトの名無しさん:2010/01/31(日) 16:26:38
最近の質問はちょっとレベル高かったからなー
むしろ私にも答えられるような初歩的な質問キボンヌ
112デフォルトの名無しさん:2010/01/31(日) 16:33:04
>>103
Marshalじゃなくてyamlか何かでダンプするようにするのが一番楽
113デフォルトの名無しさん:2010/01/31(日) 18:48:05
オブジェクトの中身をろがーに吐かせたいんだけど
inspectじゃなくてppみたいに見やすく文字列化してくれるやつない?
114デフォルトの名無しさん:2010/01/31(日) 19:23:46
>>113
require 'StringIO'
require 'pp'

h = { 1=> '1234567890'*5, 2=> '1234567890'*5 }
sio = StringIO.new
PP.pp(h, sio, 79) # 79文字までは改行しない
sio.rewind
puts '========================'
puts sio.read


puts で表示されてるのがわかるかと思う
115デフォルトの名無しさん:2010/01/31(日) 19:28:48
pretty_inspect
116デフォルトの名無しさん:2010/02/01(月) 05:34:01
Rubyは今後10年使われますか?
117デフォルトの名無しさん:2010/02/01(月) 06:17:43
>>111
てかRuby初心者スレは実質「Ruby質問スレ」と言ってもいい
超初心者からRubistまで、幅広く質問を受け付けるスレって感じがする

…てか、もうスレタイ変えちゃって良いんじゃないか、ここ…?
118デフォルトの名無しさん:2010/02/01(月) 11:38:19
変えた途端に>>117が業務上のプログラムの質問する事にでもなるのか?
119デフォルトの名無しさん:2010/02/01(月) 11:43:54
アホが暴れたら高度な話題は本スレでと誘導できるからこのままでいいんだよ
120デフォルトの名無しさん:2010/02/01(月) 20:18:47
超初心者〜中級にちょっと届かない初心者
ぐらいしか質問してないだろう
121デフォルトの名無しさん:2010/02/01(月) 20:38:06
人の振り見て我が振り直せ。
122デフォルトの名無しさん:2010/02/01(月) 21:02:33
Rubyっぽくして

def sum
 key = nil
 sum = 0
 while line = gets
  a = line.split(",")
  if key !=a[0]
   if key
    print "#{key} #{sum}\n"
   end
   key = a[0]
   sum = 0
  end
  sum += a[2].to_i
 end
 print "#{key} #{sum}\n"
end
123デフォルトの名無しさん:2010/02/01(月) 22:15:25
1時間経ってもスルーされてた理由をなんとなく理解
124デフォルトの名無しさん:2010/02/01(月) 22:56:47
>>123
たぶんその理解は間違い。
125デフォルトの名無しさん:2010/02/01(月) 23:02:24
実際に試した人→>>123
実際に手を動かさなかった人→>>124
126デフォルトの名無しさん:2010/02/01(月) 23:06:22
こういうのはRubyっぽいのか??

$stdin.lines.map {|l|l.chomp.split(/,/).values_at(0,2)}.
group_by(&:first).
each {|k,a|puts"#{k} #{a.map(&:last).map(&:to_i).inject(&:+)}"}

>>123 がソート済みかどうかを考慮しているのかどうか疑問が残る。
127デフォルトの名無しさん:2010/02/01(月) 23:45:31
group_by初めて知った。旧リファレンスに無くて悲しくなった。
メモリ喰いっすね
128デフォルトの名無しさん:2010/02/02(火) 00:10:11
Ruby/GTK2 でグラフをプロットするアプリケーションを作りたいと考えています。
http://ruby-gnome2.sourceforge.jp/ja/hiki.cgi?gtk2-tut-itemfactory-example
ここにあるようなメニューとウィンドウを作ることはできたのですが、例えば
month = [1, 2, 3, 4, 5, 6, 7, 8, 9 ,10, 11, 12]
temp = [6.8, 7.8, 10.0, 15.7, 20.1, 22.5, 26.3, 26.6, 23.0, 19.0, 13.5, 9.0]
というデータがあったときに、横軸に month を縦軸に temp をとったグラフをウィンドウの中に、直接表示するためにはどうすればよいのでしょうか?

Windows XP ActiveScriptRuby環境です
最終的にはもっと長い(1000-10000点ほど)データがプロットしたいと考えています
129デフォルトの名無しさん:2010/02/02(火) 00:37:22
>>128
良く使われる手法は
1.グラフ画像を生成してウインドウに貼る
2.描画可能なコンポーネントにプログラムで描画する
の二つ

1.のグラフ画像生成は、画像処理ライブラリを使って自力でグラフを書くか
グラフ生成ライブラリを使うかする

2.はruby/gtk使った事無いからリンク先から関係ありそうなところ
> ttp://ruby-gnome2.sourceforge.jp/hiki.cgi?Gtk%3A%3ADrawingArea
> ttp://ruby-gnome2.sourceforge.jp/hiki.cgi?Gdk%3A%3ADrawable
130デフォルトの名無しさん:2010/02/02(火) 00:41:47
Tkの知識はあるんだよね
131デフォルトの名無しさん:2010/02/02(火) 00:43:29
TkじゃなかったGTKだた
どっちにしても指示をRuby上からやる、という以上のものではないんで
GUIパーツの使い倒し方を知ってるのがけっこう前提
132デフォルトの名無しさん:2010/02/02(火) 00:58:08
>>129
ありがとうございます
素人考えですがポイント数が増えると 2. の方がいいのかなという気がするので、リンク先を読んでみます

>>130
Tk もわかりません…
133デフォルトの名無しさん:2010/02/02(火) 01:05:03
グラフはQwtがマジおすすめ
http://qwt.sourceforge.net/

RubyのQtバインディングがあればRubyからも使えるはず

俺はPyQtからしか使った事ないが
134デフォルトの名無しさん:2010/02/02(火) 01:27:16
>>129-131

128 です
ウインドウへの直接描画 - Gdk::Drawable
http://ruby-gnome2.sourceforge.jp/ja/hiki.cgi?%A5%A6%A5%A4%A5%F3%A5%C9%A5%A6%A4%D8%A4%CE%C4%BE%C0%DC%C9%C1%B2%E8%282%29+-+Gdk%3A%3ADrawable
こちらを見落としていたようで、先ほどのリンクと一緒に参照しながらやっていきたいと思います

確かに gtk そのものを学ぶ必要があるのだろうとは感じています。ありがとうございました

>>133

ありがとうございます
Qwt のスクリーンショットはかなりイメージに近いです
135デフォルトの名無しさん:2010/02/02(火) 02:28:19
irb の文字入力が悲しいくらい重いです
カーソル移動は問題ないです
irb --noreadline とすると入力は普通になりますが使いにくいです
ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-mingw32]
136デフォルトの名無しさん:2010/02/02(火) 04:15:30
PCのスペックは?それ書いてくれないと判断できないのだが
137デフォルトの名無しさん:2010/02/02(火) 08:07:16
プロッターを1から作るのは全くおすすめできない
133のQwtであればAPIで簡単に実現可能な
描画領域の拡大・縮小やドラッグ、凡例表示なんかを実装するのは
よっぽどモチベーションが高くないと無理
138デフォルトの名無しさん:2010/02/02(火) 10:52:05
>>136
単なるローカルエコーであるはずのirbでの文字入力だけが重くなるという時点で
スペックとか関係ない問題だと思う…
139デフォルトの名無しさん:2010/02/02(火) 15:08:41
「単なる」っておまえReadlineを知らんのだろ
140デフォルトの名無しさん:2010/02/02(火) 17:42:37
io = File.open 'text.gz' #俺様専用!

gz = Zlib::GzipReader.new io
gz.close
io.closed? # しまった!

IOクラスのインスタンスを要求するライブラリで、closeを呼ぶと
上流のIOがcloseされてしまう仕様は、何か理由があるのですか?

内部でIOを複製してそれを使えばいいじゃないですか、と思うのですが。
141デフォルトの名無しさん:2010/02/02(火) 18:33:36
>>140
一緒に閉じたほうが使いやすいから

Zlib::GzipReader の close 時に io を一緒に閉じて欲しくないのなら Zlib::GzipReader#finish を使う
これだと wrap 使ってブロックで書ける

File.open('text.gz'){|f|
Zlib::GzipReader.wrap(f){|gz|
# なんか
gz.finish
}
p f.closed? #=> false
}
142デフォルトの名無しさん:2010/02/02(火) 18:36:10
>>141
ホントだ。
何か技術的な理由でそのような仕様になっているのかと思った。

どうもありがとう。
143デフォルトの名無しさん:2010/02/02(火) 18:43:30
と思ったら、IOストリームの位置が進められているよ。
やっぱり内部で複製していないのか。

とりあえず io.rewind で戻せるからいいけどさ。。
144デフォルトの名無しさん:2010/02/02(火) 18:52:49
>>143
gz.rewind で GzipReader オブジェクトが作成された時点のファイルポインタ位置に戻せるよ
自動でやらないのは細かい制御したいときに込み込みでやられると発狂するからだと思う

File.open('text.gz'){|f|
Zlib::GzipReader.wrap(f){|gz|
# なんか
gz.rewind
gz.finish
}
p f.closed? #=> false
}

IO オブジェクトを複製しない理由はなんか偉い人が教えてくれるんじゃないかな
145デフォルトの名無しさん:2010/02/02(火) 19:34:14
>>143
f = File.open file
f.read
f.dup.seek 0
f.pos

そもそも副作用の代表格であるIOにまともな複製なんて不可能じゃない?
146デフォルトの名無しさん:2010/02/02(火) 21:02:46
IOのeachとlinesってまったく同じ?
147デフォルトの名無しさん:2010/02/02(火) 22:41:29
同じ
148デフォルトの名無しさん:2010/02/03(水) 06:52:22

Ruby on Rails 3.0 Release Notes
http://guides.rails.info/3_0_release_notes.html
149デフォルトの名無しさん:2010/02/03(水) 10:23:18
>>138
Windows版Rubyはirb立ち上げておくとなんか変なプロセスが一緒に走って重いよ。
デュアルコアならさして問題ないが1コア占有するんでね。
csrss.exeだったかな。システム絡みのが。

いつまで立っても直らないのは、CPU占有率を常に見ている人が少ないのと、
誰も公式に言わないからだろうと
150149:2010/02/03(水) 10:27:00
今試したら、
クアッドコアのマシンでruby 15%、csrss 8%ぐらい合わせて1コア分くらいだな。
ちょっと違ってたスマソ
とりあえず、Windowsではirb重い。
少なくとも開発中に立ち上げっぱなしはムリポw

俺はcoLinuxとかで立ち上げるからさして問題ないけど
151デフォルトの名無しさん:2010/02/03(水) 10:29:19
えっ
BusyLoopなの?
152デフォルトの名無しさん:2010/02/03(水) 10:36:22
今しばらくmswin32版rubyのirbで色々やってみてるけど
触らなければCPU0%だなあ
もっと時間かけると占有するようになる?
153デフォルトの名無しさん:2010/02/03(水) 10:38:15
ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-mingw32]
154デフォルトの名無しさん:2010/02/03(水) 10:39:56
お、mingwの話かスマソ
155デフォルトの名無しさん:2010/02/03(水) 13:11:46
教祖がウィンドウズ使ってないから仕様。
156デフォルトの名無しさん:2010/02/03(水) 14:50:51
パッチレベルをp388に上げてみるとか
Readlineのdllを最新のものにしてみるとか

ちなみに
ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32]
のirbは軽い
csrss.exeの占有率はせいぜい0%~1%くらいか。
CPUはPentium M 1GH

ttp://gnuwin32.sourceforge.net/packages/readline.htm
157デフォルトの名無しさん:2010/02/03(水) 15:20:42
Windows上でMechanizeを使おうと考えており下記のスクリプトを試しましたが下記のような結果となりました
何がおかしいのか見当つかないのでどなたかアドバイスいただけないでしょうかよろしくお願いいたします

* 環境
>ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]
>gem list
*** LOCAL GEMS ***
hpricot (0.8.2)
mechanize (0.9.3)
nokogiri (1.4.1)

* テストスクリプト
require 'rubygems'
require 'mechanize'
agent = WWW::Mechanize.new
page = agent.get('http://www.google.com/')
puts page.forms
puts page.forms.with

* 結果
>ruby -d hoge.rb
Exception `LoadError' at C:/PROGRA~1/ruby-1.8/lib/ruby/vendor_ruby/1.8/rubygems.rb:1112 - no such file to load -- rubygems/defaults/operating_system
Exception `NoMethodError' at C:/PROGRA~1/ruby-1.8/lib/ruby/1.8/rational.rb:78 -undefined method `gcd' for Rational(1, 2):Rational
Exception `LoadError' at C:/PROGRA~1/ruby-1.8/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:31 - no such file to load -- mechanize
#<WWW::Mechanize::Form:0x381a3a0>
Exception `NoMethodError' at C:/PROGRA~1/ruby-1.8/lib/ruby/1.8/pp.rb:214 - undefined method `with' for #<Array:0x381a4e0>
hoge.rb:7: undefined method `with' for #<Array:0x381a4e0> (NoMethodError)
158デフォルトの名無しさん:2010/02/03(水) 15:24:15
>>157
Mechanizeのメソッドの使い方を単に間違ってる
ここ全部読め
ttp://d.hatena.ne.jp/kitamomonga/20081209/kaisetsu_for_ver_0_9_ruby_www_mechanize
159デフォルトの名無しさん:2010/02/03(水) 16:59:18
puts ["hoge"][0]
とやると「hoge」が出力され、0以外だと「nil」が出力されるのですが
この構文自体がどういうものなのか分かりません。
なにかの省略形とかなのでしょうか?
160デフォルトの名無しさん:2010/02/03(水) 17:07:50
>>159
そんなへちょい例文作ったとこどこよお母さん一言文句言っちゃるわ

a = ["hoge"]
puts a[0]

つまり配列の 0 要素目
161159:2010/02/03(水) 17:14:43
>>160
やはり配列でしたか…。こういう記述も許されるんですね。
ありがとうございます。
162デフォルトの名無しさん:2010/02/03(水) 17:16:58
> こういう記述も許されるんですね。
というか配列リテラルで直接要素参照する意味はまずない
むしろ嫌がらせに近い
163デフォルトの名無しさん:2010/02/03(水) 17:28:30
http://pc12.2ch.net/test/read.cgi/tech/1155031689/
661 デフォルトの名無しさん [sage] 2009/09/04(金) 08:12:26 ID: Be:
Windows用Rubyは MinGW版が速いと聞いてRuby on Railsで試してみた - yuum3のお仕事日記
http://d.hatena.ne.jp/yuum3/20090805/1249452345
http://antoniocangiano.com/wp-content/uploads/2009/08/mri_kri_total_runtime.png

mingw版のほうが速いんだってさ

664 デフォルトの名無しさん [sage] 2009/09/06(日) 21:15:00 ID: Be:
Rails遅いのかーバージョン下げるかなー

665 デフォルトの名無しさん [sage] 2009/09/06(日) 22:06:08 ID: Be:
913 nobodyさん [sage] Date:2009/09/06(日) 14:23:30 ID:??? Be:
>>905-907
本当だ。なんだこれ?
mswin32版のRuby 1.8.7-p160が遅すぎる件 - 那由多屋 開発日誌
http://d.hatena.ne.jp/nayutaya/20090601/1243848756
L'eclat des jours(2009-04-22)
http://www.artonx.org/diary/20090422.html
(コメ欄)

666 デフォルトの名無しさん [sage] 2009/09/06(日) 23:28:30 ID: Be:
何年も前から言われてることに反応して欲しいのかな

667 デフォルトの名無しさん [sage] 2009/09/06(日) 23:53:35 ID: Be:
何年も前じゃないだろ

670 デフォルトの名無しさん [sage] 2009/09/07(月) 06:40:46 ID: Be:
>>666-667
>>665がその前もコピペしないからわからないが、どうやら、p160にうpだてすると、
Railsのviewの処理が100倍遅くなるらしい。今年に入ってからの話。
164デフォルトの名無しさん:2010/02/03(水) 18:15:37
>>158
どうもありがとうございました
このサンプルで動いている環境もあったので混乱していましたが
使っているバージョンが違っておりました
165デフォルトの名無しさん:2010/02/03(水) 22:07:55
はてなブックマーク(エクスポートしたデータ)から
タグを指定して、一部を抽出するプログラムを書きたいです。

require 'rubygems'
require 'hpricot'
require 'open-uri'

doc = Hpricot(open("dump.htm"))

(doc/:a).each do |para|
if para.attributes['tags'] = "microsoft"
puts para
end

までは書いたのですが、別のファイルに保存する方法が分かりません。
よろしくお願いします。
166デフォルトの名無しさん:2010/02/03(水) 22:14:09
open('output', 'w') do |out|
...
end

の中に最後の4行をまるごと入れて、puts を out.puts に。
167デフォルトの名無しさん:2010/02/03(水) 22:35:55
>>166
ありがとうございます。出来ました。

しかし思ったような結果ではなかったので
上記のプログラムでは駄目なのかもしれません。
引き続き、ご相談をお願いします。

ファイル内に
<dt><a href=”” tags=””></dt>
<dd>テキスト</dd>
が繰り返されています。

タグが一致したら、上記全体を抽出したいのですが
これはhpricotで出来るのでしょうか?
それともxml パーサーのような物が必要なのでしょうか?
168デフォルトの名無しさん:2010/02/03(水) 22:39:45
>>169>>201を後出し条件のために予約
169デフォルトの名無しさん:2010/02/03(水) 22:42:32
Oh翼くんロングパス

>>167
本当にしたいことを言え
170デフォルトの名無しさん:2010/02/03(水) 22:47:08
dt = a.parent
dd = dt.next_sibling

つーかdtとddが出てこないのはputsをout.putsに変えなくても分かるはずだが
171デフォルトの名無しさん:2010/02/03(水) 22:47:53
>>169
> 本当にしたいことを言え

うーん、質問が意味不明ですか?

はてなブックマークのデータで
<dt><a href=”何か” tags=”microsoft”></dt>
<dd>コメント</dd>
の部分を抽出したいという事です。

>>165>>166だと
<a href=”何か” tags=”microsoft”>しか抽出できません。
dtから/ddまでを抽出したいのです。

お願いします。
172デフォルトの名無しさん:2010/02/03(水) 22:53:52
>>170
出来ました。
初めてのrubyなので、テンパってしまいました。
ありがとうございました。
173172:2010/02/04(木) 00:10:07
すみません。まだお願いします。

tagsが「microsoft」のような英字だと上手く行ったのですが
「これはすごい」のような日本語(全角)だと上手くいきません。

$KCODEをSJISに設定してみたりしたのですが・・・どうすれば良いのでしょう?

174デフォルトの名無しさん:2010/02/04(木) 00:16:58
悪いこと言わないから一通りRubyの解説なりなんなりを読め
おおむね全部書いてある
175173:2010/02/04(木) 00:29:01
Ruby 逆引きハンドブック(るびきち)
を眺めているんですけど
レベルが合ってないのでしょうか?
176デフォルトの名無しさん:2010/02/04(木) 00:35:15
たのしいRuby → Railsレシピブック → るびきち

と読みましたが、Railsが全くわかりかねます
177デフォルトの名無しさん:2010/02/04(木) 00:42:02
レシピブックやらクックブックやらは基本ができてないと
小手先だけになって変更できなくなって詰まるのに

>>176
Railsは実際に作るものがないと知識としては全く覚えきれない
178デフォルトの名無しさん:2010/02/04(木) 00:42:06
あらら、ちょっとレベルが上過ぎでしたか。
申し訳ない。
たのしいRubyを購入したいと思います。

・・・最後におまけで
>>173にお答えいただけると、ありがたいです。
179デフォルトの名無しさん:2010/02/04(木) 00:46:07
$KCODEはそのスクリプトに解釈させたい日本語文字エンコーディングを指定する
その指定に従って、正規表現などの「バイト列と文字区切りの関係」を調整する

つまり、この場合の日本語はブックマークHTMLファイル中の日本語だけだから、
HTMLファイルの文字エンコーディングを指定すればいい

はてなブックマークのブックマーク形式のエクスポートHTMLファイルは UTF-8 だから、
$KCODE='u' とするか、 ruby -Ku で起動する
180デフォルトの名無しさん:2010/02/04(木) 01:06:36
>>179
> $KCODE='u' とするか、 ruby -Ku で起動する

rubyのプログラムの方も、BOM無しのUTF-8で保存したら
上手くいきました。

基本から勉強したいと思います。ありがとうございました。
181149:2010/02/04(木) 02:11:00
>>156-152
サンクス

環境書き忘れた。
大分前からアップデート暇なくてこのまま使っているから、今のは直っているのかもしれんな。

linuxだとというかdebian系だとaptとかでアップデート楽だからいいけど、
Windowsだとアップデートが面倒でかなわん。
ActiveScriptRubyで入れたものをmingwとかで上書きしちゃっていいものか
mingwでgemとかも込みのパッケージってあったけ?
182149:2010/02/04(木) 02:11:46
ごめん、環境書かずに送信したwww

ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]

自分で言うのも何だがふるっ
183デフォルトの名無しさん:2010/02/04(木) 02:16:49
うちの cygwin
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]
184デフォルトの名無しさん:2010/02/04(木) 02:22:46
>>176-178
Railsやりたいんなら、今のRails入門のオススメは Head First Railsということになってる(でいいよね?)
O'Reilly Japan - Head First Rails
http://www.oreilly.co.jp/books/9784873114385/

http://amazon.co.jp/dp/4873114381/

Head FirstがRuby入門者向けに書いてあるかはしらんが、
その前にRuby入門の段階ならRailsの前にRubyの入門本をもっと読むべきだと思われるw
185149:2010/02/04(木) 02:29:16
>>183
手持ちのcygwin環境も同じバージョンだった。
gem入れてない環境だからかわからんが、cygwinで待機状態だと全然軽いほぼ0%。
csrss.exeも出てこないわ

>>156
とりあえず、簡単な方のReadlineのバージョン上げてみる
186デフォルトの名無しさん:2010/02/04(木) 13:36:20
ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-mingw32]
>gem i hpricot
Building native extensions. This could take a while...
ERROR: Error installing hpricot:
ERROR: Failed to build gem native extension.

C:/Ruby/bin/ruby.exe extconf.rb
checking for stdio.h... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=C:/Ruby/bin/ruby
続きます。
187デフォルトの名無しさん:2010/02/04(木) 13:37:36
>>186
nokogiri使え
188デフォルトの名無しさん:2010/02/04(木) 13:38:08

ワロタ
189デフォルトの名無しさん:2010/02/04(木) 13:38:18
続きです。
Gem files will remain installed in C:/Ruby/lib/ruby/gems/1.8/gems/hpricot-0.8.2
for inspection.
Results logged to C:/Ruby/lib/ruby/gems/1.8/gems/hpricot-0.8.2/ext/fast_xs/gem_m
ake.out

すいません、ググってみたのですが分かりません。
どうやったらhpricot入れられますか?
190デフォルトの名無しさん:2010/02/04(木) 13:44:11
>>189
Hpricot は本来の作者がメンテナンスを諦めた
Nokogiri 使うよろし
どうしても Hpricot を使わないといけないのなら
gem でバイナリが用意されてる mswin32 の Ruby をインストールするか
あるいは mingw32 Ruby においてコンパイル可能にする mingw32 Ruby の DevKit を入れれ
ttp://d.hatena.ne.jp/kitamomonga/20100130/ruby_mingw32_needs_make_when_install_watir
191デフォルトの名無しさん:2010/02/04(木) 13:47:13
RubyとしてActiveScriptRubyをインストールするのがスレ的にいちばん簡単だと思う
192デフォルトの名無しさん:2010/02/04(木) 14:00:55
>>190 ありがとうございます!
諦めてnokogiri使わせて頂きます。
193デフォルトの名無しさん:2010/02/04(木) 14:22:47
OneClick Installer の被害者の方々が続々と
194デフォルトの名無しさん:2010/02/04(木) 16:44:00
なんでmswinのバイナリがあるのにコンパイルしようとしてんだろ
前も思ったけどrubygemsってそのへんの判別どうなってんの?
195デフォルトの名無しさん:2010/02/04(木) 17:17:21
>>194
gem作成者がWindows向けかどうかを手で条件判断してる

install_win_binary if RUBY_PLATFORM =~ /win32/

とか
この場合、 mingw32 はマッチしないから、用意したWindowsバイナリ(mingw32でもたぶん動く)は使われずに
自前でコンパイルするように分岐する
Windows かどうかの判定は

install_win_binary if RUBY_PLATFORM =~ /win|mingw/

みたいに mingw を含めるようににしろ、と少し前から言われてる
これに沿ってない、あるいはそう言われる前の古い gem パッケージは、
mingw32 でも「バイナリパッケージなし」と判断されてコンパイルプロセスが走る

いっそそういうヘナチョコ gem も許してコンパイルを受け入れよう、というのが>>190でも書いてある DevKit
196デフォルトの名無しさん:2010/02/04(木) 17:26:42
>>195
ありがとう、雛形作成ツール or Rakefile手書きした人の責任ってことか
Rakeでis_windows?みたいなの用意していてくれれば解決だった気がする
197デフォルトの名無しさん:2010/02/04(木) 17:56:02
win で判定しちゃだめだ。
Darwin (= MacOSX) が引っかかる。
198デフォルトの名無しさん:2010/02/04(木) 17:59:08
プラットフォームの判別
http://jp.rubyist.net/magazine/?0017-CodeReview#l17

さすがに bccwin は外してもいいような気がする。
199デフォルトの名無しさん:2010/02/04(木) 18:07:35
っていうかこの用途での RUBY_PLATFORM の利用はいいかげんやめたほうが…
p の表示結果を横取りして解析するようなむず痒さを感じる
200デフォルトの名無しさん:2010/02/04(木) 18:51:01
ruby -rdebug hoge.rb
でデバッグするとき、gdbの--tty=みたいなことをしたいのですが、どうすればいいでしょうか?

デバッガへの入力(pやbreak等)と出力(pの結果等)はそのままrubyを起動した端末で、
hoge.rbの標準入出力は別の端末につなぎたいのです。
201デフォルトの名無しさん:2010/02/04(木) 19:20:47
>>199
じゃあ何使ったらいいの
バイナリの判定ならCONFIG["RUBY_SO_NAME"] とか?
202デフォルトの名無しさん:2010/02/04(木) 21:00:16
[1,2,3].map(&:to_s)
=> ["1", "2", "3"]

何が起きてる?リファレンスを嘗め回したがさっぱり
203デフォルトの名無しさん:2010/02/04(木) 21:09:45
&の右側がProcオブジェクトでないときはto_procを呼ぶ。

:fooというシンボルのto_procはcall xするとx.fooの意味になるprocを返す。

> :to_s.to_proc.call 1
=> "1"

これでわかる?
204デフォルトの名無しさん:2010/02/04(木) 21:11:02
あー、どこを見ればそれがわかるのか、というのは俺も教えてほしい。
205デフォルトの名無しさん:2010/02/04(木) 21:15:43
検索しにくい機能はこれだから困る
「Ruby1.9 ではイテレータをブロックなしで呼び出すと Enumerator を返すよ機能」と呼ぶ

irb> [1,2,3].map(&:to_s)
["1", "2", "3"]
irb> [1,2,3].map{|e| e.to_s}
["1", "2", "3"]
irb> [1,2,3].map(&:next)
[2, 3, 4]
irb> [1,2,3].map{|e| e.next}
[2, 3, 4]
irb> [1,2,3].map{|e| e.next}.map{|e| e.to_s}
["2", "3", "4"]
irb> [1,2,3].map(&:next).map(&:to_s)
["2", "3", "4"]
206デフォルトの名無しさん:2010/02/04(木) 21:17:23
>>204
http://doc.okkez.net/

あとは、リテラルを知っておくと調べたいことが明確になるかな。

ところで上のマニュアルで検索すると、結果が出るまで数十秒くらい待たされるんだが、どうなってんの?
特に検索に失敗した場合の結果報告が遅すぎる。
207デフォルトの名無しさん:2010/02/04(木) 22:10:58
>>203
.call 1 がどこから来るのか分からん
208デフォルトの名無しさん:2010/02/04(木) 23:20:11
Rubyで書けばこんな定義。

class Symbol
  def to_proc
    proc {|obj, *args| obj.send(self, *args) }
  end
end

実際1.8.6までのRubyにActiveSupport(Railsで使ってるRubyコア拡張)
入れると↑のように定義される。
209デフォルトの名無しさん:2010/02/04(木) 23:30:59
>206
ごめん。
全てのデータを読み込んでるから遅い。
チューニングしたいけど、まとまった時間がとれない。
210デフォルトの名無しさん:2010/02/05(金) 00:26:44
[1,2,3].map(&:to_s) は
[1,2,3].map(&proc{|obj| obj.send(:to_s) })になると。
*argsはブロック引数が2個以上のときか
> ["abc","def","ghi"].each_with_index(&:slice!)
=> ["bc", "df", "gh"]
理解。
211デフォルトの名無しさん:2010/02/05(金) 00:43:06
98%くらいは>>205のブロックつきメソッドの短縮表記目的だけどな
正確な動作を覚えておくと便利なことはあるだろうね
212デフォルトの名無しさん:2010/02/05(金) 02:11:15
わかりにくいのはSymbol#to_procのほうじゃないか
213デフォルトの名無しさん:2010/02/05(金) 02:24:19
わかりにくいというか、ぶっちゃけわけがわからないよね
214デフォルトの名無しさん:2010/02/05(金) 04:33:05
sort_by(&:length) とか便利
215デフォルトの名無しさん:2010/02/05(金) 09:16:02
どうせならEnumerable#reduce/injectみたいに
&無しで実現してもらいたかった昨日
216デフォルトの名無しさん:2010/02/05(金) 09:19:42
>>213
>>205だと理解しているうちはいいけどな
SymbolかProcになるって時点で変だ
目を覚ませって感じではある
217デフォルトの名無しさん:2010/02/05(金) 09:24:14
簡潔さを追求しすぎてパァール化してるな
218デフォルトの名無しさん:2010/02/05(金) 09:34:51
イテレータなんて古代言語使われると混乱しちゃう
それと>>202は&で:to_sをブロックとして扱おうとしてるだけだから
別にブロックなしというわけでなくEnumeratorも関係なくね
219デフォルトの名無しさん:2010/02/05(金) 09:35:36
ところで>>206で配布してるchmファイルってみんな見れてるのか?

開くとき他のchmファイルと違って「セキュリティの警告」がでるし
開いても本文カラムが「取り消されたアクション」か
「ページを表示できません」のいずれかにしかならん

以前は ttp://elbereth-hp.hp.infoseek.co.jp/ruby.html
のchmファイルを使っていたが問題はなかった

WindosXP SP3 なんだがどうしたものか
220デフォルトの名無しさん:2010/02/05(金) 09:44:36
>219
ごめん。Windows持ってないんで検証出来ないんだ。
なんかチェックボックス外したら使えるという話は聞いたことがある。
手元のDebianではちゃんと見れた。

XPのSP3以降?ではそういう警告が出るようになったらしい。
Vistaで警告が出てたときはチェックボックスを外したら使えた。
221220:2010/02/05(金) 09:46:14
220で書いてるVistaはたまたまそこにいた人が使ってたやつね。
222デフォルトの名無しさん:2010/02/05(金) 11:01:26
終わった話だけど。
block = proc {|x| x.to_i }
%(1 2 3).map(&block)
の &block のところに &:to_i と書けるという話であって、
ブロックを取らないならEnumeratorを返すという話ではない。
# そもそも1.8.7のmapは互換せ(ry
223デフォルトの名無しさん:2010/02/05(金) 11:14:26
>チェックボックス
もしかしてIEのセキュリティレベルを落とさないと見れない仕様か

デフォルトの状態でリファレンスマニュアルが読めないとか
ここまでくるとドザーに対する嫌がらせに近いな
224デフォルトの名無しさん:2010/02/05(金) 11:44:27
>>223
嫌がらせはそのへんにしとけ

よく知らないけどセキュリティ絡みならそのchmのプロパティで「ブロックの解除」を試してみたら?
225デフォルトの名無しさん:2010/02/05(金) 11:48:33
chm 自体がそういうものになった
なんでもかんでも Windows 叩いてオナニーしてる厨には理解できんだろうが

ttp://support.microsoft.com/kb/902225/ja
> これは正常な動作であり、セキュリティ更新プログラム 896358 および
> Windows Server 2003 SP1 のインストールの結果として予期されている動作です。
226デフォルトの名無しさん:2010/02/05(金) 12:13:05
>>219
Windows開発者にはかなり既知な問題なのですが、
chmファイル単体をそのままネットから落とすと、セキュリティがらみのフラグがつくんです。
exeファイル単体をネットから落とした時もいちいち確認してくるよね?

>>224 もいってるけど解決策はchmのプロパティでブロックを解除してやる
227デフォルトの名無しさん:2010/02/05(金) 12:25:52
chm自体が規格として取り残されたというか…
そもそも表示にIE使う時点で将来的に規定事項だったその時がやって来ただけというか…
228デフォルトの名無しさん:2010/02/05(金) 12:29:03
配布する人が
「XPやVistaや7の人は俺を信用してチェックボックス外してね」
と警告するしかないな
229デフォルトの名無しさん:2010/02/05(金) 14:46:34
zipped htmlでくれ
230デフォルトの名無しさん:2010/02/05(金) 14:50:20
全文検索が問題なんだよね
標準で検索フレームがつくのがchmの大きな利点
それさえ別途便利に使えれば素のHTMLの配布で問題ない

というかchmの検索はもうちょっと賢くなって欲しい
というか一般語の検索に特化されててプログラミング用語やトークンの検索に向かねー
231デフォルトの名無しさん:2010/02/05(金) 15:38:21
>>224, >>225, >>226
ありがとう
また一つ賢くなった
232デフォルトの名無しさん:2010/02/05(金) 16:18:43
http://pc12.2ch.net/test/read.cgi/tech/1155031689/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
233デフォルトの名無しさん:2010/02/05(金) 19:23:17
:to_i.to_procがproc{|x| x.to_i}になるってのは
マニュアルのどこに書いてあるの?
234デフォルトの名無しさん:2010/02/05(金) 19:50:56
>>233
ttp://doc.okkez.net/static/191/class/Symbol.html
> self に対応する Proc オブジェクトを返します。

「self に対応する Proc オブジェクト」ってなんじゃらほという疑問の答はむろん書いてない
Ruby のマニュアルなんてそんなもんだ
235デフォルトの名無しさん:2010/02/05(金) 20:16:44
>>234
そこはすでに読んだ〜よ
236デフォルトの名無しさん:2010/02/05(金) 20:36:29
素人はこれだから
Rubyはソースコードに全て書いてある

/*
* call-seq:
* sym.to_proc
*
* Returns a _Proc_ object which respond to the given method by _sym_.
*
* (1..3).collect(&:to_s) #=> ["1", "2", "3"]
*/

static VALUE
sym_to_proc(VALUE sym)
{
return rb_proc_new(sym_call, (VALUE)SYM2ID(sym));
}

ほら書いてあった
237デフォルトの名無しさん:2010/02/05(金) 20:43:18
selfで示されるメソッドを呼ぶProcを返す。
自身で示されるメソッドを呼ぶProcを返す。
ならまだ分かるか。さあるりまにフィードバックしよう。
238デフォルトの名無しさん:2010/02/05(金) 20:51:32
>>236
利用法しか書いてないのがそれっぽいといえばそれっぽいな
Cレベルのコメントでもそれなのか
239デフォルトの名無しさん:2010/02/05(金) 20:54:53
[1,2,3].map(&:to_s)
[1,2,3].map(&:to_s.to_proc)
[1,2,3].map(&Proc.new {|obj| obj.to_s })
[1,2,3].map{|obj| obj.to_s }

やっと腑に落ちた
横レスだけどみんなありがとう
240デフォルトの名無しさん:2010/02/05(金) 20:55:08
いや一応、これで必要十分なコメントではあると思うぞ
Symbolクラスのメソッドとして単体で吟味したときわけわかめになるだけで
それこそ

:mes.to_proc #=> proc{|o| o.mes}

と一言書いてもらえてれば納得度が上がったと思う
241デフォルトの名無しさん:2010/02/05(金) 21:05:08
lines.collect(&:split/,/)とかやりたい
242デフォルトの名無しさん:2010/02/05(金) 21:18:45
[1,2,3].map(&:to_s.to_proc)
から
[1,2,3].map(&Proc.new {|obj| obj.to_s })
が腑に落ちない
243デフォルトの名無しさん:2010/02/05(金) 21:27:11
244デフォルトの名無しさん:2010/02/05(金) 22:05:10
>>242
カッコで括って評価の順序を明確にすれば理解出来るか
1. [1,2,3].map(&:to_s)
2. [1,2,3].map(&(:to_s.to_proc))
3. [1,2,3].map(&(Proc.new{|obj|obj.to_s}))
245デフォルトの名無しさん:2010/02/05(金) 22:05:51
ん?
:mes.to_proc #=> proc{|o| o.mes}
が腑に落ちないと言ってるんだが?
246デフォルトの名無しさん:2010/02/05(金) 22:08:54
「Symbol#to_procがそういうprocを返すように定義されている」
247デフォルトの名無しさん:2010/02/05(金) 22:09:04
そりゃ失礼した。
どう腑に落ちないのかはよくわからんが。
248デフォルトの名無しさん:2010/02/05(金) 22:14:26
仕様です→なんでそんな仕様?
ってことでしょ
>>245はこんなとこじゃなくMLででも聞け
249デフォルトの名無しさん:2010/02/05(金) 22:18:12
なんでこういう仕様かっていうと[1,2,3].map(&:to_s)って書くため
気持ち悪いのは元々Railsだから仕方ない
250デフォルトの名無しさん:2010/02/05(金) 22:26:57
名前
名前、ばかにする
ばかにする、あんた、名前

1だけ・・・
出会い頭に、おたんこなす宣告から、あんたばかぁ、から丁寧にばかにするまで
レパートリーに富んだ構文糖に乾杯 >> 244
251デフォルトの名無しさん:2010/02/05(金) 22:27:02
obj.methodsでシンボルの配列が帰ってくるから
関連がないということもない
と言えないこともない
252デフォルトの名無しさん:2010/02/05(金) 22:58:44
いや、どこにそういう仕様だと書いてあるのかってことなんだが
253デフォルトの名無しさん:2010/02/06(土) 01:21:49
AがnilだったらAにxを代入

A = x unless A

これより簡潔な書き方ってあります?
254デフォルトの名無しさん:2010/02/06(土) 01:25:43
おま、それ x が真だったら短絡して A = x と同じ意味になっちゃうぞ
255デフォルトの名無しさん:2010/02/06(土) 01:28:33
あれ?そうなっちゃいます?
rubyってifとかunlessを倒置して後ろに置いてるのをよく見ますけど。
256デフォルトの名無しさん:2010/02/06(土) 01:41:21
弁解の余地もございません
>>254は撤回した上で吊ってきます

unless修飾子なんか嫌いだグスン
257デフォルトの名無しさん:2010/02/06(土) 02:05:03
>>253
a = a or x
a ||= x
258デフォルトの名無しさん:2010/02/06(土) 02:54:23
>>137

了解です。できれば Ruby/GTK2 から扱いやすいプロッターがあるといいのですがなかなか見つけられません。
259デフォルトの名無しさん:2010/02/06(土) 03:02:50
>>257はfalseでも動作するので注意
まあ元のunless自体同じような動作だが
260デフォルトの名無しさん:2010/02/06(土) 07:57:34
>>230
インデックスの仕方が微妙なせいで、記号とかアンダーバー含むと全然検索できないw
chm便利なんだけど、検索は本当に困る
261デフォルトの名無しさん:2010/02/06(土) 10:17:38
>>253 に関連して

a or next
a or raise

みたいなイディオム?をたまに見かける
262デフォルトの名無しさん:2010/02/06(土) 10:30:03
read or die
263デフォルトの名無しさん:2010/02/06(土) 10:31:17
>>254
意味がわからん。
>>253が間違えてるとは思えない自分に誰か救済の手を
264デフォルトの名無しさん:2010/02/06(土) 10:33:27
>>263をさらに撤回する ほんとうにすまない
265デフォルトの名無しさん:2010/02/06(土) 13:54:41
お前らミス多すぎるだろ・・・俺もミスってた

a = a or xは優先順位の都合で
(a = a) or xとして結合するからxの代入が起きない

a = (a or x)
a = a || x
と書くのが正しい

なんにせよ初期化のイディオムとしては、||=を使うこと
(簡単な解説を兼ねてorを並べたのが失敗)

falseの扱いは>>259の言う通り根本的な問題だから触れなかったけど
必要なら時はa = a.nil? && xとかやって
まあfalseが入ってるかもしれない変数にこの手の初期化はあまり行わないから普段は問題ない
266デフォルトの名無しさん:2010/02/06(土) 13:57:09
またミスったああああ

a = a.nil? && x
これダメ絶対、素直に後置してください・・・
267デフォルトの名無しさん:2010/02/06(土) 14:11:35
gdgd
268デフォルトの名無しさん:2010/02/06(土) 14:12:26
ネスティングを少なくする書き方をおしえて下さい。
269デフォルトの名無しさん:2010/02/06(土) 14:17:08
>>268
Rubyのネストは怖くない
ブロックは大いに使え

が、まあ、self を返すブロックつきメソッドとか map みたいなコレクション変更メソッドとか
そういうのを1行でメソッドチェインするようになると結構見栄えはよくなるよ
メソッドチェインするときはブロックは { } で書いてね
end のあとにドットつけられると動作上問題なくても見栄え的にぐんにゃり
270デフォルトの名無しさん:2010/02/06(土) 14:23:37
少し長くなった(ネストした)と思ったらさっさと別メソッドに分けるとか
簡潔なメソッド名を考えると、コメント代わりになるし動作の見直しにもなるのでおすすめ
271デフォルトの名無しさん:2010/02/06(土) 14:25:08
メソッドが10行超えたらほぼ確実にどこかおかしいな
272デフォルトの名無しさん:2010/02/06(土) 14:27:46
>271
kwsk
273デフォルトの名無しさん:2010/02/06(土) 14:40:56
5行越えたらFワードって聞いたぞ
外人さんの過激派はさすがに煽り方が違う
274デフォルトの名無しさん:2010/02/06(土) 14:43:07
まあ、メソッド多いほうがテストしやすいしな

とか言ってるとがっつりプライベートメソッドにされてたりする
気持ちはわかるが
275デフォルトの名無しさん:2010/02/06(土) 16:33:30
・メソッドが10行を超えることは望ましくない
・1行が80byteを超えることは望ましくない
はRubyのコーディングルールとしてよく採用されている
276デフォルトの名無しさん:2010/02/06(土) 16:44:58
1行80bytesは理由があるからともかく
メソッド10行制限ってのはカルト宗教の世界だな
277デフォルトの名無しさん:2010/02/06(土) 16:49:22
> 1行80bytesは理由があるから
ねえよ
そっちのほうがただの宗教だ
悔しかったら「lessやgrepは色づけしないから色付けに頼った視覚効果のスクリプトを書くべきではない」レベルまで言え
278デフォルトの名無しさん:2010/02/06(土) 16:52:33
10行ルールってまじ?
標準ライブラリのほとんどがボツってこと貝?
279デフォルトの名無しさん:2010/02/06(土) 16:53:24
メソッドが長いとリフレクションしにくい
280デフォルトの名無しさん:2010/02/06(土) 16:57:01
>>277
あ、どっかでそれ読んだ
「お前の環境がヘボいだけだろ」とか心の中で突っ込んだ覚えがある


行数は、本来は行数そのものが問題じゃないよね
短い定義の適切なメソッドの作成を目指すべきというのが本論
その現実的な目安として、やっぱ5行…は過激派だが、10行くらいがポイントだと思うなあ
これより長かったら分割手段を本気で考えたほうがいいかと
281デフォルトの名無しさん:2010/02/06(土) 16:58:58
>>278
まあ基本的には

めちゃくちゃベーシックな添付クラスだからごてっとするのも致し方ない面はあるが、
それでももうちょいこまごまとしててもいいとは思う
特にユーティリティ的なクラス
282デフォルトの名無しさん:2010/02/06(土) 17:03:26
はいはい、なんでもサブルーチンサブルーチン(笑)
どんどん分割しよう。
283デフォルトの名無しさん:2010/02/06(土) 17:07:32
空行だらけのBlogみたいで読みにくいからやめてくらさい
284デフォルトの名無しさん:2010/02/06(土) 17:18:27
あれはblogシステムでは「段落」としてるものを、ユーザーが「物理行」に使ってるためだろ
285デフォルトの名無しさん:2010/02/06(土) 17:25:41
横書き日本語なのに段落を前後空間空けとしてレンダリングするブラウザがアホなだけ
286デフォルトの名無しさん:2010/02/06(土) 17:28:32
>>277
べつに誰も悔しくないと思うけどw
287デフォルトの名無しさん:2010/02/07(日) 09:03:47
>>275-278
Railsのプラグインのソースを読む機械が多いが、
ちゃんと作ってるプラグインはモジュール化しまくり、メソッド分割しまくりだな。
なんでこんなところまでちゃんとモジュール化しとんねん!て思うほど
288デフォルトの名無しさん:2010/02/07(日) 09:49:17
>>275-276
漏れは関数は25行以内(最悪でも50行程度)って教えられた
80x25のコンソールで一画面か、印刷して一ページのサイズ
289デフォルトの名無しさん:2010/02/07(日) 09:53:55
>>277
それがあるんだよ
たまに
def hoge()                                        p 123                                        end

みたいに改行せずにエディタの80文字の折り返しだけで次の行へいったつもりでソース書く馬鹿がいるんだよ
(っていうか昔の糞エディタだと2行に分かれていたものが1行に繋がってしまうケースとか良くあったんだ)
290デフォルトの名無しさん:2010/02/07(日) 09:56:36
10行君は初心者。
291デフォルトの名無しさん:2010/02/07(日) 09:58:11
>>284
いや、実態は携帯で長ったらしくスクロールさせてページ切り替わると
リロードが増えてアクセス数も増えるみたいな都市伝説があるらしい

仮に100歩ゆずってそれでリロードされるのが事実だとしても
そんな方法でアクセス数増やしてなにが嬉しいのかと
292デフォルトの名無しさん:2010/02/07(日) 09:59:30
>>289
emacsですねわかります
293デフォルトの名無しさん:2010/02/07(日) 10:00:10
>>288
それは従来のプログラミング言語の話だろ
わざわざRubyにそのまま持ち込む必要はない
294デフォルトの名無しさん:2010/02/07(日) 10:01:16
Reekっていうコードチェッカを興味本位で使ってみたが
メソッド定義が10行以上だと「長い」と指摘してくるな
295デフォルトの名無しさん:2010/02/07(日) 10:02:31
あんまり長くなるとインデントも深くなってくることが多いからな
すっきりさせるために短く書くのは悪いことじゃない罠
296デフォルトの名無しさん:2010/02/07(日) 10:04:24
>>292
一太郎だろ
297デフォルトの名無しさん:2010/02/07(日) 10:05:50
>>291
アメーバだっけ?芸能人ランキングのあるやつ
改行増やしてPV増やしてランキングの上を目指すんだって
本当かどうかは知らない
298デフォルトの名無しさん:2010/02/07(日) 10:09:36
資源の無駄遣いだなぁ

エコに反してるから改行撲滅キャンペーンした方がいいぞ
299デフォルトの名無しさん:2010/02/07(日) 10:10:03
ああNON STYLEの石田だっけ?
300デフォルトの名無しさん:2010/02/07(日) 10:10:45
とりあえず、お前らの権限で fileutils.rb とか net/imap.rb に
10行ルール適用してもらってよ。
301デフォルトの名無しさん:2010/02/07(日) 10:32:50
>>291 >>297
あれはPVアップ界王拳の一種で、ケータイで見たときに複数のページに分割されるのでPVがあがるってやつ
芸能人もそうだけおdPV多いとアメブロはお金もらえる仕組みがある

最近PCの情報サイトでもページ分割するのちらほら見るよね、携帯向けじゃなくても
あれPV上げるため
302デフォルトの名無しさん:2010/02/07(日) 10:44:45
>>293
言語の話じゃなくて環境の話じゃね?
303デフォルトの名無しさん:2010/02/07(日) 10:51:12
>>294
それ面白そうだなw 使ってみるか
304デフォルトの名無しさん:2010/02/07(日) 11:12:10
>>303
やめとけ
警告多すぎて森に隠れる木の状態になるぞ
igonoreの指定も面倒だし
305デフォルトの名無しさん:2010/02/07(日) 11:14:38
何事も原理主義はよくないと思います
306デフォルトの名無しさん:2010/02/07(日) 11:16:32
めちゃくちゃ実利だと思うが…
307デフォルトの名無しさん:2010/02/07(日) 11:26:24
定義済みのクラス特異メソッドをprotectedにするのってどうすればいいんでせう?

class DB
protected
self.new
super
end
end

してもクラス外で普通にDB.newできてしまったorz
308デフォルトの名無しさん:2010/02/07(日) 11:28:00
protectedにしてどうしたいの?
309デフォルトの名無しさん:2010/02/07(日) 11:31:07
具体的には、DBのインスタンスを作成する手段をDB.openに限定したいんです。
db.closeするのを忘れたくないんで。
310307:2010/02/07(日) 11:40:07
class Hoge
private
def self.hoge
puts 'hoge'
end
end
Hoge.hoge

でも動いちゃいますね……
そもそもクラスメソッドをprivateにするのってどうすりゃいいんでしたっけ?
311デフォルトの名無しさん:2010/02/07(日) 11:40:33
「DBクラスいじるならopen使え」とマニュアルに大きな赤い字で書いておけ
それとブロックつきopenの提供で充分
312307:2010/02/07(日) 11:42:15
http://www.gesource.jp/weblog/?p=473

吊ってきたいと思います。
スレ汚しすいませんでした。
313デフォルトの名無しさん:2010/02/07(日) 11:48:31
>>258

素直にgnuplot使うのが手っ取り早い
http://rgplot.rubyforge.org/
314デフォルトの名無しさん:2010/02/07(日) 12:24:44
rubyのprivateにはいつも混乱させられる
うまい覚え方はないものか
315デフォルトの名無しさん:2010/02/07(日) 12:44:35
俺も覚えられてない・・・
privateがC++なんかのprotected相当なんだっけ?
316デフォルトの名無しさん:2010/02/07(日) 13:01:40
rubyのprivateは、
「任意のレシーバに対する呼び出しが出来ない」
関数っぽく書く呼び出し方のみが可能ってことね。
317デフォルトの名無しさん:2010/02/07(日) 13:06:54
「RubyでC++やJava再現しようぜ時代」の負の遺産
こんなオモチャ機能は1.9で無くなってもよかった
318デフォルトの名無しさん:2010/02/07(日) 13:07:32
privateよりprotectedのほうが理解されていないと思う。
319デフォルトの名無しさん:2010/02/07(日) 13:17:06
>>317
少なくとも名称は変えるべきだったよなあ
320デフォルトの名無しさん:2010/02/07(日) 13:23:05
>>316
つまり、
class Chinko
  private def manko
  end
end
の場合、

class Chinko内で
def sounyu
  manko
end

のような呼び出しはOKだが、

chinko = Chinko.new
chinko.manko
は駄目なんだっけ?
321デフォルトの名無しさん:2010/02/07(日) 13:29:10
ifの条件文のレイアウトのことなのですが、改行が問題になるケースってあるでしょうか?
if name == "foo" ||
name == "bar"
#do something
end

()や:が必須の言語ですと気分的にも安心なのですが、
Rubyではあまり改行してるの見ない気もします。
一応、上のコードは問題ちゃんと判定されているし、
条件文内の代入文もきちんと評価されていますが、どうも不安です。
条件文の後にthenを入れておけば確実なのかなとも思うのですが・・・
322デフォルトの名無しさん:2010/02/07(日) 13:30:37
マニュアルくらいは読め
Rubyのprivateは単に見栄え上の判断しかしない
323デフォルトの名無しさん:2010/02/07(日) 13:33:43
>>321
カッコ書いて条件部分を式にすればいいじゃん

時々、カッコ書いたら死ぬ病の人が紛れ込んでるんだけど、そういう人は Ruby 使ったら駄目よ
324320:2010/02/07(日) 13:36:27
こんなん書いている間にマニュアル読めよ、試せよという感じですね、すいません。
  chinko = Chinko.new
  chinko.manko

   private method `manko' called for #<Chinko:0xxxxxxx> (NoMethodError)
で駄目ですね。
  tansyou.send :manko
みたいにsend経由だとOKなんですね。
325デフォルトの名無しさん:2010/02/07(日) 13:37:53
質問させて下さい。

たまにブログなどで見かけるように、

puts 1 + 1 # => 2

のように、出力結果をコメントで文の右に追加してくれるスクリプトがあったと思うのですが、
どなたか御存知ありませんか?
326325:2010/02/07(日) 13:41:06
>>325 ですが、自己解決しました。
xmpfilter でした。

「ruby 実行結果 コメント」で検索したらでてきました。
xmpfilter で Ruby のコードに実行結果をコメントに表示 | すぐに忘れる脳みそのためのメモ
http://jutememo.blogspot.com/2008/06/xmpfilter-ruby.html

eigenclass - xmpfilter: automagic Test::Unit assertions/RSpec expectations and code annotations
http://eigenclass.org/hiki/xmpfilter
327デフォルトの名無しさん:2010/02/07(日) 15:13:27
クロージャとプロシージャの違いがわからないのですが…
sortメソッドを使うときに、a.sort{|a,b|a<=>b}とか書きますよね。この場合はどちら?
328デフォルトの名無しさん:2010/02/07(日) 15:18:41
そんな小難しい外の用語を使わずに、ブロック引数、でよい。
329デフォルトの名無しさん:2010/02/07(日) 15:38:31
クロージャとプロシージャは別概念

クロージャは生成時の情報(コンテクストと呼ばれる)を閉じ込めて保有するオブジェクト及びブロックの総称
一般的にbindingメソッドを持つ
例 Procインスタンス, Bindingインスタンス, ブロック

プロシージャは手続きオブジェクト及びブロックの総称
一般的にcallメソッドを持つ
例 Procインスタンス, Methodインスタンス, ブロック

>>327の例の場合
ブロック生成時の情報は特にブロック内に閉じ込められていない。
だからクロージャとしては使われていない。
もっぱら手続きを実行するためのブロックなのでプロシージャとして使われている。

クロージャの例
def hoge
var = "hoge"
Proc.new{var}
end
closure = hoge
#p var #=> undefined local variable or method `var'
p eval('var', hoge.binding)
330329:2010/02/07(日) 15:41:57
MethodインスタンスではなくUnboundMethodインスタンスか
331デフォルトの名無しさん:2010/02/07(日) 16:02:44
説明は

「Rubyではコンテキスト情報の保存にBindingクラスのオブジェクトを用いる」

でいいじゃん
それ使えばコンテキスト依存の処理になるからおおむねクロージャだ
使わない(使わなくてすむ)ならただのプロシージャ(可搬性のある処理のかたまり)
332デフォルトの名無しさん:2010/02/08(月) 21:28:39
2年前に書いたスクリプトを流したら90秒もかかった
当時は14秒で終えてたのに
333デフォルトの名無しさん:2010/02/08(月) 21:35:39
いつどこでどのように流されたんですか
334デフォルトの名無しさん:2010/02/08(月) 23:54:49
実行することを流すと言います。
335デフォルトの名無しさん:2010/02/09(火) 00:08:40
スパゲティコードをまるでソウメンのように流すのですね
336デフォルトの名無しさん:2010/02/09(火) 00:24:48
そうです。まさにスパゲティです。
337デフォルトの名無しさん:2010/02/09(火) 01:23:06
ためしにVMware上のUbuntuで動かしたら2.4秒だった
338デフォルトの名無しさん:2010/02/09(火) 07:43:24
IronRuby 6.4秒
339デフォルトの名無しさん:2010/02/09(火) 18:16:30
Windows版Ruby 1.8 -> 1.9で
テキストモードでのファイル読み込みが10倍ほど遅くなってるのでそのせいか?

読み込み時のエンコーディングをASCII-8BITとかにしてもさほど変わらんので
universal newlineとかいう改行コードの差異を吸収してLFに変換するのが遅いのだろうか
バイナリモードで読んでからforce_encodingすると1.8と同程度になるよ

自分は趣味程度にしか使ってないので困らないけど
巨大なログを処理する人とかだと、地味にいやな性能劣化なんだろうな
340デフォルトの名無しさん:2010/02/09(火) 18:34:44
日英辞書テキストのEDICT(SJISに変換済み、5.3MB、10万行)を Mingw版Ruby 1.8.7p160 で
ruby -e "open(ARGV.shift,'r'){|f|f.read}" edict
すると 0.42秒
Mingw版Ruby 1.9.1p0 では107秒
ちょっ、200倍遅いorz

ruby -e "open(ARGV.shift,'rb'){|f|f.read.force_encoding('cp932')}" edict
バイナリモードで 0.46秒
ruby -e "open(ARGV.shift,'rb'){|f|f.read.force_encoding('cp932').gsub!(/\r\n|\n|\r/,?\n)}" edict
などと改行変換もすると 3.72秒

K6-2 450MHzのWindows2000なんでちょっと遅いし、Rubyも最新のじゃないですが
341デフォルトの名無しさん:2010/02/09(火) 18:35:14
>>339
migw32使え
342デフォルトの名無しさん:2010/02/09(火) 18:59:11
10倍ですか...
へんに差異を吸収しようとせずエンコーディング毎に処理して欲しいもんだ
コンパイラが古いとはいえ、まさか仮想環境や.NETに負けるとは思わなかった。

↑↑↑はパズル問題を解くスクリプトで読み込みはほんの少し
書き出しは途中経過も出してるんでかなり多い
1.8.6: 220"、1.9.0: 14"、1.9.1: 90"
343デフォルトの名無しさん:2010/02/09(火) 19:06:59
スクリプト foo が多重起動しないようにするにはどうやればいいですか。
後から起動した方をすぐに殺したいです。
344デフォルトの名無しさん:2010/02/09(火) 19:23:33
ファイルを利用して排他的にするとか。
あまり好きじゃないけど。
345デフォルトの名無しさん:2010/02/09(火) 19:27:46
ロックファイルがなかったらロックファイルを作る
ロックファイルがあったら「起動中です」と言ってexit(1)する
スクリプト終了時にロックファイルを消去する

こんなのがいちばん簡単だと思う
強制終了でロックファイル消去プロセスを飛ばすと使用者層によっては悲惨だけど
346デフォルトの名無しさん:2010/02/09(火) 19:34:15
migw32どこ? 古いのしか見つからない
347デフォルトの名無しさん:2010/02/09(火) 19:44:48
mswin32(ActiveScriptRuby、gem対応の標準)
ttp://www.artonx.org/data/asr/
mingw32(RubyInstaller/OneClickInstaller、gemの古パッケージはバイナリがなくDevelopment Kitが要ることも)
ttp://rubyinstaller.org/download.html

とりあえずp0 の1.9.1 は産業廃棄物なので使って文句言うの禁止で
348デフォルトの名無しさん:2010/02/09(火) 20:42:28
ありがとうございます。ちょっとだけ速くなりました。

ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mswin32]
time:4.984375

ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32]
time:3.421875

IronRuby 0.9.3.0 on .NET 2.0.0.0
time:5.890625

ruby 1.9.1p243 (2009-07-16 revision 24175) [i486-linux] ※VMware
time:2.392678477
349デフォルトの名無しさん:2010/02/09(火) 23:03:02
まねしてもいいよ。

unless [
   exp1,
   exp2,
   exp3,
   exp4,
   ...
].include? false
   puts "true!"
end
350デフォルトの名無しさん:2010/02/09(火) 23:22:03
>>349
釣りだよな?
Enumerable#all?
Enumerable#any?
と同じ結果を望んでるなんてことないよな?
351sage:2010/02/10(水) 00:13:38
f=lambda{|x,y| x+y}
["sa","ka","wa"].map(&f.call(_,"by"))

みたいに、第二変数の束縛を先にやってから
procをつくりたいのですが、どうすればいいのでしょう?
map{...}はなしで。
352デフォルトの名無しさん:2010/02/10(水) 00:18:31
カリー化したいんでしょ?
おれそれ諦めた。
353デフォルトの名無しさん:2010/02/10(水) 00:26:48
こう?
f=lambda{|x,y| x+y}
p ["sa","ka","wa"].map(&f.curry.call("by"))
354sage:2010/02/10(水) 00:50:33
お!できてる。
順番は逆だったけど、あとは適当に。
355デフォルトの名無しさん:2010/02/10(水) 00:59:39
class Proc
  $__ = Object.new

  def cut(*args_part)
    Proc.new{| *args |
      call(*args_part.map{| arg |
        arg == $__ ? (args.shift) : arg
      })
    }
  end
end

f=lambda{|x,y| x+y}
p ["sa","ka","wa"].map(&f.cut($__,"by"))
# => ["saby", "kaby", "waby"]

まったく勧めないけど一応
356デフォルトの名無しさん:2010/02/10(水) 08:30:40
>>341
mingw版入れろはわかるけど面倒だからパッケージ作ってくれ頼む。RubyGemsとか入っているヤツ
Windowsはaptとかねーんだよ
外人でもいいけど、こういうのはどこに頼めばいいの?
ActiveScriptRubyに上書きしてもいいのかな

>>347
OneClickInstllerも1.8系は1.8.6だから古いよね
357デフォルトの名無しさん:2010/02/10(水) 08:32:02
しかし、RubyInstallerってmingw32版だったのね
そして、1.8.7版が来てる!!!サンクス

問題はアップデートだな。OneClickInstaller時にアップデートしようとしたらアンインストールしろ!とか言われたからな・・・
358デフォルトの名無しさん:2010/02/10(水) 08:59:35
Ruby Installer はかなり昔から mingw32 だった
>>356みたいな人間が発展を阻害する
359デフォルトの名無しさん:2010/02/10(水) 09:26:54
阻害してるという意味ではどっちもどっちだと思う

まー、mingw32は正式版じゃないからな
正式版だけ使いたいという人にはお勧めしない
現状の正式版は中身のRubyが全然「安心の正式版」じゃないけどな
インストーラーが未熟でも中身のRubyがバグフィックスされてることのほうが重要だと思う
360デフォルトの名無しさん:2010/02/10(水) 09:44:31
>>359
正式版ってなによ
どこにそんなことが書いてある
361デフォルトの名無しさん:2010/02/10(水) 09:51:15
解読してみた

まー、(現在公開されている)mingw32(のRuby Installer)は(まだrc2で)正式版じゃないからな
(rcやベータではない)正式版(のインストーラー)だけ使いたいという人には(まだ)お勧めしない
現状の(唯一の)正式版(として公開されてるOne Click Installer)は中身のRuby(の本体のパッチレベル)が(古くて)
全然「安心の正式版」(と言えるような組み合わせ)じゃないけどな
インストーラーが未熟でも中身のRubyがバグフィックスされてることのほうが重要だと思う

こんなんでどう
362デフォルトの名無しさん:2010/02/10(水) 10:03:30
わかりやすい
363デフォルトの名無しさん:2010/02/10(水) 13:07:09
>>361
thanxよくわかったw
364デフォルトの名無しさん:2010/02/10(水) 18:00:13
MSVC版では出来なくてmingw版だけで動く機能
あるいはその逆で
どんなのがありますか
365デフォルトの名無しさん:2010/02/10(水) 18:06:00
そーゆーもんはない
機能で分かれてるわけじゃない

わかんなかったら mswin32 である ActiveScriptRuby 使っとけ
366デフォルトの名無しさん:2010/02/10(水) 19:23:29
インストーラーとしてはmingwよりone click installerの方が正式版のため信頼できるが、
中身のRuby自体はmingwの方が新しい
って理解でいいの?
367デフォルトの名無しさん:2010/02/10(水) 19:28:38
thread とか lock とかは mingw の方が信頼性があるような気がする
368デフォルトの名無しさん:2010/02/10(水) 19:31:35
>>367
GIL使ってる限り信頼性は変わらない
369デフォルトの名無しさん:2010/02/10(水) 19:38:19
OneClickInstallerはインストーラー含めて正式版が作られてる
RubyInstallerはまだインストーラー含めてrc版(ベータと正式の中間)

OneClickInstallerで入るRubyはmswin32で作られている
RubyInstallerで入るRubyはmingw32で作られている

mswin32は従来のタイプの「Windows版Ruby」でgemライブラリでは確実にバイナリがある
 古いコンパイラで作ってあるせいか、環境によってはなぜか動作が遅いことがある
 どうせアップグレード時は全消し推奨なんで面倒の少ないこっち使って慣れろという説も根強い
mingw32は今後主流になるもので最終更新日が古いgemライブラリではバイナリ自前コンパイルも
 動作速度が遅くなる報告は少ないが、gemバイナリの自前コンパイル強要はめどい
 サイトのDevelopment KitをRubyを標準インストールしたディレクトリに上書きコピーすればいいだけだが
 あと、mingw32をWindows環境のRubyの印だと認識してないスクリプトがまだあるので手直しが要ることも
370デフォルトの名無しさん:2010/02/10(水) 19:58:39
あああ、なんかわけわからないことに
mswin32 版を使う場合は ActiveScriptRuby のほうインストールしろ
OneClickInstaller 使って数年前の Ruby をわざわざいまさらインストールする必要もない

 ■ とにかく迷いたくない普通の人 … ActiveScriptRuby
面倒がない mswin32 版のみ提供、ActiveTcl を別途入れると tcl でウィンドウも描けるぞ(要Tcl言語知識)
ttp://arton.hp.infoseek.co.jp/indexj.html
1.9.1 を使いたい人は
ttp://www.artonx.org/data/asr/
の「Ruby-1.9.1-p数字 Microsoft Installter Package」を使わせてもらえ
なに、自分のとこだけ妙に処理が遅い? 宝くじ並の外れ環境だからマシン買い換えろ

 ■ トラブっても自分で手直しする根性あるから遅くなる可能性ないほうがいい … RubyInstaller
古いコンパイラ製ではない mingw32 版の提供がメイン
ttp://rubyinstaller.org/download.html
古いgemパッケージでWindows環境だとみなしてくれずにコンパイラが走って「make がない」と言われること有り
それを乗り越えるためにコンパイラ環境が入ってる「Development Kit」をインストールしておくのを推奨
ttp://wiki.github.com/oneclick/rubyinstaller/development-kit
上記解説にもあるが、RubyInstallerの標準ディレクトリ構成の場合は上書きだけでよい(設定ファイル記述不要)
7zip でないとダウンロードしたファイルを展開できないので注意
スクリプト内での条件分岐で「mingw32」をWindowsとみなさないものが稀にあるので、それは手動で書き換える必要あり
371デフォルトの名無しさん:2010/02/10(水) 20:08:43
長い

 ・ 初心者は ttp://www.artonx.org/data/asr/ の 1.8.7 だけ使え、トラブル起きたらここで聞け

でいいじゃん
372デフォルトの名無しさん:2010/02/10(水) 20:16:28
てか本来は http://arton.hp.infoseek.co.jp/indexj.html でいいんだよね

どうでもいいけどこのサイト meta charset と本文 HTML のエンコーディング食い違ってるぞ
見るたびに毎回エンコーディング指定やり直さないといかん
373デフォルトの名無しさん:2010/02/10(水) 20:22:12
先生,「1.8が許されるのは小(ry」と煽ってもいいのはいつ頃ですか
374デフォルトの名無しさん:2010/02/10(水) 20:22:56
1.8.6はともかく1.8.7は数年無理。
375デフォルトの名無しさん:2010/02/10(水) 20:24:29
先生,JRubyが「Ruby 1.9 compatible now」になるのはいつ頃ですか
376デフォルトの名無しさん:2010/02/10(水) 21:00:20
>>369-370
とりあえず Windows で Ruby がめちゃくちゃ面倒糞いということがわかりました
ほんとうにありがとうございました
377デフォルトの名無しさん:2010/02/10(水) 21:01:13
>>375
見た感じ遠い未来に見える。
http://kenai.com/projects/jruby/pages/Ruby1_9Support
378デフォルトの名無しさん:2010/02/10(水) 21:02:47
>>372
それは作者がUTF-8の普及だか何かのためにわざとやってるらしいよ
379デフォルトの名無しさん:2010/02/10(水) 21:08:40
>>377
そもそもなんでそんな時間かかるんだよ
何がネックになってるんだ
380デフォルトの名無しさん:2010/02/10(水) 21:12:04
>>379
Java からも読めるように作ること

Java VM 上で単独で動く ruby インタプリタを作るだけなら
たぶんもっと早くにプロジェクト完了してるんじゃないかな
381デフォルトの名無しさん:2010/02/10(水) 21:55:57
つか1.8.7って鬼車使えるの?
382デフォルトの名無しさん:2010/02/10(水) 22:18:29
黙れカス
383デフォルトの名無しさん:2010/02/10(水) 22:19:06
ごばく
384デフォルトの名無しさん:2010/02/10(水) 22:26:55
>>381
gem install oniguruma

組み込みになるわけではないので制約はあるが。
http://oniguruma.rubyforge.org/use.xhtml
385デフォルトの名無しさん:2010/02/10(水) 23:22:59
oniguruma を使うようなひとなら mingw とか入れてるような
気がします・・・知らずに joni 使ってるひとも嫌少ないだろう・・・
386デフォルトの名無しさん:2010/02/10(水) 23:49:30
>>381 ってjrubyの話なん?
387デフォルトの名無しさん:2010/02/11(木) 03:58:52
>>384
Requirements
* Oniguruma regular expression library (>= 4.x.x)

ってことは
自分でOnigurumaをコンパイルするか
バイナリをどこからともなく拾ってくる必要があるってことか

./configure
make
make install
で済む話ではあるが
388デフォルトの名無しさん:2010/02/11(木) 22:37:00
irb> p "ねこだいすき"
"\343\201\255\343\201\223\343\201\240\343\201\204\343\201\231\343\201\215"
irb> $KCODE="u"
irb> p "ねこだいすき"
"ねこだいす\343\201\215"

なんだこれ
389デフォルトの名無しさん:2010/02/11(木) 23:22:03
下のようなループってrubyだとどう書きますか?
for (i = rect->lx, j = rect->ly; i <= rect->hx; i++) map[i][j] = TRUE;
390デフォルトの名無しさん:2010/02/11(木) 23:24:17
最近出るようになった気がする。
$ cat test.rb
# coding: utf-8
p 'ねこだいすき'

$ rvm 1.8.7-p72,1.8.7-p160,1.8.7-p174,1.8.7-p249,mput ruby -Ku test.rb
ruby-1.8.7-p72: ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin10.2.0]
"ねこだいすき"

ruby-1.8.7-p160: ruby 1.8.7 (2009-04-08 patchlevel 160) [i686-darwin10.2.0]
"ねこだいすき"

ruby-1.8.7-p174: ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10.2.0]
"ねこだいすき"

ruby-1.8.7-p249: ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin10.2.0]
"ねこだいす¥343¥201¥215"

mput-head: ruby 1.9.2dev (2010-02-10 trunk 26632) [x86_64-darwin10.2.0]
"ねこだいすき"
391デフォルトの名無しさん:2010/02/11(木) 23:26:15
>>389
jは変化してないけどいいの?
iだけならuptoでよいでしょう。
392デフォルトの名無しさん:2010/02/11(木) 23:41:26
>>391
ありがとうございます!

これをrubyに書き換えて勉強中でした。
ttp://racanhack.sourceforge.jp/rhdoc/coderect.html
393デフォルトの名無しさん:2010/02/11(木) 23:52:42
>>388
http://redmine.ruby-lang.org/repositories/revision/ruby-18?rev=26103

usa, 2009年12月15日 11:50 AM

string.c (rb_str_inspect): wrong result of UTF-8 inspect because of the mistake of calculation. reported by eban via IRC.

これかな。

あれ、1.8.7-p248 がクリスマスリリースだったはずだが…
394デフォルトの名無しさん:2010/02/11(木) 23:56:35
Iconv::IllegalSequenceを見るのはもう飽きたお…
395デフォルトの名無しさん:2010/02/12(金) 03:35:08
何か一揆にperl5の時代に戻った気がするなw
教祖様が日本語処理ぐらい最初からまともに組み込んでてくれれば。
396デフォルトの名無しさん:2010/02/12(金) 06:07:00
iconvとnkfってどう違うの?
どう使い分けたらいいの?
397デフォルトの名無しさん:2010/02/12(金) 08:13:29
nkfは
- shift_jis, euc-jp, iso-2022-jp, utf-8しか使えない。
- 改行コードの変換ができる。
- カタカナやアルファベットの全角半角変換ができる。
- base64のデコード/エンコードができる。

iconv
- いろんなコードが変換できる。
398デフォルトの名無しさん:2010/02/12(金) 08:28:43
399デフォルトの名無しさん:2010/02/12(金) 08:33:31
文字コード変換ならiconvが上で
その他機能がnkfにはあると
そういうこと?
400デフォルトの名無しさん:2010/02/12(金) 08:51:30
そもそも文字コード変換に上とか下とかあるんかいな
1.9のencodeとNKF/iconv/kconv/uconvの違いも教えてほしい
401デフォルトの名無しさん:2010/02/12(金) 09:14:29
動作が違うとかは置いとくと
対応してる文字コードが多いほうが上っていうことでしょ

String#encodeはよくわからんが
ttp://jp.rubyist.net/magazine/?0009-BundledLibraries
402デフォルトの名無しさん:2010/02/12(金) 09:17:58
encodeは文字列のバイト表現を指定のものに変換したStringを作り、エンコード情報を設定。
encode!は自分自身の持つバイト列とエンコード情報を変える。
force_encodingは自分自身のエンコード情報のみ変える。バイト列はそのままで解釈が変わる。

kconvはnkfをラッピングして文字コード変換のみ、簡単にできるようにしたもの。

uconvはたしか標準じゃないよな?
euc-jp, cp932(shift_jisの亜種), utf16, ucs-4に対応している。
rubyでutf-8が扱えるようになったのはuconv作者の提案したコードがもとになってる。
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/4186
403デフォルトの名無しさん:2010/02/12(金) 09:28:13
>>400
NKFはguessができるので、現在のエンコーディングが何かわからなくても変換ができる
ただ、日本語関連(とMIME)しか認識できないしLatin-1とかの指定もできない

iconvはguessができないので、現在のエンコーディングを正確に(本当に正確に)指定しないと変換できない
そのかわり、NKFではできなかったような文字エンコーディングの値の保持解釈ができる
SHIFT_JISとCP932やEUC-JPとEUC-JP-MSを使い分けられる(可能性がある)のはiconvだけ
ただし、相手のマシンにインストールされている外部iconvのバージョンと対応に依存するのでやや面倒
iconv実装にはでっかい版と小さい版があり、外人産は小さい版だけを使うことが多いのでファッキンガッデム

1.9のEncodingはiconvを使ってる
kconvはNKFを使ってる
uconvはめんどくさいからもう使うな、使わなくても用は済むはず
404デフォルトの名無しさん:2010/02/12(金) 09:36:07
>>401
そのリンクは読んだけど総花的であんまり参考にならなかった

・M17N(1.9)/NKF/iconv/kconv/uconvで変換結果に差が出ることがあるか
・速度の違い
・推測の精度
・使い分けのシチュエーション

がよくわからんのですよ
405デフォルトの名無しさん:2010/02/12(金) 09:38:35
>>403
わかりやすい
406デフォルトの名無しさん:2010/02/12(金) 09:44:20
ってことは,事実上 iconv と NKF の二種類しか変換器は存在しないわけね
でメールみたいに入力のエンコーディングがよく解らん場合はNKF.guessをつかえと
入力のエンコーディングが固定されてる場合はiconvでおkでOK?

1.9のM17Nはguessしてくれてるんだと思ってたわ。
407デフォルトの名無しさん:2010/02/12(金) 09:47:44
> メールみたいに入力のエンコーディングが
のあとに続くのが
> よく解らん場合
なのがショックだ
あれは99パーセントくらいの確率でヘッダに書いてあるまんまだと思うのだが最近は違うんか
408デフォルトの名無しさん:2010/02/12(金) 09:49:41
メールやHTMLが文字化けするのはヘッダのエンコーディングと実際のエンコーディングが違うからなんじゃないの?
409デフォルトの名無しさん:2010/02/12(金) 09:55:24
日本人しか使わないプログラムなのならNKFでいいよ
外国の人も使うならiconv「でなければならない」
MechanizeとかではNKFを組み込んでしまった日本人がいて、その部分がえんえん障害になってる
iso-8859-xはNKFのShiftJISに誤爆することがあるんだが、そのへんの処理を考慮してない
410デフォルトの名無しさん:2010/02/12(金) 09:59:50
>>407
メールの現実を知らなさ過ぎる
411デフォルトの名無しさん:2010/02/12(金) 10:11:38
1.9のencodeは青学の先生のライブラリ(transcode)じゃないの?
412デフォルトの名無しさん:2010/02/12(金) 10:37:03
>>411
ttp://jp.rubyist.net/magazine/?0025-Ruby19_m17n#l76
ttp://naruse.biz/pub/20080621%20RubyKaigi%20RubyM17N.txt
ttp://www.sw.it.aoyama.ac.jp/2008/pub/RubyKaigiM17N.html
これか

1.9のM17Nはiconvじゃなくてtranscodeみたいだ
また兄弟が増えちまった
よくわからなくなってきた
413デフォルトの名無しさん:2010/02/12(金) 11:04:08
1.9のEncodingの中の人はIconvだと思ってたIconvの例外出すやんキュピーンやん
と思ってたんだが出なかった
あれー、昔はIconvが例外出してなかったっけ、気のせいか

irb> "@".encode(::Encoding::SHIFT_JIS)
Encoding::UndefinedConversionError: "\xE2\x91\xA0" from UTF-8 to Shift_JIS
irb> "@".encode(::Encoding::CP932)
"?@"
414デフォルトの名無しさん:2010/02/12(金) 11:08:15
うちは大家族ですから^^;
おとーちゃんビシッと言ってやりな

って言うは簡単だけど結構面倒だよね…
415デフォルトの名無しさん:2010/02/12(金) 11:54:27
うっぜぇ変なもん作るなよ
rubyってiconvすら実装されてない糞言語だったのか
416デフォルトの名無しさん:2010/02/12(金) 11:58:46
馬鹿発見。
417デフォルトの名無しさん:2010/02/12(金) 12:15:08
みてみて!
Ruby でクイックソート書いてみた。

def qsort(ary)
  return [] if ary.empty?

  v = ary.shift
  left, right = ary.partition{|e| e < v}
  qsort(left) + [v] + qsort(right)
end

ary.dup とかした方がいいのだろうか。
ま、いいや。
418デフォルトの名無しさん:2010/02/12(金) 12:27:58
irb> Iconv.conv('shift_jis', 'utf-8', "\302\273")
Iconv::IllegalSequence: "\302\273"
irb> Iconv.conv('cp932', 'utf-8', "\302\273")
Iconv::IllegalSequence: "\302\273"

» (&raquo; 、RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (U+00BB)、終わりギュメ)
を含むUTF-8文字列をIconvでShift_JISっぽい文字列にしたいんですが…
419デフォルトの名無しさん:2010/02/12(金) 12:43:39
>>417
受け取ったArrayを中途半端に破壊してるのは……まあ確かにまずいかも
アルゴリズム的な補足をするなら、単純かつ美しい実装ならそれでもいいけど、
実用上はピボットの取り方を工夫しないといけない
420デフォルトの名無しさん:2010/02/12(金) 12:44:32
irb1.9> "\302\273".encode('SHIFT_JIS')
Encoding::UndefinedConversionError: "\xC2\xBB" from UTF-8 to Shift_JIS

そもそもだめぽい
421デフォルトの名無しさん:2010/02/12(金) 12:58:36
Ruby M17N は transcode という独自実装
Iconvは環境依存な上にWindowsだとないから、Ruby M17N で使うことはできなかった
なお、libiconvのCP932周りのサポートが腐ってるのも致命的だとされた

> そのかわり、NKFではできなかったような文字エンコーディングの値の保持解釈ができる
> SHIFT_JISとCP932やEUC-JPとEUC-JP-MSを使い分けられる(可能性がある)のはiconvだけ

nkf もできるよ

> メールやHTMLが文字化けするのはヘッダのエンコーディングと実際のエンコーディングが違うからなんじゃないの?

そんな根本的に違う指定ってそんなにあったっけ?
422デフォルトの名無しさん:2010/02/12(金) 13:00:01
>>418
変換表に定義されてないんで、変換前に別の文字にgsubするのが正解
423デフォルトの名無しさん:2010/02/12(金) 13:13:10
>>418
422が書いているようにgsubするのもありだが
変換時の戻り値で分岐するというやり方もある
詳細は下記の "Encoding::Converter#primitive_convert" の項目参照
http://jp.rubyist.net/magazine/?0025-Ruby19_m17n#l76
424デフォルトの名無しさん:2010/02/12(金) 13:26:50
>>421
実際にメーラーを書いて運用してみたらいい
425デフォルトの名無しさん:2010/02/12(金) 14:06:43
kconvの "\302\273".tosjisでは"\x91\xB9"になるな
エラー出して教えてくれたほうがマシかも
426デフォルトの名無しさん:2010/02/12(金) 17:04:09
>>424
単にCP50221って話じゃないの、それだとguessは悪手なんだが
427デフォルトの名無しさん:2010/02/12(金) 18:29:23
reg2 = Regexp.new("A(.*)CD(.*)EF")
str1 = "AbbccCDasdaEF"
str1 =~ reg2

これで得られる$1と$2をループかなにかで
添字をつけて取得できないものでしょうか?
428デフォルトの名無しさん:2010/02/12(金) 18:55:24
>>427
Regexp.last_matchとか$~のこと?
429427:2010/02/12(金) 19:21:56
>>428
$~がMatchDataってオブジェクトになってるのか
ありがとう、解決しました。

430デフォルトの名無しさん:2010/02/12(金) 19:39:54
>>427
foo = reg2.match str1 とすれば、foo にその MatchData が入る
431デフォルトの名無しさん:2010/02/12(金) 19:54:03
kconvとかnkfの話はrubyと関係ねぇ…
432デフォルトの名無しさん:2010/02/12(金) 20:14:00
kconvは関係あるな
nkfは関係ないがNKFは関係あるな
433デフォルトの名無しさん:2010/02/12(金) 21:08:09
Ruby1.9で勉強していた(>>1を読んでませんでしたorz)のですが、
Railsもやってみたいということで、1.8をインストールしたいです。
ですが、Synaptic(Ubuntuのパッケージマネージャ)に1.8のフルインストールパッケージがありませんでした。
なので公式サイトにあるソースコードからインストールしようと思うのですが、
うまく1.9と共存できるのでしょうか?
宜しくお願いします。
434デフォルトの名無しさん:2010/02/12(金) 21:26:32
1.8と1.9ならおおむね問題はない
ユーザーディレクトリにインストールしても動くぞ
435デフォルトの名無しさん:2010/02/12(金) 21:32:17
ありがとうございます、今やったところ
1.9が/usr、1.8が/usr/local
にたまたまなのか入ったので問題なさそうです。
とりあえずrubyとirbコマンドは1.8で起動するようにしました。
436デフォルトの名無しさん:2010/02/12(金) 21:35:41
へえ、いつの間にか1.8なくなってたのか
437デフォルトの名無しさん:2010/02/12(金) 21:42:43
参考までに、./configure するときに
1.8.7$ ./configure --prefix=$HOME --program-suffix=187 && make install
1.9.1$ ./configure --prefix=$HOME --program-suffix=19 && make install
とすると $HOME/bin/ruby187 $HOME/bin/ruby19 などが出来る。

最近はコマンド一発でruby環境を切り替えられる rvm という便利なツールもある。
(多少不安定だが)
438デフォルトの名無しさん:2010/02/12(金) 22:14:07
このようなデータがある時に、重複したデータ削除したいです。
irb(main):001:0> address = Array.new
=> []
irb(main):006:0> p address
[{"name"=>"taro", "tel"=>"11111111111"}, {"name"=>"hanako", "tel"=>"22222222222"}, {"name"=>"hanako", "tel"=>"33333333333"}, {"name"=>"taro", "tel"=>"11111111111"}]

重複している {"name"=>"taro", "tel"=>"11111111111"} を削除したいです。
調べてみて uniq 使えば良いかなと思ったのですが、違うようです。
わかる方、アドバイス貰えると助かります。
439デフォルトの名無しさん:2010/02/12(金) 22:21:44
uniqでいいように見えるんだけど。
440デフォルトの名無しさん:2010/02/12(金) 22:31:06
>>439
失礼しました。uniq で良かったようです。
441デフォルトの名無しさん:2010/02/12(金) 23:15:20
rsenseってなんですか?
442デフォルトの名無しさん:2010/02/13(土) 00:11:16
Rubyコードを補完してくれるもの
ruby rsenseでググるといろいろ情報が見つかるよ
443デフォルトの名無しさん:2010/02/13(土) 00:27:21
>>442
ありがとうございます.メッセで飛んできて「使ってみたらおもしろいかも」って言われて気になってました.
http://github.com/m2ym/rsense
これですね.でもどうやって使えばいいんですか?
444デフォルトの名無しさん:2010/02/13(土) 00:47:08
こいつ自体はファイルとその中での位置を与えると補完候補を返すというコマンドに
すぎないので、好みのエディタのマクロでそれを呼び出して候補を表示する部分は
自作する必要があると思う。
445デフォルトの名無しさん:2010/02/13(土) 03:44:36
>>444
ありがとうございます.Emacs使ってるんで色々みてみます.といってもなんかドキュメント少ないみたいですが;
446デフォルトの名無しさん:2010/02/13(土) 09:23:42
$gem install newgem
したら
ERROR: Error installing newgem:
rubigen requires thoughtbot-shoulda (>= 2.10.2, runtime)
とか出てきて
さらにthoughbot-shouldaを探しても見つからないんですが
newgemのインストールの仕方を教えてください

$ gem --version
1.3.5

$ ruby --version
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mswin32]
447デフォルトの名無しさん:2010/02/13(土) 09:34:58
gem install thoughtbot-shoulda --source=http://gems.github.com
448デフォルトの名無しさん:2010/02/13(土) 09:36:14
「or を伴う式をメソッドの引数に渡す場合は二重に括弧が必要となります。 」
ってどういう意味?
449デフォルトの名無しさん:2010/02/13(土) 09:43:24
そういうことはしないでくださいね、の意
450デフォルトの名無しさん:2010/02/13(土) 09:43:36
puts(nil or "a") だめー

puts((nil or "a")) おk
451デフォルトの名無しさん:2010/02/13(土) 09:51:56
>puts (nil or "a")
a

普通にいけたけど?
452デフォルトの名無しさん:2010/02/13(土) 09:55:07
それ括弧なし
453デフォルトの名無しさん:2010/02/13(土) 09:57:32
>>448
それ余計な文言だよな
査読者や編集者がやっぱり必要だと思う

「メソッドの引数にする場合にはorを伴う演算部分を括弧でくくって式にする必要があります」が正解

p(false or "yes!")

だと「p (false が偽だったら "yes!"」と解釈されて文法エラーになる
false or "yes!" がひとつの処理の塊だとわからせるために式として括弧で括り、
 (false or "yes!")
なおかつ、これ全体を引数として指定してるんだということをわからせるために引数としての括弧を省略せずに使う
 p()
にさっきのカッコつき式を適用して
 p((false or "yes!"))
となる

なお、>>451のように引数括弧相当の存在が明確な場合はエラーにならない
この括弧は引数の括弧ではなく式を作る括弧だ
454デフォルトの名無しさん:2010/02/13(土) 10:13:03
ありがとうございます。
もしかしてメソッド名と引数を括る括弧の間を空白で空けてはいけない?
(第一引数の式を括る括弧と解釈される?)
455デフォルトの名無しさん:2010/02/13(土) 10:26:20
メソッドの引数のカッコはメソッド名と分かれてはいけない

が、分かれた場合は「引数のカッコを省略して引数の全体(または一部)をカッコで括った」と解釈される
おおむね同じ動作をするので、実際上はみんな深く考えてない

puts("ruby") #=> "ruby" をメソッドに渡す
puts ("ruby") #=> ("ruby") の結果をメソッドに渡す
456デフォルトの名無しさん:2010/02/13(土) 10:36:24
ありがとうございました。
ロジカルシンキングではなくイマジネーションでってことですね
457デフォルトの名無しさん:2010/02/13(土) 10:51:47
いや物凄い論理的だと思うが

引数括弧を省略するのがコンセンサスになってるのはpとかputsとかごく一部だぞ
それ以外の普通のメソッドはとりあえず括弧つけとく派が多数派だ
irbとかだと読み返すこともないから適当に省略しまくってるが
458デフォルトの名無しさん:2010/02/13(土) 10:55:08
>>456
意味不明なときは感覚なものととらえてしまうけど、
しばらくRuby使ってなれてきたらロジカルなものだと理解できるようになるよ、がんがれ
459デフォルトの名無しさん:2010/02/13(土) 11:34:23
ちょっと使ってみたんだけど、この言語(というか処理系?)、は多項式時間や指数関時間な計算をブチ転がそうとすると圧倒的に遅いわね…
なによ…まったく!
460デフォルトの名無しさん:2010/02/13(土) 12:45:56
そこらへんのしっかりしたドキュメントが無いから
どうしても試行錯誤で感覚的にならざるを得ない
461デフォルトの名無しさん:2010/02/13(土) 13:33:34
>>460
カッコで括ったら式になるってちゃんと書いてあるだろ
462デフォルトの名無しさん:2010/02/13(土) 13:35:08
そんなところで試行錯誤した覚えはないなあ
463デフォルトの名無しさん:2010/02/13(土) 13:42:42
p(2*10) #=> 20
p (2*10) #=> 20

p(2*10)*2
NoMethodError: undefined method `*' for nil:NilClass
p (2*10)*2 #=> 40
464デフォルトの名無しさん:2010/02/13(土) 13:45:38
> メソッドの引数のカッコはメソッド名と分かれてはいけない
これが書いてないだろ?
465デフォルトの名無しさん:2010/02/13(土) 13:49:36
>>459
O(nlogn)の近似アルゴリズムに変えるか、Inline C 使うか、
そもそも C で書け。
466デフォルトの名無しさん:2010/02/13(土) 17:42:27
      ,―ヽ_(((((_、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-――-、   ・ /
    i、  <(EEEEE)> ∵/    多項式時間や指数関時間な計算が遅いのは当たり前だろ
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |
467デフォルトの名無しさん:2010/02/13(土) 19:53:39
多項式時間や指数関時間の計算をRubyでやる男の人って・・・
468デフォルトの名無しさん:2010/02/13(土) 20:57:16
マルチバイトの文字列のうち、ASCIIの制御文字にあたるもの(NULLとかCRとか)
を削除するには
sub /\s+/, ''
でいいですか?

0x00〜0x1fだけを削除するにはどうしたらよいですか?
469デフォルトの名無しさん:2010/02/13(土) 21:18:32
irb> p "ね\001こ\t大\025す\177き\n".gsub(/[[:cntrl:]]/){''} == "ねこ大すき"
true
irb> p "ね\001こ\t大\025す\177き\n".gsub(/(?![[:space:]])[[:cntrl:]]/){''} == "ね こ\t大すき\n"
true
470デフォルトの名無しさん:2010/02/13(土) 21:18:33
普通に
/[\x00-\x1f]/
じゃダメなの?
471デフォルトの名無しさん:2010/02/13(土) 21:21:50
飼ってたインコを食べたので猫はきらいです
472デフォルトの名無しさん:2010/02/13(土) 21:29:55
>>469
名前つきでわかりやすそうに見えて実はわかりにくいというなんとも
473デフォルトの名無しさん:2010/02/13(土) 21:30:57
キャリッジリターンやラインフィードは立派なコントロールコードですよ
474デフォルトの名無しさん:2010/02/13(土) 21:35:40
>>470
いいんじゃまいか
475デフォルトの名無しさん:2010/02/13(土) 21:42:39
> 0x00〜0x1fだけを削除するにはどうしたらよいですか?
こういうの見るたび、DELは消さなくていいんだろうか、といつも思う
476デフォルトの名無しさん:2010/02/13(土) 21:55:53
ISO-2022-JP文字列に対して実行してESC(0x1B)を消されてしまえー。
477デフォルトの名無しさん:2010/02/13(土) 22:07:14
>>467
Ruby を愛しています
ゆるしてください
478デフォルトの名無しさん:2010/02/13(土) 22:25:51
童貞のくせに愛なんて言葉を軽々しく使うな
479デフォルトの名無しさん:2010/02/13(土) 22:46:25
rubyはJavaの1000倍の生産性があると聞いてやってきました
480デフォルトの名無しさん:2010/02/13(土) 22:54:29
エロ画像を一括でスクリプトとか書くならそれぐらいあるかもしれない
481デフォルトの名無しさん:2010/02/13(土) 23:05:47
RubyでJSON(と言うかJavaScriptのオブジェクトの記述)をパースしたいのですが
require "yaml"
p YAML.load('{"num":"123456789"}')
とかやるとエラーになってパースできません。何か良い方法があったら教えてください
p YAML.load('{"num": "123456789"}')
ならパースできるようですが、JavaScript的にはどっちでも通るはず・・・
482デフォルトの名無しさん:2010/02/13(土) 23:39:39
# 正しいところを見ているのかちょっと自信がないけど。

http://yaml.org/spec/1.1/index.html#id933010

Explicit Values
An explicit value is denoted by the “:” indicator, followed by separation spaces.

仕様かも?

483デフォルトの名無しさん:2010/02/14(日) 00:41:07
面倒でなければ、gem install jsonで
JSON.parse(json_str)
するのが簡単で確実。
484デフォルトの名無しさん:2010/02/14(日) 08:04:15
ちょっとあなた
RubyInlineでインスタンス変数を参照する方法がわかりませんわよ
485デフォルトの名無しさん:2010/02/14(日) 10:32:41
http://jp.rubyist.net/magazine/?0009-YAML にもコロンの後にはスペースとしつこく書いてあるな。
YAMLのフロースタイルがJSONとして評価できたとしても、逆ではないってことかな。
486デフォルトの名無しさん:2010/02/14(日) 10:34:53
>>484
使ったことないけど、Cの世界にいるときは rb_obj_ivar_get じゃねーの?
487デフォルトの名無しさん:2010/02/14(日) 10:38:14
http://ja.wikipedia.org/wiki/JavaScript_Object_Notation

他のデータ記述法との関係
但し、厳密にはJSONはYAMLのサブセットではない[3]。具体的には配列とハッシュの区切りを
それぞれ, のようにカンマ+スペースの形にしたときにのみYAMLのサブセットとなる。したがっ
て、YAML.loadといったYAMLのルーチンを流用してJSONデータを読み込む場合は、あらかじ
め区切りの文字をYAMLと互換性を保つようにしておく必要がある。
488デフォルトの名無しさん:2010/02/14(日) 12:42:36
さすがにJSONをYAMLのライブラリで読むのは横着だろうw
489デフォルトの名無しさん:2010/02/14(日) 13:02:11
何でそんなしょぼいところで非互換性持たせてるんだ
490デフォルトの名無しさん:2010/02/14(日) 13:11:56
たまたま似てるだけであって互換性を意図的に持たせようとしたわけではないから。
491デフォルトの名無しさん:2010/02/14(日) 13:20:42
たまたまと言い張るには似すぎだろ
492デフォルトの名無しさん:2010/02/14(日) 13:25:56
>>489
サブセットにしようと思って作ったんだけど手作業での網羅が漏れてたらしくて
493デフォルトの名無しさん:2010/02/14(日) 13:42:37
何に怒りをぶつけているんだろう。
494デフォルトの名無しさん:2010/02/14(日) 14:12:08
お客様がいらしてるご様子
495デフォルトの名無しさん:2010/02/14(日) 14:20:09
>>494
こんなので「怒ってる」とかありえんよな
素直にMLにだけ引き篭もってろと
496デフォルトの名無しさん:2010/02/14(日) 15:41:12
ruby1.9.1(mswin32)で動くプロファイラありませんか?
標準のは遅すぎて使い物になりません
497デフォルトの名無しさん:2010/02/14(日) 15:49:59
自分で作れるよ
498デフォルトの名無しさん:2010/02/14(日) 16:25:54
どうやって作るのですか?
499デフォルトの名無しさん:2010/02/14(日) 16:43:08
掲示板で説明できるようなものじゃないけど、
profile や profiler を見れば既存の作り方は書いてあるよ。
あとは処理速度を向上させる工夫をするなり、
自分で一から作るなりすればいいよ。
500デフォルトの名無しさん:2010/02/14(日) 16:49:37
それは標準のものでは?
自分で書いたからといって速くなるとは思えませんが如何でしょうか?
501デフォルトの名無しさん:2010/02/14(日) 16:55:21
ちょっとお茶しませんか?
502デフォルトの名無しさん:2010/02/14(日) 16:58:01
>>500
そんなの自分次第やん
503デフォルトの名無しさん:2010/02/14(日) 17:01:48
Rubyの使用メモリ量を測る方法って何かありますか?
終了までの最大量だけでもわかるといいんですが
504デフォルトの名無しさん:2010/02/14(日) 17:09:23
Linuxだと "/proc/#{$$}/status" とかを読んだらいろいろ分かるかもしれない。
ほかは知らん。
505デフォルトの名無しさん:2010/02/14(日) 17:10:15
>>503
Rubyとしては提供されてない
OSから観測してもらうしかない
506デフォルトの名無しさん:2010/02/14(日) 17:10:38
UNIX なら top
Windows ならタスクマネージャ
507デフォルトの名無しさん:2010/02/14(日) 17:12:04
valgrind使えばいけるかも
508デフォルトの名無しさん:2010/02/14(日) 17:13:53
まあ、/proc 使っていいなら stat のポーリングで
top コマンドみたいにやればいいんだけどさ。

libproc.so って /proc の出力を露骨に sscanf() してるから
あんまり汎用性ないよなーと思って。
509デフォルトの名無しさん:2010/02/14(日) 17:14:45
汚いコピペだなあ
510デフォルトの名無しさん:2010/02/14(日) 17:21:46
>>504
お前帰れって言われてんだよ
511デフォルトの名無しさん:2010/02/14(日) 17:25:01
>>504-508
ありがとうございます
Windowsで見たいのですがcygwinなら/proc/pid/statusは同様に使えそうな感じなんで
詳しく調べてみます
512デフォルトの名無しさん:2010/02/14(日) 17:25:36
>>502
自分次第とおっしゃいますと具体的にはどのような工夫がありますでしょうか?
513デフォルトの名無しさん:2010/02/14(日) 17:33:21
ruby-profは?コンパイルはがんばれ
514デフォルトの名無しさん:2010/02/14(日) 17:43:59
いや、早い話、インストールするだけで動くものはありませんかってことです。
ruby-profはドキュメントでは1.9対応を謳っていましたがWindows用のものは
msvcrt-ruby18.dllが見つからないと表示され、1.8用のDLLを参照しようと
してしまい動きませんでした。
515デフォルトの名無しさん:2010/02/14(日) 18:05:12
Rubyコミュニティで自分で作れと言われたらそれは
ありませんごめんなさいという意味です。
素直にあきらめましょう。
516デフォルトの名無しさん:2010/02/14(日) 18:21:32
それを先に言ってください
517デフォルトの名無しさん:2010/02/14(日) 18:32:48
無いなら自分で作ればいいってだけの話だな。
518デフォルトの名無しさん:2010/02/14(日) 18:53:46
初心者にそれを求めるのは酷
519デフォルトの名無しさん:2010/02/14(日) 18:59:13
というか普通に動くが
520デフォルトの名無しさん:2010/02/14(日) 19:02:58
何を使っているんですか?
521デフォルトの名無しさん:2010/02/14(日) 19:16:29
やり方わからなくて詰まるくらいなら経験たまるまで素直に1.8だけ使えやオラ、とか思わなくもない
522デフォルトの名無しさん:2010/02/14(日) 19:38:21
コンパイルさえできればいいんだから、コンパイラ入れるかmingw32使ってみるというのはどう
523デフォルトの名無しさん:2010/02/14(日) 20:48:23
妹にチョコもらってしまった…
524デフォルトの名無しさん:2010/02/14(日) 21:59:36
やれるのかやれないのかハッキリしてよ
525デフォルトの名無しさん:2010/02/14(日) 22:04:51
チョコくれたんだから実はOKという意思表示なのでは
526デフォルトの名無しさん:2010/02/14(日) 22:07:05
女だってやりたいんだよ
童貞は知らないだろうけど
527デフォルトの名無しさん:2010/02/14(日) 22:24:22
女がやりたがってるのは好きな男とだぞ
勘違いしちゃダメだぞ
528デフォルトの名無しさん:2010/02/14(日) 22:25:07
やべ
勘違いしてた
529デフォルトの名無しさん:2010/02/14(日) 22:26:22
インターフェースは同じはず
そこはポリモーフィズムで…
530デフォルトの名無しさん:2010/02/14(日) 22:27:51
スレ違いだからもう終わりよ、みなさん。
いろいろと参考になりましたが。
531デフォルトの名無しさん:2010/02/14(日) 23:25:51
童貞きめえ
女に植えてんだなかわいそうにおまえら
532デフォルトの名無しさん:2010/02/14(日) 23:29:19
コンピュータばかりいじりすぎて
外の世界が見えません。
533デフォルトの名無しさん:2010/02/15(月) 00:06:07
gemをインストールしたあと使おうとすると no such file to load になるんだけど
どうすれば使えるようになるの?
534デフォルトの名無しさん:2010/02/15(月) 00:25:35
>>533
そのgemのインストール自体は正常に終わっているとすると、
require 'rubygems'
require 'gemのライブラリ'
で使えるようになるはずだが。(つまり、毎回rubygemsをrequireする必要がある)

たとえば、ちょっとjsonの場合はこんな感じ。
$ sudo gem install json
$ irb
irb> require 'rubygems'
irb> require 'json'
irb> JSON.parse('{"num":"123456789"}')
=> {"num"=>"123456789"}
535デフォルトの名無しさん:2010/02/15(月) 00:26:04
require "rubygems"
536534:2010/02/15(月) 00:26:52
書き途中で送信してしまった。
× たとえば、ちょっとjsonの場合はこんな感じ。
○ たとえば、ちょっと前のレスのjsonの場合はこんな感じ。
537デフォルトの名無しさん:2010/02/15(月) 00:28:56
538デフォルトの名無しさん:2010/02/15(月) 00:57:22
sudoをつけてなかったのが敗因だった。ありがとう
539デフォルトの名無しさん:2010/02/15(月) 01:12:58
--pre とか付けると no such file to load となる
すばらしいマイエンバイロンメント ruby 1.8.2、 gems 0.9

いきなり詰んだorz
540デフォルトの名無しさん:2010/02/15(月) 01:19:53
http://ysky.vox.com/library/post/gemsのオプション仕様が変わった.html

あした gems 自体を update させてもう一度やってみょ
寝るべzzz
541デフォルトの名無しさん:2010/02/15(月) 01:30:34
いちはちに…
542デフォルトの名無しさん:2010/02/15(月) 07:52:31
>>539
なんのための--preか知らんが、Rails 3βとかは1.8.7以降でないと動かんぞ。
543デフォルトの名無しさん:2010/02/15(月) 08:05:05
ていうか1.8.2は5年以上前の不安定版なんだが
今更これ使うくらいなら俺はPerlをやる
544デフォルトの名無しさん:2010/02/15(月) 08:13:11
Pythonは?
545デフォルトの名無しさん:2010/02/15(月) 09:07:03
JSON is YAML って言っている人はいるけど、本当に上位互換になるのは 1.2 から。
で、Ruby 標準添付の syck は 1.0 なので
546デフォルトの名無しさん:2010/02/15(月) 10:19:49
_why行方不明だし、どうなるんだろ Syck。
547デフォルトの名無しさん:2010/02/15(月) 10:32:31
どうなるもなにも、これまでの「優秀だったがサポートがなくなったライブラリ」と同様の道を辿る
548デフォルトの名無しさん:2010/02/15(月) 10:49:22
1.8用のtranscodeっぽいものってない?
バイト列とエンコーディングを投げるとバイト列の適切な区切り位置を記憶してくれるライブラリみたいな
549デフォルトの名無しさん:2010/02/15(月) 10:59:07
>>546
Aaron さんが互換ライブラリを開発中

>>548
Iconv じゃダメですか
550デフォルトの名無しさん:2010/02/15(月) 11:04:17
data = Array.new
data = [1, 2, [3, 4, [5]], 6]
多次元配列のデータがあります。
このデータを、次のように1次元配列に格納しなおしたいです。
p data
=> [1, 2, 3, 4, 5, 6]
多次元配列のデータは、今回のサンプルでは3次元ですが、
実際のデータは何次元になるかわかりません。
そのため、再帰の必要性があると思い次のようなメソッドを考えました。

def split_ary(ary)
local_ary = Array.new
return local_ary if ary.empty?
ary.each do |a|
if Array == a.class
split_ary(a)
else
local_ary << a
end
end
end

良く考えれば当然なのですが1次元にできません。。。
p split_ary(data)
=> [1, 2, [3, 4, [5]], 6]

1次元にするには、どのように改善すれば良いでしょうか。
551デフォルトの名無しさん:2010/02/15(月) 11:17:25
[1, 2, [3, 4, [5]], 6].flatten
552デフォルトの名無しさん:2010/02/15(月) 11:21:42
>>551

おおお!! このようなメソッドが既にあるのですね。
ありがとうございます!
553デフォルトの名無しさん:2010/02/15(月) 11:34:29
flatten使うべきだけど、後学のために

def split_ary(ary, local_ary = [])
 ary.each {|a|
  if a.kind_of? Array
   split_ary(a, local_ary)
  else
   local_ary << a
 end
 }
 local_ary
end
554デフォルトの名無しさん:2010/02/15(月) 11:47:28
>>553

丁度、ライブラリ set.rb の flatten メソッドのソースを眺めている所でした。
・Array クラスか判定するのに、kind_of を使うこと
・local_ary を引数(の位置?)で、Array.new すること
勉強になりました。

初めは set.rb を見ても理解できなかったのですが、
私が書いたソースを改変して貰ったおかげで、理解できました。

ありがとうございました。
555デフォルトの名無しさん:2010/02/15(月) 13:07:36
すごく重要なことだけど、多次元配列はRuby標準では存在しない
ただの入れ子になった配列
多次元であるかのように振舞うことはない
556デフォルトの名無しさん:2010/02/15(月) 15:28:12
irb(main):006:0> (5.6 * 10500).to_i
=> 58799

58800になってほしかったんですが、なぜこんな風になってしまうんでしょう?
557デフォルトの名無しさん:2010/02/15(月) 15:31:43
558デフォルトの名無しさん:2010/02/15(月) 15:32:04
>>549
バイト列 unsafe_str から制御文字を取り除きたいんです
んで、世の中にはたとえば iso-2022-jp のような \e を必要としてるエンコーディングもあるので、
そういう場合、「必要な制御文字」だけは残したいんです

display_encoding = "ISO-2022-JP"
unsafe_str = Iconv.iconv(display_encoding, "UTF-8", 'ねこだいすき').join
unsafe_str #=> "\e$B$M\e(B\\000\e$B$3$@$$\e(B\\e\e$B$9$-\e(B" # \000と\eが入ってるのがやだ
safe_str = kill_dangerous_ctrl_chars_on(display_encoding, unsafe_str)
p safe_str #=> "\e$B$M$3$@$$$9$-\e(B"

ちなみに日本語以外にも対応したいですというか日本語だけでいいなら悩みません
559デフォルトの名無しさん:2010/02/15(月) 15:49:33
>>556
5.6を10500回足したものが、本当は58800よりもほんの少しだけ小さいから
irb> (5.6 * 10500) - 58800
-7.27595761418343e-12
より正確には、2進数で表現される5.6が10進数で考える本来の5.6よりもほんの少しだけ小さいから
Float#to_iは「切り捨て」を行うので、「58800よりもほんの少しだけ小さい数」の小数部を切り捨てて、58799になる

これを簡易に防ぐには、>>557の言うように四捨五入のメソッドを整数化処理として擬似的に使う
誤差が0.5を超すことは一般的用途ではまずないから
irb> (5.6 * 10500).round
58800

もし本当に厳密に計算を行いたいのならbigdecimalライブラリを使う
irb> require 'bigdecimal'
irb> (BigDecimal.new("5.6")*BigDecimal.new("10500")).to_s
"0.588E5"
560デフォルトの名無しさん:2010/02/15(月) 15:59:21
>>559>>557から読み取れというのは酷だな
561デフォルトの名無しさん:2010/02/15(月) 16:01:17
「なんで期待した値にならないのか」の答えじゃなくて
「とにかく望んだ値を得る方法」だものな。
562デフォルトの名無しさん:2010/02/15(月) 16:08:44
まあ、暇な人がリンクをたどって(または単に自前の知識で)説明してくれるだろうと期待して
情報のポインタだけぶん投げるというのは省労力的にはアリではある
どっちかっちゃFAQに近いし
563デフォルトの名無しさん:2010/02/15(月) 18:36:31
BigDecimal.を見るとなぜかマルちゃんのでかまるを思い出す
564デフォルトの名無しさん:2010/02/15(月) 18:58:21
rubyがメインにしているOSって何ですか?
565デフォルトの名無しさん:2010/02/15(月) 18:58:49
linux
566デフォルトの名無しさん:2010/02/15(月) 19:01:12
どのlinuxでしょうか?
567デフォルトの名無しさん:2010/02/15(月) 19:02:15
debian
といってもubuntuやFedoraとかでもそう振る舞いは変わらないと思う
568デフォルトの名無しさん:2010/02/15(月) 19:05:57
Linux上で適当にコンパイルされたRubyで動作させるスクリプトは、
Windows上で慎重にコンパイルされたRubyで動作させるスクリプトの倍以上の速度を誇る
569デフォルトの名無しさん:2010/02/15(月) 19:06:13
DebianはPythonマンセーって感じだけどね。
570デフォルトの名無しさん:2010/02/15(月) 19:12:46
debianはデスクトップにもサーバーにも使えるから使い勝手がいいんだよね
うちの会社は全PCdebian
571デフォルトの名無しさん:2010/02/15(月) 19:13:21
Rubyをシステムスクリプトに組み込むなんて狂気の沙汰だ
しかもDebianのシステムを中途半端にRedHat系列に再現するとかありえん
572デフォルトの名無しさん:2010/02/15(月) 19:14:04
とつぜん何を。
573デフォルトの名無しさん:2010/02/15(月) 19:18:29
>>571
mphは目指すところは悪くなかったんだよ
しかしいかんせん当時のRubyの完成度安定度が低すぎた
良くも悪くもkondaraだな
574デフォルトの名無しさん:2010/02/16(火) 01:37:19
cgi書いてるんだけど、CGI#out でHTMLを出力する場合、ソースを全部一度に吐き出す感じになるよね?
処理しながら少しずつHTMLを出力するにはどうしたらいいの?
575デフォルトの名無しさん:2010/02/16(火) 02:05:35
ふつーに標準出力に書き出せばいいのでは
576デフォルトの名無しさん:2010/02/16(火) 02:07:58
あんなもんつかわずに適当にテンプレートエンジン使ったほうがいい。
577デフォルトの名無しさん:2010/02/16(火) 02:08:26
>>575
なるほど。
標準出力でいいんですね。
578デフォルトの名無しさん:2010/02/16(火) 03:40:26
>>547
まじか
Ruby の未来は暗いな
579デフォルトの名無しさん:2010/02/16(火) 04:13:51
>>574
リストに吐き出して最後に結合
580デフォルトの名無しさん:2010/02/16(火) 07:08:05
Marshal.dump(obj[,port][,limit])を使って
データをグローバル変数に保存したいんですけど不可能ですか?
581デフォルトの名無しさん:2010/02/16(火) 07:31:04
質問の意味がわかりかねるねるねるね
582580:2010/02/16(火) 07:38:37
def save_bitmap
file = File.open("test.txt", "wb")
Marshal.dump(@data, file)
file.close
end
これだとtest.txt内に@dataを保存しますよね?
これをグローバル変数に保存したいのですが
def save_bitmap
file = File.open($data, "wb")
Marshal.dump(@data, file)
file.close
end
これじゃだめですか?
583デフォルトの名無しさん:2010/02/16(火) 08:04:57
$dataと@dataってどうなの

$data = Marshal.dump(@data) は違うの?というかこれなら
$data = @data でいいじゃん
584580:2010/02/16(火) 08:36:03
できましたありがとうございました
考えすぎていたようです
585デフォルトの名無しさん:2010/02/16(火) 08:46:10
というかグローバル変数使うなかっこ悪いから
トップレベルのローカル変数とメソッドの引数でデータの受け渡ししろ
586デフォルトの名無しさん:2010/02/16(火) 08:55:45
ディープコピーの常套手段ってやつか
587デフォルトの名無しさん:2010/02/16(火) 09:16:12
引数と返り値で充分なやり取りだと思えるかどうかには自覚と時間が必要

 ・ グローバル変数いらねえ
 ・ クラス変数使う必要ねえ
 ・ これインスタンス変数でなくてもいい

と感じるにはちょっと時間が要る
他人から言われてもえーって感じでピンとこない
588デフォルトの名無しさん:2010/02/16(火) 11:36:08
>>579
メモリ食いつぶした。
謝罪と賠償を(ry
589デフォルトの名無しさん:2010/02/16(火) 14:39:42
配列で指定した要素を一つだけ削除する命令ってないですか?
[1,2,3,4,5,1,1,1,1,1]
これの1を一つ削除して
[2,3,4,5,1,1,1,1,1]
にしたいんですが。delete(val)だと全部消しちゃいますよね。
590デフォルトの名無しさん:2010/02/16(火) 14:48:27
>>589
それなんかやたらよく聞かれるんだが、メソッド一発でやる方法は特にない

arr = ["a", "b", "c", "b", "a"]
arr.delete_at(arr.index("b"))
p arr

["a", "c", "b", "a"]
591589:2010/02/16(火) 15:08:55
def delete_learn_data(delete_id)
$game_system.golem_learn_data.each_with_index{ |value, i|
if delete_id == value
$game_system.golem_learn_data.delete_at(i)
break
end
}
end
とりあえずこれでいけました。ありがとうございました。
592デフォルトの名無しさん:2010/02/17(水) 13:47:36
メソッドhogeの引数としてフォーマット用文字列と任意個の文字列を渡して
formatで整形した文字列を作りたいんだけど
hogeの引数はどんな形で渡したらいい?

def hoge(引数)
 s = format(引数1, 引数2, 引数3・・・)
end

以下のようにしたらsは1つの配列として扱われてformatに
too few argumentsと言われてしまいました
def hoge(f, *s)
 s = format(f, s)
end
hoge('%s %s', 'aaa', 'bbb')
593デフォルトの名無しさん:2010/02/17(水) 13:50:15
format(f, *s)
594デフォルトの名無しさん:2010/02/17(水) 14:53:03
thx
595デフォルトの名無しさん:2010/02/17(水) 15:23:25
Rubyやってて良かったことを教えて下さい。
596デフォルトの名無しさん:2010/02/17(水) 15:37:21
自分用スクリプトでPerlを使わなくて済んだ
オブジェクト指向に触れてなんとなく理解した気になれた
597デフォルトの名無しさん:2010/02/17(水) 15:47:09
railsに尽きるなぁ
rails無かったら何の価値も無かった
598デフォルトの名無しさん:2010/02/17(水) 16:48:37
ニワカ乙
599デフォルトの名無しさん:2010/02/17(水) 17:00:24
プッ
反論してみろよカス
600デフォルトの名無しさん:2010/02/17(水) 17:34:43
論に対してしか反論はありえない。
601デフォルトの名無しさん:2010/02/17(水) 17:36:48
mechanizeとnokogiri(hpricot)はなかなかいいライブラリだとは思った
あれら程手軽に使えるスクレイピングライブラリは他の言語では知らない
602デフォルトの名無しさん:2010/02/17(水) 17:46:35
railsを作ってしまうような香具師がrailsが存在する前から評価してた言語ってだけで十分な気がする。
603デフォルトの名無しさん:2010/02/17(水) 19:30:01
でも他のスレでRubyの4文字を出すと馬鹿にされる
604デフォルトの名無しさん:2010/02/17(水) 19:31:33
>>595
Javaを使わなくて済むようになった・・・まあRubyじゃなくてもいいんだけど。

>>602
なんでやねん。そんな理由がだれをどう嬉しくするのさ。
605デフォルトの名無しさん:2010/02/17(水) 22:00:29
>>603
難解な言語技術を修得しているという自負が
平易な言語に対する無体な態度につながるんだろうか
606デフォルトの名無しさん:2010/02/17(水) 22:14:05
>>605
Ruby厨でぐぐれ
607デフォルトの名無しさん:2010/02/17(水) 22:35:35
Java厨の嫉妬は凄いよな。
608デフォルトの名無しさん:2010/02/17(水) 22:37:40
・ Rubyをちょっと齧ったばかりで興奮して他スレで煩いRuby厨
・ 生まれてこのかたJavaしか知らない自称中級者

を混ぜると危険というかひたすら面倒
609デフォルトの名無しさん:2010/02/17(水) 22:39:16
そろそろ隔離スレ行こうね
610デフォルトの名無しさん:2010/02/17(水) 22:40:08
・ Rubyには興味がないがRubyに関わった遣り取りにウンザリしてもう排除したいと思ってる人

を追加

というか本スレでやれ
611デフォルトの名無しさん:2010/02/17(水) 22:41:40
変態同士仲良くしろよ
612デフォルトの名無しさん:2010/02/17(水) 23:14:40
..           (.
.            )
      ,―ヽ__(__、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-――-、   ・ /
    i、  <(EEEEE)> ∵/    IPA Rubyスレは誰でもウェルカム
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |
      >   ヽ. ハ  |   ||
613デフォルトの名無しさん:2010/02/17(水) 23:18:26
>>612
いつも思うんだけど
この人だれ??
614デフォルトの名無しさん:2010/02/17(水) 23:21:18
ミスターつこうた
615デフォルトの名無しさん:2010/02/17(水) 23:33:15
>>613
こいつにレスしたのお前だけだぞ
616デフォルトの名無しさん:2010/02/17(水) 23:39:16
申し訳ごめんなさい。
617デフォルトの名無しさん:2010/02/18(木) 01:44:24
絶対にゆるさない
618デフォルトの名無しさん:2010/02/18(木) 19:54:41
StarRuby今落としたんですが
この板にスレッドが無いのが気になりました。
ゲーム開発用であんまり需要無いんですか?
619デフォルトの名無しさん:2010/02/18(木) 20:03:48
ありませんというかそもそもゲーム製作専用系は板違い

【Ruby/SDL他】Rubyでゲーム制作・総合スレッド
ttp://pc11.2ch.net/test/read.cgi/gamedev/1207069887/
620デフォルトの名無しさん:2010/02/18(木) 21:07:28
>>595
手軽に短くかっこよくツールが書けること。
あと、Rails
621デフォルトの名無しさん:2010/02/18(木) 21:11:38
Pythonから来ました。
自分用のプログラムを書くときに、クラス定義のときに組み込みクラスを
オーバーライドするのが怖いので、トップレベルにMyAppみたいな名前の
モジュールを作ってから、その中にクラスを定義しているのですが、
これはRuby文化に反するのでしょうか?

また、Pythonのように、組み込みクラスはすべて、Builtin::String, Builtin::Arrayみたい
になってたらなあ、と思ったのですが、何故こうなっていないのでしょうか?
622デフォルトの名無しさん:2010/02/18(木) 21:36:19
適当なモジュールでくるむのは普通に行われているし、実質推奨になっている
まあ、それ自体が被る可能性もあるが

> 何故こうなっていないのでしょうか?
めんどくさいから

…まあ、オープンクラスっても限度あんだろ、とはみんなちょっと思ってはいる
ある意味初期の見通しミスをずるずる引きずってるわけで
623デフォルトの名無しさん:2010/02/18(木) 21:57:05
本当のところはMatzに聞かなきゃ分からんが、
デメリットを勘案の上でオープンクラスを選択したのは間違いないわけだから
設計意図どおりだと思うけどなあ

オープンクラスの影響範囲を押さえ込む名前空間システムが
検討されてるらしいが、いつ実装になるやら
624621:2010/02/18(木) 21:59:30
>>622
むしろ推奨でしたか。安心しました。有り難うございます。

トップレベルにすべての組み込みクラスがあるのは面倒くさいから。。。
実にRuby的だなと思いました(笑)。いいですね。

もし初期の見通しをひきずっているのなら、Ruby2.0なんてのが出る時には
改善されるかもしれませんね。
625デフォルトの名無しさん:2010/02/18(木) 22:05:47
いわゆる Std:: を使わないのはオープンクラス主義と反するからであるのは間違いない
626621:2010/02/18(木) 22:08:53
>>623
オープンクラスなのは、メリットがとても大きいと思うので気にならないのですが、
どうして、組み込みをすべてトップレベルにしてあるのかなと思ったのです。
自分用のクラスを定義するときには、組み込みクラスの名前はすべてすでに使われているわけで、
名前空間がクリーンじゃないなと。

> オープンクラスの影響範囲を押さえ込む名前空間システム
そんなのが実現したらすごそうですね。
627デフォルトの名無しさん:2010/02/18(木) 22:22:54
selector namespace だっけ?
628デフォルトの名無しさん:2010/02/18(木) 22:30:06
python も
str = 'hoge'
みたいなことすると
あほなことになるが
629デフォルトの名無しさん:2010/02/18(木) 22:45:07
それは__builtins__.strを上書きしてるわけじゃないから、
モジュール外に被害は出ないだろ。
630デフォルトの名無しさん:2010/02/19(金) 01:20:07
lambdaについて

lambdaはreturnがクロージャから戻り、また引数チェックを行うprocというところまで理解しました。
ですが、このlambdaメソッドはどのように定義されているのでしょうか?
引数チェックはなんとなくメタプログラミングでできそうな気がするのですが、returnの挙動を変える
なんてことができるのでしょうか?

Cで実装されているのかもしれませんが、もしRubyで実装するとすればどのようになるのか教えてください。
631デフォルトの名無しさん:2010/02/19(金) 01:23:39
クラスメソッドを定義しようとして
def Fixnum.bar
end
と書いたら
1.bar

NoMethodError: undefined method `bar' for 1:Fixnum
になります。どうすればいいんでしょうか?
632デフォルトの名無しさん:2010/02/19(金) 01:31:22
>>631
1.class.bar

Rubyのクラスメソッドは、その定数で表されるclassオブジェクトのインスタンスメソッドという程度の意味しかない
633デフォルトの名無しさん:2010/02/19(金) 01:31:51
クラスメソッドはインスタンスからは呼べないんじゃないの?
1はFixnumクラスのインスタンスだし。
とりあえず、クラスメソッドと定義しているわけだから
Fixnum.barとすれば動く。

もし、1.barという風に実行したかったのなら
クラスメソッドではなく、インスタンスメソッドを定義したかったのだという事になる。

634デフォルトの名無しさん:2010/02/19(金) 01:35:49
>>630
>このlambdaメソッドはどのように定義されているのでしょうか?
Proc.new

本当に理解したければBindingオブジェクトの知識が要ると思う
635デフォルトの名無しさん:2010/02/19(金) 01:40:35
インスタンスメソッドを定義したかったのでした
636デフォルトの名無しさん:2010/02/19(金) 01:51:27
>>635
それなら
class Fixnum
def bar
puts "bar"
end
end
と書いて、1.barとすればいい
637デフォルトの名無しさん:2010/02/19(金) 01:53:33
Fixnumにメソッド追加するのはおおむねキモいけどな
キモいと自分で感じるまではこれは仕方ない
便利に使うといい
638630:2010/02/19(金) 01:54:53
>>634
Proc.new == Kernel#procですよね?(Ruby1.9)

Bindingオブジェクトは雰囲気だけは分かります。どうか教えてください。
returnの挙動をどうやってメタプログラミングしたのかが知りたいのです。
すみません。
639デフォルトの名無しさん:2010/02/19(金) 02:10:55
あー何度もすみません。特異クラスがおおもとの疑問でした。(試行錯誤の中で>>631へ)
特異クラスの動作を見てみようと
a = 1
def a.foo
end
とすると
TypeError: can't define singleton method "foo" for Fixnum
となるのでどうすればいいのかなと
640デフォルトの名無しさん:2010/02/19(金) 02:20:38
>>639
俺もあまり詳しくないが、とりあえずFixnumとかSymbolとかは特異クラスが定義できない。
a = 1
b = 1
としたときにaとbのobject_idが同じ(aもbも同じオブジェクトを指す)になるのと関係あると思う。
String等その他大勢では
a = 'foo'
b = 'foo'
とするとaとbは違うオブジェクトを指すし、これらには特異クラスが定義できるはず。
641デフォルトの名無しさん:2010/02/19(金) 02:21:31
>>639
Fixnux/Symbol/Nil/True/Falseあたりは処理効率の都合で特殊な実装になってるから
その手の実験では避けた方がいい
642デフォルトの名無しさん:2010/02/19(金) 02:23:12
>>638
わああめんどくせえええ
一応ここはCで書いてあるはず
local_jump_error使ってるんじゃなかろうか
本スレ行き
643638:2010/02/19(金) 02:28:13
>>642
すみません。わああ眠れねええって感じでしたので(笑)。

うは、LocalJumpErrorですか。なんかニオイますね。
初心者なのに、変なところに首を突っ込んでしまったようです。
644デフォルトの名無しさん:2010/02/19(金) 07:31:17
分かりました。ありがとうございました
645デフォルトの名無しさん:2010/02/19(金) 09:02:57
RubyForgeってところでrubyインストーラー落とせると公式に書いていますが
rubyinstaller-1.8.7-p249-rc2.exe
これを落としたいのですが10Mに7時間とかかかるんですが
他に落とせる所は無いんですか?
646デフォルトの名無しさん:2010/02/19(金) 09:50:54
なんとなくRubyでゲーム書いてみたくなったんだけど
2Dで手軽にって感じだと何のライブラリ使うのがいいかね?
647デフォルトの名無しさん:2010/02/19(金) 10:24:06
SDL
Miyako(SDL使用) 書籍あり
RPGツクール(古いか)
くらい?
648デフォルトの名無しさん:2010/02/19(金) 10:27:01
>>645
回線速度で割り算して妥当でないなら時間置いてやり直せ
10MBくらいのファイルなのはRubyならどこも同じ
649645:2010/02/19(金) 10:33:33
ブロードバンドスピードテスト 通信速度測定結果
http://www.bspeedtest.jp/ v3.0.0
測定時刻 2010/02/18 10:27:07
回線種類/線路長/OS:光ファイバ/-/Windows XP/-
サービス/ISP:-/-
サーバ1[N] 23.7Mbps
サーバ2[S] 25.8Mbps
下り受信速度: 25Mbps(25.8Mbps,3.22MByte/s)
上り送信速度: 17Mbps(17.6Mbps,2.2MByte/s)

これで7時間とかおかしいと思うんですがなんででしょうか
firefoxとか関係ないですよね
昨日の12時ぐらいにやっても同じだったんでなんででしょう
650デフォルトの名無しさん:2010/02/19(金) 10:37:40
>>643
何か目的があるの?
例えばthreadでeachのようなものを定義してreturnしたいとか?
651デフォルトの名無しさん:2010/02/19(金) 10:41:16
>>649
こっちは転送率通常
回線経路の問題かも

現在のRubyInstallerはrubygemパッケージで未対応が存在するMinGW32版だけどその覚悟はある?
652デフォルトの名無しさん:2010/02/19(金) 11:04:06
>>612
ぐぐっても見つからないんだが、どこにあるの?
653デフォルトの名無しさん:2010/02/19(金) 11:06:45
>>652
こいつにレスしたのお前が2番目だぞ
654645:2010/02/19(金) 11:17:08
他のPCでも試してみます
>現在のRubyInstallerはrubygemパッケージで未対応が存在するMinGW32版だけどその覚悟はある?
これの意味がよくわかりませんが初心者なのでテンプレ通り1.9.1やめて1.8.7落とそうと思ってます。
rubyinstaller-1.8.7-p249-rc2.exe ←これでいいんですよね?
star rubyってのをやりたいんですけどこれはrubyの拡張ライブラリ?っていう位置付けでいいんですか?
655デフォルトの名無しさん:2010/02/19(金) 11:37:33
しかしなんでわざわざRubyなんかでゲーム作ろうと思うんかね
「○○がRuby経由でもできるようっひょー」が目的であって、Rubyから○○を学ぶのには基本不適だろうに

>>654
http://arton.hp.infoseek.co.jp/indexj.html
こっちの入れれ
656デフォルトの名無しさん:2010/02/19(金) 15:16:08
$KCODE ='s'
p Dir.entries(Dir.pwd)
とやると
[".", "..","う\202\311", "しのり\202\361", "すず\202\310"]
こんなのが返ってくるのですが$KCODE以外に何をすれば日本語フォルダを扱えるのでしょうか?

WindowsXP SP3 Rumixで導入した1.8.7を使ってます
657645:2010/02/19(金) 15:32:08
activescriptrubyインストールできましたありがとうございます
hello_world表示できました
エディタがあるようですがRDEとかRDTがあるようですが
みたかんじRDEがとっつきやすそうにググったら見えたんですが
RDEでいいんでしょうか?
658デフォルトの名無しさん:2010/02/19(金) 15:39:02
あー、Shift_JISでも起こるのか
早めに改定出して欲しいなあ

>>656
内部的には普通に扱えてる
p は内容そのものではなく、画面に表示しやすいように整形してから表示する
しかもバグがあって最後に日本語文字があると必ず化ける
putsで表示してみ
659デフォルトの名無しさん:2010/02/19(金) 15:40:50
>>657
どっちも別にエディタじゃない気がするが、どうしてもどっちかを使いたいのならRDEでいいよ
660デフォルトの名無しさん:2010/02/19(金) 18:12:36
>>658
バグですか
こっちはこっちで勘違いしたことやってたので全く気づきませんでしたw
ありがとうございます
661デフォルトの名無しさん:2010/02/19(金) 21:30:25
文字コードを変換して読み書きしてくれるFIleクラスのラッパーライブラリってありますか?
イメージとしては

SjisFileWriter.open(path, "utf-8") do |file|
 file << utf8string
end

とすると、sjisに変換して書き込んでくれるようなものを期待してます。
closeするまでStringIOに溜め込んで一気に変換しようとしたのですが、
データが大きくてサーバーがパンクするのであきらめました。

もしかしてコツがあって、こういうのは簡単に書けるものなんでしょうか?
662デフォルトの名無しさん:2010/02/19(金) 21:35:25
改行があるのなら、改行ごとに読み込んで改行ごとに文字エンコーディングを変換して最後に連結すればいい
663デフォルトの名無しさん:2010/02/19(金) 21:51:24
1.9だと希望とほぼ同等のことが出来るんだけどね。

1.8の場合、文字の途中をどうするかといったことを考えずにやるなら
出力に使うメソッドをひととおりコード変換するようにオーバーライド
すればよいと思う。
writeだけのオーバーライドでいいのかな。
664デフォルトの名無しさん:2010/02/19(金) 21:53:08
>>661
1.8 と 1.9 で対処が変わってくると思うので Ruby のバージョン教えれ
665デフォルトの名無しさん:2010/02/19(金) 21:59:19
>>662
Fileクラスの振りをしてそういうことをするには、どんな風なコードを書けばいいのでしょうか?

FasterCSVは内部で、
 @io << row.map(&@quote).join(@col_sep) + @row_sep # quote and separate

こういうことをやっているので、コンストラクタで@ioに渡してあげると
書き込みのタイミングでエンコーディング変換してくれる
Fileオブジェクトがあればいいなと思っています。
666デフォルトの名無しさん:2010/02/19(金) 22:00:39
>>663, 664

すみません、リロードしてませんでした。
Rubyのバージョンは1.8.7です。
667デフォルトの名無しさん:2010/02/19(金) 22:03:48
これはひどい
668デフォルトの名無しさん:2010/02/19(金) 22:04:38
すいませんリロードしてませんでした
>>667>>663についてです
669デフォルトの名無しさん:2010/02/19(金) 22:09:39
これはひどい
670661:2010/02/19(金) 22:10:20
もしかしてこんなのでいいんでしょうか?動くかちょっと試してみます。

class SjisFileWriter < File
 def <<(str)
  str.kconv(Kconv::UTF8, Kconv::SJIS)
 end
end
671デフォルトの名無しさん:2010/02/19(金) 22:12:03
すいませんリロードしてませんでした
>>669>>668についてです
672デフォルトの名無しさん:2010/02/19(金) 22:13:13
これはひどい
673デフォルトの名無しさん:2010/02/19(金) 22:15:56
末尾再起スレでやれ
674デフォルトの名無しさん:2010/02/19(金) 23:23:37
なんなんだこの流れはw
675デフォルトの名無しさん:2010/02/20(土) 15:25:28
二次元配列的クラスを定義して配列の配列と透過的になるよう要素に
a[i][j]
のようにアクセスできるようにしたいんですがどうすればいいでしょうか?
676デフォルトの名無しさん:2010/02/20(土) 16:26:07
>>675
無理

…いや、2次元くらいなら無理じゃないんだが、
その見栄えを保持するためだけに計算する遅いクラスになるぞ
NArray の a[i, j, k] みたいな記法じゃだめですか
677デフォルトの名無しさん:2010/02/20(土) 17:59:39
プログラマ三大美徳というものがありますが
Rubistにもそういったものがあるのでしょうか?
678デフォルトの名無しさん:2010/02/20(土) 18:05:30
誰かの発言に影響されるのは嫌い。
679デフォルトの名無しさん:2010/02/20(土) 18:09:12
>>677
なにもない
というか
> Rubist
というようなものがない
Railsやってる人とは仲悪いし
680デフォルトの名無しさん:2010/02/20(土) 18:30:08
Railist vs Rubyist
681デフォルトの名無しさん:2010/02/20(土) 20:07:31
>>676
ありがとうございました。
配列の配列ですでに書いてある奴をクラスに直したいなと思ったもので。
682デフォルトの名無しさん:2010/02/20(土) 21:51:45
> Railist
むしろレースウェイズと呼びたくなるファミスタ脳。
683デフォルトの名無しさん:2010/02/20(土) 22:28:14
Railsint(笑)
ポッポ屋でいいだろw
684682:2010/02/20(土) 22:37:43
今さら誤字に気付いた。レイルウェイズだな。
オリックスと近鉄が合併するって時にゲームファンの誰もが口にしたっけ。
685デフォルトの名無しさん:2010/02/22(月) 02:19:19
こんなコードを書きまんた
----------------------------------------
# test.rb
class Foo
 def initialize(&func)
  @func = lambda(&func)
 end
 def bar(x)
  @func.call(x)
 end
end
foo = Foo.new{ |x| return x**2 }
p foo.bar(2)
----------------------------------------

いごきました
$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10]
$ ruby test.rb
4

いごきませんでした
$ ruby1.9 -v
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-darwin10]
$ ruby1.9 test.rb
test.rb:11:in `block in <main>': unexpected return (LocalJumpError)
from test.rb:6:in `call'
from test.rb:6:in `bar'
from test.rb:13:in `<main>'

どうして?
686デフォルトの名無しさん:2010/02/22(月) 03:16:26
>> 685
難いww
とりあえず、lambdaとprocの違いはreturnの挙動の違いだよな。
そのreturnの挙動を決めるタイミングが1.8と1.9で違うんじゃね?
687デフォルトの名無しさん:2010/02/22(月) 08:22:09
688デフォルトの名無しさん:2010/02/22(月) 10:53:49
んじゃ1.8と1.9両方で美味しく動作する
foo = Foo.new{ |x| return x**2 }
p foo.bar(2)
を実装するにはどうしたらいいんだべ?

foo = Foo.new(lambda{ |x| return x**2 }
p foo.bar(2)
なら作れたけどラムダラムダ五月蝿い感がある。
689デフォルトの名無しさん:2010/02/22(月) 11:03:02
ブロックの中で最後に評価された式の値が暗黙で返るのを利用するのがエレガントだと思う
690デフォルトの名無しさん:2010/02/22(月) 11:27:33
仕事でlambda使うケースなんて滅多にないけどな
691デフォルトの名無しさん:2010/02/22(月) 11:32:27
class Foo
 def initialize
  @func = lambda
 end
 def bar(x)
  @func.call(x)
 end
end
foo = Foo.new{ |x| return x**2 }
p foo.bar(2)

イケルがなぜか
-:3: warning: tried to create Proc object without a block
と出る
692デフォルトの名無しさん:2010/02/22(月) 11:52:51
なぜかもなにもそのまんまの理由だと思うが
693デフォルトの名無しさん:2010/02/22(月) 12:33:42
>>692

class Foo
 def initialize
  @func = proc
 end
 def bar(x)
  @func.call(x)
 end
end
foo = Foo.new{ |x| x**2 }
p foo.bar(2)

だと警告がでないのはなんで?
694デフォルトの名無しさん:2010/02/22(月) 12:36:28
lambdaとproc(とProc.new)は処理が違う
695デフォルトの名無しさん:2010/02/22(月) 12:38:29
Rubyのめんどくさいとこベスト3に入るところだな
きちんとした解説ページとかないものか
696デフォルトの名無しさん:2010/02/22(月) 15:12:28
# ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]
p lambda{return 0}.call #=> 0
p lambda(&lambda{return 0}).call #=> 0
p lambda(&proc{return 0}).call #=> 0

# ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mswin32]
p lambda{return 0}.call #=> 0
p lambda(&lambda{return 0}).call #=> 0
p lambda(&proc{return 0}).lambda? #=> false
p lambda(&proc{return 0}).call #=> unexpected return (LocalJumpError)

1.9だとKernel.#lambdaにprocを渡すとprocが帰ってくるんだな
仕様なのかBUGなのか
697デフォルトの名無しさん:2010/02/22(月) 15:14:30
&lambdaは&lambdaの誤りね
698デフォルトの名無しさん:2010/02/22(月) 16:44:02
自分は組込みの仕事なのでCを使っているんだけど、
Rails以外で仕事でRubyを使う場合、どんなものを
作っているの?
699デフォルトの名無しさん:2010/02/22(月) 17:13:17
自分の効率アップ用途以外には使わない俺スクリプト
仕事に使う中間物の生成プログラム
社内オンリーの更新頻度が高い内製プログラム

Rubyソースコードを商品にすることはほぼ確実にない
Rubyスクリプトが作り出したものを売ったり配ったりすることも少ないかと

なくても無論なんとかなるしプロダクト自体には全く影響しないが、能率ががくっと落ちる
もちろん本質的にはRubyでなくてもよい
PerlやPython、JavaやC++(えー)で超速く安定に作れるならむしろそっちのほうがよい
700デフォルトの名無しさん:2010/02/22(月) 17:23:18
>>699
なるほど、製品レベルとなるにはまだ先のことですかね。
自分にとって現時点ではRubyは業務とは無縁の存在だけど
勉強はしておこう。
701デフォルトの名無しさん:2010/02/22(月) 17:25:26
プログラマーズベストフレンドという文言がそのまんまだな

言語オフィシャルレベルでこれを標榜してる傲ま…いや野心的なところは見たことがない
配布ライブラリなんかで言ってるところは少なくないんだけど
ttp://www.google.com/search?num=50&hl=en&lr=&q=%22a+programmer%27s+best+Friend%22
702デフォルトの名無しさん:2010/02/22(月) 17:30:15
> 製品レベルとなるにはまだ先のことですかね
永遠にないんじゃないかなあ、と最近思ってる
そういう方向には進化してない気がするし、製品を作ろうとしないほうがうまくコード書ける気がする
Eclipseがなくても製品は作れるが、ないと死ぬ、そんな位置にRubyが入り込むんじゃないかと
703デフォルトの名無しさん:2010/02/22(月) 21:33:03
matzもRubyは同僚に差をつける秘密兵器として使ってほしいとか
なんとか昔言ってたしな。
704デフォルトの名無しさん:2010/02/22(月) 21:43:16
Rubyに関わったせいで同僚と差がついてしまいましたorz
705デフォルトの名無しさん:2010/02/22(月) 21:53:08
Rubyでプログラミングしてると「何とかして面白いコードは書けないか」と、そこに注力して仕事が進まないんだが。
どうしてくれる!Matzは責任とれ!
706デフォルトの名無しさん:2010/02/22(月) 21:53:35
他社に差をつける秘密兵器だと思ってた時期がおれにもありました
707デフォルトの名無しさん:2010/02/22(月) 21:58:44
>>706
間違いじゃないけどね
全員がRuby相当のものを修めてる会社は強いはずだ
708デフォルトの名無しさん:2010/02/22(月) 22:00:55
しかしつまらんスレだな
709デフォルトの名無しさん:2010/02/22(月) 22:03:43
ま、ここはRubyの開発者が名無しで書き込むスレだからな。
710デフォルトの名無しさん:2010/02/22(月) 22:13:20
何かこうエロい話題は無い物か。
711デフォルトの名無しさん:2010/02/22(月) 22:16:47
おっぱいクラスとか作れば?
712デフォルトの名無しさん:2010/02/22(月) 22:43:44
>>710
このスレに何を求めてるんだw
713デフォルトの名無しさん:2010/02/22(月) 22:45:02
Rubyのアイコンが亀甲縛りに見えるぐらいしか思いつかない
714デフォルトの名無しさん:2010/02/23(火) 01:33:59
>>711
おまえのエロの限界はおっぱいまでなのか?
しかも虚構のおっぱいクラス
715デフォルトの名無しさん:2010/02/23(火) 02:22:29
エロい話題のところすみません
半年ほど前は普通にgem installできていたはずなのですが、つい最近gemを新たにupdate、installしようとすると以下のようなエラーが出るようになりました
$ sudo gem install hogehoge
ERROR: While executing gem ... (Errno::EEXIST)
File exists - /opt/local/bin/gem

環境はMac OS X(10.4.11)で、
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.5
- RUBY VERSION: 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin8]
- INSTALLATION DIRECTORY: /opt/local/bin/gem/:
- RUBY EXECUTABLE: /opt/local/bin/ruby
- EXECUTABLE DIRECTORY: /opt/local/bin/gem/:/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-darwin-8
- GEM PATHS:
- /opt/local/bin/gem/:
- /Users/******/.gem/ruby/1.8
- /opt/local/lib/ruby/gems/1.8
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- :sources => ["http://gems.rubyforge.org/", "http://gems.github.com"]
- REMOTE SOURCES:
- http://gems.rubyforge.org/
- http://gems.github.com
です
716デフォルトの名無しさん:2010/02/23(火) 02:28:35
エラーが出るようになったのはわかった。で?
717デフォルトの名無しさん:2010/02/23(火) 02:37:30
/opt/local/bin/gem か /opt/local/bin/gem/ の権限がおかしいように見える
718デフォルトの名無しさん:2010/02/23(火) 02:53:53
>>717
opt/local/bin以下をls -lしたところgemは
-rwxrwxr-x 2 root admin 548 Feb 15 15:18 gem
となっていますがrootではなくユーザー権限の方がいいのでしょうか
719デフォルトの名無しさん:2010/02/23(火) 04:06:02
権限をユーザ名にしてみたり-rwxrwxrwxにしてみたりしましたがやはり状況は変わりませんでした
なんとなく
- INSTALLATION DIRECTORY: /opt/local/bin/gem/:
の部分が
/opt/local/lib/ruby/gems/1.8
になるべきなんじゃないかという気がしてきたので今後はそちらから攻めてみようと思います
/opt/local/bin/gemは実行ファイルなのでDIRECTORYっておかしいですよね…
720715:2010/02/23(火) 04:53:36
連投すみません
GEM_HOME変えたら直りました
昔入れたrailsとかも全部こっちに入ってたのでいつの間にか変更されてたみたいです
ご協力ありがとうございました
721デフォルトの名無しさん:2010/02/23(火) 15:00:19
オッパイクラス マダー?
722デフォルトの名無しさん:2010/02/23(火) 22:20:30
Ruby2.0まで待て
723デフォルトの名無しさん:2010/02/24(水) 09:25:14
サブクラスいろいろ、夢がひろがりんぐ
724デフォルトの名無しさん:2010/02/24(水) 23:08:14
おっぱいクラスを継承して俺好みの美乳クラスを作成するぜ
725デフォルトの名無しさん:2010/02/24(水) 23:16:29
おかんのおっぱい以外見たこと無いくせに無理すんな
726デフォルトの名無しさん:2010/02/24(水) 23:43:48
おかんのおっぱいってもちろん見たことはあるんだろうが記憶にはないよな
727デフォルトの名無しさん:2010/02/25(木) 00:11:36
どうしてもグローバル変数を使ってしまう
それよりは全メソッドに引数で渡す方がいいくらいで考えたほうがいいんだろうか
728デフォルトの名無しさん:2010/02/25(木) 00:16:27
どんなプログラム組んでるかによる
729デフォルトの名無しさん:2010/02/25(木) 00:20:24
引数で渡すときも設計に注意だな。
構造体を使うとか。
730デフォルトの名無しさん:2010/02/25(木) 00:23:40
構造体wwwwwwwwwwwwwwwwww
731デフォルトの名無しさん:2010/02/25(木) 00:25:21
あ、ここRubyか。
732デフォルトの名無しさん:2010/02/25(木) 00:29:43
グローバル変数ってインスタンス変数のことか?
それともおっぱいの流れなのか?どっちにしてもわかりにくいぞ
733デフォルトの名無しさん:2010/02/25(木) 00:31:07
なんだ、おっぱいクラス好評じゃないか
734デフォルトの名無しさん:2010/02/25(木) 00:41:16
ちんちんメソッド
735デフォルトの名無しさん:2010/02/25(木) 01:01:46
$つけた変数のこと
736デフォルトの名無しさん:2010/02/25(木) 01:06:36
たとえば設定ファイルを読み込んで得た情報ってグローバル変数で持ってていろんなとこから参照してるんだが
そうせずに深い階層のクラスまで引数で順に渡していったほうがいいのかどうか
737デフォルトの名無しさん:2010/02/25(木) 01:14:04
作ってるもの全体をモジュールで囲ってモジュール変数にするのが最低限とりあえずの気休めかなあ
738デフォルトの名無しさん:2010/02/25(木) 01:28:23
最低限オリジナルの一つのモジュールでラップするべきだな
グローバル変数を自分で作るってのは言語拡張してるようなもんだ
739デフォルトの名無しさん:2010/02/25(木) 01:33:12
Config.load
とかやったら、設定ファイルを読み込んでクラス変数に格納する。
で、Config.hoge1、Config.hoge2みたいな感じで各設定値を参照できれば十分じゃね?
グローバル変数とたいして違わないが、自分はこうしてる。
740デフォルトの名無しさん:2010/02/25(木) 01:36:29
クラス変数に格納???
読み込んだクラスの変数に格納するの?
全てのクラスで同じことやるの?
741デフォルトの名無しさん:2010/02/25(木) 01:45:01
>>738
ありがとうまずはモジュールでラップするところからやろう
>>739
なるほどインスタンスは作らないわけね
742デフォルトの名無しさん:2010/02/25(木) 01:46:10
Hoge::Config というクラスを作る
Hoge::Config.param1 または Hoge の中で Config.param1 のように
クラスインスタンス変数を特異メソッドで参照する

のがフツーだと思う
743デフォルトの名無しさん:2010/02/25(木) 01:58:38
なるほどそうなんだ
耳慣れないクラスインスタンス変数というのをググってみた
継承に関係しなければ普通のクラス変数でもOKってことかな
まあでもクラスインスタンス変数にしといてみることにします
744デフォルトの名無しさん:2010/02/25(木) 07:22:33
lambdaって便利だけど、lambdaがあちこちに散らばってその管理に追われるような気がしてきた件。
動作をカスタマイズする時(#sortとか#maxとか)はいいんだけど、
DRYしたいがために安易にlamda使いだすと、他におなじlambdaが有るかも無いかもとそわそわしてくる。
lambdaってシステム的に管理されるべき存在なのかな。

745デフォルトの名無しさん:2010/02/25(木) 07:34:05
気にすんな
746デフォルトの名無しさん:2010/02/25(木) 10:17:06
1.9だと
クラスインスタンス変数=クラス変数?
747デフォルトの名無しさん:2010/02/25(木) 11:12:35
その=はなんだ
748デフォルトの名無しさん:2010/02/25(木) 19:26:06
昔買ったRubyの本に付属してたRubyのバージョンが一番古いやつだったからRuby 1.8.7にインストールし直そう
と思ったら、サイト見てもわかんなくて全然ダメだった。
なんとかインストールは出来たけどソースファイルのパス通らなくてプログラム実行出来なかった。
Rubyが流行らない理由ってRuby導入の解説サイトが充実してなくて初心者に分かりづらいからなんじゃないのかな
749デフォルトの名無しさん:2010/02/25(木) 19:31:05
バージョンアップも面倒だからね
使い始めてもしばらくして止めるパターンは多いと思う
750デフォルトの名無しさん:2010/02/25(木) 19:32:02
別に初心者にわかってもらうつもりもないし
751デフォルトの名無しさん:2010/02/25(木) 19:36:16
初心者はまずはじめに自動的にRubyを
バージョンアップするRubyスクリプトを作ったらいい
752デフォルトの名無しさん:2010/02/25(木) 19:37:09
>>750
初心者スレッドで何言ってんだ
753デフォルトの名無しさん:2010/02/25(木) 19:39:05
インストールは OS 規定のパッケージの実行で簡単のはず
アンインストールもパッケージマネージャからで充分だよ

ソースから make install でインストールすると面倒なのはソースだからそんなもんだ
アプリケーション側でそこまで管理してあげる理由はない
その本で「make install しろ」とだけ書いてあるなら、それは Ruby 無関係でその本が単純に悪い

まあ、make unsinstall ができてもいいと思うことはある
754デフォルトの名無しさん:2010/02/25(木) 19:46:18
バージョン毎の違いとか特徴とか
初心者はどれをダウンロードするべきとか
そういうのまとまってないよね
755デフォルトの名無しさん:2010/02/25(木) 19:46:42
RubyよりまえにOSの利用法の勉強しろ、と言いたくなることはないわけでもない

アップグレードガイドってそういえばないな
「gemも全部消して新しくインストールしろ」としか書くことがないが
756デフォルトの名無しさん:2010/02/25(木) 19:49:19
>>754
>>5

Ruby公式的には、もういろいろめんどくさいから「全員」1.9.1を使ってくれというスタンス
初心者も中級者もRailsの人もgemパッケージの人も全員が1.9.1を使えば本気で何も問題はない
757デフォルトの名無しさん:2010/02/25(木) 19:52:32
多分インストールは出来だけどなんか出来なかったんだよね
http://uproda11.2ch-library.com/2277495Xg/11227749.png
最初にp249ってやつインストールしたんだけど、Ruby console.exeが無かったから
アクティブRubyってやつインストールしたんだけどよくわからくなった。
758デフォルトの名無しさん:2010/02/25(木) 19:58:12
Rubyは粗悪な本が多い
最初はレビューしてこき下ろしてたんだが、その価値もない

>>757
該当のものはスタートメニューにある
とりあえず、RubyInstallerのやつは消しておいて、ActiveScriptRubyにしておけ
759デフォルトの名無しさん:2010/02/25(木) 20:04:09
テンプレの★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には...
って節は書き直した方がいいんじゃないかしらね。
1.9.1に対応してないのも「多くの有名ライブラリやアプリ」じゃなくて
「一部の」と言ってもいいと思うし。
760デフォルトの名無しさん:2010/02/25(木) 20:05:53
ActiveScriptRubyの一番悪いところはインストーラ情報と本体名称が違うこと
ActiveRubyがActiveScriptRubyを指すだなんて普通は絶対に気づかない

>>757
ということで、「ActiveRuby」と書いてあるActiveScriptRubyを残して使うといい
Rubyが有効になるコマンドプロンプトはスタートメニューから「Ruby1.8」→「ruby console」
761デフォルトの名無しさん:2010/02/25(木) 20:08:14
>>759
なにかが1.9.1で動作しない場合どうすればいい

それを考えるなら、1.9.1はまだ時期尚早
初心者スレの完全初心者向け文言だということを30回くらい噛み締めてくれ
762デフォルトの名無しさん:2010/02/25(木) 20:13:43
>>759
1.8.7を勧めることを変えるべきとは言ってないよ
事実に即した文言に変えるべきと言っただけ
763デフォルトの名無しさん:2010/02/25(木) 20:14:33
「Ruby1.9.1をgemとか含めて普段遣いすることは今ならできますか」という問への答は「YES」だ
「じゃあ初心者にもぴったりですね」は「NO」

初心者以外の人がRuby1.9.1を使うことを否定はしないというかそろそろ使って欲しいんだが、
初心者の人にRuby1.9.1を勧めるのは面倒なのでやりたくない
1.8.7で慣れてからEncodingまわりの勉強だけ追加すれば充分
764デフォルトの名無しさん:2010/02/25(木) 20:21:27
初心者は初めて使う処理系を今後も使い続ける可能性が高いわけで

初心者に1.8を勧める -> 1.9の人口が増えない -> ライブラリの開発者も対応を急がない -> 初心者に1.8...
というループからなかなか抜け出せないんじゃないか
765デフォルトの名無しさん:2010/02/25(木) 20:21:52
つか「完全対応」してないのは確かなんだし現行でいいと思う
完全対応というのは1.9系列特有の症状が出ないってことだろ
そんなライブラリあんま見ないぞ
766デフォルトの名無しさん:2010/02/25(木) 20:25:19
binディレクトリにソースファイル入れたら出来たよありがとう。でも1.8.5を使ってたときは
作業してるディレクトリにruby console.exeをコピーして入れといたら、パスが自動でそこの
場所になって簡単に実行出来たんだけどなあ。
みんなプログラム実行する時は、作業ディレクトリのパスをわざわざ入力して実行してる?
767デフォルトの名無しさん:2010/02/25(木) 20:25:24
>>764
大丈夫
現在1.8でぐずぐずしてる非初心者層が1.9に移行するだけでエネルギーとしては充分
初心者が何使ってるかというのはこの趨勢に影響しない
768デフォルトの名無しさん:2010/02/25(木) 20:38:34
RubyよりまえにOSの利用法の勉強しろ、と言いたくなることはないわけでもない

>>766
基本的には cd しろ cd

cd ディレクトリ

でカレントディレクトリが引数のディレクトリになる
カレントディレクトリという概念が何かわからないならぐぐれ
現在のディレクトリをキーボードから入力するのはしんどいので「cd 」と3文字入力したあと
フォルダをマウスでコンソール上にドロップしろ
そのフォルダのパスが文字列としてカーソル位置に入力されるので安楽

もし「Ruby console を置いたディレクトリをカレントにして起動して欲しい」というピーキーな運用したいのなら、
スタートアップとかにある Ruby console を右クリックして
プロパティの「作業フォルダ(S)」という欄に「%PWD%」と半角5文字で書いて適用押せ
これで「置いてあるディレクトリをカレントディレクトリとして起動するRuby consoleファイル」になるから、
これを好きなフォルダにコピーしてダブルクリックだ
たぶんその昔の Ruby console の動作になってるはず
769デフォルトの名無しさん:2010/02/25(木) 20:41:12
お茶飲んでる間に気づいた
> プロパティの「作業フォルダ(S)」という欄に「%PWD%」と半角5文字で書いて適用押せ

> プロパティの「作業フォルダ(S)」という欄を空白にして適用押せ
のほうがわかりやすいし動作一緒だ
770デフォルトの名無しさん:2010/02/25(木) 20:45:24
>>768-769
ありがとう、昔買った本に入ってたやつと同じように使えるようになった。助かったよ
771デフォルトの名無しさん:2010/02/25(木) 20:46:42
うむ、コマンドプロンプトとWindowsショートカットの知識はRuby関係ないなRuby悪くないな
…それでいいんだろうか、とふと思ってみる

>>769
ActiveScriptRubyを作った人の設定ミスぽいね
これRubyBinになってる理由ないわな
空っぽのほうが親切かも
772デフォルトの名無しさん:2010/02/25(木) 21:49:56
rubyでゲームを作るサイトで

main do
#この中が毎フレーム実行される
end

とありますが
この記述はライブラリに依存するものではなく
rubyのアップデート処理は絶対にこの記述になるんでしょうか?
773デフォルトの名無しさん:2010/02/25(木) 21:52:25
知らんがなそんなん

使ってるゲーム作成ライブラリを明確にして
http://pc11.2ch.net/test/read.cgi/gamedev/1207069887/
こっち池
774デフォルトの名無しさん:2010/02/25(木) 23:04:56
rubyのアップデート処理ってなんだよ
ゲーム専用言語じゃないんだよ
あきらかにライブラリ依存だよ
775デフォルトの名無しさん:2010/02/25(木) 23:20:06
Rubyの初心者はいいんだが、自分の使ってるOSのことがわかってない
人とかプログラミング自体がわかってない人の言ってることは意味不明
過ぎる。
776デフォルトの名無しさん:2010/02/25(木) 23:48:27
それがRubyの功罪だろ

バカでも使えるからと言ってバカが治る訳じゃない
777デフォルトの名無しさん:2010/02/26(金) 00:08:59
JRubyの評判はどうなんですか
開発元が買収されたけど消滅するんでしょうか
778デフォルトの名無しさん:2010/02/26(金) 00:28:28
>>756
問題は1.9.1の次にどうするかってことだよ
アップグレードが楽ならいいんだよ
779デフォルトの名無しさん:2010/02/26(金) 00:34:59
そのうち面倒糞いから2.1.1使ってくれ
みんな1.9.1は捨ててくれ
って触れ回るときが来る
780デフォルトの名無しさん:2010/02/26(金) 00:59:50
>>778
アップグレードが楽って何
あらゆるOSで使えるパッケージシステムをRubyで提供しろとかそういうの
781デフォルトの名無しさん:2010/02/26(金) 01:06:13
ホームページにあるボタン押すだけでアップグレードが完了するようなやつだろ
782デフォルトの名無しさん:2010/02/26(金) 01:24:07
Javaみたいに迷惑なのは嫌だなw
783デフォルトの名無しさん:2010/02/26(金) 08:34:49
マイクロソフトに配布してもらえば、毎月自動更新出来るかもね。
784デフォルトの名無しさん:2010/02/26(金) 09:23:22
ここム版なんだから
お得意のRubyでちゃちゃっと作っちゃえよ
そして公開してくれよ
785デフォルトの名無しさん:2010/02/26(金) 09:28:17
ruby.exe を実行中に ruby.exe そのものを書き換えって出来るの?
786デフォルトの名無しさん:2010/02/26(金) 09:38:06
無理だろうから
実行ファイルをコピー
コピーでアップデート実行
アップデート後の実行ファイルでコピー削除
って流れか?そんなことできるのか
787デフォルトの名無しさん:2010/02/26(金) 10:22:53
Windowsには、再起動時に削除するようにファイルに印を付けるって機能があるな。
788デフォルトの名無しさん:2010/02/26(金) 10:31:57
アップデートはプラットフォーム依存にならざるを得ないから
Rubyでやる意義は乏しいかも
となるとシェルスクリプトかCか
789デフォルトの名無しさん:2010/02/26(金) 10:45:07
Windowsって実行中の実行ファイル削除できないようにしてるの?
790デフォルトの名無しさん:2010/02/26(金) 11:04:44
さくっと削除できてしまうOSはそれはそれで結構アレだ
一長一短でポリシーの違いに過ぎないな
791デフォルトの名無しさん:2010/02/26(金) 11:10:28
そもそも「アプリケーションの追加と削除」では駄目なのか
それすら扱えないようなユーザーにはRuby渡すな面倒だから
792デフォルトの名無しさん:2010/02/26(金) 11:16:29
自動がイインダヨ
プログラマは怠惰が美徳だから
793デフォルトの名無しさん:2010/02/26(金) 11:32:07
>>784>>792 は同一人物か同質の馬鹿
794デフォルトの名無しさん:2010/02/26(金) 14:56:20
>>789
実行中の実行ファイルは削除出来ないと思う
てかWindowsでは基本、使用中のファイルに
それ以外のプログラムで更新かけないのが吉
795デフォルトの名無しさん:2010/02/26(金) 15:02:12
 \                    /
   \  丶       i.   |      /     ./       /
    \  ヽ     i.   .|     /    /      /
      \  ヽ    i  |     /   /     /
   \
                                  -‐
  ー
 __          わ た し で す            --
     二          / ̄\           = 二
   ̄            | ^o^ |                 ̄
    -‐           \_/                ‐-

    /
            /               ヽ      \
    /                    丶     \
   /   /    /      |   i,      丶     \
 /    /    /       |    i,      丶     \ 
796デフォルトの名無しさん:2010/02/26(金) 22:35:25
ruby enterprise editionの1.9版は無いのですか?
公式を見ると最新が1.8.7のようですが。
797デフォルトの名無しさん:2010/02/26(金) 22:42:56
Rubyのバージョンの違いって処理速度とかなのかな。テキストエディタで打ってるし、いまいち違いが分からない
798デフォルトの名無しさん:2010/02/26(金) 22:51:19
>>796
というかエンタープライズ用途ではそもそも1.9.1使わねえだろまだ
素直に1.8系列使うのが吉
799デフォルトの名無しさん:2010/02/26(金) 22:53:36
>>797
細かい挙動の違いだよ
800デフォルトの名無しさん:2010/02/26(金) 23:00:05
>>797
ゆとりはこれだから
それくらい公式見ろよ
きちんと書いて





…ないな
801デフォルトの名無しさん:2010/02/26(金) 23:05:14
迷う必要もないと思う
せいぜい「最新2つあるけどどっち」程度
古いのと新しいのどう違うのかって、そりゃ新しいほうは古くないんだよ
802デフォルトの名無しさん:2010/02/26(金) 23:13:41
どこまで教育するかというのは結構めんどくさい問題で…
少なくとも、他のアプリケーションでバージョンナンバーの理屈を理解してるような人を相手にしてる
803デフォルトの名無しさん:2010/02/26(金) 23:40:23
Rubyの勉強を兼ねて
Windows用のスクリーンセーバでも作ってみようかと思ったのですが
検索しても関連情報が全然出てこなくて、疑問を持ちました

Ruby/SDLでスクリーンセーバを作った事例はあるらしいのですが
わずか一例しか見つからず、解説記事に至っては一行たりとも見当たりません

もしかして、結構ハードルが高いことをしようとしているのでしょうか?
Rubyでスクリーンセーバを作るのは無謀・無理ですか?
Rubyを選ぶべきではない場面の一つ、なのでしょうか?>スクリーンセーバ作成

「いや、そんなことはないだろ」ということでしたら
あたってみるべき資料・キーワードの類を教えていただけましたら幸いです
804デフォルトの名無しさん:2010/02/27(土) 00:09:42
まず、Rubyを使わずにスクリーンセーバーを作るための情報を集めてみよう。
805デフォルトの名無しさん:2010/02/27(土) 00:26:47
RubyでなくてもGUIの○○をすることができるが、Rubyを経由してでも同じことができる、というのが本来
つまり、Ruby以外の言語で普通にGUIの○○ができることがそもそも最低条件として必要

何の知識もない人がRubyのGUI部品で何か作るとかありえん
素直にIDEのサポートと解説書がある他の言語使え
806デフォルトの名無しさん:2010/02/27(土) 00:26:49
HSPでスクリーンセーバを作る解説記事でしたら、すぐに見つけたのですが…

スクリーンセーバを作成する場合、コマンドラインオプションで
/s → スクリーンセーバ起動
/c → 設定画面を表示
/p → プレビュー画面を表示
を実装したものを作成する、と書いてありました

ということは、上記の条件を満たしたRubyスクリプトを
exerb で exe に変換すればOK、という理解で合ってますか?
それとも、何か見落としている部分がありますでしょうか?
807デフォルトの名無しさん:2010/02/27(土) 00:31:58
そもそもRuby関係ないからな
Rubyとはまったく無関係にTkやらGTKやらWin32APIやらの知識がどうしても要る

Rubyが何かをしているわけじゃない
100行書かなければならないことを80行くらいにまとめてくれるだけ
80行のうち実際のGUIライブラリに指示をしてるのは60行くらいだと思うが、
そこに具体的に何を書くと動作するかまではRubyはまったく教えてくれない
Rubyとは無関係のGUIライブラリ(と、Windowsの場合はOSやレジストリ)の知識が要る
808デフォルトの名無しさん:2010/02/27(土) 00:32:51
>>805
あ、そうか
設定画面を作る際に、GUIにしないといけないのですね…

Rubyの場合、標準で使えるGUIライブラリ?が存在しないから
(Tkは、たしか別途Tcl/Tkのインストールが必要なんですよね…?)
GUIで設定画面を作るまでが、Rubyでは既にイバラの道になるのか…
(やってやれないことはないけど、他の言語使ったほうがサクッとできてしまうから
わざわざRubyを使って地獄を見る必要はない、ということですね…)
809デフォルトの名無しさん:2010/02/27(土) 00:37:40
これがRuby脳というやつか・・・

餅は餅屋

これ最強
810デフォルトの名無しさん:2010/02/27(土) 00:41:33
>>809
そもそも論として、RubyのGUIライブラリと称されてるものは全てただのラッパーだ
しかもやたら薄くて、オリジナルの関数名とか動作とか知ってることが前提
それこそsystemで直接指示するのとたいして変わらんくらいの
811デフォルトの名無しさん:2010/02/27(土) 00:43:08
GUIならこの書籍が良いのかもね。Rubyは他の言語と比べてとにかく資料が少ないから、本でもじっくり読んで理解するしかない
http://www.amazon.co.jp/dp/4274064611%3FSubscriptionId%3D1PE38HKS6CPYCN0NM382%26tag%3Dkazuhiko-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4274064611
812デフォルトの名無しさん:2010/02/27(土) 00:46:20
糞アフィ厨乙
813デフォルトの名無しさん:2010/02/27(土) 00:55:56
C++とかで普通に作れるような人がやるもんだと思う
Rubyから始めるとか正気の沙汰ではない
814デフォルトの名無しさん:2010/02/27(土) 00:57:02
PerlでWindowsのゲーム作るとかいう人は全然出ないのに、なんでRubyだけアホが沸くのか理解できない俺
815デフォルトの名無しさん:2010/02/27(土) 01:08:43
C++とかC#で挫折しちゃった人の終着駅なんじゃね?
816デフォルトの名無しさん:2010/02/27(土) 01:14:33
文字列の配列をコピーするには?
817デフォルトの名無しさん:2010/02/27(土) 01:25:03
今gtkを使ってアプリを作っているんだけど、配布しようと考えるとやっぱりマルチプラットフォームで
動くようにしたいなぁとか思うのですが、マルチプラットフォームを考えると何がいいんですかね?
qtrubyあたり?
gtkがwinやmacで動くようになるのが一番嬉しいんだけど、無理だよね。
818デフォルトの名無しさん:2010/02/27(土) 01:50:53
どうみても ruby は GUI 向きじゃない
無駄な努力はしないほうが良い
819デフォルトの名無しさん:2010/02/27(土) 01:51:43
>>817
gtkはwinでもmacでも動きますが
820デフォルトの名無しさん:2010/02/27(土) 02:01:22
>>819
この場合の「動く」は別途インストールが必要ないという意味
821デフォルトの名無しさん:2010/02/27(土) 02:02:28
>>816
コピーって何?
822デフォルトの名無しさん:2010/02/27(土) 02:03:12
>>818
とりあえず、Linux上でgtkを使っている限りでは、十分実用的に使えていますよ。

>>819
言葉足らずでした。
Linuxだと、パッケージマネージャでインストールするだけで、rubyからgtkが使えるようになるのですが、
winやmacではそうはいかないかなと。
公式で配布されているwin用exeもバージョンが古いみたいだし。

>>820
フォロー有難うです。
823デフォルトの名無しさん:2010/02/27(土) 05:03:43
>>820
www
824デフォルトの名無しさん:2010/02/27(土) 19:41:43
>>821
複写とか複製って意味だよ
825デフォルトの名無しさん:2010/02/27(土) 20:05:34
ゲームとGUIってどっちが作るの難しいんだろう
826デフォルトの名無しさん:2010/02/27(土) 20:10:41
なにその変な比較

専用ライブラリがあるという点でゲームのほうがまだまし
ただし用意された道をほんの少しでも外れたら地獄なので
結局は通常GUIアプリもいわゆる画面ゲームもどっちもどっち
827デフォルトの名無しさん:2010/02/27(土) 20:12:16
ary.map {|str| str.dup }
828デフォルトの名無しさん:2010/02/27(土) 20:17:01
ゲームだってGUIだろ
GUIってただのインターフェイスだけど
829デフォルトの名無しさん:2010/02/27(土) 20:27:35
あえて分けてるということはCUIとかローグライクのゲームを指しているのかも・・・
830デフォルトの名無しさん:2010/02/27(土) 20:29:05
まずはzorkだろ
831デフォルトの名無しさん:2010/02/27(土) 21:01:05
ローグはGUIだろ
832デフォルトの名無しさん:2010/02/27(土) 21:16:44
ローグはGUIじゃないんじゃね
マウス的なもの使わないでしょ
833817:2010/02/27(土) 22:37:27
>>825
gtkしかまだ使ったことないけど、gtkでは以下のような感じで作れます。
・GLADEでウィジェットをレイアウト(シグナルで呼び出すメソッド名も設定)
・gtkとかGtkBuilderのおまじないコードを書く
・シグナルに対応するメソッドを書く

自分は、GtkBuilder(というかGLADE?)がrubyからも使えると気付いてなくて回り道しちゃいました。
まあ、そんなアホでも使えています。
ただ、gtk自体には若干ややこしさがあるように感じたけど。
834デフォルトの名無しさん:2010/02/28(日) 00:15:17
rubyで他のスクリプト言語と決定的に違う強みってどういうところなんでしょうか?
たとえばこれがあるからrubyがつかわれているとか

いろいろググったりして調べたのですが
Pythonなどと決定的な違いがよくわかりませんので教えてください
835デフォルトの名無しさん:2010/02/28(日) 00:31:32
>>834
ぶっちゃけとくにない
PerではなくPythonでもないオブジェクト指向スクリプト言語だから
その程度
836デフォルトの名無しさん:2010/02/28(日) 00:34:51
俺もみんな使ってるから凄いんだろうなと思って勉強したが
Rubyの強みなんて全くなかった
強いて言えば日本語ドキュメントが充実していると言うことくらい
837デフォルトの名無しさん:2010/02/28(日) 00:42:25
Perlよりは系統だっている
Pythonよりは緩い
Schemeよりは読み書き簡単

とても日本的な選択
838デフォルトの名無しさん:2010/02/28(日) 00:49:52
Delphiをわざわざ使うのに理由なんて要らない、みたいな感じ
余計わかんねーか
余計わかんねーな
839デフォルトの名無しさん:2010/02/28(日) 00:51:09
rubyは日本人が作ったから好まれている
ただそれだけ?


たとえば現場なんかでパイソンとルビーどっちを採用するって話になったら
ルビーとパイソンがぶつかったらどうなるのかなと

たとえばDBならコストがかからないとか、速さ、IBMだからDB2、Oracleは高いけど信用はできるし一番人気だから
とかで説得できるけど
840デフォルトの名無しさん:2010/02/28(日) 00:56:35
愛国心ある人はRuby使うしかないだろう、CやJavaは売国奴が使えばいい。Rubyって名前も好かれてる
要因の一つ。
あとWebで国産言語で検索かけてみたら面白いよ
841デフォルトの名無しさん:2010/02/28(日) 00:59:25
>>839
> rubyは日本人が作ったから好まれている
いやそういうのは特にない
強いて言うならメインのMLが日本語で読みやすいとこか
それ以外の日本語リソースは他の言語にかなり負けてるんで差し引きゼロで
842デフォルトの名無しさん:2010/02/28(日) 01:04:51
>>839
Javaは汎用性がある、みんなに使われているなど
C#はMSだからなど
あとはいろいろ政治的な事とかあるんだろうけど

Delphiは確かによくわからんわ
843デフォルトの名無しさん:2010/02/28(日) 01:06:31
>たとえば現場なんかでパイソンとルビーどっちを採用するって話になったら
Rubyを使おうと言った人をクビにしてPythonを使うか、両方ともクビにしてPHPで書かせる
844デフォルトの名無しさん:2010/02/28(日) 01:16:43
>たとえば現場なんかでパイソンとルビーどっちを採用するって話になったら 

対象の環境(OS)にデフォルトでインストールされているものを選びたい。
そういう意味では、Linux だと python でいいかなと思う。
Solaris だと perl かなあ
845デフォルトの名無しさん:2010/02/28(日) 06:16:35
perlって古くないんですか?枯れた言語?
846デフォルトの名無しさん:2010/02/28(日) 07:39:40
古いなんて言ったらRubyだって15年経ってる
1.8.6が4年前だから新しいように見えるだけ
847デフォルトの名無しさん:2010/02/28(日) 09:29:33
>>844
*BSD ならベースシステムとパッケージシステムで分離できるけど、
Linux のディストリビューションのパッケージは、全部がそれぞれ依存関係で
つながってるから、そういう分け方はできないだろ。
848デフォルトの名無しさん:2010/02/28(日) 10:28:38
枯れた言語ってのは良い意味の表現だよね
849デフォルトの名無しさん:2010/02/28(日) 10:53:53
この業界では、枯れた言語、枯れた技術ってのはほめ言葉だよね。
安定、定番といった意味だし。
850デフォルトの名無しさん:2010/02/28(日) 11:00:38
プログラミング言語の場合は、「枯れた言語」じゃなくて
「枯れたバージョン」と表現するのが正しい。
851デフォルトの名無しさん:2010/02/28(日) 11:15:31
あー、そうかも。
バージョンごとに挙動違うしね。
852デフォルトの名無しさん:2010/02/28(日) 11:21:03
C は十分に枯れてるよ。
853デフォルトの名無しさん:2010/02/28(日) 11:25:31
Cにも規格とバージョンがあるということを言ったら>>852は驚くだろうか
854デフォルトの名無しさん:2010/02/28(日) 11:29:41
>>853
俺様C は枯れているって意味だよぼけ
855デフォルトの名無しさん:2010/02/28(日) 11:31:16
苦しいですね^^
856デフォルトの名無しさん:2010/02/28(日) 11:32:51
Cって今も拡張とかしてるの?
857デフォルトの名無しさん:2010/02/28(日) 11:38:08
C99 に代わる新しい規格と拡張を、って話は、あるのかもしれないけど大きな
話題にはなってないよね。

最近話題になったものとしては Apple の Block と GCD とか。

インラインアセンブラとか、独自にあるとうれしい系の拡張はそれぞれの処理系ごとにある。
858デフォルトの名無しさん:2010/02/28(日) 11:57:36
いまだにコンパイラのバグだのありますが
まぁ大体最適化周りだったりするけど
859デフォルトの名無しさん:2010/02/28(日) 13:37:13
・これから趣味でRubyをはじめようとしている
・sun認定のsjc-pをなんとか取得
・実務レベルでプログラムを組んだことはない

↑こんな人間におすすめの初心者のRubyの本ありますか?
「たのしいRuby」と「JavaプログラマのためのRuby入門 」
あたりを買おうかなって思ってますが。
860デフォルトの名無しさん:2010/02/28(日) 13:39:06
おっと、下げなくてスマン・・・ってそんな板じゃないかw
861デフォルトの名無しさん:2010/02/28(日) 13:42:51
Javaでいいんじゃねーの(鼻糞ほじりつつ)
862デフォルトの名無しさん:2010/02/28(日) 13:45:18
このスレ的なおすすめ書籍は>>2

のってないやつだと、『独習Ruby』もまあ悪くはなかった(流し読みしただけ)
最近は大きめの本屋ならRuby本が並ぶようになってるから、
実際に手に取って比較してみるのが良い
863デフォルトの名無しさん:2010/02/28(日) 13:54:27
>>862
やっぱり「たのしいRuby」なのかな・・・
『独習Ruby』ものぞいてみるよ。どうも
864デフォルトの名無しさん:2010/02/28(日) 13:59:03
著者名を改めて確認して、
勧めたのは正しかったのか不安になってきた >独習
……ちょっと本屋行ってくる
865デフォルトの名無しさん:2010/02/28(日) 14:02:10
楽しいRuby はプログラミング初心者には最高の本だと思うよ。
概念から簡単なアルゴリズムまで詳しく教えてくれる。
練習問題がとても面白い。良書ですね。
866デフォルトの名無しさん:2010/02/28(日) 14:09:44
>>864
正直俺なら勧めない
どの本も売り切れてて取り寄せに半年かかりますえっ明日本がないと俺死ぬのにとかそういう状況なら
867デフォルトの名無しさん:2010/02/28(日) 16:29:23
>>864
「奇跡のリンゴ」木村秋則著も見て来い。
868デフォルトの名無しさん:2010/02/28(日) 16:37:13
未経験入社の新人にプログラミングRuby渡して勉強しとけ
って放っておいたら、挫折したのか2週間ぐらいで会社辞めてしまった
869デフォルトの名無しさん:2010/02/28(日) 16:38:58
>>857
次のCであるC1xの話題はそれなりに飛び交ってるよ。
C1xではgetsがなくなるとか、strlcpyとかでなくstrcpy_sとかが採用されるとか。
870デフォルトの名無しさん:2010/02/28(日) 16:49:39
>>868
Ruby無関係に、新人教育怠って放置してたから駄目会社と思われて辞められたんだろ
871デフォルトの名無しさん:2010/02/28(日) 16:51:44
>>868
本当ならおまえ頭おかしいと思うよ
そんなことして楽しいのか?
872デフォルトの名無しさん:2010/02/28(日) 16:59:15
>>869
ライブラリの取捨選択か...
言語本体のほうってなんか話題あったっけ?
873デフォルトの名無しさん:2010/02/28(日) 17:03:01
プログラミングって何か簡単な作るソフトを決めて、それを作るためにはどうすればいいのか
要所々々本でも見ながらやっていかないと、覚える気になれないよなあ
目的もなく本だけみて1から10まで全部覚えていくとかは飽きてダメになってくる。
874デフォルトの名無しさん:2010/02/28(日) 17:05:44
>>868
いじめと正式認定されました。
875デフォルトの名無しさん:2010/02/28(日) 17:13:14
え、>>868ってまずいことなの?
無職ヒッキーだから社会常識とかわからないけど、こういう人の下でならやれるかもなぁって思った。
876デフォルトの名無しさん:2010/02/28(日) 17:15:35
まぁ、IT業界の人たちもいろいろだからな。
いやどこの業界も同じだけどさ。
877デフォルトの名無しさん:2010/02/28(日) 17:17:57
>>875
仕事してないから給料減らされても文句言えない
新人教育も業務のうちだと理解できなかった可哀想な人
878デフォルトの名無しさん:2010/02/28(日) 17:21:39
2週間でクラスとか理解してこいって言われたら泣くな。プログラミング何も知らないなら
配列やループでも出来るようになってれば良い。というかプログラミングって記述の理解なんかより
求められた要件をプログラムに直す発想が出来ることがなにより大事なんだよなあ。
これは数学が出来ないといくら言語を理解してても駄目なんだよ。
879デフォルトの名無しさん:2010/02/28(日) 17:22:08
本を渡してそれをやっておいてって言う事自体はいいんだよ。
問題は、完全放置ってことw
時々、進み具合を確認したり、質問があればいつでも聞いていいよっていう
雰囲気を作るのが大切。

質問を受ける分、自分の仕事ができなくなるんだけど、残業してフォローすればいい。
まぁ大変だけど、先輩としての役目として仕方ない部分はあるし、たいがいの会社ではそうやってるんじゃね?
880デフォルトの名無しさん:2010/02/28(日) 17:23:50
>>878
数学バカがまた現れたな。
調子に乗るな。
881デフォルトの名無しさん:2010/02/28(日) 17:29:03
>>880
レスしたのお前だけだぞ
882デフォルトの名無しさん:2010/02/28(日) 17:32:27
いや、そんなやつ知らんが。何となくそう思ったから言っただけだ
883デフォルトの名無しさん:2010/02/28(日) 17:41:04
つうかさ、プログラマ必要な部署にずぶの素人配置してる時点で嘘だろ
884デフォルトの名無しさん:2010/02/28(日) 17:45:43
どの業界にも適正っつーのがあってだな。
何も知らずに未経験で入ってくるヤツが悪い。
885868:2010/02/28(日) 18:01:46
うわすごく叩かれてるw
一応分からないことがあったら質問してくれとは言ったんだけどな
毎日仕事終わりには日報も書かせたけど問題無さそうだったからほとんど放置してた
若者の心を読むのは難しいね
886デフォルトの名無しさん:2010/02/28(日) 18:06:36
年代が違うと飲みに言っても会話が弾まないよな
887デフォルトの名無しさん:2010/02/28(日) 18:08:27
>>878
数学とプログラミングって良く関連があるように言われるけど
どうして?
数学できないとプログラミングできないの?
888デフォルトの名無しさん:2010/02/28(日) 18:10:52

黙ってソース読むことだ。
889デフォルトの名無しさん:2010/02/28(日) 18:11:39
は?
ますますイミフ
890デフォルトの名無しさん:2010/02/28(日) 18:14:49
Rubyから入った人は数学なんか出来なくてもいいよ
数学の知識が必要なプログラムなんか組まないだろ
891デフォルトの名無しさん:2010/02/28(日) 18:16:52
ジャヴァwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
892デフォルトの名無しさん:2010/02/28(日) 18:17:21
すまんスレ間違った
893デフォルトの名無しさん:2010/02/28(日) 18:17:30
>890
そりゃ数学自体を使うプログラム(シミュレーションや3Dなど)なら数学の知識はいるだろうけど
計算機科学を学ぶのに高度な数学って必要なのか?
894デフォルトの名無しさん:2010/02/28(日) 18:18:59
>>885
そりゃあの書き方だと叩かれるだろw
完全放置としか読めないし。

まぁ一応フォローを入れていたのなら、その子には合わなかったんだろうな。
向いてない仕事やるのも時間の無駄だし、良かったんじゃない。
お互いにw
895デフォルトの名無しさん:2010/02/28(日) 18:21:39
>>887
マジレスすると
アルゴリズムを当てはめる能力
が共通に使えるから

まぁでも、↑の能力が必要なのは別に数学に限った話じゃないし
物理シミュレーションとか信号処理とかしないのであれば
別にいらないよね
896デフォルトの名無しさん:2010/02/28(日) 18:21:59
金貰いながらPCと書籍を提供されて勉強することに何が不満なんだ?
897デフォルトの名無しさん:2010/02/28(日) 18:30:33
>アルゴリズムを当てはめる能力

複雑な問題をいくつかの単純な問題に分割する能力
かなー
898デフォルトの名無しさん:2010/02/28(日) 18:35:30
放置するよりは適切な指導者がいたほうが学習は早いわけで、
学習期間(会社が利益をあげられない時間)を縮めようとしてない
=ダメなんじゃないかココ、と思った、のかもしれない。
899デフォルトの名無しさん:2010/02/28(日) 18:37:28
本人にとって給料払われてればそんなことどうでもいいだろ
そんな判断出来る香具師だったらもっとほかに(ry
900デフォルトの名無しさん:2010/02/28(日) 18:38:53
1人で勉強できない奴はいずれ限界が来る
901デフォルトの名無しさん:2010/02/28(日) 18:42:15
>>897
そんなたいそうな話か?
プログラム書くために必要なのは最低限の論理的思考力
論理的な思考力を鍛えるために必要なのが離散数学の練度
だから最低限の論理的な思考が出来る人はRubyで離散数学なんて必要ないし
離散数学の錬度が高くてもせいぜいきれいなコードが書ける程度の差だと思う
数学の勉強しないとプログラムが理解できないなら最初から向いてないし
902デフォルトの名無しさん:2010/02/28(日) 18:45:44
離散数学の練度 ってなんですの?
903デフォルトの名無しさん:2010/02/28(日) 18:46:11
俺が高校生のころは少ない小遣いから言語の本とか買って
勉強してた。まあ趣味だったからね。
でもそういうやつだけでいいんだよこの業界。
教えてもらわないとダメな人間は他の業界行ってくれ。
904デフォルトの名無しさん:2010/02/28(日) 19:08:08
教えてもらわないと、といっても先輩から技を教えてもらうのはおkだよ。
905デフォルトの名無しさん:2010/02/28(日) 19:17:01
放置そのものじゃなく、
未経験のやつにプログラミングRubyを渡して
かつ放置というのがおかしいだろ

絶対にできるわけない
そうすること自体に快楽を感じてるとしか思えない
むかつくというより気持ち悪いレベル
906デフォルトの名無しさん:2010/02/28(日) 19:29:39
C++の cout << ... << endl って気持ち悪いな
907デフォルトの名無しさん:2010/02/28(日) 19:32:23
細部を聞かないと分からないが、それほど無茶な行いでもないだろう
「できない」と思ったら上司に報告するのも能力のうちだ
それをやらずに退社したんだから、>>868が責められるいわれはない

>>905
何か嫌なことでもあったの?
908デフォルトの名無しさん:2010/02/28(日) 19:36:01
俺は本だけでプログラミングを身につけたわけだが
909デフォルトの名無しさん:2010/02/28(日) 19:39:05
>>908
じゃあ、学校の勉強だけで旧帝大に入った俺から言わせれば塾も予備校も要らないな
910デフォルトの名無しさん:2010/02/28(日) 19:40:58
>>909
今なにやってるの?
911デフォルトの名無しさん:2010/02/28(日) 19:48:30
>>910
ニートwwwwwwwwwwwwwwwwwww
めっちゃ長期無職wwwwwwwwwwwwwww

大学の研究頑張ってもそれだけでは就職できないので注意
大学卒業してからの人生のほうが長い
学業8割程度にして潰しのきく大学生活を送ることを推奨
912デフォルトの名無しさん:2010/02/28(日) 20:05:03
んでもともと何の話題だっけ
913デフォルトの名無しさん:2010/02/28(日) 20:08:27
書籍の話...
914デフォルトの名無しさん:2010/02/28(日) 20:12:25
ニートで生活できる資金があれば俺もニートになりたい
915デフォルトの名無しさん:2010/02/28(日) 20:14:14
親の貯金を削れば今からでもニートになれるよ!
老親2人のためのお金を大人3人で使い切るんだ!豪勢だね!
916デフォルトの名無しさん:2010/02/28(日) 20:16:23
>>906
endl = "\n"
$stdout << "Hello, world!" << endl
917デフォルトの名無しさん:2010/02/28(日) 20:21:51
>>916
endlで起こることを大雑把に2つ挙げよ
918デフォルトの名無しさん:2010/02/28(日) 20:25:23
ていうかputsだよな
多用すると遅いのも一緒
919デフォルトの名無しさん:2010/02/28(日) 20:27:28
クラス使って超大作ゲーム作ったよ
http://www1.axfc.net/uploader/Sc/so/87518
920デフォルトの名無しさん:2010/02/28(日) 20:48:44
社員教育も受けてないようなうちから一般社員と同じ振る舞いを強制されてる>>907の会社の新入社員可哀想
921デフォルトの名無しさん:2010/02/28(日) 21:08:58
そもそも未経験を雇ってる時点で糞会社だな。
普通は経験者雇うし、それでも研修ぐらいヤルし。
開発環境も悪い零細会社なんだろうなw
922デフォルトの名無しさん:2010/02/28(日) 21:48:40
hoge.fuga && hoge.piyo
をもっとエレガントに書けないですかね……
[:fuga, :piyo].all?{|sym| hoge.send sym}
はなんかむしろキモいし……
923デフォルトの名無しさん:2010/02/28(日) 21:55:39
>>922
とくにない
どうしても気になるならメソッドにまとめると見栄えがいい
924デフォルトの名無しさん:2010/02/28(日) 22:34:17
hoge.instance_eval { fuga && piyo }
925デフォルトの名無しさん:2010/02/28(日) 22:41:07
>>921
力仕事の派遣だろな
926デフォルトの名無しさん:2010/03/01(月) 08:03:29
誰と誰が戦ってるんだこのスレ
927デフォルトの名無しさん:2010/03/01(月) 10:02:16
スパルキアとガイアスが戦ってます
928デフォルトの名無しさん:2010/03/01(月) 12:23:05
ローマとガリアが戦ってます
929デフォルトの名無しさん:2010/03/01(月) 21:31:50
930 ◆1zwh/1JASc :2010/03/02(火) 22:57:17
Rubyスレ→宿題スレ→ココと漂流してきました。

TwitterのStreamAPIを使ってcURLで書いてみたいのですが、以下リンク先のコードのように
はなったのですが、ずっと動かしてるとStackErrorとなってしまいます。
うまく動くように出来無いでしょうか?

概要:TwitterStreamAPIを使ってのhttpリンク抜き出し
環境
 OS:Linux(Ubuntu9.10)
 バージョン: Ruby 1.9.1
gemsのcURL利用でnet/httpは使わない方向でお願いしたいです。

コード:
http://gist.github.com/318228
931デフォルトの名無しさん:2010/03/02(火) 23:04:56
なんでわざわざcurbなんて劣等ライブラリ使ってるの
932デフォルトの名無しさん:2010/03/02(火) 23:16:58
tweetstream使えば一発じゃね
933デフォルトの名無しさん:2010/03/02(火) 23:19:14
勉強のために自力で書きたいのでは
勉強のためならcurlなんて使わないほうがいいんだが
934デフォルトの名無しさん:2010/03/03(水) 01:59:19
じゃあ尚更訊かないほうがいいレベルだな。
自分で調べないと身に付かないよw
935デフォルトの名無しさん:2010/03/03(水) 03:13:47
curl使ったほうが賢いよ
Rubyのアレは相当ひどいから
936デフォルトの名無しさん:2010/03/03(水) 03:57:54
今更、curlでしょ。


さっき、クラス名の命名規約で数字から始められないのに嵌った。orz
rubyってツンデレだから、parse errorとしか逝ってくれないし。orz
デレて、アルファベットで始めないと実行してあげないんだからねっ!ぐらいは貧と出して欲しいw
ちなみに嵌ったクラス名は2chで始まって(ry

javaといい、クラス名ってオブジェクト指向言語の鬼門だな。
937デフォルトの名無しさん:2010/03/03(水) 05:05:17
>>936
クラス名にかかわらず識別子は数字から始められないほうが一般的じゃね
938デフォルトの名無しさん:2010/03/03(水) 08:49:41
lispくらいか? 数字で始められるのって。
939デフォルトの名無しさん:2010/03/03(水) 10:01:50
大文字で始めるとマニュアルにもあるし、まともな解説ならそのように言うはず
言わないのだとしたらそいつが悪い

スレとして特定の本を薦めてるのは著者の自演じゃないんだぞ
940デフォルトの名無しさん:2010/03/03(水) 12:07:57
tnok = 0x37D.new
941デフォルトの名無しさん:2010/03/03(水) 14:39:41
>>936
むしろ数字から識別子を始められる言語が少ない印象があるんだが、他に使える言語あったけ・・・
942デフォルトの名無しさん:2010/03/03(水) 16:14:14
Ruby技術者認定試験ってC言語検定とかと違ってプログラミング出来るだけで受けれるような資格じゃないんだなあ
SEレベルの知識必須で講師を対象とした資格か・・
943デフォルトの名無しさん:2010/03/03(水) 16:19:04
それはC言語検定のほうが用途的にへぼいんだよ
というか「C言語プログラミング能力認定試験」なんだからいわゆるコーダー能力があるかどうかだけだろ
しかも2級までは筆記だけだし
944デフォルトの名無しさん:2010/03/03(水) 16:28:41
Pythonプログラマでちょっと勉強すれば受かるっぽいぞ。
俺も受けてみようかな。

InfoQ: PythonプログラマがRuby技術者認定試験を受けてみた
http://www.infoq.com/jp/articles/rubyexam
945デフォルトの名無しさん:2010/03/03(水) 16:30:43
Ruby含めたプログラミング言語をどのように学んできたかに強く依存するな
学び方によっては全く歯が立たない
946デフォルトの名無しさん:2010/03/03(水) 18:18:16
>>945
「分数の出来ない大学生」のレベルですねわかります
947デフォルトの名無しさん:2010/03/03(水) 18:24:49
いや、口だけ偉そうに言っても実際にRuby技術者認定試験の資格取れる人はここには居ないだろうよ
948デフォルトの名無しさん:2010/03/03(水) 18:27:44
資格、資格って...
頑張れお前らw
949デフォルトの名無しさん:2010/03/03(水) 19:31:30
(◞≼◉ื≽◟◞౪◟,◞≼◉ื≽◟ )
950デフォルトの名無しさん:2010/03/03(水) 20:48:38
ここにいる人らはなんに使ってんの?
アプリサーバ構築とかそんなに多くないと思うんだけど
951デフォルトの名無しさん:2010/03/03(水) 20:49:38
>>950
>>698-
952デフォルトの名無しさん:2010/03/03(水) 20:59:38
なるほど 方向性が違うな
953デフォルトの名無しさん:2010/03/03(水) 21:39:57
rubyを始めようかpythonを始めようかと思っているのですが
具体的にrubyはこれが得意、これが不得意ってあるのでしょうか?
954デフォルトの名無しさん:2010/03/03(水) 21:41:47
>>953
>>834-
955デフォルトの名無しさん:2010/03/03(水) 21:49:44
ruby は Windows が苦手
956デフォルトの名無しさん:2010/03/03(水) 22:11:13
HTMLのテキストボックスへの文字の自動入力って
rubyじゃ無理?
957デフォルトの名無しさん:2010/03/03(水) 22:19:29
どういうときに入力したい? 入力したあとどうしたい?

どっかのサーバから取得したHTMLに、ブラウザ的に文字を「入力」して、そのデータを送信する?
それとも、自分がCGIなどで吐き出すフォームに、ユーザーからの入力を保持したまま再度返す?
958デフォルトの名無しさん:2010/03/03(水) 23:23:20
mechanize つかえ
959デフォルトの名無しさん:2010/03/03(水) 23:30:07
>>953
Windowsメインで使うならPython、そうでないならRubyでいいんじゃないかな、ここRubyスレだし。
あとはMacならRubyとか。

俺自身はRubyをWindowsでも使ってるけど、Rails回りは本当いろいろアレなので諦めたw coLinux入れてそっち動かしてる
960デフォルトの名無しさん:2010/03/03(水) 23:45:26
MacでもPythonの方がよさそう
961デフォルトの名無しさん:2010/03/04(木) 00:12:29
中の人って嫌windows厨なのかい?
それとも力不足?
962デフォルトの名無しさん:2010/03/04(木) 00:19:07
コミュニティの人材不足
Windows専門といえる人がそれほど多くない

言語開発者が複数のOSの知識をふんだんに持ってることは稀(たいてい1個)
移植の面からがっちりサポートするという人がたいていまわりにいるもんなんだが、
Rubyは歴史的にその辺が薄いのだ
Windowsプログラミングはなんかもうばっちりで移植の経験も豊富、という人がいればぜひ
963デフォルトの名無しさん:2010/03/04(木) 00:53:49
テキストファイルとファイルシステム周りだけでも何とかしてもらいたいもんだがなあ
964デフォルトの名無しさん:2010/03/04(木) 00:58:46
とりあえず File.read にバイナリスイッチを…
965デフォルトの名無しさん:2010/03/04(木) 01:05:09
windowsのサポートが充実しても面倒なユーザーが増えるだけであんまりいいことが無い件
966デフォルトの名無しさん:2010/03/04(木) 01:06:52
ドキュメントを英訳したときもそう思ったはず
つまり実際問題として多勢に影響はない
967デフォルトの名無しさん:2010/03/04(木) 01:09:31
たしかRubyってひろゆきが作ったんだっけ
968デフォルトの名無しさん:2010/03/04(木) 01:18:32
西村ひろゆきが作ったらしいな
969デフォルトの名無しさん:2010/03/04(木) 01:22:53
>>964
つ File.binread

という話ではないんだろうな。
970デフォルトの名無しさん:2010/03/04(木) 01:22:56
うんよく言われる
けっこう混じってる
971デフォルトの名無しさん:2010/03/04(木) 08:18:59
C++嫌い
Windows嫌い
ガキですかw
972デフォルトの名無しさん:2010/03/04(木) 08:27:42
嫌いというよりノウハウが無いだけだろ
何でガキになるんだよ
Railsのせいで意図せず広まってしまった言語だから
他のメジャーな言語のようにコアな技術者が集まってるわけでもない
973デフォルトの名無しさん:2010/03/04(木) 08:46:17
めんどくさい上に声だけはでかくて、メリットないしのう。
974デフォルトの名無しさん:2010/03/04(木) 09:26:23
突然ですがPraggerって今でもメンテされているんでしょうか?
今後Rubyのバージョンアップについていかないようだったら、
別の物を考えようと思っているので、ご回答お願いします。
975デフォルトの名無しさん:2010/03/04(木) 10:29:30
作者に聞けよ
976デフォルトの名無しさん:2010/03/04(木) 10:30:24
教祖がウィンドウズ使ってないと言う大衆布教に致命的な弱点が有るからねえ。

pyのほうが世界的にはユーザ多いしな。
railsのpy版でもあればいいだけだろうし。

マカは相手にするだけ無駄だと思う。objcとかruby以上にマイナーな言語を至極として喜んで使ってる連中だし。メモリリークかクラッシュ上等みたいだし。
977デフォルトの名無しさん:2010/03/04(木) 10:36:13
突然ですがCGI.rbって今でもメンテされているんでしょうか?
今後Rubyのバージョンアップについていかないようだったら、
別の物を考えようと思っているので、ご回答お願いします。
978デフォルトの名無しさん:2010/03/04(木) 10:37:09
>railsのpy版でもあればいいだけだろうし。

django とかほとんどそうだよ
979デフォルトの名無しさん:2010/03/04(木) 10:47:33
バカが伝染るから触っちゃいけません
980デフォルトの名無しさん:2010/03/04(木) 10:56:00
ああああ、980踏んだめんどい

>>977
そういうことする前に1.9.1のlibディレクトリ見ておけ恥ずかしいから
現在のcgi.rbは実質3行だ

require 'cgi/core'
require 'cgi/cookie'
require 'cgi/util'
981デフォルトの名無しさん:2010/03/04(木) 11:06:32
Sinatraでもつかっとけ。
982デフォルトの名無しさん:2010/03/04(木) 11:14:48
新スレ

Ruby 初心者スレッド Part 35
http://pc12.2ch.net/test/read.cgi/tech/1267668057/
983デフォルトの名無しさん:2010/03/04(木) 11:32:13
984デフォルトの名無しさん:2010/03/04(木) 12:10:17
> Railsのせいで意図せず広まってしまった言語だから

これは激しく同意せざるを得ない
985デフォルトの名無しさん:2010/03/04(木) 13:03:23
rspec使ってるです

プログラム作るの自体を間違えて例外が起きてしまっている場合、
テストではなくスクリプト本体の何行目で例外が起きたかを表示させる方法はありませんか

$ spec -fs -b -c spec/hoge_spec.rb
1)
ArgumentError in 'Hoge#hoge'
wrong number of arguments (1 for 0)
./spec/hogehoge/hoge_spec.rb:4:in `hoge'
./spec/hogehoge/hoge_spec.rb:4:
.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/example/example_methods.rb:40:in `instance_eval'
.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/example/example_methods.rb:40:in `execute'
/usr/local/lib/ruby/1.8/timeout.rb:53:in `timeout'
.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/example/example_methods.rb:37:in `execute'
.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/example/example_group_methods.rb:214:in `run_examples'
.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/example/example_group_methods.rb:212:in `each'
.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/example/example_group_methods.rb:212:in `run_examples'
.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/example/example_group_methods.rb:103:in `run'
.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:23:in `run'
.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:22:in `each'
.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:22:in `run'
.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/runner/options.rb:152:in `run_examples'
.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/runner/command_line.rb:9:in `run'
.gem/ruby/1.8/gems/rspec-1.3.0/bin/spec:5:
/usr/bin/spec:19:in `load'
/usr/bin/spec:19:

spec_hoge.rb での行数ではなく、hoge.rb の何行目で例外が起きたかを知りたいんです
986デフォルトの名無しさん:2010/03/04(木) 13:10:52
うん、このへんわかりにくいよね

>>985
wrong number of arguments (1 for 0)

./spec/hogehoge/hoge_spec.rb:4:in `hoge'

の間にスクリプト本体でのエラー記述が何もないということは、エラー出してるのはspecファイルだ
rspecとして記述ミスがあるから探せ
ArgumentErrorだからきっとshouldが抜けてる個所がある
987デフォルトの名無しさん:2010/03/04(木) 16:01:44
module AAA
end

module AAA::BBB
end

とした場合、
BBBはAAA内のモジュールかクラスのどちらになるんですか?
988デフォルトの名無しさん:2010/03/04(木) 16:17:50
いやそのへんは見たまんまだ
module って自分で書いてるんだからモジュール
「途中」がナニかというのには影響しない

irb> module AAA; end
irb> p AAA.class
Module
irb> module AAA::BBB; end
irb> p AAA::BBB.class
Module
irb> class AAA::CCC; end
irb> p AAA::CCC.class
Class
989デフォルトの名無しさん:2010/03/04(木) 16:27:49
クラスの中にモジュール追加は、たとえば

module String::EmojiUtilities
end
とか

class String
  module EmojiUtilities
  end
end
とか書けるわけだ。
990デフォルトの名無しさん:2010/03/04(木) 16:28:17
rubyの特徴としてプログラミングが楽しいということが上げられていましたが、
パイソンなんかと比べてもやはりそうですか?
991デフォルトの名無しさん:2010/03/04(木) 16:30:04
その人のこれまでのバックグラウンドによるんじゃないかね。
992デフォルトの名無しさん:2010/03/04(木) 16:37:07
>>990
パイソンをやってみてどうでしたか?
993デフォルトの名無しさん:2010/03/04(木) 16:42:14
>>992
名前空間の仕組みがRubyとくらべてすっきりしているし
help()も使いやすくプログラミングしていてとてもたのしかったです
関数をファーストクラスとして扱いやすいのもいいですね
994デフォルトの名無しさん:2010/03/04(木) 16:57:01
riと
Rubyリファレンスマニュアル(ttp://www.ruby-lang.org/ja/man/)と
るりまって何が違うですか?

どれが一番正確(頼りになる/一次ソースになる)ですか?教えて、えらい人!!
995987:2010/03/04(木) 17:42:23
>>988-989
module AAA::BBB
↑このmoduleは、AAA内のモジュールBBBという意味なんですね

.classでオブジェクトの種類が参照できるのも勉強になりました

ところで、
class AAA
end
class BBB < AAA
end
のようなクラスの継承とは違うのですか?
996デフォルトの名無しさん:2010/03/04(木) 17:47:25
module AAA::BBB は

module AAA
  module BBB
  end
end
997デフォルトの名無しさん:2010/03/04(木) 17:52:48
うーん、クラスとモジュールの違いってことか。
998デフォルトの名無しさん:2010/03/04(木) 18:00:42
>>994
一番正確なのはソースにかかれている実装。(バグも完全に記述されている by matz)
riで出てくるのはソース内にrdocで書かれたドキュメンテーションコメント。
RubyリファレンスマニュアルはもともとWikiだったので誰でも書き換えることが出来た。
るりまはボランティアのプロジェクトで実装を調べながらゆっくり作成中。

まー、実用上は、るりまでいいけど、まだ完全ではないので、必要に応じてriやソースかな。

999デフォルトの名無しさん:2010/03/04(木) 18:10:30
>>998
ありがとうございます。
エディタから引きやすいのでriをメインに使うことにします。
1000デフォルトの名無しさん:2010/03/04(木) 18:26:22



                たのしいにちようび
                ┼ヽ  -|r‐、. レ |
                 d⌒) ./| _ノ  __ノ
                _______
                企画・製作 NHK
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。