Ruby 2.7 の変更点 - Symbol / UnboundMethod / OptionParser

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

qiita.com

Symbol

Symbol#start_with? / #end_with? 追加

Symbol に start_with?end_with? が追加されました。

:hoge.start_with? "ho"  #=> true
:hoge.end_with? "ge"    #=> true
:hoge.end_with? "x"     #=> false

UnboundMethod

UnboundMethod#bind_call 追加

UnboundMethod#bind(obj).call(...)UnboundMethod#bind_call(obj, ...) と書けるようになったようです。 使ったことないからよくわからない…。

class Hoge
  def hoge(x, y)
    x + y
  end
end

method = Hoge.instance_method(:hoge)
obj = Hoge.new
method.bind(obj).call(1, 2)  #=> 3
method.bind_call(obj, 1, 2)  #=> 3

OptionParser

Did you mean?

オプションを間違って指定した時に "Did you mean?" が出力されるようになりました。

require 'optparse'

op = OptionParser.new do |opts|
  opts.on("--foo", "foo") {|v| }
  opts.on("--bar", "bar") {|v| }
  opts.on("--baz", "baz") {|v| }
end
begin
  op.parse!
rescue OptionParser::InvalidOption => e
  puts e.to_s
end
# 2.6
% ruby test.rb --baa
invalid option: --baa

# 2.7
% ruby test.rb --baa
invalid option: --baa
Did you mean?  bar
               baz