Elixir中的“?\ s”是什么意思?

时间:2020-02-21 15:27:18

标签: string char elixir

在涵盖comprehensions的Elixir文档中,我遇到了以下示例:

iex> for <<c <- " hello world ">>, c != ?\s, into: "", do: <<c>>
"helloworld"

我现在有点理解整个表达式,但是我不知道“?\ s”是什么意思。 我知道它以某种方式匹配并因此过滤掉了空格,但这就是我的理解要结束的地方。

编辑:我现在发现它可以解析为32,这是空格的字符代码,但是我仍然不知道为什么。

2 个答案:

答案 0 :(得分:7)

具有用美元符号表示的字符文字。

Erlang/OTP 22 [erts-10.6.1] [...]

Eshell V10.6.1  (abort with ^G)
1> $\s == 32.
%%⇒ true

具有char文字的方式与根据code documentation的字符文字完全一样,是 erlang char文字:

这正是Erlang使用Erlang char文字($ a)的作用。


基本上,?\s完全相同(问号后跟一个空格。)

#               ⇓ space here
iex|1 ▶ ?\s == ? 
warning: found ? followed by code point 0x20 (space), please use ?\s instead

?\s没什么特别的,您可能会看到:

for <<c <- " hello world ">>, c != ?o, into: "", do: <<c>> 
#⇒ " hell wrld "

另外,还将?c表示为字符常量:

main> ?\s == ' '
#⇒ true

答案 1 :(得分:3)

?是一个文字,为您提供以下字符的代码点(https://elixir-lang.org/getting-started/binaries-strings-and-char-lists.html#utf-8-and-unicode)。对于无法从字面上表示的字符(空格只是其中之一,但还有更多:制表符,回车符等),应改用转义的序列。因此?\s为您提供了空间的代码点:

iex> ?\s
32