「Ruby 2.3.0-preview1」がリリース、文字列リテラルのfreeze化へ一歩踏み出す

Ruby

Ruby開発チームは11月11日(現地時間)、Ruby 2.3系初のプレビュー版となる「Ruby 2.3.0-preview1」をリリースしました(公式ニュース)。現在公式サイトより各種圧縮方式のソースコードをダウンロードすることができます。

Ruby 2.3.0-preview1は以下に示す多くの新機能や改良が含まれています。

Frozen String Literal Pragma

Ruby 2.3では、文字列リテラルをfreezeされたものとして処理するためのマジックコメントとコマンドラインオプションが追加されました。

# -*- frozen_string_literal: true -*-
str = 'Hello '
str << 'World'
puts str

マジックコメント「frozen_string_literal: true」がある場合、freeze化した文字列リテラルとして扱われます。

freeze.rb:3:in `
': can't modify frozen String (RuntimeError)

変更できないため、エラーになります。

Safe navigation operator

C#、Groovy、Swiftにはすでに存在するもので「obj&.foo」としてnilのハンドリングを簡単化するものです。Array#dig、Hash#digも追加されました。

class Book
  attr_accessor :title
end

book = Book.new
book.title = 'ruby book'
t = book
puts "1.",t.title
t = nil
puts "2.",t&.title

tがnilでも「t&.title」だとエラーになりません。

$ ruby safe.rb
1.
ruby book
2.

did_you_mean.gemの標準添付

did_you_mean.gemはデバッグを支援し、NameErrorとNoMethodErrorの候補を表示するものです。

require 'did_you_mean'

class User
  attr_accessor :first_name, :last_name

  def to_s
    "#{f1rst_name} #{last_name}" # f1rst_name ???
  end
end
user = User.new
user.to_s

first_nameと書くべきところをf1rst_nameと書いた時、正しい候補をリストアップしてくれます。

mean.rb:7:in `to_s': undefined local variable or method `f1rst_name' for # (NameError)
Did you mean?  first_name
               first_name=
	from mean.rb:11:in `
'

デバッグに便利そうです。

S 2015 11 13 1 17 38

rbenvを使ってインストールすることができました。Ruby 2.3にいちはやく触れてみたい方はインストールしてみてはいかがでしょうか。

スポンサーリンク