Skip to content

Commit

Permalink
Merge pull request #17 from ryan4yin/patch-2
Browse files Browse the repository at this point in the history
字符串中的字符转义
  • Loading branch information
OpenTritium authored Mar 19, 2024
2 parents e026c36 + 5613637 commit 740c505
Showing 1 changed file with 60 additions and 4 deletions.
64 changes: 60 additions & 4 deletions src/tutorials/lang/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -504,30 +504,86 @@ in
## 多行字符串
注意,这里不是一对双引号,而是两对单引号:
Nix 中被两对单引号 `''` 引用的内容即为多行字符串。
```nix
''
multi
line
string
''
```
等价于:
```nix
"multi\nline\nstring"
```
Nix 的多行字符串存在特殊行为,其一是,Nix 会智能地去除掉开头的缩进,这在其他语言中是不常见的。
举个例子:
```nix
''
one
two
three
''
```
分别等价于
等价于
```nix
"multi\nline\nstring"

"one\n two\n three\n"
```
## 字符串中的字符转义 {#multi-line-string-escape}
在单行字符串中,Nix 的转义语法与许多其他语言相同,`"` `\` `${` 以及其他 `\n` `\t` 等特殊字符,都可直接使用 `\` 进行转义,比如:
```nix
"this is a \"string\" \\" # 结果是: this is a "string" \
```
但在多行字符串中,情况会有点特殊。Nix 规定在多行字符串中需要使用两个单引号 `''` 来转义。
比如如下 Nix 代码会输出原始字符 `${a}`,而不是做字符串插值:
```nix
let
a = "1";
in
''the value of a is:
''${a}
'' # 结果是 "the value of a is ${a}"
```
其他 `\n` `\t` 等特殊字符的转义也类似,必须使用两个单引号来转义,如
```nix
''
this is a
multi-line
string
''\n
''
```
但如果我们希望在字符串中使用原始字符 `''`,因为会与多行字符串原有的语义冲突,不能直接写 `''`,而必须改用 `'''` 三个单引号。
也就是说,在多行字符串中的 `'''` 三个单引号这样的组合,实际输出的是原始字符串 `''`.
举个例子:
```nix
let
a = "1";
in
''the value of a is:
'''${a}'''
'' # 结果是 "the value of a is ''1''"
```
## 函数
函数在 Nix 语言中是人上人,我们先来声明一个匿名函数(Lambda):
Expand Down

0 comments on commit 740c505

Please sign in to comment.