How does the magic comment ( # Encoding: utf-8 ) in ruby?? work?
Ruby中的魔法评论如何?工作?我说的是:
1 | # Encoding: utf-8 |
这是预处理指令吗?这种结构还有其他用途吗?
出于某种原因,人们将这一行称为"魔法评论"。在处理源代码解释器之前,读取此行并设置正确的编码。我相信,对于口译语言来说,这是很常见的。至少Python使用相同的方法。
您可以通过多种不同的方式指定编码(其中一些方式可由编辑器识别):
1 2 3 | # encoding: UTF-8 # coding: UTF-8 # -*- coding: UTF-8 -*- |
在本文中,您可以阅读一些关于源代码编码的有趣内容。
我所知道的唯一一件类似的构造是shebang,但它一般与unix shell相关,并且不是特定于Ruby的。
这个神奇的注释告诉Ruby当前解析的文件的源代码。由于Ruby1.9.x默认假定
注释必须是要识别的文件的第一行(如果使用,则在shebang下面)。
还有其他编码设置。有关详细信息,请参阅此问题。
自2.0版以来,Ruby默认采用源文件的UTF-8编码。因此,如果您仍然使用UTF-8编写源代码,那么这种神奇的编码注释在野外就变得更加少见了。
正如您所指出的,magic注释是一个特殊的预处理构造。它们必须在文件的顶部定义(除非,如果顶部已经有一个unix shebang)。从Ruby2.3开始,有三种魔力评论:
- 编码注释:参见其他答案。必须始终是第一个魔术评论。必须与ASCII兼容。设置源编码,因此如果文件的实际编码与指定的编码不匹配,则会遇到问题。
frozen_string_literal: true :冻结当前文件中的所有字符串文本warn_indent: true :激活当前文件的缩进警告
更多信息:魔法指令