Ruby 2.7 アドベントカレンダーの22日目の記事です。
12/21 に 2.7.0-rc2 が出たので rc1 との NEWS の差分を見てみました。
Array#minmax 追加
2.6 では Array#minmax
は Enumerabe#minmax
を継承していたのですが、Array に実装されました。
[1, 5, 20].minmax #=> [1, 20] [1, 5, 20].minmax{ _1.to_s <=> _2.to_s } #=> [1, 5]
高速になったようです。
require 'benchmark' a = 10000000.times.map { rand(1000000) } puts Benchmark.measure { a.minmax } # 2.6 #=> 0.281553 0.000040 0.281593 ( 0.281675) # 2.7 #=> 0.060905 0.000035 0.060940 ( 0.061017)
2.7.0-preview2 で実装されていたのですが、NEWS の記述から漏れていたのが追記されたようです。
Range#minmax 追加
Array#minmax
と同様に Range に実装されました。
require 'benchmark' r = (1..1000000) puts Benchmark.measure { r.minmax } # 2.6 #=> 0.025841 0.000000 0.025841 ( 0.026052) # 2.7 #=> 0.000005 0.000002 0.000007 ( 0.000005)
これも実装は 2.7.0-preview2 です。
Proc#ruby2_keywords 追加
Module#ruby2_keywords
の Proc 版です。
fuga = ->(*args, **kw) do args kw end hoge = ->(*args) do fuga.call(*args) end hoge.call(k: 123) #=> test.rb:6: warning: The last argument is used as keyword parameters; maybe ** should be added to the call #=> test.rb:1: warning: The called method `call' is defined here # ruby2_keywords を指定すると warning が抑止される hoge.ruby2_keywords hoge.call(k: 123)
2.7.0-rc1 で追加されてましたが、NEWS の記述から漏れていたのがに追記されました。