Ним: оператор let без присваивания

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

Например:

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"

но выглядит не красиво конечно...


person rect0x51    schedule 10.12.2018    source источник


Ответы (2)


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

person cyraxjoe    schedule 10.12.2018

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

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 не возвращает проанализированный значение, а количество проанализированных символов.

person bluenote10    schedule 16.06.2019