Nix 语言中有效标识符的语法是什么?
What is the syntax of a valid identifier in the Nix language?
在任何地方都找不到语言规范,基本上 Nix Pills 中的 Nix source? The repo's README refers to the Nix manual, but it seems incomplete. For example, 4.2. Identifiers 提到可以使用破折号 (-),而手册甚至从未提及标识符语法。
更新:刚刚发现已经关闭(且未解决)NixOS/nix 问题 #592 没有关于有效 symbol/variable 名称的文档
可能有更好的参考资料,但至少你可以查看 lexer 的来源,它定义了一个标识符
ID [a-zA-Z\_][a-zA-Z0-9\_\'\-]*
作为由 ASCII 字母、数字、_
、'
或 -
组成的字符串,并以字母或 _
.[=20 开头=]
(更新:这引用了 out-of-date 参考语法,而不是工作语法。)
根据 grammar,标识符不能包含 -
:
<production id="nix.id">
<lhs>Id</lhs>
<rhs>[a-zA-Z\_][a-zA-Z0-9\_\']*</rhs>
</production>
但路径可以:
<production id="nix.path">
<lhs>Path</lhs>
<rhs>[a-zA-Z0-9\.\_\-\+]*(\/[a-zA-Z0-9\.\_\-\+]+)+</rhs>
</production>
我不完全确定是什么评估过程导致 REPL 将语法上有效的路径报告为未定义变量。
在任何地方都找不到语言规范,基本上 Nix Pills 中的 Nix source? The repo's README refers to the Nix manual, but it seems incomplete. For example, 4.2. Identifiers 提到可以使用破折号 (-),而手册甚至从未提及标识符语法。
更新:刚刚发现已经关闭(且未解决)NixOS/nix 问题 #592 没有关于有效 symbol/variable 名称的文档
可能有更好的参考资料,但至少你可以查看 lexer 的来源,它定义了一个标识符
ID [a-zA-Z\_][a-zA-Z0-9\_\'\-]*
作为由 ASCII 字母、数字、_
、'
或 -
组成的字符串,并以字母或 _
.[=20 开头=]
(更新:这引用了 out-of-date 参考语法,而不是工作语法。)
根据 grammar,标识符不能包含 -
:
<production id="nix.id">
<lhs>Id</lhs>
<rhs>[a-zA-Z\_][a-zA-Z0-9\_\']*</rhs>
</production>
但路径可以:
<production id="nix.path">
<lhs>Path</lhs>
<rhs>[a-zA-Z0-9\.\_\-\+]*(\/[a-zA-Z0-9\.\_\-\+]+)+</rhs>
</production>
我不完全确定是什么评估过程导致 REPL 将语法上有效的路径报告为未定义变量。