Как работает волшебный комментарий в рубине? Я говорю о:
# Encoding: utf-8
Является ли это директивой предварительной обработки? Существуют ли другие виды использования такого типа конструкции?
Как работает волшебный комментарий в рубине? Я говорю о:
# Encoding: utf-8
Является ли это директивой предварительной обработки? Существуют ли другие виды использования такого типа конструкции?
По какой-то причине люди ссылаются на эту строку как на волшебный комментарий. Перед обработкой ваш интерпретатор исходного кода читает эту строку и устанавливает правильную кодировку. Я считаю это довольно распространенным явлением для интерпретируемых языков. По крайней мере, Python использует тот же подход.
Вы можете указать кодировку несколькими способами (некоторые из них распознаются редакторами):
# encoding: UTF-8
# coding: UTF-8
# -*- coding: UTF-8 -*-
Вы можете прочитать некоторые интересные материалы об исходной кодировке в этой статье.
Единственное, что я знаю об этом, имеет аналогичную конструкцию shebang, но она связана с оболочками Unix в целом и не является специфичной для Ruby.
Этот волшебный комментарий сообщает Ruby исходную кодировку текущего проанализированного файла. Поскольку Ruby 1.9.x по умолчанию принимает US_ASCII
, вы говорите интерпретатору, что кодирует ваш исходный код, если вы используете не-ASCII-символы (например, умлауты или акцентированные символы).
Комментарий должен быть признан первой строкой файла (или ниже символа shebang, если используется).
Существуют и другие настройки кодирования. См. этот вопрос для получения дополнительной информации.
Начиная с версии 2.0, Ruby предполагает кодировку UTF-8 исходного файла по умолчанию. Таким образом, этот волшебный комментарий кодирования стал более редким зрелищем в дикой природе, если вы все равно пишете исходный код в UTF-8.
Как вы заметили, магические комментарии представляют собой специальную конструкцию предварительной обработки. Они должны быть определены в верхней части файла (кроме, если в верхней части уже есть unix shebang). С Ruby 2.3 есть три вида волшебных комментариев:
frozen_string_literal: true
: Замораживает все строковые литералы в текущем файлеwarn_indent: true
: активирует предупреждения отступа для текущего файлаДополнительная информация: Магические инструкции