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


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

Rubyについて Part 30



1 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 11:47:53 ]
オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。

Ruby Home Page
www.ruby-lang.org/ja/

= 前スレ
Rubyについて Part 29
pc11.2ch.net/test/read.cgi/tech/1193668038/

過去スレ・関連スレは >>2-


101 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 18:27:31 ]
どっちにしろミラーサイトはいるな

102 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 01:51:51 ]
編集リンクだけwikiにしてあとは性的HTMLにすればいいのにね。

103 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 01:53:20 ]
つまりエロが足りないんですね。

104 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 02:03:24 ]
ミラーサイト勝手に作ったら怒られる?

105 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 02:08:35 ]
つ ttp://www.ruby-lang.org/ja/man/html/_C7DBC9DBBEF2B7EF.html

106 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 15:21:41 ]
Ruby 1.9のジェネレータって

def fib(max=1000)
a = b = 1
loop {
raise StopIteration if b > max
yield b
a, b = b, a + b
}
end

g = enum_for(:fib)
loop { p g.next }

みたいにメソッド作らないと使えない?
あとend?とかって無くなった?

107 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 15:23:59 ]
補足
1.8のGeneratorみたいなのが欲しい

108 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 15:35:54 ]
Rubyのジェネレータってcall/cc使ってて、
1.9ではcall/ccが動くんだかどうだか妖しいらしいという話があった気がするので、
すごく、こわいです。

109 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 19:00:29 ]
今さっき気づいたんだが
アンサイクロペディアって「Ruby」の項目はないのに「eRuby」の項目はあるのね



110 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:32:00 ]
>>108
伝聞で怖がる暇で確認すりゃいいのに。
動くよ。結局コアから外れたってだけ

111 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 05:25:55 ]
>>108
1.9はFiberじゃないの?

112 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 22:45:36 ]
1.9のEnumeratorはFiberを使ってる
そして、Enumeratorにnextとrewindメソッドが追加されて外部イテレータとしても使えるようになった

>あとend?とかって無くなった?
ジェネレータライブラリは1.9でもそのまま残ってるのでそれを使えといいたい所だが
エラーで動かない
1.9付属のジェネレータはcall/ccじゃなくてThreadを使うようになっているが
(YARV化で?)Thread.criticalが無くなったせいで動かなくなったようだ
そのうちFiber化するか、あるいは重複機能となったgenerator.rb自体が消滅するか…
ちなみにcall/ccを使っている1.8付属のジェネレータは1.9でも動く


113 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 23:37:46 ]
Rubyの拡張モジュール作ってて、Rubyのメインスレッドとは別のスレッド
を複数使ってる。これらのスレッドはシステムコールでブロックすること
がある。

ユーザがたとえばCTRL-C押したり、killしたりしたときに、それぞれの
スレッドのブロックを解除してあげたくて、シグナルを補足して投げて
あげたい。

だけど、あるシグナルのsigactionは他のスレッドで呼ばれるかもしれないし、
どうしたらいいか悩んでます。皆さん、どうしてます?

114 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 00:33:48 ]
> 1.9のEnumeratorはFiberを使ってる

もしよれければ、その辺の利点をkwsk

Fiberってプリエンティプティブスレッドというか、コルーティンンのことだよね?

115 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 14:41:38 ]
1.9.1まだあああああああああああああああああああああああああああああああああああ

116 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 21:44:25 ]
再帰呼び出しを伴うようなアルゴリズムの可視化ってどうやったら良いんでしょうか?

たとえば、バブルソートみたいなループのアルゴリズムを表示する場合だと、

# Model
class Bubble
def sort
# ソートのループを一度だけ実行
end
end

# View
b = Bubble.new([3, 5, 8, 1, ...])
while(not b.finished) do
b.sort
show b # GUI に表示
end

などとできると思うのですが、クイックソートみたいな再帰だと、この仕組みでできますか?
なお、できるだけソートアルゴリズムの方には描画処理を入れたくないので、Model と View に分けてます。


117 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 22:14:27 ]
>>116
Kernel#set_trace_func を使えば出来ると思うけど
使った事ないんで詳細は自分で調べてくれ

118 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 00:10:57 ]
ソートにブロック渡せるようにすれば?

119 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 00:23:47 ]
ネイティブスレッド使えれば、とか
描画イベント用の delegate渡す的なことを思ったけど、

rubyでなら >>118 が楽そうだ



120 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 02:30:01 ]
>>115
1ヶ月以上バイナリストリングの話をしてるのに出せるわけないだろwww

121 名前:113 mailto:sage [2008/01/26(土) 22:42:40 ]
自己レスですが、ドライバのclose処理をいじって、システムコールでブロック
しているスレッドを起床させることにしました。

なので、シグナルは補足しないことに。

122 名前:デフォルトの名無しさん [2008/01/27(日) 07:52:25 ]
世界的にそこそこ有名な国産プログラミング言語ってrubyだけか?

123 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 08:05:40 ]
というかほかに、和製のプログラミング言語って存在するのか?
(なでしこ等の日本語プログラミング言語は別として)

124 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 08:13:21 ]
>>123
activebasicとか

125 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 08:57:16 ]
>>123
なんで「なでしこ」を別扱いするんだよw

126 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 09:10:34 ]
HSP(笑)

127 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 09:19:13 ]
>>125
日本語プログラミング言語は、海外の人が使えるものじゃないだろう

128 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 09:32:19 ]
>>127
そんなマジレス返ってくると思ってなかった・・・

129 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 10:58:43 ]
perlで @a = (0..9, 15, 20..29) と書くと「..」を展開した配列が得られますが、rubyで[0..9, 15, 20..29]と書くと「..」の部分はRangeオブジェクトになってしまいます。
これを展開した配列にする、最もシンプルな書き方を教えてください。
自分で考えた範囲では、
[0..9, 15, 20..29].map {|e| e.respond_to?(:to_a) ? e.to_a : e}.flatten
ですが、あまりにもうざい……。



130 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 12:39:35 ]
>>129
a = [(0..9).to_a, 15, 20, (20..29).to_a].flatten

もしくは

a = (0..9).to_a + [15, 20] + (20..29).to_a

131 名前:129 mailto:sage [2008/01/27(日) 17:18:57 ]
>>130
やっぱその手の方法しかないですか。
何よりも見た目が美しくないのが気にいらないのですが、仕方がないのかなぁ。


132 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 17:21:17 ]
要素がRangeなら展開するラッパー書くしか

133 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 17:42:18 ]
respond_to?(:to_a) で判定してると
[ "hello", 1, 2, 3, 4..5 ] が [ ?h, ?e, ?l, ?l, ?o, 1, 2, 3, 4, 5 ]
になったりせんのかと危惧して試してみたら、
"hello".to_a は [ "hello" ]
なのか。


134 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 20:04:41 ]
[*0..9, 15, 20, *20..29] こんなのどうでしょう

135 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 20:16:20 ]
>>134
syntax error

136 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 20:46:45 ]
>>135
む、すまん、1.9 専用ってことで

137 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 21:22:19 ]
ruby/tkのサンプル
/ext/tk/sample/tkextlib/treectrl/demo.rb
を実行してみたもののtreectrlがバージョン2に上がったときに切り捨てたオプションがいっぱい使ってあってどうにもならんorz

138 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:16:37 ]
>>114
> Fiberってプリエンティプティブスレッドというか、コルーティンンのことだよね?
*ノン*プリエンティプティブスレッド


139 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:47:21 ]
マイクロスレッドとも言うね。
外部イテレータを実装するなら一番シンプルな解決法だと思う。



140 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:58:44 ]
>>138
うおw ノンつけてなかった、失礼した

141 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 09:47:20 ]
イテレーターからbreakしたか/しなかったか判別する方法ある?
こんなことしたい

min.upto(max) { |y|
 min.upto(max) { |x|
  return if breaked?(yeild(y, x))
 }


142 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 09:49:05 ]
例外投げる

143 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 10:50:25 ]
trunk/ruby/doc以下ってほとんど無意味だよね
rdの文書はなんかさっさと本体に埋め込むべきだし、役に立つ情報は
ほとんどない。リファレンスマニュアルを本家svnで配ればいいのに。

144 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 11:09:57 ]
>>143
誰かruby-devあたりで提案してみたら?

145 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 12:41:18 ]
例外って本当にエラーが起こったときだけ使いたい。

146 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 13:03:40 ]
LANG=ja_JP.UTF-8にしてるとベンチマークの
reverse_complementが遅い遅すぎる。というか、10分くらいたっても終了しない。
sliceに異常に時間がかかってる。LANG=Cとか-Knしておくと10秒くらいなのに。

これは・・・(;´Д`)
ふだんはみんな-KsかEUC-JPで使ってるのかなあ


147 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 15:54:48 ]
>>141
returnでtrue/falseかなんか返せば。


148 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 16:43:51 ]
Array#eachって順番保障されてたっけ?

149 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 17:34:31 ]
されるだろ常考



150 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 17:46:43 ]
>>148
何か配列にトラウマでもあるのか

151 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:41:00 ]
>>145 じゃ例外じゃない何かを投げる。具体的には throw して catch。

152 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 03:22:11 ]
というかbreakされたかどうかのyield側の判別機構ってなかったのか。
できればつけて欲しいところだなぁ

153 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:52:27 ]
d言語でrubyのライブラリかける?

154 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 18:10:50 ]
>>153
みたことないが、Cとリンクできるオブジェクトを作れるならできるはず。
マクロとかがどうなるか疑問だが。

155 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 18:13:34 ]
>>152
いや、breakされたらそもそもyield側に戻ってこない。


156 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 20:24:20 ]
Dって共有オブジェクトファイル(.soとか.dll)つくれるの?

157 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 20:46:14 ]
なぜ Ruby スレで D

158 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 22:58:18 ]
:D

159 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:22:52 ]
ttp://d.hatena.ne.jp/shibata616/20080129/1201607186



160 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:27:50 ]
共有オブジェクトがつくれたらrquire "dl"で無理矢理使えるからね。
ところで1.9からdlの仕様がだいぶ変わったんだけど全くドキュメントがなくて
困った。いや、外部のドキュメントよりもrdocで埋め込んでほしい。

161 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:05:01 ]
>>152
そんなの普通は要らないと思うが、どうしてもやりたいなら
できないことはない。おすすめはしない。

def foo
 0.upto(10) do |x|
  begin
   f = true
   yield x
   f = false
  ensure
   return if f
  end
 end
end

foo do |x|
 p x
 break if x == 5
end

162 名前:129 mailto:sage [2008/01/31(木) 01:22:00 ]
>> "abcdef".scan(/(.).(.)/) {|*a| puts a.join(", ")}
a, c
d, f
=> "abcdef"
>> "abcdef".gsub(/(.).(.)/) {|*a| puts a.join(", ")}
abc
def
=> ""
誰だ、こんな腐れ仕様にしたやつは……。gsubもscanと同じと思っておもくそハマったやんけorz

163 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 01:23:52 ]
しまった、名前欄orz

164 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 01:34:53 ]
馬鹿自慢か

165 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 02:15:30 ]
>162
regexオブジェクト使うところは素直にmatchオブジェクトを渡せと言いたいところだよな。
この手の腐れ仕様けっこうあるよね。

166 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 08:03:00 ]
1.9ってこういう一貫性の欠如は改善するの?

167 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 08:18:33 ]
$ ./ruby1.9 -e ' %Q|abcdef|.gsub(/(.).(.)/) {|*a| p a}'
["abc"]
["def"]
$ ./ruby1.9 -e ' %Q|abcdef|.scan(/(.).(.)/) {|*a| p a}'
[["a", "c"]]
[["d", "f"]]
だそうだ。

$1, $2しか使ってないから気づかなかったな。
$&は両方"abc", "def"だな。


168 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 08:22:31 ]
教訓:gsubやscanのブロックパラメータに頼るべきではない

169 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 08:41:54 ]
これは一貫性がないというより
単にscanがきわめて特殊なメソッドなんだというべきだろう

「matchでいいじゃん」には同意する



170 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 08:44:03 ]
ドビックリ最大限の法則

171 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 16:12:41 ]
gsubだけじゃなくてscanもMatchDataにすりゃいいんだ
scanが渡す配列の最初にマッチ全体を入れてさえいれば[n]のアクセスで整合性がとれてたのに
もう1.9からは別物として作り直しちゃえよ

172 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 17:24:08 ]
1.9からは別物として作っているので、その程度の非互換は問題なかったはずなのだが、
すでに1.9.0をリリースしてしまっているが、
今からでも遅くないから変更してしまえという主張もありだと思うので、
その旨MLでレスするといいと思う

173 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 17:27:30 ]
いえーい、まっつん見てるー?

174 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 18:07:12 ]
Rubyは今のまま糞であり続ければいいよ

175 名前:デフォルトの名無しさん [2008/01/31(木) 20:21:04 ]
MatzがPHPにけんかを売ってるとのことでこのスレッドに来ました
他のことなぞ気にせず粛々とやりたいことを実装し続けてればいいのに

176 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:31:14 ]
ボロクソに言う=喧嘩を売る、ではないと思うよ。

177 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:55:17 ]
Matz is nice, so we are nice.

178 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:59:25 ]
Matz is nice, we are so nice.

179 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:05:10 ]
RubyはPHPを相手にする程度の言語



180 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:08:22 ]
Rubyについて(アンチ専用) Part002
pc11.2ch.net/test/read.cgi/tech/1200210768/

181 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:19:00 ]
ここでいいよ

182 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:09:41 ]
>>171
scanをMatchDataにする場合、全体スキャンした後でイテレートすることになるん?

183 名前:デフォルトの名無しさん [2008/01/31(木) 23:18:01 ]
Cアプリへの組み込み用スクリプトとして使おうかと思ってるんだけど、公式ドキュメントにCからの呼び出しについて全く記述がないんだけど、APIリファレンスとかないの?

184 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:20:07 ]
doc.loveruby.net/refm/capi/

185 名前:162 mailto:sage [2008/01/31(木) 23:56:51 ]
>>182
??? >>171 は単に $~ をブロックパラメータとして渡せと言ってるだけだと思うが。
で、俺もそれに一票。

186 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:57:30 ]
Matz is not nice.

187 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:52:55 ]
うーん、RubyのC-APIってこういうのか。。。
公式ドキュメントとして、組み込みの手順を説明してたりってのはないのか。
例えば Python を組み込むときに使う Py_Initialize を Google で検索すると
リファレンスマニュアルがすぐに見つかるけど、
ruby_init で検索してもドキュメントらしきものは見つからず。日本で生まれたのに、
どうしてこんなにドキュメントが少ないんだろう?
RubyをCに入れるって事がマイナーな事なのか?




188 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:08:09 ]
README.EXT.ja
svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/README.EXT.ja?view=markup
www.ync-net.co.jp/~kaz/doc/refm-ja/refm0347.html
wiki.livedoor.jp/aqualung/d/Ruby%A4%CE%B3%C8%C4%A5%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA%A4%CE%BA%EE%A4%EA%CA%FD%A1%A6%C9%D5%CF%BF#content_2_14

189 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:10:14 ]
README.EXT.ja は読んだ?

...と思ったら、CにRubyを組み込むほうか。ない。

一応、「オブジェクト指向スクリプト言語Ruby」の 9.9 と、
「プログラミングRuby」の 21.7 が少しは参考になるかと。



190 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:11:56 ]
system("ruby hoge.rb");

191 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:13:36 ]
Rubyの初期化・実行

192 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:16:49 ]
>>187
ドキュメントなんてないよ
そんなのを書くぐらいなら本を書いて売るのがRubyのやり方

193 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:27:48 ]
純粋な質問なのだけど、「CにRubyを組み込む」ってどういうときに
使う?CでRubyを拡張ならよくやるのだけど。いや、CにRubyを
組み込めるのはシッテルガ。いまいち用途がピンとこないのよね。

194 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:29:08 ]
Cで書いてあるアプリのプラグインをRubyで書けるように、とか

195 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:36:00 ]
Ruby じゃなくて Python の例になるけど、
Civilization IV には Python が組み込まれていて、ゲームの進行やルール、チュートリアルの流れはそれで記述してある。
体験版をダウンロードすれば、なかに python の DLL とライブラリ一式が入ってるのが分かる。

3D グラフィックスツールの Blender やベクター画像ツールの Inkscape では
プラグインを Python で書くようになってるよ。
編集中のデータが入ったオブジェクトがプラグイン側の関数に引数として渡されるので、
好きなだけいじくり回してやれば良い。



196 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:52:18 ]
>>187
○○がしたい

ドキュメントない

コードを読んで把握

○○できた

で終わるので。

197 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:56:16 ]
String#s
String#sg
String#sc
ダサさが加速して行く…

198 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 02:06:46 ]
愕然としたね

199 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 02:17:48 ]
あんだけ普段、「名前は重要」って言っておいて
これはないだろw



200 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 02:27:29 ]
袋だたき撤回パターン

201 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 02:28:16 ]
できないからこそ言ってるんじゃないか






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<208KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef