Рассмотрим следующий модульЧто означает знак вопроса?
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 '' do
_number_digits(tail, value*10 + digit - ?0)
end
defp _number_digits([ non_digit | _ ], _) do
raise "Invalid digit '#{[non_digit]}'"
end
end
Когда я импортировать файл в оболочке и выполнить следующее заявление:
iex(3)> Parse.number('123')
, как выход я получил
123
То, что я действительно не понимаю, эта линия:
value*10 + digit - ?0
Что такое? 0 действительно означает? Я знаю, когда я пишу? Х на раковине, он показывает мне точку кода, как
iex(13)> ?5
53
iex(14)> ?t
116
? 0 имеет кодовую -48. В приведенном выше примере с 123, расчет с первым номер итерации 1 будет выглядит как (значение * 10 + цифра - 0):
0 * 10 + 1 - 48
Когда я вычислить сам, я хотел бы получить в результате -47, но я У меня 1, почему?
От поиска, копирования и вставки google: знак вопроса в имени функции указывает, что возвращаемое значение будет логическим " –
Это не может быть логическим, потому что оно возвращает число. –
@EvanCarslake Это относится к вопросительному знаку в имени функции. Он спрашивает о вопросительном знаке в списке аргументов. Две разные вещи. –