LoginSignup
0
0

More than 3 years have passed since last update.

Rails6 のちょい足しな新機能を試す37(String#first, String#last 編)

Posted at

はじめに

Rails 6 に追加されそうな新機能を試す第37段。 今回は、 String#last , String#first 編です。
Rails 6 では、 String#firstString#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.firststring.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

参考情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0