Ruby 2.7 の変更点 - Integer / Complex / Comparable

Ruby 2.7 アドベントカレンダーの16日目の記事です。

qiita.com

Integer

Integer#[] : 引数に範囲指定

Integer#[] は二進数で指定したビットを 1 か 0 で返します。

114.to_s(2) #=> "1110010"
114[0]      #=> 0
114[1]      #=> 1
114[2]      #=> 0
114[3]      #=> 0
114[4]      #=> 1
114[5]      #=> 1

2.7 では範囲を指定するとその範囲のビットからなる数値を返すようになりました。

114[2, 4]  #=> 12  1110010 の2bit目から4bit分の 1100
114[2..5]  #=> 12  1110010 の2bit目から5bit目までの 1100

Complex

Complex#<=> 追加

Complex(複素数クラス)に <=> メソッドが追加されました。

虚数部が0の場合に実数部を比較した結果を返します。虚数部が0以外の場合はnilを返します。

(3+0i) <=> (2+0i)  #=> 1
(3+0i) <=> 2       #=> 1
(3+1i) <=> 2       #=> nil

Comparable

Comparable#clamp : 引数に Range 指定

clamp は指定引数の範囲内であれば自身を、範囲外であれば引数で指定した値を返します。

5.clamp(3, 7)  #=> 5  範囲内
5.clamp(1, 3)  #=> 3  範囲よりも大きい
5.clamp(7, 9)  #=> 7  範囲よりも小さい

2.7 では引数に Range オブジェクトを指定できるようになりました。

5.clamp(3..7)  #=> 5  範囲内
5.clamp(1..3)  #=> 3  範囲よりも大きい
5.clamp(7..9)  #=> 7  範囲よりも小さい