魔法注释在 Ruby 中是如何工作的?我指的是:
# Encoding: utf-8
这是一个预处理指令吗?还有其他类似的用法吗?
这个神奇的注释告诉Ruby当前解析文件的源编码。由于Ruby 1.9.x默认假定为US_ASCII
,如果您使用非ASCII字符(如umlauts或带重音符号的字符),则必须告诉解释器源代码的编码。
这个注释必须是文件的第一行(或在shebang之下,如果使用的话),才能被识别。
还有其他的编码设置。更多信息请参见这个问题。
从2.0版本开始,Ruby默认假定源文件采用UTF-8编码。因此,如果您已经用UTF-8编写了源代码,则这个神奇的编码注释在实践中变得越来越少见。
正如您所指出的,魔法注释是一种特殊的预处理结构。它们必须在文件顶部定义(除非已经有unix shebang在顶部)。从Ruby 2.3开始,有三种类型的魔法注释:
frozen_string_literal: true
:冻结当前文件中的所有字符串字面量warn_indent: true
:激活当前文件的缩进警告更多信息:魔法说明
虽然这不是你问题的确切答案,但如果你想了解更多关于编码的知识,包括它们的工作原理以及可能出现的各种问题,伟大的 Yehuda Katz 在 Ruby 1.9 及其后续版本中撰写了有关编码的文章: