Project

General

Profile

Bug #946

Array#pack の f が入力として文字列を許容する

Added by tadf (tadayoshi funaba) about 11 years ago. Updated almost 9 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
ruby -v:
Backport:

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

Associated revisions

Revision 59657
Added by Glass_saga (Masaki Matsushita) over 2 years ago

csv.rb: optimize CSV::Table#to_a and #to_csv

  • lib/csv.rb (CSV::Table#to_a, #to_csv): use Array#push instead of Array#concat for performance improvement. This performance improvement is proposed by zdennis zach.dennis@gmail.com. The patch is from Mau Magnaguagno maumagnaguagno@gmail.com. close #946

Revision 59657
Added by glass over 2 years ago

csv.rb: optimize CSV::Table#to_a and #to_csv

  • lib/csv.rb (CSV::Table#to_a, #to_csv): use Array#push instead of Array#concat for performance improvement. This performance improvement is proposed by zdennis zach.dennis@gmail.com. The patch is from Mau Magnaguagno maumagnaguagno@gmail.com. close #946

Revision 59657
Added by glass over 2 years ago

csv.rb: optimize CSV::Table#to_a and #to_csv

  • lib/csv.rb (CSV::Table#to_a, #to_csv): use Array#push instead of Array#concat for performance improvement. This performance improvement is proposed by zdennis zach.dennis@gmail.com. The patch is from Mau Magnaguagno maumagnaguagno@gmail.com. close #946

History

#1

Updated by tadf (tadayoshi funaba) about 11 years ago

=begin
修正が入っていますが、現状ではむしろ nil などが通ってしまいますね。

main@191-20081230> [nil].pack('f')
#=> "\x00\x00\x00\x00"

あと、f 以外にも deEgG などにも同じ課題があると思います。

=end

#2

Updated by matz (Yukihiro Matsumoto) about 11 years ago

=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

#3

Updated by tadf (tadayoshi funaba) about 11 years ago

=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

#4

Updated by matz (Yukihiro Matsumoto) about 11 years ago

=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

#5

Updated by yugui (Yuki Sonoda) about 11 years ago

  • Target version set to 1.9.2

=begin

=end

#6

Updated by yugui (Yuki Sonoda) about 11 years ago

  • Target version changed from 1.9.2 to 1.9.1 RC2

=begin

=end

#7

Updated by yugui (Yuki Sonoda) about 11 years ago

  • Target version changed from 1.9.1 RC2 to 1.9.2

=begin

=end

#8

Updated by matz (Yukihiro Matsumoto) about 11 years ago

  • Status changed from Open to Closed

=begin

=end

Also available in: Atom PDF