[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 14:42 / Filesize : 176 KB / Number-of Response : 723
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 34



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

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

19 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 16:57:00 ]
Ruby関係ねえええ

20 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 17:10:46 ]
irb> str = 'first,second"a,b,c"second,third'
irb> p str.gsub(/".+?"/){' '}.gsub(/,/){' '}
"first second second third"

こんなんじゃ駄目なんだろうなあ

21 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 17:24:03 ]
>>18
最終的にしたいことは何でしょうか?

ダブルクオーテーションの中以外のカンマの数を数えたいとか、
ダブルクオーテーションの中以外のカンマでsplitしたいとか。

22 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 17:30:18 ]
>>21 後者です。
str.split(regexp) #=>["first", "second\"a,b,c\"second", "third"]
というのを期待しています。
ダブルクオーテーションはネストしないと仮定しています。
正規表現は難しいです。

23 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 17:36:58 ]
>>19
正規表現スレを見つけました。
正規表現スレに移動した方がよろしいでしょうか?

24 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 17:47:26 ]
>>22
うおめんどくさ

25 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 18:08:58 ]
題意に沿わず、長く、そして美しくない

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

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

p parse(str) #=> ["first", "second\"a,b,c\"second", "third"]

26 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 18:11:07 ]
>>23
多分、正規表現だけでは無理なのでここでいいんじゃないかな

27 名前:デフォルトの名無しさん [2010/01/28(木) 18:30:36 ]
一応出来た。でもバグがあるかもしれないから(;_;)
僕にもっと考える時間と頭をください。

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

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

あとは、これを頭のいい人が改良するだけでつ(;_;)



28 名前:27 [2010/01/28(木) 18:47:21 ]
うわ、やっぱりバグありまくりですね。

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

んと、C使いだったら一文字ずつ調べてみるけど...

29 名前:デフォルトの名無しさん [2010/01/28(木) 18:49:45 ]


30 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 19:24:17 ]
一旦NUL文字にして、後で戻すとかどう?

str = 'first,second"a,b,c"second,third'
arr = str.gsub(/".*?"/){|m| m.gsub(/,/, "\0")}.split(/,/).map{|a| a.gsub(/\0/, ',')}
p arr #=> ["first", "second\"a,b,c\"second", "third"]

31 名前:18 mailto:sage [2010/01/28(木) 19:52:09 ]
短時間にこれだけレスを頂けるとは思ってもみませんでした。

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

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

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



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

こんな感じニカ?

33 名前:デフォルトの名無しさん [2010/01/28(木) 21:18:59 ]
鬼車の田中哲スペシャルってこーゆーとき活用できるもん?


34 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 21:41:50 ]
面倒臭いから区切りを " " にするよう説得して Shellwords.shellwords を使う。だめか。
CSV だと思って CSV.parse_line する。だめだって。通らないし。

35 名前:デフォルトの名無しさん [2010/01/28(木) 21:50:19 ]
問答無用で , で豚切りしてから、
" を含む物から次の " を含むものまでを , で連結したものに置換える。


36 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 22:19:46 ]
>>35
それだと分割したリストを"求めて尋ねる歩く旅に出ないといけなくなるわけだが・・・

37 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 22:52:03 ]
基本、このタイプは無闇にめんどくさい



38 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 06:11:42 ]
RubyはC言語で出来ているのでしょうか?

39 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 06:42:16 ]
>>38
そうだよ。なんならソースをダウンロードして中身をのぞいてみたら?
それを知ってどうするのかは知らんけどさ。

40 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 08:35:40 ]
それでも鬼車なら・・・鬼車ならきっと何とかしてくれる

41 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 10:03:32 ]
Ruby 初心者スレッド Part 33
pc12.2ch.net/test/read.cgi/tech/1259990485/998

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

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

クックパッド(株)【2193】:銘柄情報 - Yahoo!ファイナンス
stocks.finance.yahoo.co.jp/stocks/detail/?code=2193

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

昔から使ってる人間としては、Rubyで生計を立ててる人がいる時点で信じられん

43 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 11:16:40 ]
>>42
20年も経てば、あなたがたはRubyに税金をかけるようになるでしょう

44 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 11:18:45 ]
>>18
出遅れた気がするけど、
str = 'first,second"a,b,c"second,third'
str.scan(/(?:^|\G,)([^",]*(?:"[^"\\]*(?:\\.[^"\\]*)*"[^",]*)*)/).map{|a|a[0]}

45 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 11:19:48 ]
>>43
すでに未踏経由で1000万以上税金突っ込ん出るよ、その成果の一つがYARVだ

46 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 11:35:56 ]
>>43
いや電気ほどにはすごくないw

47 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 11:56:00 ]
ファラデーか



48 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 13:57:49 ]
str.scan /(?:[^",]|"[^"]*?")+|(?=,,|^,|,$)/

49 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 14:27:24 ]
メンテナンスしたくない正規表現が続々届いております

50 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 14:31:56 ]
正攻法は>>25、LLっぽいのは>>35だと思う

51 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 14:36:07 ]
>>49
ちょっと変えたいときに悲惨だな
これくらいは読めて欲しい気もするが

52 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 15:51:35 ]
\Gの使い方がよくわからなかった自分としては>>44が勉強になった

53 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 15:53:13 ]
最終的には読めて欲しい
初級を脱したと思ってる人は読めて欲しいなー

54 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 16:34:07 ]
読めても変えたくないエンバグしそう

55 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 16:36:13 ]
>>44 の修正、一般にCSVでは"のエスケープは""
str.scan(/(?:^|\G,)([^",]*(?:"[^"]*(?:""[^"]*)*"[^",]*)*)/)

56 名前:27 mailto:sage [2010/01/29(金) 16:45:09 ]

なるほど。勉強になったthx

57 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 19:46:41 ]
>>49
正規表現をくれということだから仕方ない



58 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:15:46 ]
mingw版のRuby1.8.7バイナリって特にはない?
自力でMinGW導入して手元でコンパイルするしかないのかな

59 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:30:14 ]
コンパイルしてみたら?
きっと親切なおじさんたちが助けてくれるさ

60 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:07:20 ]
えー

ひとつだけ質問
Net::HTTPSが使うOpenSSLやirbが使うReadlinesとかは放っておいても入る?
んなわけないよね別途用意しなきゃ駄目だよね

61 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:39:37 ]
gnuwin32.sourceforge.net/packages/openssl.htm
gnuwin32.sourceforge.net/packages/libiconv.htm
gnuwin32.sourceforge.net/packages/readline.htm
gnuwin32.sourceforge.net/packages/pdcurses.htm
gnuwin32.sourceforge.net/packages/zlib.htm
gnuwin32.sourceforge.net/packages/gdbm.htm

リンク先を見てわからないなら諦めた方がいいかもしれない。
怖くてリンクを踏めないという見解もありうる。

62 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:41:31 ]
%w記法で空文字列の要素はどうやって作るの?

63 名前:60 mailto:sage [2010/01/29(金) 21:44:46 ]
C:\Documents and Settings\俺\デスクトップ>gem install rake
C:/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_origin
al_require': no such file to load -- zlib (LoadError)

うひょう

64 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:44:57 ]
%Wならできるが、%wでは無理だね

65 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:45:46 ]
%wじゃむりじゃね?
大文字の方なら
p %W[hoge fuga #{nil} ] #=>["hoge", "fuga", ""]

66 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:53:29 ]
式展開じゃないとダメか
#{nil}はnilになるのかと思ったら""なのね。何で? nil要素は作れない?


67 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:57:08 ]
要素が文字列である配列を作る記法だからでしょう
またレスかぶりそう



68 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:05:56 ]
了解。みんなありがと

69 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:11:45 ]
>>66
irb(main)> "#{nil}"
=> ""

70 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:25:58 ]
>>58
いろいろあったんだが、Windowsの場合は自分だけMinGW32にしても意味がない、という結論に至った
配布されてるバイナリのバージョンと揃えておいて、同じようにエラー出したり同じように変な動きしたりするほうがいい

71 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:30:02 ]
普段CをMinGWでコンパイルしていて
Rubyの拡張ライブラリもMinGWでコンパイルしたいんだもん
という人がRubyをMinGWでコンパイルしているんだと思う。
あとメンテナか。

72 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:36:41 ]
これからMinGWにしてこうぜー、という動きがあるのはある気がするが
「よくわかんないいっぱんゆーざー」がわざわざコンパイルしてまで使用するようなもんでもない

ただしMinGWの知識がある人はどんどん使って色々言ってくれ

73 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:09:14 ]
class NiseArray < Array; end

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

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

bがワナビーNiseArrayなんだがドゥーしたらいいんだ?
オレにティーチしてくれよ。

74 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:25:11 ]
セルフのクラスのオブジェクトをリターンするようにデファインされてないんだよな
継承を考慮してないもともとのクラスのデザインのミステイクではある

75 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:31:20 ]
Enumerableはeachさえあれば配列じゃなかろうと動くようにしてあるんだから仕方ない
ArrayのメソッドならちゃんとNiseArrayが返すはず

76 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:36:39 ]
ビルトインクラスは普通のオブジェクトと微妙に構造が違うから継承すんなボケ、
っつーかお前のそのクラスはビルトインクラスを継承するだけの動作をするのか、あー? という怖い感じのが一応スタンス

メソッドが欲しいだけなら普通は委譲を使う

77 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:39:33 ]
委譲遅いじゃん
はい論破



78 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:41:22 ]
委譲とかあのへんは遅いよね
継承を使いたくなるくらい遅いというのは実効上の説得力がない

79 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:41:44 ]
この例に限って言えば dup/clone してから map! すりゃいいんじゃね

80 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:44:04 ]
>>78
ディスパッチテーブルを
もう一回引く程度のコストが許容できないなら
その問題にRubyは使えないんじゃないかね

81 名前:73 mailto:sage [2010/01/30(土) 00:17:48 ]
Arrayオリジナルのメソッドでcollect/mapとselectはNiseArrayではなくArrayを返す。
ほかはNiseArrayを返す。
あとEnumerableは基本的にArrayを返す。
これらは継承では全滅ということでOKですか?

delegateに馴染みがないので軽いサンプルをいただけると助かります。
もちろん自分でリファレンスマニュアルを読んでみます。

82 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 01:32:52 ]
>>81
自作ライブラリのコード漁ってたらこんなの出てきた
でも、正直これは設計ミスだったと思ってる

%w{ find_all reject select sort sort_by }.each do |method|
class_eval %{
def #{method}
self.class.new(super)
end
}
end
%w{ & * + - grep }.each do |method|
class_eval %{
def #{method}(arg)
self.class.new(super)
end
}
end


83 名前:82 mailto:sage [2010/01/30(土) 06:10:54 ]
話の流れ上 delegate のサンプルを貼るべきところだったな、ごめんw
継承するとこうなるぞってことで

84 名前:73 mailto:sage [2010/01/30(土) 10:50:29 ]
#-----hoge1.rb
class NiseArray < Array
instance_methods.each do |method|
define_method(method) do |*args, &block|
result = super(*args, &block)
result.class == Array ? NiseArray.new(result) : result
end
end
end
p NiseArray.new.map{}.class #=> NiseArray

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

#なんでノットNiseArrayなのかミーにはホワイなんです><

85 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 14:01:51 ]
class A
def initialize(a=Array.new); @a=a; end
def method_missing(*arg, &block); A.new(@a.__send__(*arg, &block)); end
def to_a; @a; end
def to_ary; @a; end
end

irb> a = A.new([1, 2, 3, 4, 5])
irb> a.delete(5)
irb> p a
#<A:0xb7cf21c0 @a=[1, 2, 3, 4]>
irb> p a.map{|e| e*2}
#<A:0xb7cecb30 @a=[2, 4, 6, 8]>
irb> p a.class
A
irb> p a.to_a
[1, 2, 3, 4]
irb> p Hash[*a]
{1=>2, 3=>4}


86 名前:73 mailto:sage [2010/01/30(土) 14:46:42 ]
おおお素晴らしい
鮮やかに委譲してますね。
しかも直感的でわかりやすい。

#all?など返り値が委譲先のオブジェクトでないメソッドも少し手直しすれば動きそうです。
勉強になりました。参考にさせてもらいます。


87 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 17:55:24 ]
$KCODE='u'
'あ' =~ /\xe3/ #=> 0
'あ' =~ /[\xe3]/ #=> nil

となります。

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

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

手元の環境は
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
です。



88 名前:デフォルトの名無しさん [2010/01/30(土) 18:58:31 ]
$KCODEのデフォルトは n なので、
$KCODE を設定しないということは
'あ' はただのバイト列として 0xe3 と比較される。


89 名前:デフォルトの名無しさん [2010/01/30(土) 19:11:04 ]
おや、'u'のとき前者がマッチするのか…


90 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 22:20:20 ]
p BasicObject === BasicObject #=> true
p Class === Class #=> true
p Module === Module #=> true
p Object === Object #=> true

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

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

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

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

なんで?教えてえらい人!

91 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 22:52:30 ]
>>90
Module#===の定義をリファレンスで読むといいよ
selfがモジュールとすると「obj.kind_of?(self) が true の場合、 true を返します」だとさ

92 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:00:03 ]
驚き最小!

93 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:21:41 ]
>>90
===

94 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:22:47 ]
ミスったw
=== が再定義されているから

case value
when Integer
when String
end

みたいに書けるんじゃないか

95 名前:デフォルトの名無しさん [2010/01/31(日) 00:08:03 ]
Proc#===の定義は見ただけでは何を意図したものか分からなかったな…


96 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 07:39:30 ]
||= って何なんでしょう?
代入文みたいに a ||= {} 使うみたいな
辞書の割り当てとかでしょうか?

97 名前:デフォルトの名無しさん [2010/01/31(日) 07:55:53 ]
Marshal.dumpでsingleton can't be dumpedというエラーになって悩んでます
objの中身はライブラリから返されたもので詳細はわかりません

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

以下はエラーになりませんでした
obj.each {|k,v| Marshal.dump([k,v])} #=>エラーなし



98 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 08:13:23 ]
>>97
そのエラー分かりにくいよね
特異メソッド(およびそれが定義されているオブジェクト)はダンプできませんよって意味
dupしたものをダンプするようにするか、自分で言ってるように中身だけ出すのが正解

99 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 08:40:37 ]
>>96
これ書いてる解説少ないんだよな

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

という程度の意味
実際のスクリプトでは大量に使われているが、初心者用文法解説ではほとんど言及されていない謎の記述

100 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 09:18:07 ]
>>96
a += 1
a = a + 1

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

a が偽と評価される場合に限り a = {} となり、それ以外のときは a = a
変数の初期化を保証するために使われることが多い

101 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 09:23:09 ]
>>100
だいたいの意味はそうだからいいんだけど、厳密には
a || (a = b)
ってことになる
||= と &&= だけちょっと特殊

ってようなのをどっかで見た

102 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 11:13:45 ]
>>101
doc.okkez.net/187/view/spec/operator#selfassign

まあobj.foo = obj.fooに副作用がある設計のほうがどうかと思うけどな

103 名前:デフォルトの名無しさん [2010/01/31(日) 14:11:36 ]
>>98
ありがとうございます
objは再帰的なHashなようでdumpできないオブジェクトが入っている場所は一定ではないようです
またTrueClassなどdupできないものも含まれているようです
一気に特異メソッドを取り除いてdumpする方法はないでしょうか?

104 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 14:26:44 ]
初めてRubyいじる必要が出てきて,このスレに来てみたが
ここ初心者レベルじゃないね。
初心者抜け出して中級者に手が届こうとしてる人たち向けの
初心者脱出スレだな。

105 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 14:29:35 ]
>>104
いや別に

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

実行速度がスクリプト言語として普通なレベル(つまり速いわけではない)という点以外は初心者にやさしいほうだと思うけどね

106 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 14:41:46 ]
初心者の質問にでも
初心者抜け出して中級者に手が届こうとしてる人たちも含めていろんな人が答えるスレでしょ
初心者の質問がなけりゃそのちょっと上の会話になるさ

107 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 14:44:02 ]
>>103
ライブラリ提供者が提供してないのなら目視で取り除くしかないよ
普通は dump というメソッドを作ってあったりするもんなんだけどね



108 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 15:15:55 ]
>>104
大丈夫、そういう場合は自分のような脱初心者(+ニート)が回答するから。
ただ、2chだから超初心者質問には悪態をつく人間がいることは覚悟しておいたほうがいいかも。

109 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 16:12:23 ]
相手は人間だから、あんまり馬鹿っぽい質問じゃねえ。
それなりに調べて来ないと駄目でしょ。

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

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

とか。

110 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 16:22:38 ]
自分の質問が馬鹿っぽいかどうかが分かるなら、
既にそいつは上級者だろw
まあ確かに、自力で最低限ぐぐるくらいのことはしてほしいとは思う

111 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 16:26:38 ]
最近の質問はちょっとレベル高かったからなー
むしろ私にも答えられるような初歩的な質問キボンヌ

112 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 16:33:04 ]
>>103
Marshalじゃなくてyamlか何かでダンプするようにするのが一番楽

113 名前:デフォルトの名無しさん [2010/01/31(日) 18:48:05 ]
オブジェクトの中身をろがーに吐かせたいんだけど
inspectじゃなくてppみたいに見やすく文字列化してくれるやつない?

114 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 19:23:46 ]
>>113
require 'StringIO'
require 'pp'

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


puts で表示されてるのがわかるかと思う

115 名前:デフォルトの名無しさん [2010/01/31(日) 19:28:48 ]
pretty_inspect

116 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 05:34:01 ]
Rubyは今後10年使われますか?

117 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 06:17:43 ]
>>111
てかRuby初心者スレは実質「Ruby質問スレ」と言ってもいい
超初心者からRubistまで、幅広く質問を受け付けるスレって感じがする

…てか、もうスレタイ変えちゃって良いんじゃないか、ここ…?



118 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 11:38:19 ]
変えた途端に>>117が業務上のプログラムの質問する事にでもなるのか?

119 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 11:43:54 ]
アホが暴れたら高度な話題は本スレでと誘導できるからこのままでいいんだよ

120 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 20:18:47 ]
超初心者〜中級にちょっと届かない初心者
ぐらいしか質問してないだろう

121 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 20:38:06 ]
人の振り見て我が振り直せ。

122 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:02:33 ]
Rubyっぽくして

def sum
 key = nil
 sum = 0
 while line = gets
  a = line.split(",")
  if key !=a[0]
   if key
    print "#{key} #{sum}\n"
   end
   key = a[0]
   sum = 0
  end
  sum += a[2].to_i
 end
 print "#{key} #{sum}\n"
end


123 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 22:15:25 ]
1時間経ってもスルーされてた理由をなんとなく理解

124 名前:デフォルトの名無しさん [2010/02/01(月) 22:56:47 ]
>>123
たぶんその理解は間違い。


125 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 23:02:24 ]
実際に試した人→>>123
実際に手を動かさなかった人→>>124

126 名前:デフォルトの名無しさん [2010/02/01(月) 23:06:22 ]
こういうのはRubyっぽいのか??

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

>>123 がソート済みかどうかを考慮しているのかどうか疑問が残る。

127 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 23:45:31 ]
group_by初めて知った。旧リファレンスに無くて悲しくなった。
メモリ喰いっすね



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

Windows XP ActiveScriptRuby環境です
最終的にはもっと長い(1000-10000点ほど)データがプロットしたいと考えています

129 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:37:22 ]
>>128
良く使われる手法は
1.グラフ画像を生成してウインドウに貼る
2.描画可能なコンポーネントにプログラムで描画する
の二つ

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

2.はruby/gtk使った事無いからリンク先から関係ありそうなところ
> ttp://ruby-gnome2.sourceforge.jp/hiki.cgi?Gtk%3A%3ADrawingArea
> ttp://ruby-gnome2.sourceforge.jp/hiki.cgi?Gdk%3A%3ADrawable

130 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:41:47 ]
Tkの知識はあるんだよね

131 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:43:29 ]
TkじゃなかったGTKだた
どっちにしても指示をRuby上からやる、という以上のものではないんで
GUIパーツの使い倒し方を知ってるのがけっこう前提

132 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:58:08 ]
>>129
ありがとうございます
素人考えですがポイント数が増えると 2. の方がいいのかなという気がするので、リンク先を読んでみます

>>130
Tk もわかりません…

133 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 01:05:03 ]
グラフはQwtがマジおすすめ
qwt.sourceforge.net/

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

俺はPyQtからしか使った事ないが

134 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 01:27:16 ]
>>129-131

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

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

>>133

ありがとうございます
Qwt のスクリーンショットはかなりイメージに近いです

135 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 02:28:19 ]
irb の文字入力が悲しいくらい重いです
カーソル移動は問題ないです
irb --noreadline とすると入力は普通になりますが使いにくいです
ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-mingw32]


136 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:15:30 ]
PCのスペックは?それ書いてくれないと判断できないのだが

137 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 08:07:16 ]
プロッターを1から作るのは全くおすすめできない
133のQwtであればAPIで簡単に実現可能な
描画領域の拡大・縮小やドラッグ、凡例表示なんかを実装するのは
よっぽどモチベーションが高くないと無理



138 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 10:52:05 ]
>>136
単なるローカルエコーであるはずのirbでの文字入力だけが重くなるという時点で
スペックとか関係ない問題だと思う…

139 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 15:08:41 ]
「単なる」っておまえReadlineを知らんのだろ

140 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 17:42:37 ]
io = File.open 'text.gz' #俺様専用!

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

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

内部でIOを複製してそれを使えばいいじゃないですか、と思うのですが。

141 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 18:33:36 ]
>>140
一緒に閉じたほうが使いやすいから

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

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

142 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 18:36:10 ]
>>141
ホントだ。
何か技術的な理由でそのような仕様になっているのかと思った。

どうもありがとう。

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

とりあえず io.rewind で戻せるからいいけどさ。。

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

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

IO オブジェクトを複製しない理由はなんか偉い人が教えてくれるんじゃないかな

145 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 19:34:14 ]
>>143
f = File.open file
f.read
f.dup.seek 0
f.pos

そもそも副作用の代表格であるIOにまともな複製なんて不可能じゃない?

146 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 21:02:46 ]
IOのeachとlinesってまったく同じ?

147 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 22:41:29 ]
同じ



148 名前:デフォルトの名無しさん [2010/02/03(水) 06:52:22 ]

Ruby on Rails 3.0 Release Notes
guides.rails.info/3_0_release_notes.html

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

いつまで立っても直らないのは、CPU占有率を常に見ている人が少ないのと、
誰も公式に言わないからだろうと

150 名前:149 mailto:sage [2010/02/03(水) 10:27:00 ]
今試したら、
クアッドコアのマシンでruby 15%、csrss 8%ぐらい合わせて1コア分くらいだな。
ちょっと違ってたスマソ
とりあえず、Windowsではirb重い。
少なくとも開発中に立ち上げっぱなしはムリポw

俺はcoLinuxとかで立ち上げるからさして問題ないけど

151 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:29:19 ]
えっ
BusyLoopなの?

152 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:36:22 ]
今しばらくmswin32版rubyのirbで色々やってみてるけど
触らなければCPU0%だなあ
もっと時間かけると占有するようになる?

153 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:38:15 ]
ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-mingw32]

154 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:39:56 ]
お、mingwの話かスマソ

155 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 13:11:46 ]
教祖がウィンドウズ使ってないから仕様。

156 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 14:50:51 ]
パッチレベルをp388に上げてみるとか
Readlineのdllを最新のものにしてみるとか

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

ttp://gnuwin32.sourceforge.net/packages/readline.htm


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

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

* テストスクリプト
require 'rubygems'
require 'mechanize'
agent = WWW::Mechanize.new
page = agent.get('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 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 15:24:15 ]
>>157
Mechanizeのメソッドの使い方を単に間違ってる
ここ全部読め
ttp://d.hatena.ne.jp/kitamomonga/20081209/kaisetsu_for_ver_0_9_ruby_www_mechanize

159 名前:デフォルトの名無しさん [2010/02/03(水) 16:59:18 ]
puts ["hoge"][0]
とやると「hoge」が出力され、0以外だと「nil」が出力されるのですが
この構文自体がどういうものなのか分かりません。
なにかの省略形とかなのでしょうか?

160 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 17:07:50 ]
>>159
そんなへちょい例文作ったとこどこよお母さん一言文句言っちゃるわ

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

つまり配列の 0 要素目

161 名前:159 [2010/02/03(水) 17:14:43 ]
>>160
やはり配列でしたか…。こういう記述も許されるんですね。
ありがとうございます。

162 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 17:16:58 ]
> こういう記述も許されるんですね。
というか配列リテラルで直接要素参照する意味はまずない
むしろ嫌がらせに近い

163 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 17:28:30 ]
pc12.2ch.net/test/read.cgi/tech/1155031689/
661 デフォルトの名無しさん [sage] 2009/09/04(金) 08:12:26 ID: Be:
Windows用Rubyは MinGW版が速いと聞いてRuby on Railsで試してみた - yuum3のお仕事日記
d.hatena.ne.jp/yuum3/20090805/1249452345
antoniocangiano.com/wp-content/uploads/2009/08/mri_kri_total_runtime.png

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

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

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

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

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

670 デフォルトの名無しさん [sage] 2009/09/07(月) 06:40:46 ID: Be:
>>666-667
>>665がその前もコピペしないからわからないが、どうやら、p160にうpだてすると、
Railsのviewの処理が100倍遅くなるらしい。今年に入ってからの話。

164 名前:デフォルトの名無しさん [2010/02/03(水) 18:15:37 ]
>>158
どうもありがとうございました
このサンプルで動いている環境もあったので混乱していましたが
使っているバージョンが違っておりました

165 名前:デフォルトの名無しさん [2010/02/03(水) 22:07:55 ]
はてなブックマーク(エクスポートしたデータ)から
タグを指定して、一部を抽出するプログラムを書きたいです。

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

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

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

までは書いたのですが、別のファイルに保存する方法が分かりません。
よろしくお願いします。

166 名前:デフォルトの名無しさん [2010/02/03(水) 22:14:09 ]
open('output', 'w') do |out|
...
end

の中に最後の4行をまるごと入れて、puts を out.puts に。


167 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 22:35:55 ]
>>166
ありがとうございます。出来ました。

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

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

タグが一致したら、上記全体を抽出したいのですが
これはhpricotで出来るのでしょうか?
それともxml パーサーのような物が必要なのでしょうか?



168 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 22:39:45 ]
>>169>>201を後出し条件のために予約

169 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 22:42:32 ]
Oh翼くんロングパス

>>167
本当にしたいことを言え

170 名前:デフォルトの名無しさん [2010/02/03(水) 22:47:08 ]
dt = a.parent
dd = dt.next_sibling

つーかdtとddが出てこないのはputsをout.putsに変えなくても分かるはずだが


171 名前:デフォルトの名無しさん [2010/02/03(水) 22:47:53 ]
>>169
> 本当にしたいことを言え

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

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

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

お願いします。

172 名前:デフォルトの名無しさん [2010/02/03(水) 22:53:52 ]
>>170
出来ました。
初めてのrubyなので、テンパってしまいました。
ありがとうございました。

173 名前:172 [2010/02/04(木) 00:10:07 ]
すみません。まだお願いします。

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

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



174 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 00:16:58 ]
悪いこと言わないから一通りRubyの解説なりなんなりを読め
おおむね全部書いてある

175 名前:173 [2010/02/04(木) 00:29:01 ]
Ruby 逆引きハンドブック(るびきち)
を眺めているんですけど
レベルが合ってないのでしょうか?

176 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 00:35:15 ]
たのしいRuby → Railsレシピブック → るびきち

と読みましたが、Railsが全くわかりかねます

177 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 00:42:02 ]
レシピブックやらクックブックやらは基本ができてないと
小手先だけになって変更できなくなって詰まるのに

>>176
Railsは実際に作るものがないと知識としては全く覚えきれない



178 名前:デフォルトの名無しさん [2010/02/04(木) 00:42:06 ]
あらら、ちょっとレベルが上過ぎでしたか。
申し訳ない。
たのしいRubyを購入したいと思います。

・・・最後におまけで
>>173にお答えいただけると、ありがたいです。

179 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 00:46:07 ]
$KCODEはそのスクリプトに解釈させたい日本語文字エンコーディングを指定する
その指定に従って、正規表現などの「バイト列と文字区切りの関係」を調整する

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

はてなブックマークのブックマーク形式のエクスポートHTMLファイルは UTF-8 だから、
$KCODE='u' とするか、 ruby -Ku で起動する

180 名前:デフォルトの名無しさん [2010/02/04(木) 01:06:36 ]
>>179
> $KCODE='u' とするか、 ruby -Ku で起動する

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

基本から勉強したいと思います。ありがとうございました。

181 名前:149 mailto:sage [2010/02/04(木) 02:11:00 ]
>>156-152
サンクス

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

linuxだとというかdebian系だとaptとかでアップデート楽だからいいけど、
Windowsだとアップデートが面倒でかなわん。
ActiveScriptRubyで入れたものをmingwとかで上書きしちゃっていいものか
mingwでgemとかも込みのパッケージってあったけ?

182 名前:149 mailto:sage [2010/02/04(木) 02:11:46 ]
ごめん、環境書かずに送信したwww

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

自分で言うのも何だがふるっ

183 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 02:16:49 ]
うちの cygwin
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]

184 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 02:22:46 ]
>>176-178
Railsやりたいんなら、今のRails入門のオススメは Head First Railsということになってる(でいいよね?)
O'Reilly Japan - Head First Rails
www.oreilly.co.jp/books/9784873114385/

amazon.co.jp/dp/4873114381/

Head FirstがRuby入門者向けに書いてあるかはしらんが、
その前にRuby入門の段階ならRailsの前にRubyの入門本をもっと読むべきだと思われるw

185 名前:149 mailto:sage [2010/02/04(木) 02:29:16 ]
>>183
手持ちのcygwin環境も同じバージョンだった。
gem入れてない環境だからかわからんが、cygwinで待機状態だと全然軽いほぼ0%。
csrss.exeも出てこないわ

>>156
とりあえず、簡単な方のReadlineのバージョン上げてみる

186 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 13:36:20 ]
ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-mingw32]
>gem i hpricot
Building native extensions. This could take a while...
ERROR: Error installing hpricot:
ERROR: Failed to build gem native extension.

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

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=C:/Ruby/bin/ruby
続きます。

187 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 13:37:36 ]
>>186
nokogiri使え



188 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 13:38:08 ]

ワロタ

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

すいません、ググってみたのですが分かりません。
どうやったらhpricot入れられますか?

190 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 13:44:11 ]
>>189
Hpricot は本来の作者がメンテナンスを諦めた
Nokogiri 使うよろし
どうしても Hpricot を使わないといけないのなら
gem でバイナリが用意されてる mswin32 の Ruby をインストールするか
あるいは mingw32 Ruby においてコンパイル可能にする mingw32 Ruby の DevKit を入れれ
ttp://d.hatena.ne.jp/kitamomonga/20100130/ruby_mingw32_needs_make_when_install_watir

191 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 13:47:13 ]
RubyとしてActiveScriptRubyをインストールするのがスレ的にいちばん簡単だと思う

192 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 14:00:55 ]
>>190 ありがとうございます!
諦めてnokogiri使わせて頂きます。

193 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 14:22:47 ]
OneClick Installer の被害者の方々が続々と

194 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 16:44:00 ]
なんでmswinのバイナリがあるのにコンパイルしようとしてんだろ
前も思ったけどrubygemsってそのへんの判別どうなってんの?

195 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 17:17:21 ]
>>194
gem作成者がWindows向けかどうかを手で条件判断してる

install_win_binary if RUBY_PLATFORM =~ /win32/

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

install_win_binary if RUBY_PLATFORM =~ /win|mingw/

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

いっそそういうヘナチョコ gem も許してコンパイルを受け入れよう、というのが>>190でも書いてある DevKit

196 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 17:26:42 ]
>>195
ありがとう、雛形作成ツール or Rakefile手書きした人の責任ってことか
Rakeでis_windows?みたいなの用意していてくれれば解決だった気がする

197 名前:デフォルトの名無しさん [2010/02/04(木) 17:56:02 ]
win で判定しちゃだめだ。
Darwin (= MacOSX) が引っかかる。




198 名前:デフォルトの名無しさん [2010/02/04(木) 17:59:08 ]
プラットフォームの判別
jp.rubyist.net/magazine/?0017-CodeReview#l17

さすがに bccwin は外してもいいような気がする。


199 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 18:07:35 ]
っていうかこの用途での RUBY_PLATFORM の利用はいいかげんやめたほうが…
p の表示結果を横取りして解析するようなむず痒さを感じる

200 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 18:51:01 ]
ruby -rdebug hoge.rb
でデバッグするとき、gdbの--tty=みたいなことをしたいのですが、どうすればいいでしょうか?

デバッガへの入力(pやbreak等)と出力(pの結果等)はそのままrubyを起動した端末で、
hoge.rbの標準入出力は別の端末につなぎたいのです。

201 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 19:20:47 ]
>>199
じゃあ何使ったらいいの
バイナリの判定ならCONFIG["RUBY_SO_NAME"] とか?

202 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:00:16 ]
[1,2,3].map(&:to_s)
=> ["1", "2", "3"]

何が起きてる?リファレンスを嘗め回したがさっぱり

203 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:09:45 ]
&の右側がProcオブジェクトでないときはto_procを呼ぶ。

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

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

これでわかる?

204 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:11:02 ]
あー、どこを見ればそれがわかるのか、というのは俺も教えてほしい。

205 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:15:43 ]
検索しにくい機能はこれだから困る
「Ruby1.9 ではイテレータをブロックなしで呼び出すと Enumerator を返すよ機能」と呼ぶ

irb> [1,2,3].map(&:to_s)
["1", "2", "3"]
irb> [1,2,3].map{|e| e.to_s}
["1", "2", "3"]
irb> [1,2,3].map(&:next)
[2, 3, 4]
irb> [1,2,3].map{|e| e.next}
[2, 3, 4]
irb> [1,2,3].map{|e| e.next}.map{|e| e.to_s}
["2", "3", "4"]
irb> [1,2,3].map(&:next).map(&:to_s)
["2", "3", "4"]


206 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:17:23 ]
>>204
doc.okkez.net/

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

ところで上のマニュアルで検索すると、結果が出るまで数十秒くらい待たされるんだが、どうなってんの?
特に検索に失敗した場合の結果報告が遅すぎる。

207 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 22:10:58 ]
>>203
.call 1 がどこから来るのか分からん




208 名前:デフォルトの名無しさん [2010/02/04(木) 23:20:11 ]
Rubyで書けばこんな定義。

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

実際1.8.6までのRubyにActiveSupport(Railsで使ってるRubyコア拡張)
入れると↑のように定義される。


209 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 23:30:59 ]
>206
ごめん。
全てのデータを読み込んでるから遅い。
チューニングしたいけど、まとまった時間がとれない。

210 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 00:26:44 ]
[1,2,3].map(&:to_s) は
[1,2,3].map(&proc{|obj| obj.send(:to_s) })になると。
*argsはブロック引数が2個以上のときか
> ["abc","def","ghi"].each_with_index(&:slice!)
=> ["bc", "df", "gh"]
理解。

211 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 00:43:06 ]
98%くらいは>>205のブロックつきメソッドの短縮表記目的だけどな
正確な動作を覚えておくと便利なことはあるだろうね


212 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 02:11:15 ]
わかりにくいのはSymbol#to_procのほうじゃないか

213 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 02:24:19 ]
わかりにくいというか、ぶっちゃけわけがわからないよね

214 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 04:33:05 ]
sort_by(&:length) とか便利

215 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 09:16:02 ]
どうせならEnumerable#reduce/injectみたいに
&無しで実現してもらいたかった昨日

216 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 09:19:42 ]
>>213
>>205だと理解しているうちはいいけどな
SymbolかProcになるって時点で変だ
目を覚ませって感じではある

217 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 09:24:14 ]
簡潔さを追求しすぎてパァール化してるな



218 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 09:34:51 ]
イテレータなんて古代言語使われると混乱しちゃう
それと>>202は&で:to_sをブロックとして扱おうとしてるだけだから
別にブロックなしというわけでなくEnumeratorも関係なくね

219 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 09:35:36 ]
ところで>>206で配布してるchmファイルってみんな見れてるのか?

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

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

WindosXP SP3 なんだがどうしたものか

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

XPのSP3以降?ではそういう警告が出るようになったらしい。
Vistaで警告が出てたときはチェックボックスを外したら使えた。

221 名前:220 mailto:sage [2010/02/05(金) 09:46:14 ]
220で書いてるVistaはたまたまそこにいた人が使ってたやつね。


222 名前:デフォルトの名無しさん [2010/02/05(金) 11:01:26 ]
終わった話だけど。
block = proc {|x| x.to_i }
%(1 2 3).map(&block)
の &block のところに &:to_i と書けるという話であって、
ブロックを取らないならEnumeratorを返すという話ではない。
# そもそも1.8.7のmapは互換せ(ry


223 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 11:14:26 ]
>チェックボックス
もしかしてIEのセキュリティレベルを落とさないと見れない仕様か

デフォルトの状態でリファレンスマニュアルが読めないとか
ここまでくるとドザーに対する嫌がらせに近いな

224 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 11:44:27 ]
>>223
嫌がらせはそのへんにしとけ

よく知らないけどセキュリティ絡みならそのchmのプロパティで「ブロックの解除」を試してみたら?

225 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 11:48:33 ]
chm 自体がそういうものになった
なんでもかんでも Windows 叩いてオナニーしてる厨には理解できんだろうが

ttp://support.microsoft.com/kb/902225/ja
> これは正常な動作であり、セキュリティ更新プログラム 896358 および
> Windows Server 2003 SP1 のインストールの結果として予期されている動作です。


226 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 12:13:05 ]
>>219
Windows開発者にはかなり既知な問題なのですが、
chmファイル単体をそのままネットから落とすと、セキュリティがらみのフラグがつくんです。
exeファイル単体をネットから落とした時もいちいち確認してくるよね?

>>224 もいってるけど解決策はchmのプロパティでブロックを解除してやる

227 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 12:25:52 ]
chm自体が規格として取り残されたというか…
そもそも表示にIE使う時点で将来的に規定事項だったその時がやって来ただけというか…



228 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 12:29:03 ]
配布する人が
「XPやVistaや7の人は俺を信用してチェックボックス外してね」
と警告するしかないな

229 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 14:46:34 ]
zipped htmlでくれ

230 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 14:50:20 ]
全文検索が問題なんだよね
標準で検索フレームがつくのがchmの大きな利点
それさえ別途便利に使えれば素のHTMLの配布で問題ない

というかchmの検索はもうちょっと賢くなって欲しい
というか一般語の検索に特化されててプログラミング用語やトークンの検索に向かねー

231 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 15:38:21 ]
>>224, >>225, >>226
ありがとう
また一つ賢くなった

232 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 16:18:43 ]
pc12.2ch.net/test/read.cgi/tech/1155031689/
【ActiveScript】RubyをWindowsで使うスレ【GUI】

233 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 19:23:17 ]
:to_i.to_procがproc{|x| x.to_i}になるってのは
マニュアルのどこに書いてあるの?

234 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 19:50:56 ]
>>233
ttp://doc.okkez.net/static/191/class/Symbol.html
> self に対応する Proc オブジェクトを返します。

「self に対応する Proc オブジェクト」ってなんじゃらほという疑問の答はむろん書いてない
Ruby のマニュアルなんてそんなもんだ

235 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 20:16:44 ]
>>234
そこはすでに読んだ〜よ

236 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 20:36:29 ]
素人はこれだから
Rubyはソースコードに全て書いてある

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

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

ほら書いてあった

237 名前:デフォルトの名無しさん [2010/02/05(金) 20:43:18 ]
selfで示されるメソッドを呼ぶProcを返す。
自身で示されるメソッドを呼ぶProcを返す。
ならまだ分かるか。さあるりまにフィードバックしよう。




238 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 20:51:32 ]
>>236
利用法しか書いてないのがそれっぽいといえばそれっぽいな
Cレベルのコメントでもそれなのか

239 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 20:54:53 ]
[1,2,3].map(&:to_s)
[1,2,3].map(&:to_s.to_proc)
[1,2,3].map(&Proc.new {|obj| obj.to_s })
[1,2,3].map{|obj| obj.to_s }

やっと腑に落ちた
横レスだけどみんなありがとう

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

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

と一言書いてもらえてれば納得度が上がったと思う

241 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 21:05:08 ]
lines.collect(&:split/,/)とかやりたい

242 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 21:18:45 ]
[1,2,3].map(&:to_s.to_proc)
から
[1,2,3].map(&Proc.new {|obj| obj.to_s })
が腑に落ちない

243 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 21:27:11 ]
>>242
>>240


244 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 22:05:10 ]
>>242
カッコで括って評価の順序を明確にすれば理解出来るか
1. [1,2,3].map(&:to_s)
2. [1,2,3].map(&(:to_s.to_proc))
3. [1,2,3].map(&(Proc.new{|obj|obj.to_s}))


245 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 22:05:51 ]
ん?
:mes.to_proc #=> proc{|o| o.mes}
が腑に落ちないと言ってるんだが?

246 名前:デフォルトの名無しさん [2010/02/05(金) 22:08:54 ]
「Symbol#to_procがそういうprocを返すように定義されている」


247 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 22:09:04 ]
そりゃ失礼した。
どう腑に落ちないのかはよくわからんが。



248 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 22:14:26 ]
仕様です→なんでそんな仕様?
ってことでしょ
>>245はこんなとこじゃなくMLででも聞け

249 名前:デフォルトの名無しさん [2010/02/05(金) 22:18:12 ]
なんでこういう仕様かっていうと[1,2,3].map(&:to_s)って書くため
気持ち悪いのは元々Railsだから仕方ない

250 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 22:26:57 ]
名前
名前、ばかにする
ばかにする、あんた、名前

1だけ・・・
出会い頭に、おたんこなす宣告から、あんたばかぁ、から丁寧にばかにするまで
レパートリーに富んだ構文糖に乾杯 >> 244

251 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 22:27:02 ]
obj.methodsでシンボルの配列が帰ってくるから
関連がないということもない
と言えないこともない

252 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 22:58:44 ]
いや、どこにそういう仕様だと書いてあるのかってことなんだが

253 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 01:21:49 ]
AがnilだったらAにxを代入

A = x unless A

これより簡潔な書き方ってあります?

254 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 01:25:43 ]
おま、それ x が真だったら短絡して A = x と同じ意味になっちゃうぞ

255 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 01:28:33 ]
あれ?そうなっちゃいます?
rubyってifとかunlessを倒置して後ろに置いてるのをよく見ますけど。

256 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 01:41:21 ]
弁解の余地もございません
>>254は撤回した上で吊ってきます

unless修飾子なんか嫌いだグスン

257 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 02:05:03 ]
>>253
a = a or x
a ||= x



258 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 02:54:23 ]
>>137

了解です。できれば Ruby/GTK2 から扱いやすいプロッターがあるといいのですがなかなか見つけられません。

259 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 03:02:50 ]
>>257はfalseでも動作するので注意
まあ元のunless自体同じような動作だが

260 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 07:57:34 ]
>>230
インデックスの仕方が微妙なせいで、記号とかアンダーバー含むと全然検索できないw
chm便利なんだけど、検索は本当に困る

261 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 10:17:38 ]
>>253 に関連して

a or next
a or raise

みたいなイディオム?をたまに見かける

262 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 10:30:03 ]
read or die

263 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 10:31:17 ]
>>254
意味がわからん。
>>253が間違えてるとは思えない自分に誰か救済の手を


264 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 10:33:27 ]
>>263をさらに撤回する ほんとうにすまない

265 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 13:54:41 ]
お前らミス多すぎるだろ・・・俺もミスってた

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

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

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

falseの扱いは>>259の言う通り根本的な問題だから触れなかったけど
必要なら時はa = a.nil? && xとかやって
まあfalseが入ってるかもしれない変数にこの手の初期化はあまり行わないから普段は問題ない

266 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 13:57:09 ]
またミスったああああ

a = a.nil? && x
これダメ絶対、素直に後置してください・・・

267 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:11:35 ]
gdgd



268 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:12:26 ]
ネスティングを少なくする書き方をおしえて下さい。

269 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:17:08 ]
>>268
Rubyのネストは怖くない
ブロックは大いに使え

が、まあ、self を返すブロックつきメソッドとか map みたいなコレクション変更メソッドとか
そういうのを1行でメソッドチェインするようになると結構見栄えはよくなるよ
メソッドチェインするときはブロックは { } で書いてね
end のあとにドットつけられると動作上問題なくても見栄え的にぐんにゃり

270 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:23:37 ]
少し長くなった(ネストした)と思ったらさっさと別メソッドに分けるとか
簡潔なメソッド名を考えると、コメント代わりになるし動作の見直しにもなるのでおすすめ

271 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:25:08 ]
メソッドが10行超えたらほぼ確実にどこかおかしいな

272 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:27:46 ]
>271
kwsk

273 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:40:56 ]
5行越えたらFワードって聞いたぞ
外人さんの過激派はさすがに煽り方が違う

274 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:43:07 ]
まあ、メソッド多いほうがテストしやすいしな

とか言ってるとがっつりプライベートメソッドにされてたりする
気持ちはわかるが

275 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:33:30 ]
・メソッドが10行を超えることは望ましくない
・1行が80byteを超えることは望ましくない
はRubyのコーディングルールとしてよく採用されている

276 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:44:58 ]
1行80bytesは理由があるからともかく
メソッド10行制限ってのはカルト宗教の世界だな

277 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:49:22 ]
> 1行80bytesは理由があるから
ねえよ
そっちのほうがただの宗教だ
悔しかったら「lessやgrepは色づけしないから色付けに頼った視覚効果のスクリプトを書くべきではない」レベルまで言え



278 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:52:33 ]
10行ルールってまじ?
標準ライブラリのほとんどがボツってこと貝?

279 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:53:24 ]
メソッドが長いとリフレクションしにくい

280 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:57:01 ]
>>277
あ、どっかでそれ読んだ
「お前の環境がヘボいだけだろ」とか心の中で突っ込んだ覚えがある


行数は、本来は行数そのものが問題じゃないよね
短い定義の適切なメソッドの作成を目指すべきというのが本論
その現実的な目安として、やっぱ5行…は過激派だが、10行くらいがポイントだと思うなあ
これより長かったら分割手段を本気で考えたほうがいいかと

281 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:58:58 ]
>>278
まあ基本的には

めちゃくちゃベーシックな添付クラスだからごてっとするのも致し方ない面はあるが、
それでももうちょいこまごまとしててもいいとは思う
特にユーティリティ的なクラス

282 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:03:26 ]
はいはい、なんでもサブルーチンサブルーチン(笑)
どんどん分割しよう。

283 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:07:32 ]
空行だらけのBlogみたいで読みにくいからやめてくらさい

284 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:18:27 ]
あれはblogシステムでは「段落」としてるものを、ユーザーが「物理行」に使ってるためだろ

285 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:25:41 ]
横書き日本語なのに段落を前後空間空けとしてレンダリングするブラウザがアホなだけ

286 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:28:32 ]
>>277
べつに誰も悔しくないと思うけどw

287 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 09:03:47 ]
>>275-278
Railsのプラグインのソースを読む機械が多いが、
ちゃんと作ってるプラグインはモジュール化しまくり、メソッド分割しまくりだな。
なんでこんなところまでちゃんとモジュール化しとんねん!て思うほど



288 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 09:49:17 ]
>>275-276
漏れは関数は25行以内(最悪でも50行程度)って教えられた
80x25のコンソールで一画面か、印刷して一ページのサイズ

289 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 09:53:55 ]
>>277
それがあるんだよ
たまに
def hoge()                                        p 123                                        end

みたいに改行せずにエディタの80文字の折り返しだけで次の行へいったつもりでソース書く馬鹿がいるんだよ
(っていうか昔の糞エディタだと2行に分かれていたものが1行に繋がってしまうケースとか良くあったんだ)

290 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 09:56:36 ]
10行君は初心者。

291 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 09:58:11 ]
>>284
いや、実態は携帯で長ったらしくスクロールさせてページ切り替わると
リロードが増えてアクセス数も増えるみたいな都市伝説があるらしい

仮に100歩ゆずってそれでリロードされるのが事実だとしても
そんな方法でアクセス数増やしてなにが嬉しいのかと

292 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 09:59:30 ]
>>289
emacsですねわかります

293 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:00:10 ]
>>288
それは従来のプログラミング言語の話だろ
わざわざRubyにそのまま持ち込む必要はない

294 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:01:16 ]
Reekっていうコードチェッカを興味本位で使ってみたが
メソッド定義が10行以上だと「長い」と指摘してくるな

295 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:02:31 ]
あんまり長くなるとインデントも深くなってくることが多いからな
すっきりさせるために短く書くのは悪いことじゃない罠

296 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:04:24 ]
>>292
一太郎だろ

297 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:05:50 ]
>>291
アメーバだっけ?芸能人ランキングのあるやつ
改行増やしてPV増やしてランキングの上を目指すんだって
本当かどうかは知らない



298 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:09:36 ]
資源の無駄遣いだなぁ

エコに反してるから改行撲滅キャンペーンした方がいいぞ

299 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:10:03 ]
ああNON STYLEの石田だっけ?

300 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:10:45 ]
とりあえず、お前らの権限で fileutils.rb とか net/imap.rb に
10行ルール適用してもらってよ。

301 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:32:50 ]
>>291 >>297
あれはPVアップ界王拳の一種で、ケータイで見たときに複数のページに分割されるのでPVがあがるってやつ
芸能人もそうだけおdPV多いとアメブロはお金もらえる仕組みがある

最近PCの情報サイトでもページ分割するのちらほら見るよね、携帯向けじゃなくても
あれPV上げるため

302 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:44:45 ]
>>293
言語の話じゃなくて環境の話じゃね?

303 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:51:12 ]
>>294
それ面白そうだなw 使ってみるか

304 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:12:10 ]
>>303
やめとけ
警告多すぎて森に隠れる木の状態になるぞ
igonoreの指定も面倒だし

305 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:14:38 ]
何事も原理主義はよくないと思います

306 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:16:32 ]
めちゃくちゃ実利だと思うが…

307 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:26:24 ]
定義済みのクラス特異メソッドをprotectedにするのってどうすればいいんでせう?

class DB
protected
self.new
super
end
end

してもクラス外で普通にDB.newできてしまったorz



308 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:28:00 ]
protectedにしてどうしたいの?

309 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:31:07 ]
具体的には、DBのインスタンスを作成する手段をDB.openに限定したいんです。
db.closeするのを忘れたくないんで。

310 名前:307 mailto:sage [2010/02/07(日) 11:40:07 ]
class Hoge
private
def self.hoge
puts 'hoge'
end
end
Hoge.hoge

でも動いちゃいますね……
そもそもクラスメソッドをprivateにするのってどうすりゃいいんでしたっけ?

311 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:40:33 ]
「DBクラスいじるならopen使え」とマニュアルに大きな赤い字で書いておけ
それとブロックつきopenの提供で充分

312 名前:307 mailto:sage [2010/02/07(日) 11:42:15 ]
www.gesource.jp/weblog/?p=473

吊ってきたいと思います。
スレ汚しすいませんでした。

313 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:48:31 ]
>>258

素直にgnuplot使うのが手っ取り早い
rgplot.rubyforge.org/


314 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 12:24:44 ]
rubyのprivateにはいつも混乱させられる
うまい覚え方はないものか

315 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 12:44:35 ]
俺も覚えられてない・・・
privateがC++なんかのprotected相当なんだっけ?

316 名前:デフォルトの名無しさん [2010/02/07(日) 13:01:40 ]
rubyのprivateは、
「任意のレシーバに対する呼び出しが出来ない」
関数っぽく書く呼び出し方のみが可能ってことね。


317 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 13:06:54 ]
「RubyでC++やJava再現しようぜ時代」の負の遺産
こんなオモチャ機能は1.9で無くなってもよかった



318 名前:デフォルトの名無しさん [2010/02/07(日) 13:07:32 ]
privateよりprotectedのほうが理解されていないと思う。


319 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 13:17:06 ]
>>317
少なくとも名称は変えるべきだったよなあ

320 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 13:23:05 ]
>>316
つまり、
class Chinko
  private def manko
  end
end
の場合、

class Chinko内で
def sounyu
  manko
end

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

chinko = Chinko.new
chinko.manko
は駄目なんだっけ?

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

()や:が必須の言語ですと気分的にも安心なのですが、
Rubyではあまり改行してるの見ない気もします。
一応、上のコードは問題ちゃんと判定されているし、
条件文内の代入文もきちんと評価されていますが、どうも不安です。
条件文の後にthenを入れておけば確実なのかなとも思うのですが・・・

322 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 13:30:37 ]
マニュアルくらいは読め
Rubyのprivateは単に見栄え上の判断しかしない

323 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 13:33:43 ]
>>321
カッコ書いて条件部分を式にすればいいじゃん

時々、カッコ書いたら死ぬ病の人が紛れ込んでるんだけど、そういう人は Ruby 使ったら駄目よ

324 名前:320 mailto:sage [2010/02/07(日) 13:36:27 ]
こんなん書いている間にマニュアル読めよ、試せよという感じですね、すいません。
  chinko = Chinko.new
  chinko.manko

   private method `manko' called for #<Chinko:0xxxxxxx> (NoMethodError)
で駄目ですね。
  tansyou.send :manko
みたいにsend経由だとOKなんですね。

325 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 13:37:53 ]
質問させて下さい。

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

puts 1 + 1 # => 2

のように、出力結果をコメントで文の右に追加してくれるスクリプトがあったと思うのですが、
どなたか御存知ありませんか?

326 名前:325 mailto:sage [2010/02/07(日) 13:41:06 ]
>>325 ですが、自己解決しました。
xmpfilter でした。

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

eigenclass - xmpfilter: automagic Test::Unit assertions/RSpec expectations and code annotations
eigenclass.org/hiki/xmpfilter

327 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 15:13:27 ]
クロージャとプロシージャの違いがわからないのですが…
sortメソッドを使うときに、a.sort{|a,b|a<=>b}とか書きますよね。この場合はどちら?



328 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 15:18:41 ]
そんな小難しい外の用語を使わずに、ブロック引数、でよい。

329 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 15:38:31 ]
クロージャとプロシージャは別概念

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

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

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

クロージャの例
def hoge
var = "hoge"
Proc.new{var}
end
closure = hoge
#p var #=> undefined local variable or method `var'
p eval('var', hoge.binding)


330 名前:329 mailto:sage [2010/02/07(日) 15:41:57 ]
MethodインスタンスではなくUnboundMethodインスタンスか

331 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 16:02:44 ]
説明は

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

でいいじゃん
それ使えばコンテキスト依存の処理になるからおおむねクロージャだ
使わない(使わなくてすむ)ならただのプロシージャ(可搬性のある処理のかたまり)

332 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:28:39 ]
2年前に書いたスクリプトを流したら90秒もかかった
当時は14秒で終えてたのに

333 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:35:39 ]
いつどこでどのように流されたんですか

334 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:54:49 ]
実行することを流すと言います。

335 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 00:08:40 ]
スパゲティコードをまるでソウメンのように流すのですね

336 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 00:24:48 ]
そうです。まさにスパゲティです。

337 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 01:23:06 ]
ためしにVMware上のUbuntuで動かしたら2.4秒だった



338 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:43:24 ]
IronRuby 6.4秒

339 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:16:30 ]
Windows版Ruby 1.8 -> 1.9で
テキストモードでのファイル読み込みが10倍ほど遅くなってるのでそのせいか?

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

自分は趣味程度にしか使ってないので困らないけど
巨大なログを処理する人とかだと、地味にいやな性能劣化なんだろうな


340 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:34:44 ]
日英辞書テキストのEDICT(SJISに変換済み、5.3MB、10万行)を Mingw版Ruby 1.8.7p160 で
ruby -e "open(ARGV.shift,'r'){|f|f.read}" edict
すると 0.42秒
Mingw版Ruby 1.9.1p0 では107秒
ちょっ、200倍遅いorz

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

K6-2 450MHzのWindows2000なんでちょっと遅いし、Rubyも最新のじゃないですが


341 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:35:14 ]
>>339
migw32使え

342 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:59:11 ]
10倍ですか...
へんに差異を吸収しようとせずエンコーディング毎に処理して欲しいもんだ
コンパイラが古いとはいえ、まさか仮想環境や.NETに負けるとは思わなかった。

↑↑↑はパズル問題を解くスクリプトで読み込みはほんの少し
書き出しは途中経過も出してるんでかなり多い
1.8.6: 220"、1.9.0: 14"、1.9.1: 90"

343 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 19:06:59 ]
スクリプト foo が多重起動しないようにするにはどうやればいいですか。
後から起動した方をすぐに殺したいです。

344 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 19:23:33 ]
ファイルを利用して排他的にするとか。
あまり好きじゃないけど。

345 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 19:27:46 ]
ロックファイルがなかったらロックファイルを作る
ロックファイルがあったら「起動中です」と言ってexit(1)する
スクリプト終了時にロックファイルを消去する

こんなのがいちばん簡単だと思う
強制終了でロックファイル消去プロセスを飛ばすと使用者層によっては悲惨だけど

346 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 19:34:15 ]
migw32どこ? 古いのしか見つからない

347 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 19:44:48 ]
mswin32(ActiveScriptRuby、gem対応の標準)
ttp://www.artonx.org/data/asr/
mingw32(RubyInstaller/OneClickInstaller、gemの古パッケージはバイナリがなくDevelopment Kitが要ることも)
ttp://rubyinstaller.org/download.html

とりあえずp0 の1.9.1 は産業廃棄物なので使って文句言うの禁止で



348 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 20:42:28 ]
ありがとうございます。ちょっとだけ速くなりました。

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

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

IronRuby 0.9.3.0 on .NET 2.0.0.0
time:5.890625

ruby 1.9.1p243 (2009-07-16 revision 24175) [i486-linux] ※VMware
time:2.392678477


349 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 23:03:02 ]
まねしてもいいよ。

unless [
   exp1,
   exp2,
   exp3,
   exp4,
   ...
].include? false
   puts "true!"
end


350 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 23:22:03 ]
>>349
釣りだよな?
Enumerable#all?
Enumerable#any?
と同じ結果を望んでるなんてことないよな?

351 名前:sage [2010/02/10(水) 00:13:38 ]
f=lambda{|x,y| x+y}
["sa","ka","wa"].map(&f.call(_,"by"))

みたいに、第二変数の束縛を先にやってから
procをつくりたいのですが、どうすればいいのでしょう?
map{...}はなしで。

352 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 00:18:31 ]
カリー化したいんでしょ?
おれそれ諦めた。

353 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 00:26:48 ]
こう?
f=lambda{|x,y| x+y}
p ["sa","ka","wa"].map(&f.curry.call("by"))

354 名前:sage [2010/02/10(水) 00:50:33 ]
お!できてる。
順番は逆だったけど、あとは適当に。

355 名前:デフォルトの名無しさん [2010/02/10(水) 00:59:39 ]
class Proc
  $__ = Object.new

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

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

まったく勧めないけど一応

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

>>347
OneClickInstllerも1.8系は1.8.6だから古いよね

357 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 08:32:02 ]
しかし、RubyInstallerってmingw32版だったのね
そして、1.8.7版が来てる!!!サンクス

問題はアップデートだな。OneClickInstaller時にアップデートしようとしたらアンインストールしろ!とか言われたからな・・・



358 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 08:59:35 ]
Ruby Installer はかなり昔から mingw32 だった
>>356みたいな人間が発展を阻害する

359 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 09:26:54 ]
阻害してるという意味ではどっちもどっちだと思う

まー、mingw32は正式版じゃないからな
正式版だけ使いたいという人にはお勧めしない
現状の正式版は中身のRubyが全然「安心の正式版」じゃないけどな
インストーラーが未熟でも中身のRubyがバグフィックスされてることのほうが重要だと思う

360 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 09:44:31 ]
>>359
正式版ってなによ
どこにそんなことが書いてある

361 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 09:51:15 ]
解読してみた

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

こんなんでどう

362 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 10:03:30 ]
わかりやすい

363 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 13:07:09 ]
>>361
thanxよくわかったw

364 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 18:00:13 ]
MSVC版では出来なくてmingw版だけで動く機能
あるいはその逆で
どんなのがありますか

365 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 18:06:00 ]
そーゆーもんはない
機能で分かれてるわけじゃない

わかんなかったら mswin32 である ActiveScriptRuby 使っとけ

366 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 19:23:29 ]
インストーラーとしてはmingwよりone click installerの方が正式版のため信頼できるが、
中身のRuby自体はmingwの方が新しい
って理解でいいの?

367 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 19:28:38 ]
thread とか lock とかは mingw の方が信頼性があるような気がする



368 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 19:31:35 ]
>>367
GIL使ってる限り信頼性は変わらない

369 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 19:38:19 ]
OneClickInstallerはインストーラー含めて正式版が作られてる
RubyInstallerはまだインストーラー含めてrc版(ベータと正式の中間)

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

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

370 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 19:58:39 ]
あああ、なんかわけわからないことに
mswin32 版を使う場合は ActiveScriptRuby のほうインストールしろ
OneClickInstaller 使って数年前の Ruby をわざわざいまさらインストールする必要もない

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

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

371 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:08:43 ]
長い

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

でいいじゃん

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

どうでもいいけどこのサイト meta charset と本文 HTML のエンコーディング食い違ってるぞ
見るたびに毎回エンコーディング指定やり直さないといかん

373 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:22:12 ]
先生,「1.8が許されるのは小(ry」と煽ってもいいのはいつ頃ですか

374 名前:デフォルトの名無しさん [2010/02/10(水) 20:22:56 ]
1.8.6はともかく1.8.7は数年無理。


375 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:24:29 ]
先生,JRubyが「Ruby 1.9 compatible now」になるのはいつ頃ですか

376 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 21:00:20 ]
>>369-370
とりあえず Windows で Ruby がめちゃくちゃ面倒糞いということがわかりました
ほんとうにありがとうございました

377 名前:デフォルトの名無しさん [2010/02/10(水) 21:01:13 ]
>>375
見た感じ遠い未来に見える。
kenai.com/projects/jruby/pages/Ruby1_9Support




378 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 21:02:47 ]
>>372
それは作者がUTF-8の普及だか何かのためにわざとやってるらしいよ


379 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 21:08:40 ]
>>377
そもそもなんでそんな時間かかるんだよ
何がネックになってるんだ

380 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 21:12:04 ]
>>379
Java からも読めるように作ること

Java VM 上で単独で動く ruby インタプリタを作るだけなら
たぶんもっと早くにプロジェクト完了してるんじゃないかな

381 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 21:55:57 ]
つか1.8.7って鬼車使えるの?

382 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 22:18:29 ]
黙れカス

383 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 22:19:06 ]
ごばく

384 名前:デフォルトの名無しさん [2010/02/10(水) 22:26:55 ]
>>381
gem install oniguruma

組み込みになるわけではないので制約はあるが。
oniguruma.rubyforge.org/use.xhtml

385 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 23:22:59 ]
oniguruma を使うようなひとなら mingw とか入れてるような
気がします・・・知らずに joni 使ってるひとも嫌少ないだろう・・・

386 名前:デフォルトの名無しさん [2010/02/10(水) 23:49:30 ]
>>381 ってjrubyの話なん?


387 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 03:58:52 ]
>>384
Requirements
* Oniguruma regular expression library (>= 4.x.x)

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

./configure
make
make install
で済む話ではあるが



388 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 22:37:00 ]
irb> p "ねこだいすき"
"\343\201\255\343\201\223\343\201\240\343\201\204\343\201\231\343\201\215"
irb> $KCODE="u"
irb> p "ねこだいすき"
"ねこだいす\343\201\215"

なんだこれ

389 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 23:22:03 ]
下のようなループってrubyだとどう書きますか?
for (i = rect->lx, j = rect->ly; i <= rect->hx; i++) map[i][j] = TRUE;

390 名前:デフォルトの名無しさん [2010/02/11(木) 23:24:17 ]
最近出るようになった気がする。
$ cat test.rb
# coding: utf-8
p 'ねこだいすき'

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

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

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

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

mput-head: ruby 1.9.2dev (2010-02-10 trunk 26632) [x86_64-darwin10.2.0]
"ねこだいすき"

391 名前:デフォルトの名無しさん [2010/02/11(木) 23:26:15 ]
>>389
jは変化してないけどいいの?
iだけならuptoでよいでしょう。


392 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 23:41:26 ]
>>391
ありがとうございます!

これをrubyに書き換えて勉強中でした。
ttp://racanhack.sourceforge.jp/rhdoc/coderect.html

393 名前:デフォルトの名無しさん [2010/02/11(木) 23:52:42 ]
>>388
redmine.ruby-lang.org/repositories/revision/ruby-18?rev=26103

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

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

これかな。

あれ、1.8.7-p248 がクリスマスリリースだったはずだが…


394 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 23:56:35 ]
Iconv::IllegalSequenceを見るのはもう飽きたお…

395 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 03:35:08 ]
何か一揆にperl5の時代に戻った気がするなw
教祖様が日本語処理ぐらい最初からまともに組み込んでてくれれば。

396 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 06:07:00 ]
iconvとnkfってどう違うの?
どう使い分けたらいいの?

397 名前:デフォルトの名無しさん [2010/02/12(金) 08:13:29 ]
nkfは
- shift_jis, euc-jp, iso-2022-jp, utf-8しか使えない。
- 改行コードの変換ができる。
- カタカナやアルファベットの全角半角変換ができる。
- base64のデコード/エンコードができる。

iconv
- いろんなコードが変換できる。



398 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 08:28:43 ]
>>372

ttp://www.artonx.org/diary/20100211.html#c01

399 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 08:33:31 ]
文字コード変換ならiconvが上で
その他機能がnkfにはあると
そういうこと?

400 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 08:51:30 ]
そもそも文字コード変換に上とか下とかあるんかいな
1.9のencodeとNKF/iconv/kconv/uconvの違いも教えてほしい

401 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 09:14:29 ]
動作が違うとかは置いとくと
対応してる文字コードが多いほうが上っていうことでしょ

String#encodeはよくわからんが
ttp://jp.rubyist.net/magazine/?0009-BundledLibraries

402 名前:デフォルトの名無しさん [2010/02/12(金) 09:17:58 ]
encodeは文字列のバイト表現を指定のものに変換したStringを作り、エンコード情報を設定。
encode!は自分自身の持つバイト列とエンコード情報を変える。
force_encodingは自分自身のエンコード情報のみ変える。バイト列はそのままで解釈が変わる。

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

uconvはたしか標準じゃないよな?
euc-jp, cp932(shift_jisの亜種), utf16, ucs-4に対応している。
rubyでutf-8が扱えるようになったのはuconv作者の提案したコードがもとになってる。
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/4186


403 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 09:28:13 ]
>>400
NKFはguessができるので、現在のエンコーディングが何かわからなくても変換ができる
ただ、日本語関連(とMIME)しか認識できないしLatin-1とかの指定もできない

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

1.9のEncodingはiconvを使ってる
kconvはNKFを使ってる
uconvはめんどくさいからもう使うな、使わなくても用は済むはず

404 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 09:36:07 ]
>>401
そのリンクは読んだけど総花的であんまり参考にならなかった

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

がよくわからんのですよ

405 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 09:38:35 ]
>>403
わかりやすい

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

1.9のM17Nはguessしてくれてるんだと思ってたわ。

407 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 09:47:44 ]
> メールみたいに入力のエンコーディングが
のあとに続くのが
> よく解らん場合
なのがショックだ
あれは99パーセントくらいの確率でヘッダに書いてあるまんまだと思うのだが最近は違うんか



408 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 09:49:41 ]
メールやHTMLが文字化けするのはヘッダのエンコーディングと実際のエンコーディングが違うからなんじゃないの?

409 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 09:55:24 ]
日本人しか使わないプログラムなのならNKFでいいよ
外国の人も使うならiconv「でなければならない」
MechanizeとかではNKFを組み込んでしまった日本人がいて、その部分がえんえん障害になってる
iso-8859-xはNKFのShiftJISに誤爆することがあるんだが、そのへんの処理を考慮してない


410 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 09:59:50 ]
>>407
メールの現実を知らなさ過ぎる

411 名前:デフォルトの名無しさん [2010/02/12(金) 10:11:38 ]
1.9のencodeは青学の先生のライブラリ(transcode)じゃないの?


412 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 10:37:03 ]
>>411
ttp://jp.rubyist.net/magazine/?0025-Ruby19_m17n#l76
ttp://naruse.biz/pub/20080621%20RubyKaigi%20RubyM17N.txt
ttp://www.sw.it.aoyama.ac.jp/2008/pub/RubyKaigiM17N.html
これか

1.9のM17Nはiconvじゃなくてtranscodeみたいだ
また兄弟が増えちまった
よくわからなくなってきた

413 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 11:04:08 ]
1.9のEncodingの中の人はIconvだと思ってたIconvの例外出すやんキュピーンやん
と思ってたんだが出なかった
あれー、昔はIconvが例外出してなかったっけ、気のせいか

irb> "@".encode(::Encoding::SHIFT_JIS)
Encoding::UndefinedConversionError: "\xE2\x91\xA0" from UTF-8 to Shift_JIS
irb> "@".encode(::Encoding::CP932)
"?@"


414 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 11:08:15 ]
うちは大家族ですから^^;
おとーちゃんビシッと言ってやりな

って言うは簡単だけど結構面倒だよね…

415 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 11:54:27 ]
うっぜぇ変なもん作るなよ
rubyってiconvすら実装されてない糞言語だったのか

416 名前:デフォルトの名無しさん [2010/02/12(金) 11:58:46 ]
馬鹿発見。


417 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 12:15:08 ]
みてみて!
Ruby でクイックソート書いてみた。

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

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

ary.dup とかした方がいいのだろうか。
ま、いいや。



418 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 12:27:58 ]
irb> Iconv.conv('shift_jis', 'utf-8', "\302\273")
Iconv::IllegalSequence: "\302\273"
irb> Iconv.conv('cp932', 'utf-8', "\302\273")
Iconv::IllegalSequence: "\302\273"

» (&raquo; 、RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (U+00BB)、終わりギュメ)
を含むUTF-8文字列をIconvでShift_JISっぽい文字列にしたいんですが…

419 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 12:43:39 ]
>>417
受け取ったArrayを中途半端に破壊してるのは……まあ確かにまずいかも
アルゴリズム的な補足をするなら、単純かつ美しい実装ならそれでもいいけど、
実用上はピボットの取り方を工夫しないといけない

420 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 12:44:32 ]
irb1.9> "\302\273".encode('SHIFT_JIS')
Encoding::UndefinedConversionError: "\xC2\xBB" from UTF-8 to Shift_JIS

そもそもだめぽい

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

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

nkf もできるよ

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

そんな根本的に違う指定ってそんなにあったっけ?

422 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 13:00:01 ]
>>418
変換表に定義されてないんで、変換前に別の文字にgsubするのが正解

423 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 13:13:10 ]
>>418
422が書いているようにgsubするのもありだが
変換時の戻り値で分岐するというやり方もある
詳細は下記の "Encoding::Converter#primitive_convert" の項目参照
jp.rubyist.net/magazine/?0025-Ruby19_m17n#l76

424 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 13:26:50 ]
>>421
実際にメーラーを書いて運用してみたらいい

425 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 14:06:43 ]
kconvの "\302\273".tosjisでは"\x91\xB9"になるな
エラー出して教えてくれたほうがマシかも

426 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 17:04:09 ]
>>424
単にCP50221って話じゃないの、それだとguessは悪手なんだが

427 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 18:29:23 ]
reg2 = Regexp.new("A(.*)CD(.*)EF")
str1 = "AbbccCDasdaEF"
str1 =~ reg2

これで得られる$1と$2をループかなにかで
添字をつけて取得できないものでしょうか?



428 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 18:55:24 ]
>>427
Regexp.last_matchとか$~のこと?

429 名前:427 [2010/02/12(金) 19:21:56 ]
>>428
$~がMatchDataってオブジェクトになってるのか
ありがとう、解決しました。



430 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 19:39:54 ]
>>427
foo = reg2.match str1 とすれば、foo にその MatchData が入る

431 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 19:54:03 ]
kconvとかnkfの話はrubyと関係ねぇ…

432 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 20:14:00 ]
kconvは関係あるな
nkfは関係ないがNKFは関係あるな

433 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 21:08:09 ]
Ruby1.9で勉強していた(>>1を読んでませんでしたorz)のですが、
Railsもやってみたいということで、1.8をインストールしたいです。
ですが、Synaptic(Ubuntuのパッケージマネージャ)に1.8のフルインストールパッケージがありませんでした。
なので公式サイトにあるソースコードからインストールしようと思うのですが、
うまく1.9と共存できるのでしょうか?
宜しくお願いします。

434 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 21:26:32 ]
1.8と1.9ならおおむね問題はない
ユーザーディレクトリにインストールしても動くぞ

435 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 21:32:17 ]
ありがとうございます、今やったところ
1.9が/usr、1.8が/usr/local
にたまたまなのか入ったので問題なさそうです。
とりあえずrubyとirbコマンドは1.8で起動するようにしました。

436 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 21:35:41 ]
へえ、いつの間にか1.8なくなってたのか

437 名前:デフォルトの名無しさん [2010/02/12(金) 21:42:43 ]
参考までに、./configure するときに
1.8.7$ ./configure --prefix=$HOME --program-suffix=187 && make install
1.9.1$ ./configure --prefix=$HOME --program-suffix=19 && make install
とすると $HOME/bin/ruby187 $HOME/bin/ruby19 などが出来る。

最近はコマンド一発でruby環境を切り替えられる rvm という便利なツールもある。
(多少不安定だが)




438 名前:デフォルトの名無しさん [2010/02/12(金) 22:14:07 ]
このようなデータがある時に、重複したデータ削除したいです。
irb(main):001:0> address = Array.new
=> []
irb(main):006:0> p address
[{"name"=>"taro", "tel"=>"11111111111"}, {"name"=>"hanako", "tel"=>"22222222222"}, {"name"=>"hanako", "tel"=>"33333333333"}, {"name"=>"taro", "tel"=>"11111111111"}]

重複している {"name"=>"taro", "tel"=>"11111111111"} を削除したいです。
調べてみて uniq 使えば良いかなと思ったのですが、違うようです。
わかる方、アドバイス貰えると助かります。

439 名前:デフォルトの名無しさん [2010/02/12(金) 22:21:44 ]
uniqでいいように見えるんだけど。


440 名前:デフォルトの名無しさん [2010/02/12(金) 22:31:06 ]
>>439
失礼しました。uniq で良かったようです。

441 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 23:15:20 ]
rsenseってなんですか?

442 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 00:11:16 ]
Rubyコードを補完してくれるもの
ruby rsenseでググるといろいろ情報が見つかるよ

443 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 00:27:21 ]
>>442
ありがとうございます.メッセで飛んできて「使ってみたらおもしろいかも」って言われて気になってました.
github.com/m2ym/rsense
これですね.でもどうやって使えばいいんですか?

444 名前:デフォルトの名無しさん [2010/02/13(土) 00:47:08 ]
こいつ自体はファイルとその中での位置を与えると補完候補を返すというコマンドに
すぎないので、好みのエディタのマクロでそれを呼び出して候補を表示する部分は
自作する必要があると思う。


445 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 03:44:36 ]
>>444
ありがとうございます.Emacs使ってるんで色々みてみます.といってもなんかドキュメント少ないみたいですが;

446 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 09:23:42 ]
$gem install newgem
したら
ERROR: Error installing newgem:
rubigen requires thoughtbot-shoulda (>= 2.10.2, runtime)
とか出てきて
さらにthoughbot-shouldaを探しても見つからないんですが
newgemのインストールの仕方を教えてください

$ gem --version
1.3.5

$ ruby --version
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mswin32]

447 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 09:34:58 ]
gem install thoughtbot-shoulda --source=gems.github.com



448 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 09:36:14 ]
「or を伴う式をメソッドの引数に渡す場合は二重に括弧が必要となります。 」
ってどういう意味?


449 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 09:43:24 ]
そういうことはしないでくださいね、の意

450 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 09:43:36 ]
puts(nil or "a") だめー

puts((nil or "a")) おk

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

普通にいけたけど?

452 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 09:55:07 ]
それ括弧なし

453 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 09:57:32 ]
>>448
それ余計な文言だよな
査読者や編集者がやっぱり必要だと思う

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

p(false or "yes!")

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

なお、>>451のように引数括弧相当の存在が明確な場合はエラーにならない
この括弧は引数の括弧ではなく式を作る括弧だ

454 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 10:13:03 ]
ありがとうございます。
もしかしてメソッド名と引数を括る括弧の間を空白で空けてはいけない?
(第一引数の式を括る括弧と解釈される?)

455 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 10:26:20 ]
メソッドの引数のカッコはメソッド名と分かれてはいけない

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

puts("ruby") #=> "ruby" をメソッドに渡す
puts ("ruby") #=> ("ruby") の結果をメソッドに渡す


456 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 10:36:24 ]
ありがとうございました。
ロジカルシンキングではなくイマジネーションでってことですね


457 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 10:51:47 ]
いや物凄い論理的だと思うが

引数括弧を省略するのがコンセンサスになってるのはpとかputsとかごく一部だぞ
それ以外の普通のメソッドはとりあえず括弧つけとく派が多数派だ
irbとかだと読み返すこともないから適当に省略しまくってるが



458 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 10:55:08 ]
>>456
意味不明なときは感覚なものととらえてしまうけど、
しばらくRuby使ってなれてきたらロジカルなものだと理解できるようになるよ、がんがれ

459 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 11:34:23 ]
ちょっと使ってみたんだけど、この言語(というか処理系?)、は多項式時間や指数関時間な計算をブチ転がそうとすると圧倒的に遅いわね…
なによ…まったく!

460 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 12:45:56 ]
そこらへんのしっかりしたドキュメントが無いから
どうしても試行錯誤で感覚的にならざるを得ない

461 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 13:33:34 ]
>>460
カッコで括ったら式になるってちゃんと書いてあるだろ

462 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 13:35:08 ]
そんなところで試行錯誤した覚えはないなあ

463 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 13:42:42 ]
p(2*10) #=> 20
p (2*10) #=> 20

p(2*10)*2
NoMethodError: undefined method `*' for nil:NilClass
p (2*10)*2 #=> 40

464 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 13:45:38 ]
> メソッドの引数のカッコはメソッド名と分かれてはいけない
これが書いてないだろ?

465 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 13:49:36 ]
>>459
O(nlogn)の近似アルゴリズムに変えるか、Inline C 使うか、
そもそも C で書け。

466 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 17:42:27 ]
      ,―ヽ_(((((_、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-――-、   ・ /
    i、  <(EEEEE)> ∵/    多項式時間や指数関時間な計算が遅いのは当たり前だろ
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |

467 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 19:53:39 ]
多項式時間や指数関時間の計算をRubyでやる男の人って・・・



468 名前:デフォルトの名無しさん [2010/02/13(土) 20:57:16 ]
マルチバイトの文字列のうち、ASCIIの制御文字にあたるもの(NULLとかCRとか)
を削除するには
sub /\s+/, ''
でいいですか?

0x00〜0x1fだけを削除するにはどうしたらよいですか?

469 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 21:18:32 ]
irb> p "ね\001こ\t大\025す\177き\n".gsub(/[[:cntrl:]]/){''} == "ねこ大すき"
true
irb> p "ね\001こ\t大\025す\177き\n".gsub(/(?![[:space:]])[[:cntrl:]]/){''} == "ね こ\t大すき\n"
true


470 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 21:18:33 ]
普通に
/[\x00-\x1f]/
じゃダメなの?

471 名前:デフォルトの名無しさん [2010/02/13(土) 21:21:50 ]
飼ってたインコを食べたので猫はきらいです

472 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 21:29:55 ]
>>469
名前つきでわかりやすそうに見えて実はわかりにくいというなんとも

473 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 21:30:57 ]
キャリッジリターンやラインフィードは立派なコントロールコードですよ

474 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 21:35:40 ]
>>470
いいんじゃまいか

475 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 21:42:39 ]
> 0x00〜0x1fだけを削除するにはどうしたらよいですか?
こういうの見るたび、DELは消さなくていいんだろうか、といつも思う

476 名前:デフォルトの名無しさん [2010/02/13(土) 21:55:53 ]
ISO-2022-JP文字列に対して実行してESC(0x1B)を消されてしまえー。


477 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 22:07:14 ]
>>467
Ruby を愛しています
ゆるしてください



478 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 22:25:51 ]
童貞のくせに愛なんて言葉を軽々しく使うな

479 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 22:46:25 ]
rubyはJavaの1000倍の生産性があると聞いてやってきました

480 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 22:54:29 ]
エロ画像を一括でスクリプトとか書くならそれぐらいあるかもしれない

481 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 23:05:47 ]
RubyでJSON(と言うかJavaScriptのオブジェクトの記述)をパースしたいのですが
require "yaml"
p YAML.load('{"num":"123456789"}')
とかやるとエラーになってパースできません。何か良い方法があったら教えてください
p YAML.load('{"num": "123456789"}')
ならパースできるようですが、JavaScript的にはどっちでも通るはず・・・

482 名前:デフォルトの名無しさん [2010/02/13(土) 23:39:39 ]
# 正しいところを見ているのかちょっと自信がないけど。

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

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

仕様かも?



483 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:41:07 ]
面倒でなければ、gem install jsonで
JSON.parse(json_str)
するのが簡単で確実。

484 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 08:04:15 ]
ちょっとあなた
RubyInlineでインスタンス変数を参照する方法がわかりませんわよ

485 名前:デフォルトの名無しさん [2010/02/14(日) 10:32:41 ]
jp.rubyist.net/magazine/?0009-YAML にもコロンの後にはスペースとしつこく書いてあるな。
YAMLのフロースタイルがJSONとして評価できたとしても、逆ではないってことかな。


486 名前:デフォルトの名無しさん [2010/02/14(日) 10:34:53 ]
>>484
使ったことないけど、Cの世界にいるときは rb_obj_ivar_get じゃねーの?

487 名前:デフォルトの名無しさん [2010/02/14(日) 10:38:14 ]
ja.wikipedia.org/wiki/JavaScript_Object_Notation

他のデータ記述法との関係
但し、厳密にはJSONはYAMLのサブセットではない[3]。具体的には配列とハッシュの区切りを
それぞれ, のようにカンマ+スペースの形にしたときにのみYAMLのサブセットとなる。したがっ
て、YAML.loadといったYAMLのルーチンを流用してJSONデータを読み込む場合は、あらかじ
め区切りの文字をYAMLと互換性を保つようにしておく必要がある。




488 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 12:42:36 ]
さすがにJSONをYAMLのライブラリで読むのは横着だろうw

489 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 13:02:11 ]
何でそんなしょぼいところで非互換性持たせてるんだ

490 名前:デフォルトの名無しさん [2010/02/14(日) 13:11:56 ]
たまたま似てるだけであって互換性を意図的に持たせようとしたわけではないから。


491 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 13:20:42 ]
たまたまと言い張るには似すぎだろ

492 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 13:25:56 ]
>>489
サブセットにしようと思って作ったんだけど手作業での網羅が漏れてたらしくて

493 名前:デフォルトの名無しさん [2010/02/14(日) 13:42:37 ]
何に怒りをぶつけているんだろう。


494 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 14:12:08 ]
お客様がいらしてるご様子

495 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 14:20:09 ]
>>494
こんなので「怒ってる」とかありえんよな
素直にMLにだけ引き篭もってろと

496 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:41:12 ]
ruby1.9.1(mswin32)で動くプロファイラありませんか?
標準のは遅すぎて使い物になりません

497 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:49:59 ]
自分で作れるよ



498 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:25:54 ]
どうやって作るのですか?

499 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:43:08 ]
掲示板で説明できるようなものじゃないけど、
profile や profiler を見れば既存の作り方は書いてあるよ。
あとは処理速度を向上させる工夫をするなり、
自分で一から作るなりすればいいよ。

500 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:49:37 ]
それは標準のものでは?
自分で書いたからといって速くなるとは思えませんが如何でしょうか?

501 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:55:21 ]
ちょっとお茶しませんか?

502 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:58:01 ]
>>500
そんなの自分次第やん

503 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:01:48 ]
Rubyの使用メモリ量を測る方法って何かありますか?
終了までの最大量だけでもわかるといいんですが

504 名前:デフォルトの名無しさん [2010/02/14(日) 17:09:23 ]
Linuxだと "/proc/#{$$}/status" とかを読んだらいろいろ分かるかもしれない。
ほかは知らん。


505 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:10:15 ]
>>503
Rubyとしては提供されてない
OSから観測してもらうしかない

506 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:10:38 ]
UNIX なら top
Windows ならタスクマネージャ


507 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:12:04 ]
valgrind使えばいけるかも



508 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:13:53 ]
まあ、/proc 使っていいなら stat のポーリングで
top コマンドみたいにやればいいんだけどさ。

libproc.so って /proc の出力を露骨に sscanf() してるから
あんまり汎用性ないよなーと思って。

509 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:14:45 ]
汚いコピペだなあ

510 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:21:46 ]
>>504
お前帰れって言われてんだよ

511 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:25:01 ]
>>504-508
ありがとうございます
Windowsで見たいのですがcygwinなら/proc/pid/statusは同様に使えそうな感じなんで
詳しく調べてみます

512 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:25:36 ]
>>502
自分次第とおっしゃいますと具体的にはどのような工夫がありますでしょうか?

513 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:33:21 ]
ruby-profは?コンパイルはがんばれ

514 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:43:59 ]
いや、早い話、インストールするだけで動くものはありませんかってことです。
ruby-profはドキュメントでは1.9対応を謳っていましたがWindows用のものは
msvcrt-ruby18.dllが見つからないと表示され、1.8用のDLLを参照しようと
してしまい動きませんでした。

515 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 18:05:12 ]
Rubyコミュニティで自分で作れと言われたらそれは
ありませんごめんなさいという意味です。
素直にあきらめましょう。

516 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 18:21:32 ]
それを先に言ってください

517 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 18:32:48 ]
無いなら自分で作ればいいってだけの話だな。




518 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 18:53:46 ]
初心者にそれを求めるのは酷

519 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 18:59:13 ]
というか普通に動くが

520 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 19:02:58 ]
何を使っているんですか?

521 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 19:16:29 ]
やり方わからなくて詰まるくらいなら経験たまるまで素直に1.8だけ使えやオラ、とか思わなくもない

522 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 19:38:21 ]
コンパイルさえできればいいんだから、コンパイラ入れるかmingw32使ってみるというのはどう

523 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 20:48:23 ]
妹にチョコもらってしまった…

524 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 21:59:36 ]
やれるのかやれないのかハッキリしてよ

525 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:04:51 ]
チョコくれたんだから実はOKという意思表示なのでは

526 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:07:05 ]
女だってやりたいんだよ
童貞は知らないだろうけど

527 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:24:22 ]
女がやりたがってるのは好きな男とだぞ
勘違いしちゃダメだぞ



528 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:25:07 ]
やべ
勘違いしてた

529 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:26:22 ]
インターフェースは同じはず
そこはポリモーフィズムで…

530 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:27:51 ]
スレ違いだからもう終わりよ、みなさん。
いろいろと参考になりましたが。

531 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:25:51 ]
童貞きめえ
女に植えてんだなかわいそうにおまえら

532 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:29:19 ]
コンピュータばかりいじりすぎて
外の世界が見えません。

533 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 00:06:07 ]
gemをインストールしたあと使おうとすると no such file to load になるんだけど
どうすれば使えるようになるの?


534 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 00:25:35 ]
>>533
そのgemのインストール自体は正常に終わっているとすると、
require 'rubygems'
require 'gemのライブラリ'
で使えるようになるはずだが。(つまり、毎回rubygemsをrequireする必要がある)

たとえば、ちょっとjsonの場合はこんな感じ。
$ sudo gem install json
$ irb
irb> require 'rubygems'
irb> require 'json'
irb> JSON.parse('{"num":"123456789"}')
=> {"num"=>"123456789"}


535 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 00:26:04 ]
require "rubygems"

536 名前:534 mailto:sage [2010/02/15(月) 00:26:52 ]
書き途中で送信してしまった。
× たとえば、ちょっとjsonの場合はこんな感じ。
○ たとえば、ちょっと前のレスのjsonの場合はこんな感じ。


537 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 00:28:56 ]
webos-goodies.jp/archives/51106257.html



538 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 00:57:22 ]
sudoをつけてなかったのが敗因だった。ありがとう

539 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 01:12:58 ]
--pre とか付けると no such file to load となる
すばらしいマイエンバイロンメント ruby 1.8.2、 gems 0.9

いきなり詰んだorz

540 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 01:19:53 ]
ysky.vox.com/library/post/gemsのオプション仕様が変わった.html

あした gems 自体を update させてもう一度やってみょ
寝るべzzz

541 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 01:30:34 ]
いちはちに…

542 名前:デフォルトの名無しさん [2010/02/15(月) 07:52:31 ]
>>539
なんのための--preか知らんが、Rails 3βとかは1.8.7以降でないと動かんぞ。


543 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 08:05:05 ]
ていうか1.8.2は5年以上前の不安定版なんだが
今更これ使うくらいなら俺はPerlをやる

544 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 08:13:11 ]
Pythonは?

545 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 09:07:03 ]
JSON is YAML って言っている人はいるけど、本当に上位互換になるのは 1.2 から。
で、Ruby 標準添付の syck は 1.0 なので

546 名前:デフォルトの名無しさん [2010/02/15(月) 10:19:49 ]
_why行方不明だし、どうなるんだろ Syck。


547 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 10:32:31 ]
どうなるもなにも、これまでの「優秀だったがサポートがなくなったライブラリ」と同様の道を辿る



548 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 10:49:22 ]
1.8用のtranscodeっぽいものってない?
バイト列とエンコーディングを投げるとバイト列の適切な区切り位置を記憶してくれるライブラリみたいな

549 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 10:59:07 ]
>>546
Aaron さんが互換ライブラリを開発中

>>548
Iconv じゃダメですか

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

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

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

1次元にするには、どのように改善すれば良いでしょうか。

551 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:17:25 ]
[1, 2, [3, 4, [5]], 6].flatten

552 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:21:42 ]
>>551

おおお!! このようなメソッドが既にあるのですね。
ありがとうございます!

553 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:34:29 ]
flatten使うべきだけど、後学のために

def split_ary(ary, local_ary = [])
 ary.each {|a|
  if a.kind_of? Array
   split_ary(a, local_ary)
  else
   local_ary << a
 end
 }
 local_ary
end


554 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:47:28 ]
>>553

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

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

ありがとうございました。


555 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 13:07:36 ]
すごく重要なことだけど、多次元配列はRuby標準では存在しない
ただの入れ子になった配列
多次元であるかのように振舞うことはない

556 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 15:28:12 ]
irb(main):006:0> (5.6 * 10500).to_i
=> 58799

58800になってほしかったんですが、なぜこんな風になってしまうんでしょう?


557 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 15:31:43 ]
www.google.co.jp/search?num=30&hl=ja&q=ruby+%E5%9B%9B%E6%8D%A8%E4%BA%94%E5%85%A5&btnG=%E6%A4%9C%E7%B4%A2&lr=



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

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

ちなみに日本語以外にも対応したいですというか日本語だけでいいなら悩みません

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

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

もし本当に厳密に計算を行いたいのならbigdecimalライブラリを使う
irb> require 'bigdecimal'
irb> (BigDecimal.new("5.6")*BigDecimal.new("10500")).to_s
"0.588E5"


560 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 15:59:21 ]
>>559>>557から読み取れというのは酷だな

561 名前:デフォルトの名無しさん [2010/02/15(月) 16:01:17 ]
「なんで期待した値にならないのか」の答えじゃなくて
「とにかく望んだ値を得る方法」だものな。


562 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 16:08:44 ]
まあ、暇な人がリンクをたどって(または単に自前の知識で)説明してくれるだろうと期待して
情報のポインタだけぶん投げるというのは省労力的にはアリではある
どっちかっちゃFAQに近いし

563 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:36:31 ]
BigDecimal.を見るとなぜかマルちゃんのでかまるを思い出す

564 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:58:21 ]
rubyがメインにしているOSって何ですか?

565 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:58:49 ]
linux

566 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:01:12 ]
どのlinuxでしょうか?

567 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:02:15 ]
debian
といってもubuntuやFedoraとかでもそう振る舞いは変わらないと思う



568 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:05:57 ]
Linux上で適当にコンパイルされたRubyで動作させるスクリプトは、
Windows上で慎重にコンパイルされたRubyで動作させるスクリプトの倍以上の速度を誇る

569 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:06:13 ]
DebianはPythonマンセーって感じだけどね。

570 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:12:46 ]
debianはデスクトップにもサーバーにも使えるから使い勝手がいいんだよね
うちの会社は全PCdebian

571 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:13:21 ]
Rubyをシステムスクリプトに組み込むなんて狂気の沙汰だ
しかもDebianのシステムを中途半端にRedHat系列に再現するとかありえん

572 名前:デフォルトの名無しさん [2010/02/15(月) 19:14:04 ]
とつぜん何を。


573 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:18:29 ]
>>571
mphは目指すところは悪くなかったんだよ
しかしいかんせん当時のRubyの完成度安定度が低すぎた
良くも悪くもkondaraだな

574 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 01:37:19 ]
cgi書いてるんだけど、CGI#out でHTMLを出力する場合、ソースを全部一度に吐き出す感じになるよね?
処理しながら少しずつHTMLを出力するにはどうしたらいいの?

575 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 02:05:35 ]
ふつーに標準出力に書き出せばいいのでは

576 名前:デフォルトの名無しさん [2010/02/16(火) 02:07:58 ]
あんなもんつかわずに適当にテンプレートエンジン使ったほうがいい。


577 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 02:08:26 ]
>>575
なるほど。
標準出力でいいんですね。



578 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 03:40:26 ]
>>547
まじか
Ruby の未来は暗いな

579 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 04:13:51 ]
>>574
リストに吐き出して最後に結合

580 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 07:08:05 ]
Marshal.dump(obj[,port][,limit])を使って
データをグローバル変数に保存したいんですけど不可能ですか?


581 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 07:31:04 ]
質問の意味がわかりかねるねるねるね

582 名前:580 mailto:sage [2010/02/16(火) 07:38:37 ]
def save_bitmap
file = File.open("test.txt", "wb")
Marshal.dump(@data, file)
file.close
end
これだとtest.txt内に@dataを保存しますよね?
これをグローバル変数に保存したいのですが
def save_bitmap
file = File.open($data, "wb")
Marshal.dump(@data, file)
file.close
end
これじゃだめですか?


583 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 08:04:57 ]
$dataと@dataってどうなの

$data = Marshal.dump(@data) は違うの?というかこれなら
$data = @data でいいじゃん

584 名前:580 mailto:sage [2010/02/16(火) 08:36:03 ]
できましたありがとうございました
考えすぎていたようです

585 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 08:46:10 ]
というかグローバル変数使うなかっこ悪いから
トップレベルのローカル変数とメソッドの引数でデータの受け渡ししろ

586 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 08:55:45 ]
ディープコピーの常套手段ってやつか

587 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 09:16:12 ]
引数と返り値で充分なやり取りだと思えるかどうかには自覚と時間が必要

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

と感じるにはちょっと時間が要る
他人から言われてもえーって感じでピンとこない



588 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 11:36:08 ]
>>579
メモリ食いつぶした。
謝罪と賠償を(ry

589 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 14:39:42 ]
配列で指定した要素を一つだけ削除する命令ってないですか?
[1,2,3,4,5,1,1,1,1,1]
これの1を一つ削除して
[2,3,4,5,1,1,1,1,1]
にしたいんですが。delete(val)だと全部消しちゃいますよね。


590 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 14:48:27 ]
>>589
それなんかやたらよく聞かれるんだが、メソッド一発でやる方法は特にない

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

["a", "c", "b", "a"]

591 名前:589 mailto:sage [2010/02/16(火) 15:08:55 ]
def delete_learn_data(delete_id)
$game_system.golem_learn_data.each_with_index{ |value, i|
if delete_id == value
$game_system.golem_learn_data.delete_at(i)
break
end
}
end
とりあえずこれでいけました。ありがとうございました。

592 名前:デフォルトの名無しさん [2010/02/17(水) 13:47:36 ]
メソッドhogeの引数としてフォーマット用文字列と任意個の文字列を渡して
formatで整形した文字列を作りたいんだけど
hogeの引数はどんな形で渡したらいい?

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

以下のようにしたらsは1つの配列として扱われてformatに
too few argumentsと言われてしまいました
def hoge(f, *s)
 s = format(f, s)
end
hoge('%s %s', 'aaa', 'bbb')

593 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 13:50:15 ]
format(f, *s)

594 名前:デフォルトの名無しさん [2010/02/17(水) 14:53:03 ]
thx

595 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 15:23:25 ]
Rubyやってて良かったことを教えて下さい。

596 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 15:37:21 ]
自分用スクリプトでPerlを使わなくて済んだ
オブジェクト指向に触れてなんとなく理解した気になれた

597 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 15:47:09 ]
railsに尽きるなぁ
rails無かったら何の価値も無かった



598 名前:デフォルトの名無しさん [2010/02/17(水) 16:48:37 ]
ニワカ乙


599 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 17:00:24 ]
プッ
反論してみろよカス

600 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 17:34:43 ]
論に対してしか反論はありえない。

601 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 17:36:48 ]
mechanizeとnokogiri(hpricot)はなかなかいいライブラリだとは思った
あれら程手軽に使えるスクレイピングライブラリは他の言語では知らない

602 名前:デフォルトの名無しさん [2010/02/17(水) 17:46:35 ]
railsを作ってしまうような香具師がrailsが存在する前から評価してた言語ってだけで十分な気がする。


603 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 19:30:01 ]
でも他のスレでRubyの4文字を出すと馬鹿にされる

604 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 19:31:33 ]
>>595
Javaを使わなくて済むようになった・・・まあRubyじゃなくてもいいんだけど。

>>602
なんでやねん。そんな理由がだれをどう嬉しくするのさ。

605 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:00:29 ]
>>603
難解な言語技術を修得しているという自負が
平易な言語に対する無体な態度につながるんだろうか

606 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:14:05 ]
>>605
Ruby厨でぐぐれ

607 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:35:35 ]
Java厨の嫉妬は凄いよな。



608 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:37:40 ]
・ Rubyをちょっと齧ったばかりで興奮して他スレで煩いRuby厨
・ 生まれてこのかたJavaしか知らない自称中級者

を混ぜると危険というかひたすら面倒

609 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:39:16 ]
そろそろ隔離スレ行こうね

610 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:40:08 ]
・ Rubyには興味がないがRubyに関わった遣り取りにウンザリしてもう排除したいと思ってる人

を追加

というか本スレでやれ


611 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:41:40 ]
変態同士仲良くしろよ

612 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 23:14:40 ]
..           (.
.            )
      ,―ヽ__(__、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-――-、   ・ /
    i、  <(EEEEE)> ∵/    IPA Rubyスレは誰でもウェルカム
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |
      >   ヽ. ハ  |   ||

613 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 23:18:26 ]
>>612
いつも思うんだけど
この人だれ??

614 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 23:21:18 ]
ミスターつこうた

615 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 23:33:15 ]
>>613
こいつにレスしたのお前だけだぞ

616 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 23:39:16 ]
申し訳ごめんなさい。

617 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 01:44:24 ]
絶対にゆるさない



618 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 19:54:41 ]
StarRuby今落としたんですが
この板にスレッドが無いのが気になりました。
ゲーム開発用であんまり需要無いんですか?


619 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 20:03:48 ]
ありませんというかそもそもゲーム製作専用系は板違い

【Ruby/SDL他】Rubyでゲーム制作・総合スレッド
ttp://pc11.2ch.net/test/read.cgi/gamedev/1207069887/

620 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 21:07:28 ]
>>595
手軽に短くかっこよくツールが書けること。
あと、Rails

621 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 21:11:38 ]
Pythonから来ました。
自分用のプログラムを書くときに、クラス定義のときに組み込みクラスを
オーバーライドするのが怖いので、トップレベルにMyAppみたいな名前の
モジュールを作ってから、その中にクラスを定義しているのですが、
これはRuby文化に反するのでしょうか?

また、Pythonのように、組み込みクラスはすべて、Builtin::String, Builtin::Arrayみたい
になってたらなあ、と思ったのですが、何故こうなっていないのでしょうか?

622 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 21:36:19 ]
適当なモジュールでくるむのは普通に行われているし、実質推奨になっている
まあ、それ自体が被る可能性もあるが

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

…まあ、オープンクラスっても限度あんだろ、とはみんなちょっと思ってはいる
ある意味初期の見通しミスをずるずる引きずってるわけで

623 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 21:57:05 ]
本当のところはMatzに聞かなきゃ分からんが、
デメリットを勘案の上でオープンクラスを選択したのは間違いないわけだから
設計意図どおりだと思うけどなあ

オープンクラスの影響範囲を押さえ込む名前空間システムが
検討されてるらしいが、いつ実装になるやら

624 名前:621 mailto:sage [2010/02/18(木) 21:59:30 ]
>>622
むしろ推奨でしたか。安心しました。有り難うございます。

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

もし初期の見通しをひきずっているのなら、Ruby2.0なんてのが出る時には
改善されるかもしれませんね。

625 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:05:47 ]
いわゆる Std:: を使わないのはオープンクラス主義と反するからであるのは間違いない

626 名前:621 mailto:sage [2010/02/18(木) 22:08:53 ]
>>623
オープンクラスなのは、メリットがとても大きいと思うので気にならないのですが、
どうして、組み込みをすべてトップレベルにしてあるのかなと思ったのです。
自分用のクラスを定義するときには、組み込みクラスの名前はすべてすでに使われているわけで、
名前空間がクリーンじゃないなと。

> オープンクラスの影響範囲を押さえ込む名前空間システム
そんなのが実現したらすごそうですね。

627 名前:デフォルトの名無しさん [2010/02/18(木) 22:22:54 ]
selector namespace だっけ?




628 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:30:06 ]
python も
str = 'hoge'
みたいなことすると
あほなことになるが

629 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:45:07 ]
それは__builtins__.strを上書きしてるわけじゃないから、
モジュール外に被害は出ないだろ。

630 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:20:07 ]
lambdaについて

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

Cで実装されているのかもしれませんが、もしRubyで実装するとすればどのようになるのか教えてください。

631 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:23:39 ]
クラスメソッドを定義しようとして
def Fixnum.bar
end
と書いたら
1.bar

NoMethodError: undefined method `bar' for 1:Fixnum
になります。どうすればいいんでしょうか?

632 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:31:22 ]
>>631
1.class.bar

Rubyのクラスメソッドは、その定数で表されるclassオブジェクトのインスタンスメソッドという程度の意味しかない

633 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:31:51 ]
クラスメソッドはインスタンスからは呼べないんじゃないの?
1はFixnumクラスのインスタンスだし。
とりあえず、クラスメソッドと定義しているわけだから
Fixnum.barとすれば動く。

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



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

本当に理解したければBindingオブジェクトの知識が要ると思う

635 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:40:35 ]
インスタンスメソッドを定義したかったのでした

636 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:51:27 ]
>>635
それなら
class Fixnum
def bar
puts "bar"
end
end
と書いて、1.barとすればいい

637 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:53:33 ]
Fixnumにメソッド追加するのはおおむねキモいけどな
キモいと自分で感じるまではこれは仕方ない
便利に使うといい



638 名前:630 mailto:sage [2010/02/19(金) 01:54:53 ]
>>634
Proc.new == Kernel#procですよね?(Ruby1.9)

Bindingオブジェクトは雰囲気だけは分かります。どうか教えてください。
returnの挙動をどうやってメタプログラミングしたのかが知りたいのです。
すみません。

639 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 02:10:55 ]
あー何度もすみません。特異クラスがおおもとの疑問でした。(試行錯誤の中で>>631へ)
特異クラスの動作を見てみようと
a = 1
def a.foo
end
とすると
TypeError: can't define singleton method "foo" for Fixnum
となるのでどうすればいいのかなと

640 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 02:20:38 ]
>>639
俺もあまり詳しくないが、とりあえずFixnumとかSymbolとかは特異クラスが定義できない。
a = 1
b = 1
としたときにaとbのobject_idが同じ(aもbも同じオブジェクトを指す)になるのと関係あると思う。
String等その他大勢では
a = 'foo'
b = 'foo'
とするとaとbは違うオブジェクトを指すし、これらには特異クラスが定義できるはず。

641 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 02:21:31 ]
>>639
Fixnux/Symbol/Nil/True/Falseあたりは処理効率の都合で特殊な実装になってるから
その手の実験では避けた方がいい

642 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 02:23:12 ]
>>638
わああめんどくせえええ
一応ここはCで書いてあるはず
local_jump_error使ってるんじゃなかろうか
本スレ行き

643 名前:638 mailto:sage [2010/02/19(金) 02:28:13 ]
>>642
すみません。わああ眠れねええって感じでしたので(笑)。

うは、LocalJumpErrorですか。なんかニオイますね。
初心者なのに、変なところに首を突っ込んでしまったようです。

644 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 07:31:17 ]
分かりました。ありがとうございました

645 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 09:02:57 ]
RubyForgeってところでrubyインストーラー落とせると公式に書いていますが
rubyinstaller-1.8.7-p249-rc2.exe
これを落としたいのですが10Mに7時間とかかかるんですが
他に落とせる所は無いんですか?


646 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 09:50:54 ]
なんとなくRubyでゲーム書いてみたくなったんだけど
2Dで手軽にって感じだと何のライブラリ使うのがいいかね?

647 名前:デフォルトの名無しさん [2010/02/19(金) 10:24:06 ]
SDL
Miyako(SDL使用) 書籍あり
RPGツクール(古いか)
くらい?




648 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 10:27:01 ]
>>645
回線速度で割り算して妥当でないなら時間置いてやり直せ
10MBくらいのファイルなのはRubyならどこも同じ

649 名前:645 mailto:sage [2010/02/19(金) 10:33:33 ]
ブロードバンドスピードテスト 通信速度測定結果
www.bspeedtest.jp/ v3.0.0
測定時刻 2010/02/18 10:27:07
回線種類/線路長/OS:光ファイバ/-/Windows XP/-
サービス/ISP:-/-
サーバ1[N] 23.7Mbps
サーバ2[S] 25.8Mbps
下り受信速度: 25Mbps(25.8Mbps,3.22MByte/s)
上り送信速度: 17Mbps(17.6Mbps,2.2MByte/s)

これで7時間とかおかしいと思うんですがなんででしょうか
firefoxとか関係ないですよね
昨日の12時ぐらいにやっても同じだったんでなんででしょう

650 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 10:37:40 ]
>>643
何か目的があるの?
例えばthreadでeachのようなものを定義してreturnしたいとか?

651 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 10:41:16 ]
>>649
こっちは転送率通常
回線経路の問題かも

現在のRubyInstallerはrubygemパッケージで未対応が存在するMinGW32版だけどその覚悟はある?

652 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 11:04:06 ]
>>612
ぐぐっても見つからないんだが、どこにあるの?

653 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 11:06:45 ]
>>652
こいつにレスしたのお前が2番目だぞ

654 名前:645 mailto:sage [2010/02/19(金) 11:17:08 ]
他のPCでも試してみます
>現在のRubyInstallerはrubygemパッケージで未対応が存在するMinGW32版だけどその覚悟はある?
これの意味がよくわかりませんが初心者なのでテンプレ通り1.9.1やめて1.8.7落とそうと思ってます。
rubyinstaller-1.8.7-p249-rc2.exe ←これでいいんですよね?
star rubyってのをやりたいんですけどこれはrubyの拡張ライブラリ?っていう位置付けでいいんですか?

655 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 11:37:33 ]
しかしなんでわざわざRubyなんかでゲーム作ろうと思うんかね
「○○がRuby経由でもできるようっひょー」が目的であって、Rubyから○○を学ぶのには基本不適だろうに

>>654
arton.hp.infoseek.co.jp/indexj.html
こっちの入れれ

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

WindowsXP SP3 Rumixで導入した1.8.7を使ってます

657 名前:645 mailto:sage [2010/02/19(金) 15:32:08 ]
activescriptrubyインストールできましたありがとうございます
hello_world表示できました
エディタがあるようですがRDEとかRDTがあるようですが
みたかんじRDEがとっつきやすそうにググったら見えたんですが
RDEでいいんでしょうか?




658 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 15:39:02 ]
あー、Shift_JISでも起こるのか
早めに改定出して欲しいなあ

>>656
内部的には普通に扱えてる
p は内容そのものではなく、画面に表示しやすいように整形してから表示する
しかもバグがあって最後に日本語文字があると必ず化ける
putsで表示してみ

659 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 15:40:50 ]
>>657
どっちも別にエディタじゃない気がするが、どうしてもどっちかを使いたいのならRDEでいいよ

660 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 18:12:36 ]
>>658
バグですか
こっちはこっちで勘違いしたことやってたので全く気づきませんでしたw
ありがとうございます

661 名前:デフォルトの名無しさん [2010/02/19(金) 21:30:25 ]
文字コードを変換して読み書きしてくれるFIleクラスのラッパーライブラリってありますか?
イメージとしては

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

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

もしかしてコツがあって、こういうのは簡単に書けるものなんでしょうか?


662 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 21:35:25 ]
改行があるのなら、改行ごとに読み込んで改行ごとに文字エンコーディングを変換して最後に連結すればいい

663 名前:デフォルトの名無しさん [2010/02/19(金) 21:51:24 ]
1.9だと希望とほぼ同等のことが出来るんだけどね。

1.8の場合、文字の途中をどうするかといったことを考えずにやるなら
出力に使うメソッドをひととおりコード変換するようにオーバーライド
すればよいと思う。
writeだけのオーバーライドでいいのかな。


664 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 21:53:08 ]
>>661
1.8 と 1.9 で対処が変わってくると思うので Ruby のバージョン教えれ

665 名前:デフォルトの名無しさん [2010/02/19(金) 21:59:19 ]
>>662
Fileクラスの振りをしてそういうことをするには、どんな風なコードを書けばいいのでしょうか?

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

こういうことをやっているので、コンストラクタで@ioに渡してあげると
書き込みのタイミングでエンコーディング変換してくれる
Fileオブジェクトがあればいいなと思っています。


666 名前:デフォルトの名無しさん [2010/02/19(金) 22:00:39 ]
>>663, 664

すみません、リロードしてませんでした。
Rubyのバージョンは1.8.7です。


667 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:03:48 ]
これはひどい



668 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:04:38 ]
すいませんリロードしてませんでした
>>667>>663についてです

669 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:09:39 ]
これはひどい

670 名前:661 mailto:sage [2010/02/19(金) 22:10:20 ]
もしかしてこんなのでいいんでしょうか?動くかちょっと試してみます。

class SjisFileWriter < File
 def <<(str)
  str.kconv(Kconv::UTF8, Kconv::SJIS)
 end
end


671 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:12:03 ]
すいませんリロードしてませんでした
>>669>>668についてです

672 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:13:13 ]
これはひどい

673 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:15:56 ]
末尾再起スレでやれ

674 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 23:23:37 ]
なんなんだこの流れはw

675 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 15:25:28 ]
二次元配列的クラスを定義して配列の配列と透過的になるよう要素に
a[i][j]
のようにアクセスできるようにしたいんですがどうすればいいでしょうか?

676 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 16:26:07 ]
>>675
無理

…いや、2次元くらいなら無理じゃないんだが、
その見栄えを保持するためだけに計算する遅いクラスになるぞ
NArray の a[i, j, k] みたいな記法じゃだめですか


677 名前:デフォルトの名無しさん [2010/02/20(土) 17:59:39 ]
プログラマ三大美徳というものがありますが
Rubistにもそういったものがあるのでしょうか?



678 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 18:05:30 ]
誰かの発言に影響されるのは嫌い。

679 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 18:09:12 ]
>>677
なにもない
というか
> Rubist
というようなものがない
Railsやってる人とは仲悪いし

680 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 18:30:08 ]
Railist vs Rubyist

681 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 20:07:31 ]
>>676
ありがとうございました。
配列の配列ですでに書いてある奴をクラスに直したいなと思ったもので。

682 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 21:51:45 ]
> Railist
むしろレースウェイズと呼びたくなるファミスタ脳。

683 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 22:28:14 ]
Railsint(笑)
ポッポ屋でいいだろw

684 名前:682 mailto:sage [2010/02/20(土) 22:37:43 ]
今さら誤字に気付いた。レイルウェイズだな。
オリックスと近鉄が合併するって時にゲームファンの誰もが口にしたっけ。

685 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 02:19:19 ]
こんなコードを書きまんた
----------------------------------------
# test.rb
class Foo
 def initialize(&func)
  @func = lambda(&func)
 end
 def bar(x)
  @func.call(x)
 end
end
foo = Foo.new{ |x| return x**2 }
p foo.bar(2)
----------------------------------------

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

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

どうして?


686 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 03:16:26 ]
>> 685
難いww
とりあえず、lambdaとprocの違いはreturnの挙動の違いだよな。
そのreturnの挙動を決めるタイミングが1.8と1.9で違うんじゃね?

687 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 08:22:09 ]
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/35167
ここらへんのか



688 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 10:53:49 ]
んじゃ1.8と1.9両方で美味しく動作する
foo = Foo.new{ |x| return x**2 }
p foo.bar(2)
を実装するにはどうしたらいいんだべ?

foo = Foo.new(lambda{ |x| return x**2 }
p foo.bar(2)
なら作れたけどラムダラムダ五月蝿い感がある。

689 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 11:03:02 ]
ブロックの中で最後に評価された式の値が暗黙で返るのを利用するのがエレガントだと思う

690 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 11:27:33 ]
仕事でlambda使うケースなんて滅多にないけどな

691 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 11:32:27 ]
class Foo
 def initialize
  @func = lambda
 end
 def bar(x)
  @func.call(x)
 end
end
foo = Foo.new{ |x| return x**2 }
p foo.bar(2)

イケルがなぜか
-:3: warning: tried to create Proc object without a block
と出る

692 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 11:52:51 ]
なぜかもなにもそのまんまの理由だと思うが

693 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 12:33:42 ]
>>692

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

だと警告がでないのはなんで?

694 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 12:36:28 ]
lambdaとproc(とProc.new)は処理が違う

695 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 12:38:29 ]
Rubyのめんどくさいとこベスト3に入るところだな
きちんとした解説ページとかないものか

696 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 15:12:28 ]
# ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]
p lambda{return 0}.call #=> 0
p lambda(&lambda{return 0}).call #=> 0
p lambda(&proc{return 0}).call #=> 0

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

1.9だとKernel.#lambdaにprocを渡すとprocが帰ってくるんだな
仕様なのかBUGなのか

697 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 15:14:30 ]
&lambdaは&lambdaの誤りね



698 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 16:44:02 ]
自分は組込みの仕事なのでCを使っているんだけど、
Rails以外で仕事でRubyを使う場合、どんなものを
作っているの?

699 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 17:13:17 ]
自分の効率アップ用途以外には使わない俺スクリプト
仕事に使う中間物の生成プログラム
社内オンリーの更新頻度が高い内製プログラム

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

なくても無論なんとかなるしプロダクト自体には全く影響しないが、能率ががくっと落ちる
もちろん本質的にはRubyでなくてもよい
PerlやPython、JavaやC++(えー)で超速く安定に作れるならむしろそっちのほうがよい

700 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 17:23:18 ]
>>699
なるほど、製品レベルとなるにはまだ先のことですかね。
自分にとって現時点ではRubyは業務とは無縁の存在だけど
勉強はしておこう。

701 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 17:25:26 ]
プログラマーズベストフレンドという文言がそのまんまだな

言語オフィシャルレベルでこれを標榜してる傲ま…いや野心的なところは見たことがない
配布ライブラリなんかで言ってるところは少なくないんだけど
ttp://www.google.com/search?num=50&hl=en&lr=&q=%22a+programmer%27s+best+Friend%22

702 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 17:30:15 ]
> 製品レベルとなるにはまだ先のことですかね
永遠にないんじゃないかなあ、と最近思ってる
そういう方向には進化してない気がするし、製品を作ろうとしないほうがうまくコード書ける気がする
Eclipseがなくても製品は作れるが、ないと死ぬ、そんな位置にRubyが入り込むんじゃないかと

703 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:33:03 ]
matzもRubyは同僚に差をつける秘密兵器として使ってほしいとか
なんとか昔言ってたしな。

704 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:43:16 ]
Rubyに関わったせいで同僚と差がついてしまいましたorz

705 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:53:08 ]
Rubyでプログラミングしてると「何とかして面白いコードは書けないか」と、そこに注力して仕事が進まないんだが。
どうしてくれる!Matzは責任とれ!

706 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:53:35 ]
他社に差をつける秘密兵器だと思ってた時期がおれにもありました

707 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:58:44 ]
>>706
間違いじゃないけどね
全員がRuby相当のものを修めてる会社は強いはずだ



708 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 22:00:55 ]
しかしつまらんスレだな

709 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 22:03:43 ]
ま、ここはRubyの開発者が名無しで書き込むスレだからな。

710 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 22:13:20 ]
何かこうエロい話題は無い物か。

711 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 22:16:47 ]
おっぱいクラスとか作れば?

712 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 22:43:44 ]
>>710
このスレに何を求めてるんだw

713 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 22:45:02 ]
Rubyのアイコンが亀甲縛りに見えるぐらいしか思いつかない

714 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 01:33:59 ]
>>711
おまえのエロの限界はおっぱいまでなのか?
しかも虚構のおっぱいクラス

715 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 02:22:29 ]
エロい話題のところすみません
半年ほど前は普通にgem installできていたはずなのですが、つい最近gemを新たにupdate、installしようとすると以下のようなエラーが出るようになりました
$ sudo gem install hogehoge
ERROR: While executing gem ... (Errno::EEXIST)
File exists - /opt/local/bin/gem

環境はMac OS X(10.4.11)で、
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.5
- RUBY VERSION: 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin8]
- INSTALLATION DIRECTORY: /opt/local/bin/gem/:
- RUBY EXECUTABLE: /opt/local/bin/ruby
- EXECUTABLE DIRECTORY: /opt/local/bin/gem/:/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-darwin-8
- GEM PATHS:
- /opt/local/bin/gem/:
- /Users/******/.gem/ruby/1.8
- /opt/local/lib/ruby/gems/1.8
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- :sources => ["gems.rubyforge.org/", "gems.github.com"]
- REMOTE SOURCES:
- gems.rubyforge.org/
- gems.github.com
です


716 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 02:28:35 ]
エラーが出るようになったのはわかった。で?

717 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 02:37:30 ]
/opt/local/bin/gem か /opt/local/bin/gem/ の権限がおかしいように見える



718 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 02:53:53 ]
>>717
opt/local/bin以下をls -lしたところgemは
-rwxrwxr-x 2 root admin 548 Feb 15 15:18 gem
となっていますがrootではなくユーザー権限の方がいいのでしょうか

719 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 04:06:02 ]
権限をユーザ名にしてみたり-rwxrwxrwxにしてみたりしましたがやはり状況は変わりませんでした
なんとなく
- INSTALLATION DIRECTORY: /opt/local/bin/gem/:
の部分が
/opt/local/lib/ruby/gems/1.8
になるべきなんじゃないかという気がしてきたので今後はそちらから攻めてみようと思います
/opt/local/bin/gemは実行ファイルなのでDIRECTORYっておかしいですよね…

720 名前:715 mailto:sage [2010/02/23(火) 04:53:36 ]
連投すみません
GEM_HOME変えたら直りました
昔入れたrailsとかも全部こっちに入ってたのでいつの間にか変更されてたみたいです
ご協力ありがとうございました

721 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 15:00:19 ]
オッパイクラス マダー?

722 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 22:20:30 ]
Ruby2.0まで待て






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<176KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef