[英]What does the "?" operator do in Elixir?
Ecto 源代码使用表达式?0
、 ?1
等。您可以看到它们是如何求值的:
iex(14)> ?0
48
iex(15)> ?1
49
iex(16)> ?2
50
那是什么意思呢? 这很难搜索。 ?<character>
的实际作用是什么?
来自: https://elixir-lang.org/getting-started/binaries-strings-and-char-lists.html#unicode-and-code-points
Elixir可以用吗? 在字符文字前面显示其代码点:
如果您不熟悉代码点:
Unicode 将其所有的字符组织成代码表,每个字符都被赋予一个唯一的数字索引。 这个数字索引被称为代码点。
?<character>
也可以以有趣的方式用于模式匹配和保护子句。
defp parse_unsigned(<<digit, rest::binary>>) when digit in ?0..?9,
do: parse_unsigned(rest, false, false, <<digit>>)
...
defp parse_unsigned(<<?., digit, rest::binary>>, false, false, acc) when digit in ?0..?9,
do: parse_unsigned(rest, true, false, <<acc::binary, ?., digit>>)
Elixir 文档也阐明它只是语法。 正如@sabiwara 指出的那样:
这些构造仅存在于语法级别。
quote do: ?A
只返回65
并且不显示任何?
操作员
正如@Everett 在评论中指出的那样,有一个有用的 package 称为Xray
,它提供了一些方便的实用程序函数来帮助理解正在发生的事情。
例如Xray.codepoint(some_char)
可以做什么?<char>
但它适用于变量,而?
仅适用于文字。 Xray.codepoints(some_string)
将完成整个字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.