proc check_number(number: string): bool =
var x = number.len-2 #works
var y = number.len - 2 #works
var z = number.len- 2 #works
var a = number.len -2 #throws invalid Indentation error
echo x, y, z, a
return true
echo check_number("1234")
Make sure you are not having any extra whitespace at the end of lines. If not, then check for indentations and replace them with spaces.
If done correctly, your program should work fine.
var a = number.len -2 #throws invalid Indentation error
That's because it is equivalent to number.len(-2) and/or len(number, -2) ; <whitespace> followed by something that looks like a negative number is a negative number (and not a "subtract" operation).
According to Nim manual: https://nim-lang.org/docs/manual.html#syntax-precedence
Whether an operator is used a prefix operator is also affected by preceding whitespace (this parsing change was introduced with version 0.13.0):
echo $foo
# is parsed as
echo($foo)
See how Nim parse your code:
import macros
dumpTree:
var x = number.len-2
var y = number.len - 2
var z = number.len- 2
var a = number.len -2
Output:
StmtList
VarSection
IdentDefs
Ident "x"
Empty
Infix
Ident "-"
DotExpr
Ident "number"
Ident "len"
IntLit 2
VarSection
IdentDefs
Ident "y"
Empty
Infix
Ident "-"
DotExpr
Ident "number"
Ident "len"
IntLit 2
VarSection
IdentDefs
Ident "z"
Empty
Infix
Ident "-"
DotExpr
Ident "number"
Ident "len"
IntLit 2
VarSection
IdentDefs
Ident "a"
Empty
Command
DotExpr
Ident "number"
Ident "len"
Prefix
Ident "-"
IntLit 2