Xer*_*rus 2 string char elixir
在涵盖理解的 Elixir 文档中,我遇到了以下示例:
iex> for <<c <- " hello world ">>, c != ?\s, into: "", do: <<c>>
"helloworld"
Run Code Online (Sandbox Code Playgroud)
我现在有点理解整个表达式,但我无法弄清楚“?\ s”是什么意思。我知道它以某种方式匹配并因此过滤掉了空格,但这就是我的理解结束的地方。
编辑:我现在已经发现它解析为 32,这是一个空格的字符代码,但我仍然不知道为什么。
erlang具有由美元符号表示的字符文字。
Erlang/OTP 22 [erts-10.6.1] [...]
Eshell V10.6.1 (abort with ^G)
1> $\s == 32.
%%? true
Run Code Online (Sandbox Code Playgroud)
与elixir具有 char 文字的方式相同,根据代码文档,其行为与erlang char 文字完全相同:
这正是 Erlang 对 Erlang 字符文字 ($a) 所做的。
基本上,?\s与? (问号后跟一个空格)完全相同。
# ? space here
iex|1 ? ?\s == ?
warning: found ? followed by code point 0x20 (space), please use ?\s instead
Run Code Online (Sandbox Code Playgroud)
没有什么特别的?\s,你可能会看到:
for <<c <- " hello world ">>, c != ?o, into: "", do: <<c>>
#? " hell wrld "
Run Code Online (Sandbox Code Playgroud)
此外,ruby也使用?c字符文字表示法:
main> ?\s == ' '
#? true
Run Code Online (Sandbox Code Playgroud)