【发布时间】:2016-03-17 05:34:45
【问题描述】:
考虑以下模块
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 的计算看起来像(value*10 + digit - ?0):
0 * 10 + 1 - 48
当我自己计算时,结果是-47,但我得到了1,为什么?
【问题讨论】:
-
从google搜索,复制粘贴:“函数名中的问号表示返回值将是布尔值”
-
它不能是布尔值,因为它返回一个数字。
-
@EvanCarslake 那是指函数名称中的问号。他在询问论点列表中的问号。两种不同的东西。
标签: elixir