はじめに
Rails 6 に追加されそうな新機能を試す第37段。 今回は、 String#last
, String#first
編です。
Rails 6 では、 String#first
や String#last
の引数に負の整数を指定すると DEPRECATION WARNING
が出力されます。
Ruby 2.6.3, Rails 6.0.0.rc1 で確認しました。Rails 6.0.0.rc1 は gem install rails --prerelease
でインストールできます。
$ rails --version
Rails 6.0.0.rc1
String.first と String.last を使ってみる
今回は、単純にスクリプトを作ることにします。
bin/string_first_last
#!/usr/bin/env ruby
require 'active_support/core_ext'
puts 'Rails'.first(-1)
puts 'Rails'.last(-1)
puts 'Rails'.first(1)
puts 'Rails'.last(1)
スクリプトを実行する
スクリプトを実行すると引数に -1
を指定した方は DEPRECATION WARNING
が表示されます。
Rails 6.1 では、ArgumentError になるようです。
$ bin/string_first_last
DEPRECATION WARNING: Calling String#first with a negative integer limit will raise an ArgumentError in Rails 6.1. (called from <main> at bin/string_first_last:5)
Rail
DEPRECATION WARNING: Calling String#last with a negative integer limit will raise an ArgumentError in Rails 6.1. (called from <main> at bin/string_first_last:6)
ails
R
s
ちょい足しの理由
string.first
は string.each_char.first
と同じ動作であるべきということが理由のようです。
bin/string_each_char_first
#!/usr/bin/env ruby
puts 'Rails'.each_char.first(1).join
puts 'Rails'.each_char.first(-1).join
スクリプトの実行結果
bash-4.4# bin/string_each_char_first
R
Traceback (most recent call last):
1: from bin/string_each_char_first:4:in `<main>'
bin/string_each_char_first:4:in `first': attempt to take negative size (ArgumentError)
試したソース
試したソースは以下にあります。
https://github.com/suketa/rails6_0_0rc1/tree/try037_string_first_last