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 のエンコーディング食い違ってるぞ
見るたびに毎回エンコーディング指定やり直さないといかん
373:デフォルトの名無しさん
10/02/10 20:22:12
先生,「1.8が許されるのは小(ry」と煽ってもいいのはいつ頃ですか
374:デフォルトの名無しさん
10/02/10 20:22:56
1.8.6はともかく1.8.7は数年無理。
375:デフォルトの名無しさん
10/02/10 20:24:29
先生,JRubyが「Ruby 1.9 compatible now」になるのはいつ頃ですか
376:デフォルトの名無しさん
10/02/10 21:00:20
>>369-370
とりあえず Windows で Ruby がめちゃくちゃ面倒糞いということがわかりました
ほんとうにありがとうございました
377:デフォルトの名無しさん
10/02/10 21:01:13
>>375
見た感じ遠い未来に見える。
URLリンク(kenai.com)
378:デフォルトの名無しさん
10/02/10 21:02:47
>>372
それは作者がUTF-8の普及だか何かのためにわざとやってるらしいよ
379:デフォルトの名無しさん
10/02/10 21:08:40
>>377
そもそもなんでそんな時間かかるんだよ
何がネックになってるんだ
380:デフォルトの名無しさん
10/02/10 21:12:04
>>379
Java からも読めるように作ること
Java VM 上で単独で動く ruby インタプリタを作るだけなら
たぶんもっと早くにプロジェクト完了してるんじゃないかな
381:デフォルトの名無しさん
10/02/10 21:55:57
つか1.8.7って鬼車使えるの?
382:デフォルトの名無しさん
10/02/10 22:18:29
黙れカス
383:デフォルトの名無しさん
10/02/10 22:19:06
ごばく
384:デフォルトの名無しさん
10/02/10 22:26:55
>>381
gem install oniguruma
組み込みになるわけではないので制約はあるが。
URLリンク(oniguruma.rubyforge.org)
385:デフォルトの名無しさん
10/02/10 23:22:59
oniguruma を使うようなひとなら mingw とか入れてるような
気がします・・・知らずに joni 使ってるひとも嫌少ないだろう・・・
386:デフォルトの名無しさん
10/02/10 23:49:30
>>381 ってjrubyの話なん?
387:デフォルトの名無しさん
10/02/11 03:58:52
>>384
Requirements
* Oniguruma regular expression library (>= 4.x.x)
ってことは
自分でOnigurumaをコンパイルするか
バイナリをどこからともなく拾ってくる必要があるってことか
./configure
make
make install
で済む話ではあるが
388:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/11 23:22:03
下のようなループってrubyだとどう書きますか?
for (i = rect->lx, j = rect->ly; i <= rect->hx; i++) map[i][j] = TRUE;
390:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/11 23:26:15
>>389
jは変化してないけどいいの?
iだけならuptoでよいでしょう。
392:デフォルトの名無しさん
10/02/11 23:41:26
>>391
ありがとうございます!
これをrubyに書き換えて勉強中でした。
URLリンク(racanhack.sourceforge.jp)
393:デフォルトの名無しさん
10/02/11 23:52:42
>>388
URLリンク(redmine.ruby-lang.org)
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:デフォルトの名無しさん
10/02/11 23:56:35
Iconv::IllegalSequenceを見るのはもう飽きたお…
395:デフォルトの名無しさん
10/02/12 03:35:08
何か一揆にperl5の時代に戻った気がするなw
教祖様が日本語処理ぐらい最初からまともに組み込んでてくれれば。
396:デフォルトの名無しさん
10/02/12 06:07:00
iconvとnkfってどう違うの?
どう使い分けたらいいの?
397:デフォルトの名無しさん
10/02/12 08:13:29
nkfは
- shift_jis, euc-jp, iso-2022-jp, utf-8しか使えない。
- 改行コードの変換ができる。
- カタカナやアルファベットの全角半角変換ができる。
- base64のデコード/エンコードができる。
iconv
- いろんなコードが変換できる。
398:デフォルトの名無しさん
10/02/12 08:28:43
>>372
URLリンク(www.artonx.org)
399:デフォルトの名無しさん
10/02/12 08:33:31
文字コード変換ならiconvが上で
その他機能がnkfにはあると
そういうこと?
400:デフォルトの名無しさん
10/02/12 08:51:30
そもそも文字コード変換に上とか下とかあるんかいな
1.9のencodeとNKF/iconv/kconv/uconvの違いも教えてほしい
401:デフォルトの名無しさん
10/02/12 09:14:29
動作が違うとかは置いとくと
対応してる文字コードが多いほうが上っていうことでしょ
String#encodeはよくわからんが
URLリンク(jp.rubyist.net)
402:デフォルトの名無しさん
10/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作者の提案したコードがもとになってる。
URLリンク(blade.nagaokaut.ac.jp)
403:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/12 09:36:07
>>401
そのリンクは読んだけど総花的であんまり参考にならなかった
・M17N(1.9)/NKF/iconv/kconv/uconvで変換結果に差が出ることがあるか
・速度の違い
・推測の精度
・使い分けのシチュエーション
がよくわからんのですよ
405:デフォルトの名無しさん
10/02/12 09:38:35
>>403
わかりやすい
406:デフォルトの名無しさん
10/02/12 09:44:20
ってことは,事実上 iconv と NKF の二種類しか変換器は存在しないわけね
でメールみたいに入力のエンコーディングがよく解らん場合はNKF.guessをつかえと
入力のエンコーディングが固定されてる場合はiconvでおkでOK?
1.9のM17Nはguessしてくれてるんだと思ってたわ。
407:デフォルトの名無しさん
10/02/12 09:47:44
> メールみたいに入力のエンコーディングが
のあとに続くのが
> よく解らん場合
なのがショックだ
あれは99パーセントくらいの確率でヘッダに書いてあるまんまだと思うのだが最近は違うんか
408:デフォルトの名無しさん
10/02/12 09:49:41
メールやHTMLが文字化けするのはヘッダのエンコーディングと実際のエンコーディングが違うからなんじゃないの?
409:デフォルトの名無しさん
10/02/12 09:55:24
日本人しか使わないプログラムなのならNKFでいいよ
外国の人も使うならiconv「でなければならない」
MechanizeとかではNKFを組み込んでしまった日本人がいて、その部分がえんえん障害になってる
iso-8859-xはNKFのShiftJISに誤爆することがあるんだが、そのへんの処理を考慮してない
410:デフォルトの名無しさん
10/02/12 09:59:50
>>407
メールの現実を知らなさ過ぎる
411:デフォルトの名無しさん
10/02/12 10:11:38
1.9のencodeは青学の先生のライブラリ(transcode)じゃないの?
412:デフォルトの名無しさん
10/02/12 10:37:03
>>411
URLリンク(jp.rubyist.net)
URLリンク(naruse.biz)
URLリンク(www.sw.it.aoyama.ac.jp)
これか
1.9のM17Nはiconvじゃなくてtranscodeみたいだ
また兄弟が増えちまった
よくわからなくなってきた
413:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/12 11:08:15
うちは大家族ですから^^;
おとーちゃんビシッと言ってやりな
って言うは簡単だけど結構面倒だよね…
415:デフォルトの名無しさん
10/02/12 11:54:27
うっぜぇ変なもん作るなよ
rubyってiconvすら実装されてない糞言語だったのか
416:デフォルトの名無しさん
10/02/12 11:58:46
馬鹿発見。
417:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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"
» (» 、RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (U+00BB)、終わりギュメ)
を含むUTF-8文字列をIconvでShift_JISっぽい文字列にしたいんですが…
419:デフォルトの名無しさん
10/02/12 12:43:39
>>417
受け取ったArrayを中途半端に破壊してるのは……まあ確かにまずいかも
アルゴリズム的な補足をするなら、単純かつ美しい実装ならそれでもいいけど、
実用上はピボットの取り方を工夫しないといけない
420:デフォルトの名無しさん
10/02/12 12:44:32
irb1.9> "\302\273".encode('SHIFT_JIS')
Encoding::UndefinedConversionError: "\xC2\xBB" from UTF-8 to Shift_JIS
そもそもだめぽい
421:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/12 13:00:01
>>418
変換表に定義されてないんで、変換前に別の文字にgsubするのが正解
423:デフォルトの名無しさん
10/02/12 13:13:10
>>418
422が書いているようにgsubするのもありだが
変換時の戻り値で分岐するというやり方もある
詳細は下記の "Encoding::Converter#primitive_convert" の項目参照
URLリンク(jp.rubyist.net)
424:デフォルトの名無しさん
10/02/12 13:26:50
>>421
実際にメーラーを書いて運用してみたらいい
425:デフォルトの名無しさん
10/02/12 14:06:43
kconvの "\302\273".tosjisでは"\x91\xB9"になるな
エラー出して教えてくれたほうがマシかも
426:デフォルトの名無しさん
10/02/12 17:04:09
>>424
単にCP50221って話じゃないの、それだとguessは悪手なんだが
427:デフォルトの名無しさん
10/02/12 18:29:23
reg2 = Regexp.new("A(.*)CD(.*)EF")
str1 = "AbbccCDasdaEF"
str1 =~ reg2
これで得られる$1と$2をループかなにかで
添字をつけて取得できないものでしょうか?
428:デフォルトの名無しさん
10/02/12 18:55:24
>>427
Regexp.last_matchとか$~のこと?
429:427
10/02/12 19:21:56
>>428
$~がMatchDataってオブジェクトになってるのか
ありがとう、解決しました。
430:デフォルトの名無しさん
10/02/12 19:39:54
>>427
foo = reg2.match str1 とすれば、foo にその MatchData が入る
431:デフォルトの名無しさん
10/02/12 19:54:03
kconvとかnkfの話はrubyと関係ねぇ…
432:デフォルトの名無しさん
10/02/12 20:14:00
kconvは関係あるな
nkfは関係ないがNKFは関係あるな
433:デフォルトの名無しさん
10/02/12 21:08:09
Ruby1.9で勉強していた(>>1を読んでませんでしたorz)のですが、
Railsもやってみたいということで、1.8をインストールしたいです。
ですが、Synaptic(Ubuntuのパッケージマネージャ)に1.8のフルインストールパッケージがありませんでした。
なので公式サイトにあるソースコードからインストールしようと思うのですが、
うまく1.9と共存できるのでしょうか?
宜しくお願いします。
434:デフォルトの名無しさん
10/02/12 21:26:32
1.8と1.9ならおおむね問題はない
ユーザーディレクトリにインストールしても動くぞ
435:デフォルトの名無しさん
10/02/12 21:32:17
ありがとうございます、今やったところ
1.9が/usr、1.8が/usr/local
にたまたまなのか入ったので問題なさそうです。
とりあえずrubyとirbコマンドは1.8で起動するようにしました。
436:デフォルトの名無しさん
10/02/12 21:35:41
へえ、いつの間にか1.8なくなってたのか
437:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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 使えば良いかなと思ったのですが、違うようです。
わかる方、アドバイス貰えると助かります。