# 解析 Erg 语言 ## 处理空白 在 Erg 的语法中,特别的是 space-sensitive(根据空白进行区分)这一点。这是为了弥补的省略导致的表现力下降。同样的语法也可以在可以省略的 Nim 中看到。 ```erg f +1 == f(+1) f + 1 == `+`(f, 1) f (1,) == f((1,)) f(1,) == f(1) (f () -> ...) == f(() -> ...) (f() -> ...) == (f() -> ...) ``` ## 左侧值,右侧值 在 Erg 中,所谓左边值并不是的左侧这样简单的值。实际上,的左侧也存在右边值(非常容易混淆),的右侧也存在左边值。甚至在右边值中存在左边值。 ```erg # iは左辺値、Array(Int)と[1, 2, 3]は右辺値 i: Array(Int) = [1, 2, 3] # `[1, 2, 3].iter().map i -> i + 1`は右辺値だが、->の左側のiは左辺値 a = [1, 2, 3].iter().map i -> i + 1 # {x = 1; y = 2}は右辺値だが、x, yは左辺値 r = {x = 1; y = 2} ``` 左边值、右边值的正确定义是“如果可以评价的话是右边值,如果不是的话是左边值”。以这一代码为例。第 2 个是可以评价的右边值,第 1 个是左边值。