Подтвердить что ты не робот

Как работает магический комментарий (# Encoding: utf-8) в рубине?

Как работает волшебный комментарий в рубине? Я говорю о:

# Encoding: utf-8

Является ли это директивой предварительной обработки? Существуют ли другие виды использования такого типа конструкции?

4b9b3361

Ответ 1

По какой-то причине люди ссылаются на эту строку как на волшебный комментарий. Перед обработкой ваш интерпретатор исходного кода читает эту строку и устанавливает правильную кодировку. Я считаю это довольно распространенным явлением для интерпретируемых языков. По крайней мере, Python использует тот же подход.

Вы можете указать кодировку несколькими способами (некоторые из них распознаются редакторами):

# encoding: UTF-8
# coding: UTF-8
# -*- coding: UTF-8 -*-

Вы можете прочитать некоторые интересные материалы об исходной кодировке в этой статье.

Единственное, что я знаю об этом, имеет аналогичную конструкцию shebang, но она связана с оболочками Unix в целом и не является специфичной для Ruby.

Ответ 2

Этот волшебный комментарий сообщает Ruby исходную кодировку текущего проанализированного файла. Поскольку Ruby 1.9.x по умолчанию принимает US_ASCII, вы говорите интерпретатору, что кодирует ваш исходный код, если вы используете не-ASCII-символы (например, умлауты или акцентированные символы).

Комментарий должен быть признан первой строкой файла (или ниже символа shebang, если используется).

Существуют и другие настройки кодирования. См. этот вопрос для получения дополнительной информации.

Начиная с версии 2.0, Ruby предполагает кодировку UTF-8 исходного файла по умолчанию. Таким образом, этот волшебный комментарий кодирования стал более редким зрелищем в дикой природе, если вы все равно пишете исходный код в UTF-8.

Ответ 3

Как вы заметили, магические комментарии представляют собой специальную конструкцию предварительной обработки. Они должны быть определены в верхней части файла (кроме, если в верхней части уже есть unix shebang). С Ruby 2.3 есть три вида волшебных комментариев:

  • Кодирующий комментарий: см. другие ответы. Всегда должен быть первым волшебным комментарием. Должен быть совместим с ASCII. Устанавливает исходную кодировку, поэтому вы столкнетесь с проблемами, если реальная кодировка файла не соответствует указанной кодировке.
  • frozen_string_literal: true: Замораживает все строковые литералы в текущем файле
  • warn_indent: true: активирует предупреждения отступа для текущего файла

Дополнительная информация: Магические инструкции