Ruby 2.1 представил заметные синтаксические улучшения языка, включая обязательные именованные аргументы и возврат символа имени метода из def.
Обязательные именованные аргументы
Именованные аргументы без значения по умолчанию становятся строго обязательными:
# length обязателен; char по умолчанию '0'
def pad(number, length:, char: "0")
number.to_s.rjust(length, char)
end
pad(42, length: 6) # => "000042"
pad(42) # ArgumentError: missing keyword: :length
Определение методов возвращает символы
В Ruby 2.1+ конструкция def возвращает имя метода в виде Symbol, что позволяет применять модификаторы в той же строке:
class User
# Сделать метод private в той же строке
private def secret_token
"secret"
end
# Связка с декораторами модулей
memoize def expensive_computation
sleep 2
42
end
end
Числовые литералы и оптимизации
# Суффикс рациональных чисел 'r'
2/3r # => (2/3)
# Суффикс комплексных чисел 'i'
3 + 4i # => (3+4i)
# Оптимизация заморозки строк: 'freeze'
"constant_string".freeze