Ruby2.6アドベントカレンダーの20日目の記事です。
Numeric
Numeric#step
が Enumerator::ArithmeticSequence
オブジェクトを返す
https://bugs.ruby-lang.org/issues/13904
Range#step
と同様です。
単純な Enumerator ではなく step
に指定した引数情報を取得できる Enumerator::ArithmeticSequence オブジェクトを返すようになりました。
a = 1.step(10, 2) #=> #<Enumerator::ArithmeticSequence> a.begin #=> 1 a.end #=> 10 a.first(2) #=> [1, 3] # これは 2.5 から可能 a.last(2) #=> [7, 9] a.step #=> 2
BigDecimal
BigDecimal.allocate
削除
数値クラスなのでNumericと同じようにimmutableオブジェクト化するためだと思います。
BigDecimal オブジェクトが frozen
https://bugs.ruby-lang.org/issues/13984
これも同上です。
BigDecmial.new
が非推奨
これも同じく。使用すると -w
をつけてなくてもwarningが出ます。
require 'bigdecimal' BigDecimal.new(123) #=> 0.123e3 # warning: BigDecimal.new is deprecated; use BigDecimal() method instead. BigDecimal(123) #=> 0.123e3 # これは警告無し
BigDecimal()
に :exception
オプション追加
:exception
に false
を指定すると例外を発生させずに nil
を返します。
require 'bigdecimal' BigDecimal(123.4) #=> can't omit precision for a Float. (ArgumentError) BigDecimal(123.4, exception: false) #=> nil
nil.to_d
が 0.0 を返す
2.5 では NoMethodError になってました。
BigDecimal()
が不正な文字列でエラー
2.5 では不正な文字までの部分までの結果を返してました。
require 'bigdecimal' BigDecimal("1.2.3") #=> invalid value for BigDecimal(): "1.2.3" (ArgumentError) # 2.5 では 0.12e1 を返してた
BigDecimal.ver
削除
2.5 で非推奨になりました。代わりに BigDecimal::VERSION
を使えということのようです。