Bug #946
closed
Array#pack の f が入力として文字列を許容する
Added by tadf (tadayoshi funaba) almost 16 years ago.
Updated over 13 years ago.
Description
=begin
main@191-20081229> ['1'].pack('f')
#=> "\x00\x00\x80?"
main@191-20081229> ['1'].pack('i')
TypeError: can't convert String into Integer
i ではエラーになるし、f で許す必要はないと思います。
=end
=begin
修正が入っていますが、現状ではむしろ nil などが通ってしまいますね。
main@191-20081230> [nil].pack('f')
#=> "\x00\x00\x00\x00"
あと、f 以外にも deEgG などにも同じ課題があると思います。
=end
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:37663] [Bug #946] Array#pack の f が入力として文字列を許容する"
on Tue, 30 Dec 2008 22:45:13 +0900, tadayoshi funaba redmine@ruby-lang.org writes:
|修正が入っていますが、現状ではむしろ nil などが通ってしまいますね。
うっかりしてました。
|main@191-20081230> [nil].pack('f')
|#=> "\x00\x00\x00\x00"
|
|あと、f 以外にも deEgG などにも同じ課題があると思います。
直しました。
=end
=begin
現状で f などでは文字列を浮動小数点数に変換するようで変化が判らな
いのですが、これは、i などの整数のあつかいと異なりますよね。i は変
換しません。
更に、'' のようなもの通るので、1.8 よりももっと緩くなっています。
これはこれでいいのでしょうか。
main@187-20080811> [''].pack('f')
ArgumentError: invalid value for Float(): ""
main@191-20081231> [''].pack('f')
#=> "\x00\x00\x00\x00"
=end
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:37668] [Bug #946] Array#pack の f が入力として文字列を許容する"
on Wed, 31 Dec 2008 01:37:39 +0900, tadayoshi funaba redmine@ruby-lang.org writes:
|現状で f などでは文字列を浮動小数点数に変換するようで変化が判らな
|いのですが、これは、i などの整数のあつかいと異なりますよね。i は変
|換しません。
|
|更に、'' のようなもの通るので、1.8 よりももっと緩くなっています。
|これはこれでいいのでしょうか。
すいません、場当たりな対応ばかりで。
もともとFloatに、Integerにおけるto_iとto_intのような2種類の
変換メソッドがなく、to_fしかないところが根源的な問題のような
気がしますが、とりあえずはMathモジュールが使っている、
Floatでないとき、Numericのサブクラスならばto_fで変換
という戦略を採用することにします。delegatorで動作しないのは厳
しいですが、だからといってto_floのようなメソッドを新たに導入
するかどうかはちょっと躊躇するところです。
=end
- Target version set to 1.9.2
- Target version changed from 1.9.2 to 1.9.1 RC2
- Target version changed from 1.9.1 RC2 to 1.9.2
- Status changed from Open to Closed
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0Like0Like0