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


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

Rubyについて Part 37



1 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 21:07:47 ]
オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。
まったりと行きましょう。

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

= 前スレ
Rubyについて Part 36
pc12.2ch.net/test/read.cgi/tech/1246174168/

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


357 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 12:58:22 ]
くだらん煽りはいらないから

358 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 13:00:14 ]
>>348からここまで全部俺の自演

359 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 19:07:44 ]
おつかれー

360 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 02:31:22 ]
関数型言語に興味があって、
積ん読してあるソフトウェアデザイン4月号の Haskell の特集を読んでみたが、
ほとんど理解できなかった

関数型言語は難しい。

Ruby などの、
・クロージャ
・メソッドの引数にブロックを渡せる
というのは理解できているつもりなんだけど

361 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 04:23:53 ]
俺でも使えるrubyは偉大

362 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 09:01:44 ]
String#inspect って中身なに?
信頼できない入力を inspect して eval して戻しても安全?

363 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 09:13:06 ]
inspect した文字列は変換器に通してはいけない
まめちしき

364 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 09:16:52 ]
eval(str.inspect) はコード実行が起こる可能性があるけど
eval(str.dump) は何も起こらないことが保証されてるんだっけ?

このへんあんま気遣ってないんだっけか、太古どっかでなんか聞いた気がする

365 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:49:12 ]
eval(str.dump) == str は保証されてる
eval(obj.inspect) は何がおきるかわからない




366 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:57:19 ]
String は dump をそのまま返してるんじゃねーかとも思う
あれわざわざオリジナルなの?

367 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 18:02:58 ]
Non-ASCIIの扱いが違う

368 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 06:21:04 ]
>>367
それは1.9のみの話? 1.8ではasciiかどうかなんて意識してなかったと思うけど、どうでしょう?

369 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 08:18:01 ]
$ /usr/bin/ruby -vKu -e 'puts [ "あ".dump, "あ".inspect ]'
ruby 1.8.6 (2008-08-11 patchlevel 287) [universal-darwin9.0]
"¥343¥201¥202"
"あ"
$ /usr/bin/ruby -vKn -e 'puts [ "あ".dump, "あ".inspect ]'
ruby 1.8.6 (2008-08-11 patchlevel 287) [universal-darwin9.0]
"¥343¥201¥202"
"¥343¥201¥202"


370 名前:369 mailto:sage [2009/09/25(金) 08:21:14 ]
なんでバックスラッシュがyenに変換されるんだろ……


371 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 08:56:00 ]
>>370
それは君が Mac を使ってるからだよ

372 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 15:13:24 ]
既出かもしれないけど、Ruby1.9で巨大なオブジェクトに対して存在しないメソッドを呼び出そうとするとハングする・・・
エラーメッセージを生成するためにinspect呼び出してるせいみたいだけど、これタイムアウトか何か設けて欲しいわ

373 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 15:22:12 ]
巨大な、て
インスタンス変数がめっちゃやたらあるとか、
ギガバイトサイズの文字列とか?

374 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 15:32:39 ]
巨大っつったけど、実は大したことなかったりする・・・
頂点をあらわすオブジェクトが50個、辺を表すオブジェクトが200個くらいのグラフなんだけど
(辺はそれぞれ長さ1の文字列と頂点一つ、頂点は長さ10〜20の整数と辺の配列をもってる)
普通にプログラミングしてたら作られ得る規模だよね、これ

CPUはE8500だし言うほど古くないと思うんだけど、、、

375 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 15:37:55 ]
そんな巨大プロジェクトにRubyを採用する方が悪い(キリッ



376 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:00:31 ]
PHP使え

377 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:04:33 ]
再現コードうpれば直るよ

378 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:06:16 ]
>>374
> 頂点をあらわすオブジェクトが50個、辺を表すオブジェクトが200個くらいのグラフなんだけど
> (辺はそれぞれ長さ1の文字列と頂点一つ、頂点は長さ10〜20の整数と辺の配列をもってる)

再帰してんのか?

379 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:14:45 ]
そのオブジェクトに自前のinspectメソッドを用意すればいいのでは

large_string = '巨大文字列' * 20 # 例えば*10000なんかだと表示が大変なことに
p large_string
def large_string.inspect
"#<巨大文字列 #<object_id:0x#{self.object_id.to_s(16)}> size=#{self.size}>"
end
large_string.foobar # => undefined method `foobar' for #<巨大文字列 #<object_id:0x156ad40> size=200> (NoMethodError)


380 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:22:30 ]
inspectのオーバーライドはしたけど、
こういうオブジェクト作るたびに、エラーメッセージ対策のためにinspectオーバーライドするのはなんかなぁ・・・と

ちなみに、ある程度inspectの結果が巨大になると、かってに#<[クラス名]:16進数文字列>に直してくれるみたいだけど、
それならいっそのこと、inspectに時間がかかるケースも想定して欲しかった、と

class A; def inspect;"A"*10 end end
A.new.hoge ==> NoMethodError: undefined method `hoge' for AAAAAAAAAA:A
class A; def inspect;"A"*10000 end end
A.new.hoge ==> NoMethodError: undefined method `hoge' for #<A:0xcc8594>

381 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:34:21 ]
>>374
グラフにループがあるとしたら、何も考えずに頂点と辺の関係をたどってたら無限ループ突入だろ

382 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:41:34 ]
>>381
ビルトインのinspectって循環参照考慮してる筈だよね
380で言った「inspectのオーバーライドはしたけど」っていうのは、ビルトインのinspectのせいで止まるから
仕方なく自前で用意した処理の軽いinspectに置換したってこと

383 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:53:34 ]
Object#inspect はインスタンス変数全部表示しようとするぞ
インスタンス変数がアホみたいに莫大だった場合はボトルネックになる

384 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:32:45 ]
pp だと pretty_print_instance_variablesを定義して簡単に回避できるけど、
単なるinspect向けにそういうのはないの?

385 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:10:14 ]
>>384は悪くないかもな。
あるいは
module Inspector
def inspect_member(name)
...
end
end
class LargeObject
extend Inspector
inspect_member :lines
end
とか



386 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 12:51:38 ]
タイムアウトも悪くないけど、
速いマシンと遅いマシンとでinspectの結果やら
p の出力が変わったりするとそれはそれで地雷かもなあ

387 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:52:14 ]
そういや、Matzにっきってもう更新されないの?

388 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 22:45:12 ]
>>387
Ruby会議でその話になったときはTwitter見てっていってた。

389 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 23:07:24 ]
TLをまとめてブログにポストするrubyスクリプトでも書いて
それで更新したらいいのに

390 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 23:11:54 ]
そんなの読みたくない

391 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 09:18:31 ]
twilog.org のこと?

392 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 10:02:00 ]
Rubyによる並列処理システム
「CloudCrowd 0.1.0」リリース
codezine.jp/article/detail/4417

393 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:27:33 ]
>>388
twitter見てみたけど、便所の落書きみたいなことしか書いてなかった・・・
blogにもどってくれよん

394 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:42:49 ]
そもそもTwitterは「基本ひとこと」「ログが長期間残らない」という点で
blogとは違ったものだしな
「Matzはblogの更新をやめた」と考えた方がいい

395 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:48:34 ]
ブログを書く手間と時間はTwitterに消えてるんだろうな
Twitterってかなり一般的になってきたけど気が散って生産性落ちたりしないのかな



396 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:53:02 ]
リアル雑談と同じようなご利益があります
同じようなご利益しかないとも言えます
同じような弊害があるとも言えるわけですが

397 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 14:25:25 ]
iPhone持ちだし、Twitter興味はあるけどね
手を出すと集中して本読んだりコード書けなくなる自信がある

398 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 19:26:24 ]
twitterも読みきれなくなってきた


399 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 19:33:50 ]
>>394
>「ログが長期間残らない」
いや、残るけど?

400 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 19:36:22 ]
どうせならここでつぶやいてよ

401 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 19:40:00 ]
うむ
元祖便所の落書きとしては是非invitationを

402 名前:メカMatz mailto:sage [2009/09/27(日) 19:40:13 ]
Matz江なう

403 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 20:08:43 ]
>>399
Twitterのログは途中で消えるよ
いやサーバに残ってるのかどうかは知らんけど、少なくともWeb上から見えなくなる

404 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 20:16:36 ]
loopっていつの日かまっとうな制御構文に格上げされる可能性はないの?

loop

end
でいいやん

405 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 20:18:46 ]
forさんよりも利用頻度が高いloop・・・



406 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 20:24:11 ]
for や while はオプションがめんどくさいからな
お前は黙って無限ループだけしてりゃいいんだよというのを黙々とこなす loop

407 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 20:38:19 ]
1.9だとloop doはwhile trueより格段に遅くて気に入らない
制御構文になったら違ってくるのかもしれないけど

408 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 20:45:42 ]
>>403
Web上からも見えるよ

一覧上からたどれなくなるだけで
個別のエントリのURLを控えておけばいつでも参照可能。

409 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:29:44 ]
>>407
そうなん?
ここに書いたらまたlength/sizeのときみたいに笹田さんが直してくれそうだな

410 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:31:55 ]
最適化の書き換えの優先度が低いんだろ
放っておいてもいつか速くなると思われる

411 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:35:53 ]
loopが、というよりyieldが遅いんでは?
最適化が本格化すると、loopをバイトコードレベルで
無限ループに書き換えるくらいはやってくれるだろう

412 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:36:01 ]
よし、おまえらささださん方面に電波最大出力だ

413 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:36:27 ]
「いつか」とか「本格化すると」じゃなくて、今速くして欲しいんだよね

414 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:41:53 ]
今すぐ切実に早くしたいならwhile trueに書き変えろよw

415 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:42:32 ]
>>413
Rubyのソースコード書き変えて再コンパイルしれ
たぶんいちばん早い



416 名前:デフォルトの名無しさん [2009/09/27(日) 21:48:40 ]
length/sizeって何があったの?
本人降臨したの?

417 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:02:53 ]
>>414
切実に速くしたかったらCで書くだろJK
せっかく超高級言語つかってんだし、loop do endって書くキモチを
大事にしたいんだもん

418 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:19:41 ]
むしろforが要らない子になってね?

419 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:03:27 ]
rubyそのものを最適化オプションガリガリ付けてコンパイルすればいいんじゃね

420 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 06:44:34 ]
if RUBY_VERSION >= '1.9.0' then
str.force_encoding(::Encoding::ASCII_8BIT)
end

について本スレで何かコメントでもあれば

421 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 07:01:52 ]
今時thenなんて使わないよね

422 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 08:01:53 ]
いや全然

423 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 08:05:40 ]
thenだけにー

424 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 08:07:52 ]
>>421
てめえちょっと表出ろ

425 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 08:10:26 ]
::Encoding::ASCII_8BIT より "ASCII-8BIT" のほうが短くていいな



426 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 08:22:33 ]
やたら短さだけに拘る人間の80パーセントはちんこ短い

427 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 08:25:15 ]
        で
        ト
        ン
        セ
       |
       パ
       0
       2
      り
     残
    た
よかっ

428 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 08:34:26 ]
respond_to?(:force_encoding) しろとか defined?(::Encoding) 使えとか言われてたな

429 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 11:29:54 ]
A-Zでカテゴリ選んで
A-Zで登録アプリを26^2個呼び出せる
CUIなランチャ作ったけど起動が重いな。
Lightspeed Languageの登場が望まれる。

430 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 11:50:50 ]
>>370
SafariというかWebkitの人が直してくれないから
https://bugs.webkit.org/show_bug.cgi?id=24906

431 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 11:53:41 ]
>>420
RUBY_VERSIONじゃなくて、>>428の言うとおりforce_encodingかEncoding見てください。

なお、勝手に俺バージョンのforce_encodingやEncodingを1.8で定義しないように。
その辺を見て分岐することが推奨されているので、MRI以外で死にます。

432 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 11:55:47 ]
>>420 >>425
文字列リテラル使うとオブジェクトが増える。

433 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 11:58:19 ]
ruby使ってんのに、小せえこと気にすんなよ

434 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 12:34:09 ]
>>431
> 勝手に俺バージョンのforce_encodingやEncodingを1.8で定義しないように。
Javaでも使っとれ

435 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 12:40:57 ]
1.8.7 で警告が出ない以上、>>431の主張はカス
Ruby 1.9 の Encoding が動作してくれないと困るのであるなら、そのように記述するべき
我々は実際には Ruby のメジャーバージョンを考慮しているのである以上、
スクリプトとしての記述もバージョンで分岐させるように書か「なければならない」



436 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 12:50:23 ]
>>432
どっちかというと文字列から Encoding の特定の定数を決定する処理の負担のほうが嫌気されるのでは
毎回いちいち探させるくらいなら定数として最初から書いておいたほうがプログラム的に親切
.encode('utf8') や encode('sjis') って動作したっけ、encode('EUC-JP-MS') って使えるのか、とか悩む必要もなし
定数だった場合は間違ってれば Ruby が uninitialized constant で教えてくれる

437 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 12:52:46 ]
初心者スレのだが、これくらい書けば問題ないのかも

if str.respond_to?(:force_encoding) && defined?(::Encoding::ASCII_8BIT) &&
str.respond_to?(:encode) && str.respond_to?(:encoding) &&
defined?(::Encoding::UTF_8) && str.class.new.encode(::Encoding::UTF_8).encoding == ::Encoding::UTF_8 &&
(_ = str.class.new.encode(::Encoding::UTF_8).force_encoding(::Encoding::ASCII_8BIT); _.encoding == ::Encoding::ASCII_8BIT) then
str.force_encoding(::Encoding::ASCII_8BIT)
end

438 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 13:06:30 ]
「添付ライブラリにEncodingがあるなら」とか
「標準のStringがforce_encodingを持ってるなら」とか
そういう指定の仕方ができないんだよね
それを唯一担保するのがRubyのメジャーバージョンなんだから仕方ないわ

439 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 13:10:19 ]
>>434 >>435 RailsとかtDiaryとかと混ぜた時に死にたいなら定義してもいいけど。

440 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 13:11:34 ]
>>438
MRI以外のこと忘れてない?

441 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 13:17:37 ]
>>440
respond_to? を通っても別のどっかで齟齬の例外が出てそもそも動かないことが逆に期待されるから別にいいじゃん(素

バージョン併用スクリプトの書き方のガイドは特急で作ったほうがいいかも

442 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 13:20:58 ]
>>438
だからそれが>>428だろ

443 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 13:23:31 ]
っ class Encoding; end


444 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 13:25:17 ]
str.force_encoding(::Encoding::ASCII_8BIT) rescue str

よし解決
皆の者我に続け

445 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 13:26:17 ]
1.9は文字コード面では完全に失敗だな。
2.0までにPython同様内部文字コードに変換する作りにしといてね。



446 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 13:38:28 ]
String そのものにエンコーディング機能のメソッドを新たに持たせたのがめんどくささの原因な気もする
String のエンコーディング関連は Encode のメソッドからしか操作参照できないようにしておけばあるいは

447 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 13:58:21 ]
>>445
Pythonのucs2/ucs4絡みとかUnicodeString絡みとか見ておいで

448 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 14:13:51 ]
>>446
いや、1.8互換ってのが茨の道なんだと思うけど。
> String のエンコーディング関連は Encode のメソッドからしか操作参照できないようにしておけばあるいは
他の言語ならそうしたかもね。

449 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 17:09:38 ]
だれだよ UTF-8 とか中途半端なの作ったやつ

はじめから 32bit ぐらいの幅にして、世の中の全種類の文字を一意に判定、
かつ少しぐらい文字が増えてもいいようなテーブル作っておけばよかったんだ

450 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 17:10:03 ]
つ UCS-4

451 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 17:15:27 ]
中途半端感がひどいのはUTF-8じゃなくてUTF-16だな

452 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 17:15:34 ]
>>449
UTF-8はUnicodeのエンコーディング方法の1つでしかない。


453 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 17:21:34 ]
UTF-8はこれでもずいぶんマシなんだよ
UTF-8以外のUnicodeや広域文字実装を実質全く見ないのがその証拠
どんなに理想的でも、利用されないと意味がない
そういう意味で大変戦略的な「とてもマシ」な代物

454 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 17:23:16 ]
どこの世界の話ですか

455 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 17:23:18 ]
>>448
「1.8」なんて存在しないだろ
あるのはオブジェクトがrespondするかどうかだろ



456 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 17:31:18 ]
>>455
まあ、これまでの理屈で言えばそうだな
1.8用や1.9用というバージョン分けの理由はないはず

457 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 17:32:48 ]
もう1文字4byteのRubyEncodingを策定しようぜ






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

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

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