Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 问号是什么意思?_Elixir - Fatal编程技术网

Elixir 问号是什么意思?

Elixir 问号是什么意思?,elixir,Elixir,考虑以下模块 defmodule Parse do def number([ ?- | tail ]), do: _number_digits(tail, 0) * -1 def number([ ?+ | tail ]), do: _number_digits(tail, 0) def number(str), do: _number_digits(str, 0) defp _number_digits([], value), do: value d

考虑以下模块

defmodule Parse do

  def number([ ?- | tail ]), do: _number_digits(tail, 0) * -1
  def number([ ?+ | tail ]), do: _number_digits(tail, 0)
  def number(str),           do: _number_digits(str, 0)

  defp _number_digits([], value), do: value
  defp _number_digits([ digit | tail ], value) when digit in '0123456789' do
    _number_digits(tail, value*10 + digit - ?0)
  end
  defp _number_digits([ non_digit | _ ], _) do
    raise "Invalid digit '#{[non_digit]}'"
  end

end
当我将文件导入shell并执行以下语句时:

iex(3)> Parse.number('123')
作为我的输出

123
我真正不明白的是这句话:

value*10 + digit - ?0
0到底是什么意思?我知道,当我在shell上写?x时,它会显示代码点,比如

iex(13)> ?5
53
iex(14)> ?t
116
?0的代码点为-48。在上面的123示例中,第一次迭代次数为1的计算如下(值*10+位数-?0):


当我自己计算时,我得到的结果是-47,但我得到了1,为什么?

后跟一个字符会给出该字符的Unicode代码点值

\u number\u digits
函数的第二个子句中完成的
-?0
从数字的代码点值中减去字符“0”的代码点。这方便地为数字“0”提供整数0,为数字“1”提供1,等等


因此,整个
value*10+数字-?0
表达式首先将运行总数(
value
)乘以10(因为我们处理的是以10为基数的输入字符串),然后将当前数字的值相加。这种情况会递归发生,直到输入字符串的所有数字都被使用为止,给定输入字符串表示的整数。

从google搜索,复制并粘贴:“函数名中的问号表示返回值将是布尔值”它不能是布尔值,因为它返回一个数字。@EvanCarslake表示函数名中的问号。他在问论点列表中的一个问号。两件不同的事情。当我将`[x,y,z]='123``写入iex时,它澄清了我,该数字使用代码点值来计算结果。模式匹配的威力。非常感谢。
0 * 10 + 1 - 48