Ruby 初心者スレッド Part 34 at TECH
[2ch|▼Menu]
[前50を表示]
100:デフォルトの名無しさん
10/01/31 09:18:07
>>96
a += 1
a = a + 1

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

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

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

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

102:デフォルトの名無しさん
10/01/31 11:13:45
>>101
URLリンク(doc.okkez.net)

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

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

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

105:デフォルトの名無しさん
10/01/31 14:29:35
>>104
いや別に

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

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

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

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

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

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

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

スレリンク(tech板)
Rubyの宿題教えてください。2限目

とか。

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

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

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

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

114:デフォルトの名無しさん
10/01/31 19:23:46
>>113
require 'StringIO'
require 'pp'

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


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

115:デフォルトの名無しさん
10/01/31 19:28:48
pretty_inspect

116:デフォルトの名無しさん
10/02/01 05:34:01
Rubyは今後10年使われますか?

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

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

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

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

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

121:デフォルトの名無しさん
10/02/01 20:38:06
人の振り見て我が振り直せ。

122:デフォルトの名無しさん
10/02/01 21:02:33
Rubyっぽくして

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


123:デフォルトの名無しさん
10/02/01 22:15:25
1時間経ってもスルーされてた理由をなんとなく理解

124:デフォルトの名無しさん
10/02/01 22:56:47
>>123
たぶんその理解は間違い。


125:デフォルトの名無しさん
10/02/01 23:02:24
実際に試した人→>>123
実際に手を動かさなかった人→>>124

126:デフォルトの名無しさん
10/02/01 23:06:22
こういうのはRubyっぽいのか??

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

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

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

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

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

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

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

2.はruby/gtk使った事無いからリンク先から関係ありそうなところ
> URLリンク(ruby-gnome2.sourceforge.jp)
> URLリンク(ruby-gnome2.sourceforge.jp)

130:デフォルトの名無しさん
10/02/02 00:41:47
Tkの知識はあるんだよね

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

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

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

133:デフォルトの名無しさん
10/02/02 01:05:03
グラフはQwtがマジおすすめ
URLリンク(qwt.sourceforge.net)

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

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

134:デフォルトの名無しさん
10/02/02 01:27:16
>>129-131

128 です
ウインドウへの直接描画 - Gdk::Drawable
URLリンク(ruby-gnome2.sourceforge.jp)
こちらを見落としていたようで、先ほどのリンクと一緒に参照しながらやっていきたいと思います

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

>>133

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

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


136:デフォルトの名無しさん
10/02/02 04:15:30
PCのスペックは?それ書いてくれないと判断できないのだが

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

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

139:デフォルトの名無しさん
10/02/02 15:08:41
「単なる」っておまえReadlineを知らんのだろ

140:デフォルトの名無しさん
10/02/02 17:42:37
io = File.open 'text.gz' #俺様専用!

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

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

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

141:デフォルトの名無しさん
10/02/02 18:33:36
>>140
一緒に閉じたほうが使いやすいから

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

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

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

どうもありがとう。

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

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

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

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

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

145:デフォルトの名無しさん
10/02/02 19:34:14
>>143
f = File.open file
f.read
f.dup.seek 0
f.pos

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

146:デフォルトの名無しさん
10/02/02 21:02:46
IOのeachとlinesってまったく同じ?

147:デフォルトの名無しさん
10/02/02 22:41:29
同じ

148:デフォルトの名無しさん
10/02/03 06:52:22

Ruby on Rails 3.0 Release Notes
URLリンク(guides.rails.info)

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

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

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

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

151:デフォルトの名無しさん
10/02/03 10:29:19
えっ
BusyLoopなの?

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

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

154:デフォルトの名無しさん
10/02/03 10:39:56
お、mingwの話かスマソ

155:デフォルトの名無しさん
10/02/03 13:11:46
教祖がウィンドウズ使ってないから仕様。

156:デフォルトの名無しさん
10/02/03 14:50:51
パッチレベルをp388に上げてみるとか
Readlineのdllを最新のものにしてみるとか

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

URLリンク(gnuwin32.sourceforge.net)


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

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

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

* 結果
>ruby -d hoge.rb
Exception `LoadError' at C:/PROGRA~1/ruby-1.8/lib/ruby/vendor_ruby/1.8/rubygems.rb:1112 - no such file to load -- rubygems/defaults/operating_system
Exception `NoMethodError' at C:/PROGRA~1/ruby-1.8/lib/ruby/1.8/rational.rb:78 -undefined method `gcd' for Rational(1, 2):Rational
Exception `LoadError' at C:/PROGRA~1/ruby-1.8/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:31 - no such file to load -- mechanize
#<WWW::Mechanize::Form:0x381a3a0>
Exception `NoMethodError' at C:/PROGRA~1/ruby-1.8/lib/ruby/1.8/pp.rb:214 - undefined method `with' for #<Array:0x381a4e0>
hoge.rb:7: undefined method `with' for #<Array:0x381a4e0> (NoMethodError)

158:デフォルトの名無しさん
10/02/03 15:24:15
>>157
Mechanizeのメソッドの使い方を単に間違ってる
ここ全部読め
URLリンク(d.hatena.ne.jp)

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

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

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

つまり配列の 0 要素目

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

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

163:デフォルトの名無しさん
10/02/03 17:28:30
スレリンク(tech板)
661 デフォルトの名無しさん [sage] 2009/09/04(金) 08:12:26 ID: Be:
Windows用Rubyは MinGW版が速いと聞いてRuby on Railsで試してみた - yuum3のお仕事日記
URLリンク(d.hatena.ne.jp)
URLリンク(antoniocangiano.com)

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

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

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

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

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

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

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

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

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

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

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

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

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

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


167:デフォルトの名無しさん
10/02/03 22:35:55
>>166
ありがとうございます。出来ました。

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

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

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

168:デフォルトの名無しさん
10/02/03 22:39:45
>>169>>201を後出し条件のために予約

169:デフォルトの名無しさん
10/02/03 22:42:32
Oh翼くんロングパス

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

170:デフォルトの名無しさん
10/02/03 22:47:08
dt = a.parent
dd = dt.next_sibling

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


171:デフォルトの名無しさん
10/02/03 22:47:53
>>169
> 本当にしたいことを言え

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

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

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

お願いします。

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

173:172
10/02/04 00:10:07
すみません。まだお願いします。

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

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



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

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

176:デフォルトの名無しさん
10/02/04 00:35:15
たのしいRuby → Railsレシピブック → るびきち

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

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

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

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

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

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

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

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

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

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

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

181:149
10/02/04 02:11:00
>>156-152
サンクス

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

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

182:149
10/02/04 02:11:46
ごめん、環境書かずに送信したwww

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

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

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

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

URLリンク(amazon.co.jp)

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

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

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

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

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

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

187:デフォルトの名無しさん
10/02/04 13:37:36
>>186
nokogiri使え

188:デフォルトの名無しさん
10/02/04 13:38:08

ワロタ

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

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

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

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

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

193:デフォルトの名無しさん
10/02/04 14:22:47
OneClick Installer の被害者の方々が続々と

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

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

install_win_binary if RUBY_PLATFORM =~ /win32/

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

install_win_binary if RUBY_PLATFORM =~ /win|mingw/

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

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

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

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


198:デフォルトの名無しさん
10/02/04 17:59:08
プラットフォームの判別
URLリンク(jp.rubyist.net)

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


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

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

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

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

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

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

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

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

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

これでわかる?

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

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

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


206:デフォルトの名無しさん
10/02/04 21:17:23
>>204
URLリンク(doc.okkez.net)

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

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

207:デフォルトの名無しさん
10/02/04 22:10:58
>>203
.call 1 がどこから来るのか分からん


208:デフォルトの名無しさん
10/02/04 23:20:11
Rubyで書けばこんな定義。

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

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


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

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

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


212:デフォルトの名無しさん
10/02/05 02:11:15
わかりにくいのはSymbol#to_procのほうじゃないか

213:デフォルトの名無しさん
10/02/05 02:24:19
わかりにくいというか、ぶっちゃけわけがわからないよね

214:デフォルトの名無しさん
10/02/05 04:33:05
sort_by(&:length) とか便利

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

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

217:デフォルトの名無しさん
10/02/05 09:24:14
簡潔さを追求しすぎてパァール化してるな

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

219:デフォルトの名無しさん
10/02/05 09:35:36
ところで>>206で配布してるchmファイルってみんな見れてるのか?

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

以前は URLリンク(elbereth-hp.hp.infoseek.co.jp)
のchmファイルを使っていたが問題はなかった

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

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

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

221:220
10/02/05 09:46:14
220で書いてるVistaはたまたまそこにいた人が使ってたやつね。


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


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

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

224:デフォルトの名無しさん
10/02/05 11:44:27
>>223
嫌がらせはそのへんにしとけ

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

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

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


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

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

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

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

229:デフォルトの名無しさん
10/02/05 14:46:34
zipped htmlでくれ

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

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

231:デフォルトの名無しさん
10/02/05 15:38:21
>>224, >>225, >>226
ありがとう
また一つ賢くなった

232:デフォルトの名無しさん
10/02/05 16:18:43
スレリンク(tech板)
【ActiveScript】RubyをWindowsで使うスレ【GUI】

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

234:デフォルトの名無しさん
10/02/05 19:50:56
>>233
URLリンク(doc.okkez.net)
> self に対応する Proc オブジェクトを返します。

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

235:デフォルトの名無しさん
10/02/05 20:16:44
>>234
そこはすでに読んだ〜よ

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

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

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

ほら書いてあった

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


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

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

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

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

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

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

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

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

243:デフォルトの名無しさん
10/02/05 21:27:11
>>242
>>240


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


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

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


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

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

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

250:デフォルトの名無しさん
10/02/05 22:26:57
名前
名前、ばかにする
ばかにする、あんた、名前

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

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

252:デフォルトの名無しさん
10/02/05 22:58:44
いや、どこにそういう仕様だと書いてあるのかってことなんだが

253:デフォルトの名無しさん
10/02/06 01:21:49
AがnilだったらAにxを代入

A = x unless A

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

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

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

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

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

257:デフォルトの名無しさん
10/02/06 02:05:03
>>253
a = a or x
a ||= x

258:デフォルトの名無しさん
10/02/06 02:54:23
>>137

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

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

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

261:デフォルトの名無しさん
10/02/06 10:17:38
>>253 に関連して

a or next
a or raise

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

262:デフォルトの名無しさん
10/02/06 10:30:03
read or die

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


264:デフォルトの名無しさん
10/02/06 10:33:27
>>263をさらに撤回する ほんとうにすまない

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

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

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

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

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

266:デフォルトの名無しさん
10/02/06 13:57:09
またミスったああああ

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

267:デフォルトの名無しさん
10/02/06 14:11:35
gdgd

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

269:デフォルトの名無しさん
10/02/06 14:17:08
>>268
Rubyのネストは怖くない
ブロックは大いに使え

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

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

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

272:デフォルトの名無しさん
10/02/06 14:27:46
>271
kwsk

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

274:デフォルトの名無しさん
10/02/06 14:43:07
まあ、メソッド多いほうがテストしやすいしな

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

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

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

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

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

279:デフォルトの名無しさん
10/02/06 16:53:24
メソッドが長いとリフレクションしにくい

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


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

281:デフォルトの名無しさん
10/02/06 16:58:58
>>278
まあ基本的には

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

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

283:デフォルトの名無しさん
10/02/06 17:07:32
空行だらけのBlogみたいで読みにくいからやめてくらさい

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

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

286:デフォルトの名無しさん
10/02/06 17:28:32
>>277
べつに誰も悔しくないと思うけどw

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

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

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

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


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5390日前に更新/176 KB
担当:undef