From: IKARASHI Akira Date: 1999-03-10T15:54:32+09:00 Subject: [ruby-dev:6182] Re: unpack 五十嵐です。 Yukihiro Matsumoto writes: >気になるのは「長さ」の定義が文字列を返すものの場合には「文字 >列の長さ」であり,数値を返すものの場合には「数値の数」である >点です.つまり「C4」が「バイト4つ」であり,「CCCC」の省略で >あるのに対して,「a4」は「4文字の文字列」であり,「aaaa」と >は意味が異なる点です. 一般的に長さを求めることはできなくとも、「記号+数値」が 常に同じ大きさの配列返せばいいのではないでしょうか? "X(n)"は n byte の文字を消費して、型によって定められた m 個の 要素を追加する。さらに残った文字列が残りのtemplate文字列に 渡される。 という約束を守れば、あるtemplate文字列は、必ずある大きさの配列を 返すので、使い易いと思います。 今、例に出ている "C" なら m == n ですし、 "A" なら m == 1 ですね。 >この点も含めて,挙動を定義すべきでしょう.また,""から「C」 >を取り出そうとした時の期待される値(nil? 0? それ以外?)につい >ても検討しないといけませんね. getcを書くのに str.unpack("C1 A*") を使っているので、個人的には "".unpack("C") == nil "".unpack("A") == "" だと嬉しいのですが、今回初めて使ったので、一般的にどのように unpack が使われているのか知らず、どうあるべきかはわかりません。 -- 五十嵐 晃(ikarashi@itlb.te.noda.sut.ac.jp)