Actions
Bug #3529
closedBigDecimal.mode(BigDecimal::EXCEPTION_*) の初期値が0になっている
ruby -v:
ruby 1.9.3dev (2010-07-03 trunk 28532) [x86_64-darwin10.4.0]
Backport:
Description
=begin
BigDecimal.mode で設定可能な例外モードの値は true または false になっており、
これらの値以外を設定しようとするとエラーになります。
ところが、例外モードの初期値は 0 になっています。
$ ruby -rbigdecimal -ve 'p %w(NaN INFINITY UNDERFLOW ZERODIVIDE).map{|x| BigDecimal.mode(BigDecimal.const_get(:"EXCEPTION_#{x}")) }'
ruby 1.9.3dev (2010-07-03 trunk 28532) [x86_64-darwin10.4.0]
[0, 0, 0, 0]
このままでは以下のようなコードでエラーになる場合があるので、修正が必要です。
begin
last_mode = BigDecimal.mode(BigDecimal::EXCEPTION_INFINITY)
BigDecimal.mode(BigDecimal::EXCEPTION_INFINITY, false)
...
ensure
ここでエラーになる場合がある¶
BigDecimal.mode(BigDecimal::EXCEPTION_INFINITY, last_mode)
end
=end
Updated by mrkn (Kenta Murata) about 14 years ago
=begin
よくコードを読んでみると、これはバグではなくて仕様なんですね。
ということで、このチケットは取り下げます。
しかし、真偽値を設定したのに、読み出し時の値は全モード定数を OR した整数値が返ってくるのは気持ち悪いですね。
=end
Actions
Like0
Like0Like0