From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2008-10-23T03:26:00+09:00 Subject: [ruby-dev:36872] Re: [Bug #650] Marshal.load raises RegexpError けいじゅ@いしつかです. In [ruby-dev :36871 ] the message: "[ruby-dev:36871] Re: [Bug #650] Marshal.load raises RegexpError ", on Oct/23 02:07(JST) Urabe Shyouhei writes: >卜部です。 > >ちょと混乱してきました。石塚さんがおっしゃっておられる「例外」ってのはな >んなんでしょう。 >私の中ではRubyのException(つまりrb_raise()でトリガするあれ)のつもりだっ >たので、例外を発生させたところで処理が中断する前提でお話をしていたのです >が、「変換に失敗したものだけが例外になってもらった方が」のくだりで指して >おられる「例外」は、どうもそれとは違うようで。 確かに説明不足でした. 例外オブジェクトのアクセサで取りあえずの変換結果が取り出せるイメージで した. 入力が: [1, 2, 3, <再生不能オブジェクト>, 5] だったら, 例外から取り出せるのは [1, 2, 4, , 5] という感じです. ここから, markerオブジェクトを探して, 適当に処理するイ メージでした. ただ, 今は, 前メイルの理由より, API的には obj = Marshal.load(src, invalid: proc{|invalid_info| ...}) の方がふさわしいと感じています. さらに, invalid_info は適当な(適当な情報を持った)例外がいいんじゃない かと思っています. つまり, invalid: が指定されなかったとき発生するもの と同じ例外です. procでは, 個々のオブジェクトの再生が失敗したという例外 を引数として受け取ってそれなりに処理する感じです. この問題は, 松本さんの[ruby-dev:36784]にあった: > Marshalファイルフォーマットには、メジャーバージョンとマイナー > バージョンの情報が付加されており、マイナーバージョンの違いは > 「上位互換性がある」ので「古いmarshal formatのデータを読もう > とすると、警告が出るが処理自体はできる」、メジャーバージョン > の違いは「互換性はないので古いデータは読めない」とする仕組み > があります。 でのメジャーバージョンを越えるための方法を考えることであり, 結構重要な 問題だと思っています. 卜部さんもその辺りを気にしているのではと感じてい ます. Rubyも今となっては, メジャーバージョンが変わったので互換性がない からあきらめてね, とはいえない状態だと考えています. __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---