10/01/28 08:39:14
プログラミング言語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つをすること。ここで回答を待つよりそのほうが早い。
・モジュール名やエラーメッセージでググる
・マニュアルで引っかかったクラスの記述を探す URLリンク(www.ruby-lang.org)
・FAQを一応読む URLリンク(www.ruby-lang.org)
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
2:デフォルトの名無しさん
10/01/28 08:40:04
【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?
A:
プログラム作成自体の初心者なら
・「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
URLリンク(www.amazon.co.jp)
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
・「初めてのRuby」
URLリンク(www.amazon.co.jp)
以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください。
・「Rubyレシピブック 第2版 268の技」(初心者向け)
URLリンク(www.amazon.co.jp)
・「プログラミングRuby 第2版 言語編」(初心者向け)
URLリンク(www.amazon.co.jp)
・「Ruby Way 第2版」(脱初心者向け)
URLリンク(www.amazon.co.jp)
・ 「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
URLリンク(www.amazon.co.jp)
以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません。
・「プログラミング言語 Ruby」(言語として深く知りたい人向け)
URLリンク(www.amazon.co.jp)
3:デフォルトの名無しさん
10/01/28 08:40:46
Ruby 公式・非公式便利サイト2009
・Ruby Home Page 【公式、お役立ち度が微妙】
URLリンク(www.ruby-lang.org)
・Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-doc.org) 【詳しい英語版】
・HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
URLリンク(elbereth-hp.hp.infoseek.co.jp)
・Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
URLリンク(www.ruby-doc.org)
・Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
URLリンク(jp.rubyist.net)
・逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
URLリンク(www.namaraii.com)
・はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
URLリンク(d.hatena.ne.jp)
・RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
URLリンク(www.rubyforge.org)
・GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
URLリンク(github.com)
・日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
URLリンク(jp.rubyist.net)
4:デフォルトの名無しさん
10/01/28 08:43:07
●関連スレ
・Rubyについて Part 38
スレリンク(tech板)
●アンチスレ
・Rubyについて(アンチ専用) Part004
スレリンク(tech板)
●Railsスレ
・【Ruby】Ruby on Rails Part8
スレリンク(php板)
●Windows用スレ
・【ActiveScript】RubyをWindowsで使うスレ【GUI】
スレリンク(tech板)
●Ruby 1.9 系列スレ
・魁け! Ruby 1.9.X
スレリンク(tech板)
●前スレ
Ruby 初心者スレッド Part 33
スレリンク(tech板)
Ruby 初心者スレッド Part 32
スレリンク(tech板)
Ruby 初心者スレッド Part 31
スレリンク(tech板)
5:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/28 09:42:59
本スレより。
764 名前:デフォルトの名無しさん[sage] 投稿日:2010/01/28(木) 07:15:32
初心者スレが落ちてるのでこっちで。
関数で呼び出し元のselfを自動で引数として受け取るようにす
ることってできますか。
こんな感じで。
def func(hoge=呼び出し元のself)
p hoge
end
モジュールにしてMix-inさせるとかは無しでお願いします。
7:デフォルトの名無しさん
10/01/28 09:47:11
スレ立て乙
>>6
呼び出し元で this を渡してやるしかないかなぁ。
8:デフォルトの名無しさん
10/01/28 09:56:42
thisってなんですか?
thisってなんですか?
thisってなんですか?
thisってなんですか?
thisってなんですか?
9:デフォルトの名無しさん
10/01/28 10:16:25
ルー語も知らないゆとりか
10:デフォルトの名無しさん
10/01/28 10:19:38
そっちのほうが余計意味通らんわwwww
11:デフォルトの名無しさん
10/01/28 10:33:06
渡す方が this で受け取る方が self っつーのもなんだかなぁ
12:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/28 10:47:19
>「2010年1月28日 26時30分」の形式にする
無茶言うな
あったらあったで楽しそうだが
14:デフォルトの名無しさん
10/01/28 10:49:32
じゃあ翌日午前10時は前日の34時かというとそうではないわけで
(たぶんそれは10時のままにして欲しいと言うはず)
自前で適当だと思う範囲を変換して作るしかないね
15:デフォルトの名無しさん
10/01/28 11:02:12
27時はありだけど28時はないんだそうだ
28時と表現したら怒られた
よくわからん
16:デフォルトの名無しさん
10/01/28 12:29:14
関数ってなんですか?
Kernel.private_instance_methods(false)のことですか?わかりません><
17:デフォルトの名無しさん
10/01/28 14:29:16
>>15
マスコミ関係の方ですか?
18:デフォルトの名無しさん
10/01/28 16:25:43
str = 'first,second"a,b,c"second,third'
という文字列があったとして
ダブルクオーテーションの中以外のカンマにマッチする正規表現ってありませんか?
19:デフォルトの名無しさん
10/01/28 16:57:00
Ruby関係ねえええ
20:デフォルトの名無しさん
10/01/28 17:10:46
irb> str = 'first,second"a,b,c"second,third'
irb> p str.gsub(/".+?"/){' '}.gsub(/,/){' '}
"first second second third"
こんなんじゃ駄目なんだろうなあ
21:デフォルトの名無しさん
10/01/28 17:24:03
>>18
最終的にしたいことは何でしょうか?
ダブルクオーテーションの中以外のカンマの数を数えたいとか、
ダブルクオーテーションの中以外のカンマでsplitしたいとか。
22:デフォルトの名無しさん
10/01/28 17:30:18
>>21 後者です。
str.split(regexp) #=>["first", "second\"a,b,c\"second", "third"]
というのを期待しています。
ダブルクオーテーションはネストしないと仮定しています。
正規表現は難しいです。
23:デフォルトの名無しさん
10/01/28 17:36:58
>>19
正規表現スレを見つけました。
正規表現スレに移動した方がよろしいでしょうか?
24:デフォルトの名無しさん
10/01/28 17:47:26
>>22
うおめんどくさ
25:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/28 18:11:07
>>23
多分、正規表現だけでは無理なのでここでいいんじゃないかな
27:デフォルトの名無しさん
10/01/28 18:30:36
一応出来た。でもバグがあるかもしれないから(;_;)
僕にもっと考える時間と頭をください。
条件を満たすカンマにマッチする正規表現を考えるから難しいのかなー、と思って
違う考え方をしてみた。
str = 'first,second"a,b,c"second,third'
str.scan /(?:[^",]+"[^"]+"[^",]+)+|[^,]+/
=> ["first", "second\"a,b,c\"second", "third"]
あとは、これを頭のいい人が改良するだけでつ(;_;)
28:27
10/01/28 18:47:21
うわ、やっぱりバグありまくりですね。
個人的には、正規表現は難しいし、魔法じゃないし
言語のチカラを借りて何とかする方が楽かなー、って思う。
んと、C使いだったら一文字ずつ調べてみるけど...
29:デフォルトの名無しさん
10/01/28 18:49:45
30:デフォルトの名無しさん
10/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"]
31:18
10/01/28 19:52:09
短時間にこれだけレスを頂けるとは思ってもみませんでした。
>>27
カンマ以外の文字列からアプローチする方法は思いつきませんでした。
発送の転換ですね。
一文字づつ調べるというのは>>25氏の方法に近いですね。
>>30
この方法は漏れが少なそうに思います。
>>27氏と>>30氏の方法をベースに検討してみようと思います。
ありがとうございました。
32:デフォルトの名無しさん
10/01/28 20:03:12
/(?:[^",]*"[^"]*"[^",]*)+|[^,]+/
こんな感じニカ?
33:デフォルトの名無しさん
10/01/28 21:18:59
鬼車の田中哲スペシャルってこーゆーとき活用できるもん?
34:デフォルトの名無しさん
10/01/28 21:41:50
面倒臭いから区切りを " " にするよう説得して Shellwords.shellwords を使う。だめか。
CSV だと思って CSV.parse_line する。だめだって。通らないし。
35:デフォルトの名無しさん
10/01/28 21:50:19
問答無用で , で豚切りしてから、
" を含む物から次の " を含むものまでを , で連結したものに置換える。
36:デフォルトの名無しさん
10/01/28 22:19:46
>>35
それだと分割したリストを"求めて尋ねる歩く旅に出ないといけなくなるわけだが・・・
37:デフォルトの名無しさん
10/01/28 22:52:03
基本、このタイプは無闇にめんどくさい
38:デフォルトの名無しさん
10/01/29 06:11:42
RubyはC言語で出来ているのでしょうか?
39:デフォルトの名無しさん
10/01/29 06:42:16
>>38
そうだよ。なんならソースをダウンロードして中身をのぞいてみたら?
それを知ってどうするのかは知らんけどさ。
40:デフォルトの名無しさん
10/01/29 08:35:40
それでも鬼車なら・・・鬼車ならきっと何とかしてくれる
41:デフォルトの名無しさん
10/01/29 10:03:32
Ruby 初心者スレッド Part 33
スレリンク(tech板:998番)
> 998 名前:デフォルトの名無しさん[sage] 投稿日:2010/01/27(水) 09:38:00
> Rubyですごい事が出来た実例を教えて下さい。
Ruby(Rails)で上場しちゃった会社(というと語弊があるがw)
クックパッド(株)【2193】:銘柄情報 - Yahoo!ファイナンス
URLリンク(stocks.finance.yahoo.co.jp)
42:デフォルトの名無しさん
10/01/29 10:59:48
> 998 名前:デフォルトの名無しさん[sage] 投稿日:2010/01/27(水) 09:38:00
> Rubyですごい事が出来た実例を教えて下さい。
昔から使ってる人間としては、Rubyで生計を立ててる人がいる時点で信じられん
43:デフォルトの名無しさん
10/01/29 11:16:40
>>42
20年も経てば、あなたがたはRubyに税金をかけるようになるでしょう
44:デフォルトの名無しさん
10/01/29 11:18:45
>>18
出遅れた気がするけど、
str = 'first,second"a,b,c"second,third'
str.scan(/(?:^|\G,)([^",]*(?:"[^"\\]*(?:\\.[^"\\]*)*"[^",]*)*)/).map{|a|a[0]}
45:デフォルトの名無しさん
10/01/29 11:19:48
>>43
すでに未踏経由で1000万以上税金突っ込ん出るよ、その成果の一つがYARVだ
46:デフォルトの名無しさん
10/01/29 11:35:56
>>43
いや電気ほどにはすごくないw
47:デフォルトの名無しさん
10/01/29 11:56:00
ファラデーか
48:デフォルトの名無しさん
10/01/29 13:57:49
str.scan /(?:[^",]|"[^"]*?")+|(?=,,|^,|,$)/
49:デフォルトの名無しさん
10/01/29 14:27:24
メンテナンスしたくない正規表現が続々届いております
50:デフォルトの名無しさん
10/01/29 14:31:56
正攻法は>>25、LLっぽいのは>>35だと思う
51:デフォルトの名無しさん
10/01/29 14:36:07
>>49
ちょっと変えたいときに悲惨だな
これくらいは読めて欲しい気もするが
52:デフォルトの名無しさん
10/01/29 15:51:35
\Gの使い方がよくわからなかった自分としては>>44が勉強になった
53:デフォルトの名無しさん
10/01/29 15:53:13
最終的には読めて欲しい
初級を脱したと思ってる人は読めて欲しいなー
54:デフォルトの名無しさん
10/01/29 16:34:07
読めても変えたくないエンバグしそう
55:デフォルトの名無しさん
10/01/29 16:36:13
>>44 の修正、一般にCSVでは"のエスケープは""
str.scan(/(?:^|\G,)([^",]*(?:"[^"]*(?:""[^"]*)*"[^",]*)*)/)
56:27
10/01/29 16:45:09
↑
なるほど。勉強になったthx
57:デフォルトの名無しさん
10/01/29 19:46:41
>>49
正規表現をくれということだから仕方ない
58:デフォルトの名無しさん
10/01/29 20:15:46
mingw版のRuby1.8.7バイナリって特にはない?
自力でMinGW導入して手元でコンパイルするしかないのかな
59:デフォルトの名無しさん
10/01/29 20:30:14
コンパイルしてみたら?
きっと親切なおじさんたちが助けてくれるさ
60:デフォルトの名無しさん
10/01/29 21:07:20
えー
ひとつだけ質問
Net::HTTPSが使うOpenSSLやirbが使うReadlinesとかは放っておいても入る?
んなわけないよね別途用意しなきゃ駄目だよね
61:デフォルトの名無しさん
10/01/29 21:39:37
URLリンク(gnuwin32.sourceforge.net)
URLリンク(gnuwin32.sourceforge.net)
URLリンク(gnuwin32.sourceforge.net)
URLリンク(gnuwin32.sourceforge.net)
URLリンク(gnuwin32.sourceforge.net)
URLリンク(gnuwin32.sourceforge.net)
リンク先を見てわからないなら諦めた方がいいかもしれない。
怖くてリンクを踏めないという見解もありうる。
62:デフォルトの名無しさん
10/01/29 21:41:31
%w記法で空文字列の要素はどうやって作るの?
63:60
10/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:デフォルトの名無しさん
10/01/29 21:44:57
%Wならできるが、%wでは無理だね
65:デフォルトの名無しさん
10/01/29 21:45:46
%wじゃむりじゃね?
大文字の方なら
p %W[hoge fuga #{nil} ] #=>["hoge", "fuga", ""]
66:デフォルトの名無しさん
10/01/29 21:53:29
式展開じゃないとダメか
#{nil}はnilになるのかと思ったら""なのね。何で? nil要素は作れない?
67:デフォルトの名無しさん
10/01/29 21:57:08
要素が文字列である配列を作る記法だからでしょう
またレスかぶりそう
68:デフォルトの名無しさん
10/01/29 22:05:56
了解。みんなありがと
69:デフォルトの名無しさん
10/01/29 22:11:45
>>66
irb(main)> "#{nil}"
=> ""
70:デフォルトの名無しさん
10/01/29 22:25:58
>>58
いろいろあったんだが、Windowsの場合は自分だけMinGW32にしても意味がない、という結論に至った
配布されてるバイナリのバージョンと揃えておいて、同じようにエラー出したり同じように変な動きしたりするほうがいい
71:デフォルトの名無しさん
10/01/29 22:30:02
普段CをMinGWでコンパイルしていて
Rubyの拡張ライブラリもMinGWでコンパイルしたいんだもん
という人がRubyをMinGWでコンパイルしているんだと思う。
あとメンテナか。
72:デフォルトの名無しさん
10/01/29 22:36:41
これからMinGWにしてこうぜー、という動きがあるのはある気がするが
「よくわかんないいっぱんゆーざー」がわざわざコンパイルしてまで使用するようなもんでもない
ただしMinGWの知識がある人はどんどん使って色々言ってくれ
73:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/29 23:25:11
セルフのクラスのオブジェクトをリターンするようにデファインされてないんだよな
継承を考慮してないもともとのクラスのデザインのミステイクではある
75:デフォルトの名無しさん
10/01/29 23:31:20
Enumerableはeachさえあれば配列じゃなかろうと動くようにしてあるんだから仕方ない
ArrayのメソッドならちゃんとNiseArrayが返すはず
76:デフォルトの名無しさん
10/01/29 23:36:39
ビルトインクラスは普通のオブジェクトと微妙に構造が違うから継承すんなボケ、
っつーかお前のそのクラスはビルトインクラスを継承するだけの動作をするのか、あー? という怖い感じのが一応スタンス
メソッドが欲しいだけなら普通は委譲を使う
77:デフォルトの名無しさん
10/01/29 23:39:33
委譲遅いじゃん
はい論破
78:デフォルトの名無しさん
10/01/29 23:41:22
委譲とかあのへんは遅いよね
継承を使いたくなるくらい遅いというのは実効上の説得力がない
79:デフォルトの名無しさん
10/01/29 23:41:44
この例に限って言えば dup/clone してから map! すりゃいいんじゃね
80:デフォルトの名無しさん
10/01/29 23:44:04
>>78
ディスパッチテーブルを
もう一回引く程度のコストが許容できないなら
その問題にRubyは使えないんじゃないかね
81:73
10/01/30 00:17:48
Arrayオリジナルのメソッドでcollect/mapとselectはNiseArrayではなくArrayを返す。
ほかはNiseArrayを返す。
あとEnumerableは基本的にArrayを返す。
これらは継承では全滅ということでOKですか?
delegateに馴染みがないので軽いサンプルをいただけると助かります。
もちろん自分でリファレンスマニュアルを読んでみます。
82:デフォルトの名無しさん
10/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
83:82
10/01/30 06:10:54
話の流れ上 delegate のサンプルを貼るべきところだったな、ごめんw
継承するとこうなるぞってことで
84:73
10/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:デフォルトの名無しさん
10/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}
86:73
10/01/30 14:46:42
おおお素晴らしい
鮮やかに委譲してますね。
しかも直感的でわかりやすい。
#all?など返り値が委譲先のオブジェクトでないメソッドも少し手直しすれば動きそうです。
勉強になりました。参考にさせてもらいます。
87:デフォルトの名無しさん
10/01/30 17:55:24
$KCODE='u'
'あ' =~ /\xe3/ #=> 0
'あ' =~ /[\xe3]/ #=> nil
となります。
$KCODEを指定しないとどちらも同じ挙動になるんですが。
これは意図した動作なんでしょうか。
手元の環境は
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
です。
88:デフォルトの名無しさん
10/01/30 18:58:31
$KCODEのデフォルトは n なので、
$KCODE を設定しないということは
'あ' はただのバイト列として 0xe3 と比較される。
89:デフォルトの名無しさん
10/01/30 19:11:04
おや、'u'のとき前者がマッチするのか…
90:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/30 22:52:30
>>90
Module#===の定義をリファレンスで読むといいよ
selfがモジュールとすると「obj.kind_of?(self) が true の場合、 true を返します」だとさ
92:デフォルトの名無しさん
10/01/30 23:00:03
驚き最小!
93:デフォルトの名無しさん
10/01/30 23:21:41
>>90
===
94:デフォルトの名無しさん
10/01/30 23:22:47
ミスったw
=== が再定義されているから
case value
when Integer
when String
end
みたいに書けるんじゃないか
95:デフォルトの名無しさん
10/01/31 00:08:03
Proc#===の定義は見ただけでは何を意図したものか分からなかったな…
96:デフォルトの名無しさん
10/01/31 07:39:30
||= って何なんでしょう?
代入文みたいに a ||= {} 使うみたいな
辞書の割り当てとかでしょうか?
97:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/31 08:13:23
>>97
そのエラー分かりにくいよね
特異メソッド(およびそれが定義されているオブジェクト)はダンプできませんよって意味
dupしたものをダンプするようにするか、自分で言ってるように中身だけ出すのが正解
99:デフォルトの名無しさん
10/01/31 08:40:37
>>96
これ書いてる解説少ないんだよな
a がNameErrorを返すか、変数 a が存在して偽を返す場合、 a = {} を実行する
という程度の意味
実際のスクリプトでは大量に使われているが、初心者用文法解説ではほとんど言及されていない謎の記述
100:デフォルトの名無しさん
10/01/31 09:18:07
>>96
a += 1
a = a + 1
a ||= {}
a = a || {}
a が偽と評価される場合に限り a = {} となり、それ以外のときは a = a
変数の初期化を保証するために使われることが多い
101:デフォルトの名無しさん
10/01/31 09:23:09
>>100
だいたいの意味はそうだからいいんだけど、厳密には
a || (a = b)
ってことになる
||= と &&= だけちょっと特殊
ってようなのをどっかで見た
102:デフォルトの名無しさん
10/01/31 11:13:45
>>101
URLリンク(doc.okkez.net)
まあobj.foo = obj.fooに副作用がある設計のほうがどうかと思うけどな
103:デフォルトの名無しさん
10/01/31 14:11:36
>>98
ありがとうございます
objは再帰的なHashなようでdumpできないオブジェクトが入っている場所は一定ではないようです
またTrueClassなどdupできないものも含まれているようです
一気に特異メソッドを取り除いてdumpする方法はないでしょうか?
104:デフォルトの名無しさん
10/01/31 14:26:44
初めてRubyいじる必要が出てきて,このスレに来てみたが
ここ初心者レベルじゃないね。
初心者抜け出して中級者に手が届こうとしてる人たち向けの
初心者脱出スレだな。
105:デフォルトの名無しさん
10/01/31 14:29:35
>>104
いや別に
puts と p はどう使い分けるんですかみたいな質問でも構わないよ
全く知らないと小難しそうな領域に踏み込めるようになるまでの時間が短い言語だとでも思ってくれ
実行速度がスクリプト言語として普通なレベル(つまり速いわけではない)という点以外は初心者にやさしいほうだと思うけどね
106:デフォルトの名無しさん
10/01/31 14:41:46
初心者の質問にでも
初心者抜け出して中級者に手が届こうとしてる人たちも含めていろんな人が答えるスレでしょ
初心者の質問がなけりゃそのちょっと上の会話になるさ
107:デフォルトの名無しさん
10/01/31 14:44:02
>>103
ライブラリ提供者が提供してないのなら目視で取り除くしかないよ
普通は dump というメソッドを作ってあったりするもんなんだけどね
108:デフォルトの名無しさん
10/01/31 15:15:55
>>104
大丈夫、そういう場合は自分のような脱初心者(+ニート)が回答するから。
ただ、2chだから超初心者質問には悪態をつく人間がいることは覚悟しておいたほうがいいかも。
109:デフォルトの名無しさん
10/01/31 16:12:23
相手は人間だから、あんまり馬鹿っぽい質問じゃねえ。
それなりに調べて来ないと駄目でしょ。
思考停止して単位欲しいとかなら
スレリンク(tech板)
Rubyの宿題教えてください。2限目
とか。
110:デフォルトの名無しさん
10/01/31 16:22:38
自分の質問が馬鹿っぽいかどうかが分かるなら、
既にそいつは上級者だろw
まあ確かに、自力で最低限ぐぐるくらいのことはしてほしいとは思う
111:デフォルトの名無しさん
10/01/31 16:26:38
最近の質問はちょっとレベル高かったからなー
むしろ私にも答えられるような初歩的な質問キボンヌ
112:デフォルトの名無しさん
10/01/31 16:33:04
>>103
Marshalじゃなくてyamlか何かでダンプするようにするのが一番楽
113:デフォルトの名無しさん
10/01/31 18:48:05
オブジェクトの中身をろがーに吐かせたいんだけど
inspectじゃなくてppみたいに見やすく文字列化してくれるやつない?
114:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/31 19:28:48
pretty_inspect
116:デフォルトの名無しさん
10/02/01 05:34:01
Rubyは今後10年使われますか?
117:デフォルトの名無しさん
10/02/01 06:17:43
>>111
てかRuby初心者スレは実質「Ruby質問スレ」と言ってもいい
超初心者からRubistまで、幅広く質問を受け付けるスレって感じがする
…てか、もうスレタイ変えちゃって良いんじゃないか、ここ…?
118:デフォルトの名無しさん
10/02/01 11:38:19
変えた途端に>>117が業務上のプログラムの質問する事にでもなるのか?
119:デフォルトの名無しさん
10/02/01 11:43:54
アホが暴れたら高度な話題は本スレでと誘導できるからこのままでいいんだよ
120:デフォルトの名無しさん
10/02/01 20:18:47
超初心者~中級にちょっと届かない初心者
ぐらいしか質問してないだろう
121:デフォルトの名無しさん
10/02/01 20:38:06
人の振り見て我が振り直せ。
122:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/01 22:15:25
1時間経ってもスルーされてた理由をなんとなく理解
124:デフォルトの名無しさん
10/02/01 22:56:47
>>123
たぶんその理解は間違い。
125:デフォルトの名無しさん
10/02/01 23:02:24
実際に試した人→>>123
実際に手を動かさなかった人→>>124
126:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/01 23:45:31
group_by初めて知った。旧リファレンスに無くて悲しくなった。
メモリ喰いっすね
128:デフォルトの名無しさん
10/02/02 00:10:11
Ruby/GTK2 でグラフをプロットするアプリケーションを作りたいと考えています。
URLリンク(ruby-gnome2.sourceforge.jp)
ここにあるようなメニューとウィンドウを作ることはできたのですが、例えば
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:デフォルトの名無しさん
10/02/02 00:37:22
>>128
良く使われる手法は
1.グラフ画像を生成してウインドウに貼る
2.描画可能なコンポーネントにプログラムで描画する
の二つ
1.のグラフ画像生成は、画像処理ライブラリを使って自力でグラフを書くか
グラフ生成ライブラリを使うかする
2.はruby/gtk使った事無いからリンク先から関係ありそうなところ
> URLリンク(ruby-gnome2.sourceforge.jp)
> URLリンク(ruby-gnome2.sourceforge.jp)
130:デフォルトの名無しさん
10/02/02 00:41:47
Tkの知識はあるんだよね
131:デフォルトの名無しさん
10/02/02 00:43:29
TkじゃなかったGTKだた
どっちにしても指示をRuby上からやる、という以上のものではないんで
GUIパーツの使い倒し方を知ってるのがけっこう前提
132:デフォルトの名無しさん
10/02/02 00:58:08
>>129
ありがとうございます
素人考えですがポイント数が増えると 2. の方がいいのかなという気がするので、リンク先を読んでみます
>>130
Tk もわかりません…
133:デフォルトの名無しさん
10/02/02 01:05:03
グラフはQwtがマジおすすめ
URLリンク(qwt.sourceforge.net)
RubyのQtバインディングがあればRubyからも使えるはず
俺はPyQtからしか使った事ないが
134:デフォルトの名無しさん
10/02/02 01:27:16
>>129-131
128 です
ウインドウへの直接描画 - Gdk::Drawable
URLリンク(ruby-gnome2.sourceforge.jp)
こちらを見落としていたようで、先ほどのリンクと一緒に参照しながらやっていきたいと思います
確かに gtk そのものを学ぶ必要があるのだろうとは感じています。ありがとうございました
>>133
ありがとうございます
Qwt のスクリーンショットはかなりイメージに近いです
135:デフォルトの名無しさん
10/02/02 02:28:19
irb の文字入力が悲しいくらい重いです
カーソル移動は問題ないです
irb --noreadline とすると入力は普通になりますが使いにくいです
ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-mingw32]
136:デフォルトの名無しさん
10/02/02 04:15:30
PCのスペックは?それ書いてくれないと判断できないのだが
137:デフォルトの名無しさん
10/02/02 08:07:16
プロッターを1から作るのは全くおすすめできない
133のQwtであればAPIで簡単に実現可能な
描画領域の拡大・縮小やドラッグ、凡例表示なんかを実装するのは
よっぽどモチベーションが高くないと無理
138:デフォルトの名無しさん
10/02/02 10:52:05
>>136
単なるローカルエコーであるはずのirbでの文字入力だけが重くなるという時点で
スペックとか関係ない問題だと思う…
139:デフォルトの名無しさん
10/02/02 15:08:41
「単なる」っておまえReadlineを知らんのだろ
140:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/02 18:36:10
>>141
ホントだ。
何か技術的な理由でそのような仕様になっているのかと思った。
どうもありがとう。
143:デフォルトの名無しさん
10/02/02 18:43:30
と思ったら、IOストリームの位置が進められているよ。
やっぱり内部で複製していないのか。
とりあえず io.rewind で戻せるからいいけどさ。。
144:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/02 19:34:14
>>143
f = File.open file
f.read
f.dup.seek 0
f.pos
そもそも副作用の代表格であるIOにまともな複製なんて不可能じゃない?
146:デフォルトの名無しさん
10/02/02 21:02:46
IOのeachとlinesってまったく同じ?
147:デフォルトの名無しさん
10/02/02 22:41:29
同じ
148:デフォルトの名無しさん
10/02/03 06:52:22
Ruby on Rails 3.0 Release Notes
URLリンク(guides.rails.info)
149:デフォルトの名無しさん
10/02/03 10:23:18
>>138
Windows版Rubyはirb立ち上げておくとなんか変なプロセスが一緒に走って重いよ。
デュアルコアならさして問題ないが1コア占有するんでね。
csrss.exeだったかな。システム絡みのが。
いつまで立っても直らないのは、CPU占有率を常に見ている人が少ないのと、
誰も公式に言わないからだろうと
150:149
10/02/03 10:27:00
今試したら、
クアッドコアのマシンでruby 15%、csrss 8%ぐらい合わせて1コア分くらいだな。
ちょっと違ってたスマソ
とりあえず、Windowsではirb重い。
少なくとも開発中に立ち上げっぱなしはムリポw
俺はcoLinuxとかで立ち上げるからさして問題ないけど
151:デフォルトの名無しさん
10/02/03 10:29:19
えっ
BusyLoopなの?
152:デフォルトの名無しさん
10/02/03 10:36:22
今しばらくmswin32版rubyのirbで色々やってみてるけど
触らなければCPU0%だなあ
もっと時間かけると占有するようになる?
153:デフォルトの名無しさん
10/02/03 10:38:15
ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-mingw32]
154:デフォルトの名無しさん
10/02/03 10:39:56
お、mingwの話かスマソ
155:デフォルトの名無しさん
10/02/03 13:11:46
教祖がウィンドウズ使ってないから仕様。
156:デフォルトの名無しさん
10/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
URLリンク(gnuwin32.sourceforge.net)
157:デフォルトの名無しさん
10/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('URLリンク(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:デフォルトの名無しさん
10/02/03 15:24:15
>>157
Mechanizeのメソッドの使い方を単に間違ってる
ここ全部読め
URLリンク(d.hatena.ne.jp)
159:デフォルトの名無しさん
10/02/03 16:59:18
puts ["hoge"][0]
とやると「hoge」が出力され、0以外だと「nil」が出力されるのですが
この構文自体がどういうものなのか分かりません。
なにかの省略形とかなのでしょうか?
160:デフォルトの名無しさん
10/02/03 17:07:50
>>159
そんなへちょい例文作ったとこどこよお母さん一言文句言っちゃるわ
a = ["hoge"]
puts a[0]
つまり配列の 0 要素目
161:159
10/02/03 17:14:43
>>160
やはり配列でしたか…。こういう記述も許されるんですね。
ありがとうございます。
162:デフォルトの名無しさん
10/02/03 17:16:58
> こういう記述も許されるんですね。
というか配列リテラルで直接要素参照する意味はまずない
むしろ嫌がらせに近い
163:デフォルトの名無しさん
10/02/03 17:28:30
スレリンク(tech板)
661 デフォルトの名無しさん [sage] 2009/09/04(金) 08:12:26 ID: Be:
Windows用Rubyは MinGW版が速いと聞いてRuby on Railsで試してみた - yuum3のお仕事日記
URLリンク(d.hatena.ne.jp)
URLリンク(antoniocangiano.com)
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が遅すぎる件 - 那由多屋 開発日誌
URLリンク(d.hatena.ne.jp)
L'eclat des jours(2009-04-22)
URLリンク(www.artonx.org)
(コメ欄)
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:デフォルトの名無しさん
10/02/03 18:15:37
>>158
どうもありがとうございました
このサンプルで動いている環境もあったので混乱していましたが
使っているバージョンが違っておりました
165:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/03 22:14:09
open('output', 'w') do |out|
...
end
の中に最後の4行をまるごと入れて、puts を out.puts に。
167:デフォルトの名無しさん
10/02/03 22:35:55
>>166
ありがとうございます。出来ました。
しかし思ったような結果ではなかったので
上記のプログラムでは駄目なのかもしれません。
引き続き、ご相談をお願いします。
ファイル内に
<dt><a href=”” tags=””></dt>
<dd>テキスト</dd>
が繰り返されています。
タグが一致したら、上記全体を抽出したいのですが
これはhpricotで出来るのでしょうか?
それともxml パーサーのような物が必要なのでしょうか?
168:デフォルトの名無しさん
10/02/03 22:39:45
>>169と>>201を後出し条件のために予約
169:デフォルトの名無しさん
10/02/03 22:42:32
Oh翼くんロングパス
>>167
本当にしたいことを言え
170:デフォルトの名無しさん
10/02/03 22:47:08
dt = a.parent
dd = dt.next_sibling
つーかdtとddが出てこないのはputsをout.putsに変えなくても分かるはずだが
171:デフォルトの名無しさん
10/02/03 22:47:53
>>169
> 本当にしたいことを言え
うーん、質問が意味不明ですか?
はてなブックマークのデータで
<dt><a href=”何か” tags=”microsoft”></dt>
<dd>コメント</dd>
の部分を抽出したいという事です。
>>165>>166だと
<a href=”何か” tags=”microsoft”>しか抽出できません。
dtから/ddまでを抽出したいのです。
お願いします。
172:デフォルトの名無しさん
10/02/03 22:53:52
>>170
出来ました。
初めてのrubyなので、テンパってしまいました。
ありがとうございました。
173:172
10/02/04 00:10:07
すみません。まだお願いします。
tagsが「microsoft」のような英字だと上手く行ったのですが
「これはすごい」のような日本語(全角)だと上手くいきません。
$KCODEをSJISに設定してみたりしたのですが・・・どうすれば良いのでしょう?
174:デフォルトの名無しさん
10/02/04 00:16:58
悪いこと言わないから一通りRubyの解説なりなんなりを読め
おおむね全部書いてある
175:173
10/02/04 00:29:01
Ruby 逆引きハンドブック(るびきち)
を眺めているんですけど
レベルが合ってないのでしょうか?
176:デフォルトの名無しさん
10/02/04 00:35:15
たのしいRuby → Railsレシピブック → るびきち
と読みましたが、Railsが全くわかりかねます
177:デフォルトの名無しさん
10/02/04 00:42:02
レシピブックやらクックブックやらは基本ができてないと
小手先だけになって変更できなくなって詰まるのに
>>176
Railsは実際に作るものがないと知識としては全く覚えきれない
178:デフォルトの名無しさん
10/02/04 00:42:06
あらら、ちょっとレベルが上過ぎでしたか。
申し訳ない。
たのしいRubyを購入したいと思います。
・・・最後におまけで
>>173にお答えいただけると、ありがたいです。
179:デフォルトの名無しさん
10/02/04 00:46:07
$KCODEはそのスクリプトに解釈させたい日本語文字エンコーディングを指定する
その指定に従って、正規表現などの「バイト列と文字区切りの関係」を調整する
つまり、この場合の日本語はブックマークHTMLファイル中の日本語だけだから、
HTMLファイルの文字エンコーディングを指定すればいい
はてなブックマークのブックマーク形式のエクスポートHTMLファイルは UTF-8 だから、
$KCODE='u' とするか、 ruby -Ku で起動する
180:デフォルトの名無しさん
10/02/04 01:06:36
>>179
> $KCODE='u' とするか、 ruby -Ku で起動する
rubyのプログラムの方も、BOM無しのUTF-8で保存したら
上手くいきました。
基本から勉強したいと思います。ありがとうございました。
181:149
10/02/04 02:11:00
>>156-152
サンクス
環境書き忘れた。
大分前からアップデート暇なくてこのまま使っているから、今のは直っているのかもしれんな。
linuxだとというかdebian系だとaptとかでアップデート楽だからいいけど、
Windowsだとアップデートが面倒でかなわん。
ActiveScriptRubyで入れたものをmingwとかで上書きしちゃっていいものか
mingwでgemとかも込みのパッケージってあったけ?
182:149
10/02/04 02:11:46
ごめん、環境書かずに送信したwww
ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
自分で言うのも何だがふるっ
183:デフォルトの名無しさん
10/02/04 02:16:49
うちの cygwin
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]
184:デフォルトの名無しさん
10/02/04 02:22:46
>>176-178
Railsやりたいんなら、今のRails入門のオススメは Head First Railsということになってる(でいいよね?)
O'Reilly Japan - Head First Rails
URLリンク(www.oreilly.co.jp)
URLリンク(amazon.co.jp)
Head FirstがRuby入門者向けに書いてあるかはしらんが、
その前にRuby入門の段階ならRailsの前にRubyの入門本をもっと読むべきだと思われるw
185:149
10/02/04 02:29:16
>>183
手持ちのcygwin環境も同じバージョンだった。
gem入れてない環境だからかわからんが、cygwinで待機状態だと全然軽いほぼ0%。
csrss.exeも出てこないわ
>>156
とりあえず、簡単な方のReadlineのバージョン上げてみる
186:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/04 13:37:36
>>186
nokogiri使え
188:デフォルトの名無しさん
10/02/04 13:38:08
↑
ワロタ
189:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/04 13:44:11
>>189
Hpricot は本来の作者がメンテナンスを諦めた
Nokogiri 使うよろし
どうしても Hpricot を使わないといけないのなら
gem でバイナリが用意されてる mswin32 の Ruby をインストールするか
あるいは mingw32 Ruby においてコンパイル可能にする mingw32 Ruby の DevKit を入れれ
URLリンク(d.hatena.ne.jp)
191:デフォルトの名無しさん
10/02/04 13:47:13
RubyとしてActiveScriptRubyをインストールするのがスレ的にいちばん簡単だと思う
192:デフォルトの名無しさん
10/02/04 14:00:55
>>190 ありがとうございます!
諦めてnokogiri使わせて頂きます。
193:デフォルトの名無しさん
10/02/04 14:22:47
OneClick Installer の被害者の方々が続々と
194:デフォルトの名無しさん
10/02/04 16:44:00
なんでmswinのバイナリがあるのにコンパイルしようとしてんだろ
前も思ったけどrubygemsってそのへんの判別どうなってんの?
195:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/04 17:26:42
>>195
ありがとう、雛形作成ツール or Rakefile手書きした人の責任ってことか
Rakeでis_windows?みたいなの用意していてくれれば解決だった気がする
197:デフォルトの名無しさん
10/02/04 17:56:02
win で判定しちゃだめだ。
Darwin (= MacOSX) が引っかかる。
198:デフォルトの名無しさん
10/02/04 17:59:08
プラットフォームの判別
URLリンク(jp.rubyist.net)
さすがに bccwin は外してもいいような気がする。
199:デフォルトの名無しさん
10/02/04 18:07:35
っていうかこの用途での RUBY_PLATFORM の利用はいいかげんやめたほうが…
p の表示結果を横取りして解析するようなむず痒さを感じる
200:デフォルトの名無しさん
10/02/04 18:51:01
ruby -rdebug hoge.rb
でデバッグするとき、gdbの--tty=みたいなことをしたいのですが、どうすればいいでしょうか?
デバッガへの入力(pやbreak等)と出力(pの結果等)はそのままrubyを起動した端末で、
hoge.rbの標準入出力は別の端末につなぎたいのです。
201:デフォルトの名無しさん
10/02/04 19:20:47
>>199
じゃあ何使ったらいいの
バイナリの判定ならCONFIG["RUBY_SO_NAME"] とか?
202:デフォルトの名無しさん
10/02/04 21:00:16
[1,2,3].map(&:to_s)
=> ["1", "2", "3"]
何が起きてる?リファレンスを嘗め回したがさっぱり
203:デフォルトの名無しさん
10/02/04 21:09:45
&の右側がProcオブジェクトでないときはto_procを呼ぶ。
:fooというシンボルのto_procはcall xするとx.fooの意味になるprocを返す。
例
> :to_s.to_proc.call 1
=> "1"
これでわかる?
204:デフォルトの名無しさん
10/02/04 21:11:02
あー、どこを見ればそれがわかるのか、というのは俺も教えてほしい。
205:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/04 21:17:23
>>204
URLリンク(doc.okkez.net)
あとは、リテラルを知っておくと調べたいことが明確になるかな。
ところで上のマニュアルで検索すると、結果が出るまで数十秒くらい待たされるんだが、どうなってんの?
特に検索に失敗した場合の結果報告が遅すぎる。
207:デフォルトの名無しさん
10/02/04 22:10:58
>>203
.call 1 がどこから来るのか分からん
208:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/04 23:30:59
>206
ごめん。
全てのデータを読み込んでるから遅い。
チューニングしたいけど、まとまった時間がとれない。
210:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/05 00:43:06
98%くらいは>>205のブロックつきメソッドの短縮表記目的だけどな
正確な動作を覚えておくと便利なことはあるだろうね
212:デフォルトの名無しさん
10/02/05 02:11:15
わかりにくいのはSymbol#to_procのほうじゃないか
213:デフォルトの名無しさん
10/02/05 02:24:19
わかりにくいというか、ぶっちゃけわけがわからないよね
214:デフォルトの名無しさん
10/02/05 04:33:05
sort_by(&:length) とか便利
215:デフォルトの名無しさん
10/02/05 09:16:02
どうせならEnumerable#reduce/injectみたいに
&無しで実現してもらいたかった昨日
216:デフォルトの名無しさん
10/02/05 09:19:42
>>213
>>205だと理解しているうちはいいけどな
SymbolかProcになるって時点で変だ
目を覚ませって感じではある
217:デフォルトの名無しさん
10/02/05 09:24:14
簡潔さを追求しすぎてパァール化してるな
218:デフォルトの名無しさん
10/02/05 09:34:51
イテレータなんて古代言語使われると混乱しちゃう
それと>>202は&で:to_sをブロックとして扱おうとしてるだけだから
別にブロックなしというわけでなくEnumeratorも関係なくね
219:デフォルトの名無しさん
10/02/05 09:35:36
ところで>>206で配布してるchmファイルってみんな見れてるのか?
開くとき他のchmファイルと違って「セキュリティの警告」がでるし
開いても本文カラムが「取り消されたアクション」か
「ページを表示できません」のいずれかにしかならん
以前は URLリンク(elbereth-hp.hp.infoseek.co.jp)
のchmファイルを使っていたが問題はなかった
WindosXP SP3 なんだがどうしたものか
220:デフォルトの名無しさん
10/02/05 09:44:36
>219
ごめん。Windows持ってないんで検証出来ないんだ。
なんかチェックボックス外したら使えるという話は聞いたことがある。
手元のDebianではちゃんと見れた。
XPのSP3以降?ではそういう警告が出るようになったらしい。
Vistaで警告が出てたときはチェックボックスを外したら使えた。
221:220
10/02/05 09:46:14
220で書いてるVistaはたまたまそこにいた人が使ってたやつね。
222:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/05 11:14:26
>チェックボックス
もしかしてIEのセキュリティレベルを落とさないと見れない仕様か
デフォルトの状態でリファレンスマニュアルが読めないとか
ここまでくるとドザーに対する嫌がらせに近いな
224:デフォルトの名無しさん
10/02/05 11:44:27
>>223
嫌がらせはそのへんにしとけ
よく知らないけどセキュリティ絡みならそのchmのプロパティで「ブロックの解除」を試してみたら?
225:デフォルトの名無しさん
10/02/05 11:48:33
chm 自体がそういうものになった
なんでもかんでも Windows 叩いてオナニーしてる厨には理解できんだろうが
URLリンク(support.microsoft.com)
> これは正常な動作であり、セキュリティ更新プログラム 896358 および
> Windows Server 2003 SP1 のインストールの結果として予期されている動作です。
226:デフォルトの名無しさん
10/02/05 12:13:05
>>219
Windows開発者にはかなり既知な問題なのですが、
chmファイル単体をそのままネットから落とすと、セキュリティがらみのフラグがつくんです。
exeファイル単体をネットから落とした時もいちいち確認してくるよね?
>>224 もいってるけど解決策はchmのプロパティでブロックを解除してやる
227:デフォルトの名無しさん
10/02/05 12:25:52
chm自体が規格として取り残されたというか…
そもそも表示にIE使う時点で将来的に規定事項だったその時がやって来ただけというか…
228:デフォルトの名無しさん
10/02/05 12:29:03
配布する人が
「XPやVistaや7の人は俺を信用してチェックボックス外してね」
と警告するしかないな
229:デフォルトの名無しさん
10/02/05 14:46:34
zipped htmlでくれ
230:デフォルトの名無しさん
10/02/05 14:50:20
全文検索が問題なんだよね
標準で検索フレームがつくのがchmの大きな利点
それさえ別途便利に使えれば素のHTMLの配布で問題ない
というかchmの検索はもうちょっと賢くなって欲しい
というか一般語の検索に特化されててプログラミング用語やトークンの検索に向かねー
231:デフォルトの名無しさん
10/02/05 15:38:21
>>224, >>225, >>226
ありがとう
また一つ賢くなった
232:デフォルトの名無しさん
10/02/05 16:18:43
スレリンク(tech板)
【ActiveScript】RubyをWindowsで使うスレ【GUI】
233:デフォルトの名無しさん
10/02/05 19:23:17
:to_i.to_procがproc{|x| x.to_i}になるってのは
マニュアルのどこに書いてあるの?
234:デフォルトの名無しさん
10/02/05 19:50:56
>>233
URLリンク(doc.okkez.net)
> self に対応する Proc オブジェクトを返します。
「self に対応する Proc オブジェクト」ってなんじゃらほという疑問の答はむろん書いてない
Ruby のマニュアルなんてそんなもんだ
235:デフォルトの名無しさん
10/02/05 20:16:44
>>234
そこはすでに読んだ~よ
236:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/05 20:43:18
selfで示されるメソッドを呼ぶProcを返す。
自身で示されるメソッドを呼ぶProcを返す。
ならまだ分かるか。さあるりまにフィードバックしよう。
238:デフォルトの名無しさん
10/02/05 20:51:32
>>236
利用法しか書いてないのがそれっぽいといえばそれっぽいな
Cレベルのコメントでもそれなのか
239:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/05 20:55:08
いや一応、これで必要十分なコメントではあると思うぞ
Symbolクラスのメソッドとして単体で吟味したときわけわかめになるだけで
それこそ
:mes.to_proc #=> proc{|o| o.mes}
と一言書いてもらえてれば納得度が上がったと思う
241:デフォルトの名無しさん
10/02/05 21:05:08
lines.collect(&:split/,/)とかやりたい
242:デフォルトの名無しさん
10/02/05 21:18:45
[1,2,3].map(&:to_s.to_proc)
から
[1,2,3].map(&Proc.new {|obj| obj.to_s })
が腑に落ちない
243:デフォルトの名無しさん
10/02/05 21:27:11
>>242
>>240
244:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/05 22:05:51
ん?
:mes.to_proc #=> proc{|o| o.mes}
が腑に落ちないと言ってるんだが?
246:デフォルトの名無しさん
10/02/05 22:08:54
「Symbol#to_procがそういうprocを返すように定義されている」
247:デフォルトの名無しさん
10/02/05 22:09:04
そりゃ失礼した。
どう腑に落ちないのかはよくわからんが。
248:デフォルトの名無しさん
10/02/05 22:14:26
仕様です→なんでそんな仕様?
ってことでしょ
>>245はこんなとこじゃなくMLででも聞け
249:デフォルトの名無しさん
10/02/05 22:18:12
なんでこういう仕様かっていうと[1,2,3].map(&:to_s)って書くため
気持ち悪いのは元々Railsだから仕方ない
250:デフォルトの名無しさん
10/02/05 22:26:57
名前
名前、ばかにする
ばかにする、あんた、名前
1だけ・・・
出会い頭に、おたんこなす宣告から、あんたばかぁ、から丁寧にばかにするまで
レパートリーに富んだ構文糖に乾杯 >> 244
251:デフォルトの名無しさん
10/02/05 22:27:02
obj.methodsでシンボルの配列が帰ってくるから
関連がないということもない
と言えないこともない
252:デフォルトの名無しさん
10/02/05 22:58:44
いや、どこにそういう仕様だと書いてあるのかってことなんだが
253:デフォルトの名無しさん
10/02/06 01:21:49
AがnilだったらAにxを代入
A = x unless A
これより簡潔な書き方ってあります?
254:デフォルトの名無しさん
10/02/06 01:25:43
おま、それ x が真だったら短絡して A = x と同じ意味になっちゃうぞ
255:デフォルトの名無しさん
10/02/06 01:28:33
あれ?そうなっちゃいます?
rubyってifとかunlessを倒置して後ろに置いてるのをよく見ますけど。
256:デフォルトの名無しさん
10/02/06 01:41:21
弁解の余地もございません
>>254は撤回した上で吊ってきます
unless修飾子なんか嫌いだグスン
257:デフォルトの名無しさん
10/02/06 02:05:03
>>253
a = a or x
a ||= x
258:デフォルトの名無しさん
10/02/06 02:54:23
>>137
了解です。できれば Ruby/GTK2 から扱いやすいプロッターがあるといいのですがなかなか見つけられません。
259:デフォルトの名無しさん
10/02/06 03:02:50
>>257はfalseでも動作するので注意
まあ元のunless自体同じような動作だが
260:デフォルトの名無しさん
10/02/06 07:57:34
>>230
インデックスの仕方が微妙なせいで、記号とかアンダーバー含むと全然検索できないw
chm便利なんだけど、検索は本当に困る
261:デフォルトの名無しさん
10/02/06 10:17:38
>>253 に関連して
a or next
a or raise
みたいなイディオム?をたまに見かける
262:デフォルトの名無しさん
10/02/06 10:30:03
read or die
263:デフォルトの名無しさん
10/02/06 10:31:17
>>254
意味がわからん。
>>253が間違えてるとは思えない自分に誰か救済の手を
264:デフォルトの名無しさん
10/02/06 10:33:27
>>263をさらに撤回する ほんとうにすまない
265:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/06 13:57:09
またミスったああああ
a = a.nil? && x
これダメ絶対、素直に後置してください・・・
267:デフォルトの名無しさん
10/02/06 14:11:35
gdgd
268:デフォルトの名無しさん
10/02/06 14:12:26
ネスティングを少なくする書き方をおしえて下さい。
269:デフォルトの名無しさん
10/02/06 14:17:08
>>268
Rubyのネストは怖くない
ブロックは大いに使え
が、まあ、self を返すブロックつきメソッドとか map みたいなコレクション変更メソッドとか
そういうのを1行でメソッドチェインするようになると結構見栄えはよくなるよ
メソッドチェインするときはブロックは { } で書いてね
end のあとにドットつけられると動作上問題なくても見栄え的にぐんにゃり
270:デフォルトの名無しさん
10/02/06 14:23:37
少し長くなった(ネストした)と思ったらさっさと別メソッドに分けるとか
簡潔なメソッド名を考えると、コメント代わりになるし動作の見直しにもなるのでおすすめ
271:デフォルトの名無しさん
10/02/06 14:25:08
メソッドが10行超えたらほぼ確実にどこかおかしいな
272:デフォルトの名無しさん
10/02/06 14:27:46
>271
kwsk
273:デフォルトの名無しさん
10/02/06 14:40:56
5行越えたらFワードって聞いたぞ
外人さんの過激派はさすがに煽り方が違う
274:デフォルトの名無しさん
10/02/06 14:43:07
まあ、メソッド多いほうがテストしやすいしな
とか言ってるとがっつりプライベートメソッドにされてたりする
気持ちはわかるが
275:デフォルトの名無しさん
10/02/06 16:33:30
・メソッドが10行を超えることは望ましくない
・1行が80byteを超えることは望ましくない
はRubyのコーディングルールとしてよく採用されている
276:デフォルトの名無しさん
10/02/06 16:44:58
1行80bytesは理由があるからともかく
メソッド10行制限ってのはカルト宗教の世界だな
277:デフォルトの名無しさん
10/02/06 16:49:22
> 1行80bytesは理由があるから
ねえよ
そっちのほうがただの宗教だ
悔しかったら「lessやgrepは色づけしないから色付けに頼った視覚効果のスクリプトを書くべきではない」レベルまで言え
278:デフォルトの名無しさん
10/02/06 16:52:33
10行ルールってまじ?
標準ライブラリのほとんどがボツってこと貝?
279:デフォルトの名無しさん
10/02/06 16:53:24
メソッドが長いとリフレクションしにくい
280:デフォルトの名無しさん
10/02/06 16:57:01
>>277
あ、どっかでそれ読んだ
「お前の環境がヘボいだけだろ」とか心の中で突っ込んだ覚えがある
行数は、本来は行数そのものが問題じゃないよね
短い定義の適切なメソッドの作成を目指すべきというのが本論
その現実的な目安として、やっぱ5行…は過激派だが、10行くらいがポイントだと思うなあ
これより長かったら分割手段を本気で考えたほうがいいかと
281:デフォルトの名無しさん
10/02/06 16:58:58
>>278
まあ基本的には
めちゃくちゃベーシックな添付クラスだからごてっとするのも致し方ない面はあるが、
それでももうちょいこまごまとしててもいいとは思う
特にユーティリティ的なクラス
282:デフォルトの名無しさん
10/02/06 17:03:26
はいはい、なんでもサブルーチンサブルーチン(笑)
どんどん分割しよう。
283:デフォルトの名無しさん
10/02/06 17:07:32
空行だらけのBlogみたいで読みにくいからやめてくらさい
284:デフォルトの名無しさん
10/02/06 17:18:27
あれはblogシステムでは「段落」としてるものを、ユーザーが「物理行」に使ってるためだろ
285:デフォルトの名無しさん
10/02/06 17:25:41
横書き日本語なのに段落を前後空間空けとしてレンダリングするブラウザがアホなだけ
286:デフォルトの名無しさん
10/02/06 17:28:32
>>277
べつに誰も悔しくないと思うけどw
287:デフォルトの名無しさん
10/02/07 09:03:47
>>275-278
Railsのプラグインのソースを読む機械が多いが、
ちゃんと作ってるプラグインはモジュール化しまくり、メソッド分割しまくりだな。
なんでこんなところまでちゃんとモジュール化しとんねん!て思うほど
288:デフォルトの名無しさん
10/02/07 09:49:17
>>275-276
漏れは関数は25行以内(最悪でも50行程度)って教えられた
80x25のコンソールで一画面か、印刷して一ページのサイズ
289:デフォルトの名無しさん
10/02/07 09:53:55
>>277
それがあるんだよ
たまに
def hoge() p 123 end
みたいに改行せずにエディタの80文字の折り返しだけで次の行へいったつもりでソース書く馬鹿がいるんだよ
(っていうか昔の糞エディタだと2行に分かれていたものが1行に繋がってしまうケースとか良くあったんだ)
290:デフォルトの名無しさん
10/02/07 09:56:36
10行君は初心者。
291:デフォルトの名無しさん
10/02/07 09:58:11
>>284
いや、実態は携帯で長ったらしくスクロールさせてページ切り替わると
リロードが増えてアクセス数も増えるみたいな都市伝説があるらしい
仮に100歩ゆずってそれでリロードされるのが事実だとしても
そんな方法でアクセス数増やしてなにが嬉しいのかと
292:デフォルトの名無しさん
10/02/07 09:59:30
>>289
emacsですねわかります
293:デフォルトの名無しさん
10/02/07 10:00:10
>>288
それは従来のプログラミング言語の話だろ
わざわざRubyにそのまま持ち込む必要はない
294:デフォルトの名無しさん
10/02/07 10:01:16
Reekっていうコードチェッカを興味本位で使ってみたが
メソッド定義が10行以上だと「長い」と指摘してくるな
295:デフォルトの名無しさん
10/02/07 10:02:31
あんまり長くなるとインデントも深くなってくることが多いからな
すっきりさせるために短く書くのは悪いことじゃない罠
296:デフォルトの名無しさん
10/02/07 10:04:24
>>292
一太郎だろ
297:デフォルトの名無しさん
10/02/07 10:05:50
>>291
アメーバだっけ?芸能人ランキングのあるやつ
改行増やしてPV増やしてランキングの上を目指すんだって
本当かどうかは知らない
298:デフォルトの名無しさん
10/02/07 10:09:36
資源の無駄遣いだなぁ
エコに反してるから改行撲滅キャンペーンした方がいいぞ
299:デフォルトの名無しさん
10/02/07 10:10:03
ああNON STYLEの石田だっけ?
300:デフォルトの名無しさん
10/02/07 10:10:45
とりあえず、お前らの権限で fileutils.rb とか net/imap.rb に
10行ルール適用してもらってよ。
301:デフォルトの名無しさん
10/02/07 10:32:50
>>291 >>297
あれはPVアップ界王拳の一種で、ケータイで見たときに複数のページに分割されるのでPVがあがるってやつ
芸能人もそうだけおdPV多いとアメブロはお金もらえる仕組みがある
最近PCの情報サイトでもページ分割するのちらほら見るよね、携帯向けじゃなくても
あれPV上げるため
302:デフォルトの名無しさん
10/02/07 10:44:45
>>293
言語の話じゃなくて環境の話じゃね?
303:デフォルトの名無しさん
10/02/07 10:51:12
>>294
それ面白そうだなw 使ってみるか
304:デフォルトの名無しさん
10/02/07 11:12:10
>>303
やめとけ
警告多すぎて森に隠れる木の状態になるぞ
igonoreの指定も面倒だし
305:デフォルトの名無しさん
10/02/07 11:14:38
何事も原理主義はよくないと思います
306:デフォルトの名無しさん
10/02/07 11:16:32
めちゃくちゃ実利だと思うが…
307:デフォルトの名無しさん
10/02/07 11:26:24
定義済みのクラス特異メソッドをprotectedにするのってどうすればいいんでせう?
class DB
protected
self.new
super
end
end
してもクラス外で普通にDB.newできてしまったorz
308:デフォルトの名無しさん
10/02/07 11:28:00
protectedにしてどうしたいの?
309:デフォルトの名無しさん
10/02/07 11:31:07
具体的には、DBのインスタンスを作成する手段をDB.openに限定したいんです。
db.closeするのを忘れたくないんで。
310:307
10/02/07 11:40:07
class Hoge
private
def self.hoge
puts 'hoge'
end
end
Hoge.hoge
でも動いちゃいますね……
そもそもクラスメソッドをprivateにするのってどうすりゃいいんでしたっけ?
311:デフォルトの名無しさん
10/02/07 11:40:33
「DBクラスいじるならopen使え」とマニュアルに大きな赤い字で書いておけ
それとブロックつきopenの提供で充分
312:307
10/02/07 11:42:15
URLリンク(www.gesource.jp)
吊ってきたいと思います。
スレ汚しすいませんでした。
313:デフォルトの名無しさん
10/02/07 11:48:31
>>258
素直にgnuplot使うのが手っ取り早い
URLリンク(rgplot.rubyforge.org)
314:デフォルトの名無しさん
10/02/07 12:24:44
rubyのprivateにはいつも混乱させられる
うまい覚え方はないものか
315:デフォルトの名無しさん
10/02/07 12:44:35
俺も覚えられてない・・・
privateがC++なんかのprotected相当なんだっけ?
316:デフォルトの名無しさん
10/02/07 13:01:40
rubyのprivateは、
「任意のレシーバに対する呼び出しが出来ない」
関数っぽく書く呼び出し方のみが可能ってことね。
317:デフォルトの名無しさん
10/02/07 13:06:54
「RubyでC++やJava再現しようぜ時代」の負の遺産
こんなオモチャ機能は1.9で無くなってもよかった
318:デフォルトの名無しさん
10/02/07 13:07:32
privateよりprotectedのほうが理解されていないと思う。
319:デフォルトの名無しさん
10/02/07 13:17:06
>>317
少なくとも名称は変えるべきだったよなあ
320:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/07 13:29:10
ifの条件文のレイアウトのことなのですが、改行が問題になるケースってあるでしょうか?
if name == "foo" ||
name == "bar"
#do something
end
()や:が必須の言語ですと気分的にも安心なのですが、
Rubyではあまり改行してるの見ない気もします。
一応、上のコードは問題ちゃんと判定されているし、
条件文内の代入文もきちんと評価されていますが、どうも不安です。
条件文の後にthenを入れておけば確実なのかなとも思うのですが・・・
322:デフォルトの名無しさん
10/02/07 13:30:37
マニュアルくらいは読め
Rubyのprivateは単に見栄え上の判断しかしない
323:デフォルトの名無しさん
10/02/07 13:33:43
>>321
カッコ書いて条件部分を式にすればいいじゃん
時々、カッコ書いたら死ぬ病の人が紛れ込んでるんだけど、そういう人は Ruby 使ったら駄目よ
324:320
10/02/07 13:36:27
こんなん書いている間にマニュアル読めよ、試せよという感じですね、すいません。
chinko = Chinko.new
chinko.manko
は
private method `manko' called for #<Chinko:0xxxxxxx> (NoMethodError)
で駄目ですね。
tansyou.send :manko
みたいにsend経由だとOKなんですね。
325:デフォルトの名無しさん
10/02/07 13:37:53
質問させて下さい。
たまにブログなどで見かけるように、
puts 1 + 1 # => 2
のように、出力結果をコメントで文の右に追加してくれるスクリプトがあったと思うのですが、
どなたか御存知ありませんか?
326:325
10/02/07 13:41:06
>>325 ですが、自己解決しました。
xmpfilter でした。
「ruby 実行結果 コメント」で検索したらでてきました。
xmpfilter で Ruby のコードに実行結果をコメントに表示 | すぐに忘れる脳みそのためのメモ
URLリンク(jutememo.blogspot.com)
eigenclass - xmpfilter: automagic Test::Unit assertions/RSpec expectations and code annotations
URLリンク(eigenclass.org)
327:デフォルトの名無しさん
10/02/07 15:13:27
クロージャとプロシージャの違いがわからないのですが…
sortメソッドを使うときに、a.sort{|a,b|a<=>b}とか書きますよね。この場合はどちら?
328:デフォルトの名無しさん
10/02/07 15:18:41
そんな小難しい外の用語を使わずに、ブロック引数、でよい。
329:デフォルトの名無しさん
10/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)
330:329
10/02/07 15:41:57
MethodインスタンスではなくUnboundMethodインスタンスか
331:デフォルトの名無しさん
10/02/07 16:02:44
説明は
「Rubyではコンテキスト情報の保存にBindingクラスのオブジェクトを用いる」
でいいじゃん
それ使えばコンテキスト依存の処理になるからおおむねクロージャだ
使わない(使わなくてすむ)ならただのプロシージャ(可搬性のある処理のかたまり)
332:デフォルトの名無しさん
10/02/08 21:28:39
2年前に書いたスクリプトを流したら90秒もかかった
当時は14秒で終えてたのに
333:デフォルトの名無しさん
10/02/08 21:35:39
いつどこでどのように流されたんですか
334:デフォルトの名無しさん
10/02/08 23:54:49
実行することを流すと言います。
335:デフォルトの名無しさん
10/02/09 00:08:40
スパゲティコードをまるでソウメンのように流すのですね
336:デフォルトの名無しさん
10/02/09 00:24:48
そうです。まさにスパゲティです。
337:デフォルトの名無しさん
10/02/09 01:23:06
ためしにVMware上のUbuntuで動かしたら2.4秒だった
338:デフォルトの名無しさん
10/02/09 07:43:24
IronRuby 6.4秒
339:デフォルトの名無しさん
10/02/09 18:16:30
Windows版Ruby 1.8 -> 1.9で
テキストモードでのファイル読み込みが10倍ほど遅くなってるのでそのせいか?
読み込み時のエンコーディングをASCII-8BITとかにしてもさほど変わらんので
universal newlineとかいう改行コードの差異を吸収してLFに変換するのが遅いのだろうか
バイナリモードで読んでからforce_encodingすると1.8と同程度になるよ
自分は趣味程度にしか使ってないので困らないけど
巨大なログを処理する人とかだと、地味にいやな性能劣化なんだろうな
340:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/09 18:35:14
>>339
migw32使え
342:デフォルトの名無しさん
10/02/09 18:59:11
10倍ですか...
へんに差異を吸収しようとせずエンコーディング毎に処理して欲しいもんだ
コンパイラが古いとはいえ、まさか仮想環境や.NETに負けるとは思わなかった。
↑↑↑はパズル問題を解くスクリプトで読み込みはほんの少し
書き出しは途中経過も出してるんでかなり多い
1.8.6: 220"、1.9.0: 14"、1.9.1: 90"
343:デフォルトの名無しさん
10/02/09 19:06:59
スクリプト foo が多重起動しないようにするにはどうやればいいですか。
後から起動した方をすぐに殺したいです。
344:デフォルトの名無しさん
10/02/09 19:23:33
ファイルを利用して排他的にするとか。
あまり好きじゃないけど。
345:デフォルトの名無しさん
10/02/09 19:27:46
ロックファイルがなかったらロックファイルを作る
ロックファイルがあったら「起動中です」と言ってexit(1)する
スクリプト終了時にロックファイルを消去する
こんなのがいちばん簡単だと思う
強制終了でロックファイル消去プロセスを飛ばすと使用者層によっては悲惨だけど
346:デフォルトの名無しさん
10/02/09 19:34:15
migw32どこ? 古いのしか見つからない
347:デフォルトの名無しさん
10/02/09 19:44:48
mswin32(ActiveScriptRuby、gem対応の標準)
URLリンク(www.artonx.org)
mingw32(RubyInstaller/OneClickInstaller、gemの古パッケージはバイナリがなくDevelopment Kitが要ることも)
URLリンク(rubyinstaller.org)
とりあえずp0 の1.9.1 は産業廃棄物なので使って文句言うの禁止で
348:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/09 23:03:02
まねしてもいいよ。
unless [
exp1,
exp2,
exp3,
exp4,
...
].include? false
puts "true!"
end
350:デフォルトの名無しさん
10/02/09 23:22:03
>>349
釣りだよな?
Enumerable#all?
Enumerable#any?
と同じ結果を望んでるなんてことないよな?
351:sage
10/02/10 00:13:38
f=lambda{|x,y| x+y}
["sa","ka","wa"].map(&f.call(_,"by"))
みたいに、第二変数の束縛を先にやってから
procをつくりたいのですが、どうすればいいのでしょう?
map{...}はなしで。
352:デフォルトの名無しさん
10/02/10 00:18:31
カリー化したいんでしょ?
おれそれ諦めた。
353:デフォルトの名無しさん
10/02/10 00:26:48
こう?
f=lambda{|x,y| x+y}
p ["sa","ka","wa"].map(&f.curry.call("by"))
354:sage
10/02/10 00:50:33
お!できてる。
順番は逆だったけど、あとは適当に。
355:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/10 08:30:40
>>341
mingw版入れろはわかるけど面倒だからパッケージ作ってくれ頼む。RubyGemsとか入っているヤツ
Windowsはaptとかねーんだよ
外人でもいいけど、こういうのはどこに頼めばいいの?
ActiveScriptRubyに上書きしてもいいのかな
>>347
OneClickInstllerも1.8系は1.8.6だから古いよね
357:デフォルトの名無しさん
10/02/10 08:32:02
しかし、RubyInstallerってmingw32版だったのね
そして、1.8.7版が来てる!!!サンクス
問題はアップデートだな。OneClickInstaller時にアップデートしようとしたらアンインストールしろ!とか言われたからな・・・
358:デフォルトの名無しさん
10/02/10 08:59:35
Ruby Installer はかなり昔から mingw32 だった
>>356みたいな人間が発展を阻害する
359:デフォルトの名無しさん
10/02/10 09:26:54
阻害してるという意味ではどっちもどっちだと思う
まー、mingw32は正式版じゃないからな
正式版だけ使いたいという人にはお勧めしない
現状の正式版は中身のRubyが全然「安心の正式版」じゃないけどな
インストーラーが未熟でも中身のRubyがバグフィックスされてることのほうが重要だと思う
360:デフォルトの名無しさん
10/02/10 09:44:31
>>359
正式版ってなによ
どこにそんなことが書いてある
361:デフォルトの名無しさん
10/02/10 09:51:15
解読してみた
まー、(現在公開されている)mingw32(のRuby Installer)は(まだrc2で)正式版じゃないからな
(rcやベータではない)正式版(のインストーラー)だけ使いたいという人には(まだ)お勧めしない
現状の(唯一の)正式版(として公開されてるOne Click Installer)は中身のRuby(の本体のパッチレベル)が(古くて)
全然「安心の正式版」(と言えるような組み合わせ)じゃないけどな
インストーラーが未熟でも中身のRubyがバグフィックスされてることのほうが重要だと思う
こんなんでどう
362:デフォルトの名無しさん
10/02/10 10:03:30
わかりやすい
363:デフォルトの名無しさん
10/02/10 13:07:09
>>361
thanxよくわかったw
364:デフォルトの名無しさん
10/02/10 18:00:13
MSVC版では出来なくてmingw版だけで動く機能
あるいはその逆で
どんなのがありますか
365:デフォルトの名無しさん
10/02/10 18:06:00
そーゆーもんはない
機能で分かれてるわけじゃない
わかんなかったら mswin32 である ActiveScriptRuby 使っとけ
366:デフォルトの名無しさん
10/02/10 19:23:29
インストーラーとしてはmingwよりone click installerの方が正式版のため信頼できるが、
中身のRuby自体はmingwの方が新しい
って理解でいいの?
367:デフォルトの名無しさん
10/02/10 19:28:38
thread とか lock とかは mingw の方が信頼性があるような気がする
368:デフォルトの名無しさん
10/02/10 19:31:35
>>367
GIL使ってる限り信頼性は変わらない
369:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/10 19:58:39
あああ、なんかわけわからないことに
mswin32 版を使う場合は ActiveScriptRuby のほうインストールしろ
OneClickInstaller 使って数年前の Ruby をわざわざいまさらインストールする必要もない
■ とにかく迷いたくない普通の人 … ActiveScriptRuby
面倒がない mswin32 版のみ提供、ActiveTcl を別途入れると tcl でウィンドウも描けるぞ(要Tcl言語知識)
URLリンク(arton.hp.infoseek.co.jp)
1.9.1 を使いたい人は
URLリンク(www.artonx.org)
の「Ruby-1.9.1-p数字 Microsoft Installter Package」を使わせてもらえ
なに、自分のとこだけ妙に処理が遅い? 宝くじ並の外れ環境だからマシン買い換えろ
■ トラブっても自分で手直しする根性あるから遅くなる可能性ないほうがいい … RubyInstaller
古いコンパイラ製ではない mingw32 版の提供がメイン
URLリンク(rubyinstaller.org)
古いgemパッケージでWindows環境だとみなしてくれずにコンパイラが走って「make がない」と言われること有り
それを乗り越えるためにコンパイラ環境が入ってる「Development Kit」をインストールしておくのを推奨
URLリンク(wiki.github.com)
上記解説にもあるが、RubyInstallerの標準ディレクトリ構成の場合は上書きだけでよい(設定ファイル記述不要)
7zip でないとダウンロードしたファイルを展開できないので注意
スクリプト内での条件分岐で「mingw32」をWindowsとみなさないものが稀にあるので、それは手動で書き換える必要あり
371:デフォルトの名無しさん
10/02/10 20:08:43
長い
・ 初心者は URLリンク(www.artonx.org) の 1.8.7 だけ使え、トラブル起きたらここで聞け
でいいじゃん
372:デフォルトの名無しさん
10/02/10 20:16:28
てか本来は URLリンク(arton.hp.infoseek.co.jp) でいいんだよね
どうでもいいけどこのサイト meta charset と本文 HTML のエンコーディング食い違ってるぞ
見るたびに毎回エンコーディング指定やり直さないといかん