Новое в Ruby 2.3

Основные изменения в релизе.
22 января 2016AnonymousВиктор Родионов180883

Heredoc определения

Добавлен литерал «<<» для heredoc-определений. Начало строки определяется c помощью «<<HEREDOC», конец с помощью «HEREDOC».

expected_result = <<HEREDOC
Может содержать форматированный текст.
Может растянуться на несколько строк 
HEREDOC

Символ новой строки, а также пробелы перед закрывающим «HEREDOC» входят в результат. Допускается использовать «heredoc» в нижнем регистре, но обычно используется «HEREDOC». Так же разрешается использовать идентификатор heredoc-определения, для этого необходимо указать символ «-» после литерала «<<»

expected_result = <<-INDENTED_HEREDOC
This would contain specially formatted text.
That might span many lines
  INDENTED_HEREDOC

Для того чтобы избежать добавления лишних разделителей, предусмотрено «squiggly»(волнистое) определение:

expected_result = <<~SQUIGGLY_HEREDOC
  This would contain specially formatted text.
  That might span many lines
SQUIGGLY_HEREDOC

Пропускаются строки, состоящие из пробелов и табуляций (кроме заданных с помощью escape-последовательностей). Кроме того, пропускаются пробелы и табуляции перед наименее смещенной строкой и такое же количество разделителей не учитывается перед остальными строками. 

По умолчанию heredoc-определения допускают использование интерполяций и escape-последовательностей. Для того чтобы исключить их использование, необходимо поместить идентификатор определения в одинарные кавычки:

expected_result = <<-'EXPECTED'
One plus one is #{1 + 1}
EXPECTED
p expected_result # prints: "One plus one is \#{1 + 1}\n"

Помещение идентификатора в двойные кавычки не влияет на heredoc-определение.

При использовании обратных кавычек HEREDOC ведет себя как Kernel#`:

puts <<-`HEREDOC`
cat #{__FILE__}
HEREDOC

Допускается вызов метода в heredoc-определении:

expected_result = <<-EXPECTED.chomp
One plus one is #{1 + 1}
EXPECTED

Допускаются вложенные HEREDOC-определения:

puts(<<-ONE, <<-TWO)
content for heredoc one
ONE
content for heredoc two
TWO

«Замороженные» строки (frozen string)

В ruby 3.0 планируется заморозить («frozen») все строки по умолчанию, что затруднит использование старых приложений в новой версии. В связи с этим в Ruby 2.3 добавлена специальная директива, позволяющая использовать неизменяемые строки: 

#frozen_string_literal: true
#frozen_string_literal: false.

Кроме того включить/выключить заморозку строк можно и в командной строке: параметр командной строки --enable/--disable=frozen-string-literal для «заморозки» всех строк в коде файла. Доступен также аргумент командной строки --debug=frozen-string-literal для поиска места изменений объектов-строк.

Оператор «безопасной навигации» &

Оператор & позволяет перед вызовом obj.foo осуществить проверку существования объекта. Вместо

res =
    if obj
        obj.foo
    else
        nil
    end

достаточно:

result = obj&.foo

Gem «did_you_mean»

Предлагает правки для типичных опечаток при выводе ошибок NameError и NoMethodError:

"Yuki".starts_with?("Y")
# => NoMethodError: undefined method `starts_with?' for "Yuki":String
#    Did you mean?  start_with?

Кроме перечисленных релиз 2.3 включает несколько тысяч изменений, так же разработчики уделили внимание производительности, в частности доработке компилятора байткода.

См. также: Описание релиза, Changelog

Освоить Ruby вам поможет профессия «Программист Ruby».

ruby 2.3releaseruby
Нашли ошибку в тексте? Напишите нам.