Ним: пусть заявление без присваивания

Я хочу иметь одну переменную присваивания, но сделаю присваивание позже (в другом блоке).

Например:

let n: int
try:
  n = parseInt paramStr(1)
except ValueError:
  quit "Expected Number

Это сейчас невозможно? Если так, то почему? И какова лучшая альтернатива в этой ситуации?

Я считал это:

let n =
  try:
    parseInt paramStr(2)
  except ValueError:
    -1
if n == -1:
  quit "Expected a number"

но выглядит не очень хорошо, конечно...

1 ответ

Решение

Это невозможно, учитывая текущую реализацию, ваша альтернатива мне кажется разумной (или использовать переменную с начальным значением -1). В противном случае вы можете использовать parseopt модуль для абстрагирования логики проверки ввода из командной строки.

Вы можете сделать что-то вроде:

let n =
  try:
    var n: int
    let processedChars = paramStr(1).parseInt(n)
    if processedChars == 0:
      quit "Expected number"
    n
  except ValueError:
    quit "Parsed integer is out of the valid range"

Также обратите внимание, что parseInt возвращает не проанализированное значение, а количество проанализированных символов.

Другие вопросы по тегам