Новое в Ruby 2.3
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».