繁体   English   中英

“?”是什么意思? 运营商在Elixir做什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM