跳过正文
  1. Lumesh 文档/
  2. 语法/

语法:区间、列表与映射

749 字·2 分钟
目录

基础语法:区间、列表与映射

三、区间、列表与映射
#

1. 区间
#

  • 区间表达式 区间使用 ..<(左闭右开) 或 ..(为闭区间),左右不能有空格。 支持变量扩展。

    10..<10        #不包含10
    20..10       #包含10
    3a..b

    区间表达式支持步进::step

    10..6:2     # 表示步进为2: [0,2,4,6]

    可用于循环、包含检测、数组创建等。

    1let r = 0..8
    2
    3for i in r {...}       # 比直接在数组上循环效率更高
    4r ~: 5                 # 检测是否包含元素
    5List.from(r)           # 转为数组

2. 列表(数组)
#

  • 列表用[ ]表示。内部元素是有序的。

  • 也可以用......<直接从区间创建

    10...5               # 输出[0,1,2,3,4]
    2# 等同于
    3List.from(0..5)

两个点.. ..<创建区间,三个点... ...<创建数组

  • 索引用.[i]表示。

    1let arr = [10, "a", True]
  • 索引和切片

    1# 基础索引
    2
    3arr.1
    4arr[0]       # → 10
    5
    6# 切片操作
    7arr[1:3]     # → ["a", True](左闭右开)
    8arr[::2]     # → [10, True](步长2)
    9arr[-1:]      # → True(切片支持负数索引)
  • 复杂嵌套

    1# 复杂嵌套
    2[1,24,5,[5,6,8]][3][1]     # 显示6
    3# # 修改元素
    4# arr[2] = 3.14 # → [10, "a", 3.14]
  • 高级操作 参考 list 模块。

边缘情况

  • 数组索引如果超出边界,会触发out of bounds错误
  • 数组切片支持负数,表示从后往前数的index
  • 如果对不能索引的对象进行索引,会触发如下错误: [ERROR] type error: expected indexable type (list/dict/string), found symbol

3. 映射(字典)
#

  • 映射用{}表示

     1let mydict = {name: "Alice", age: 30}
     2
     3# 允许简写:
     4let a = b =3,
     5{a, b}
     6{
     7    a,
     8    b,
     9}          # 允许末尾逗号,允许多行书写
    10{a, }             # 单个键值的逗号不能省略
  • 字典索引

     1# 基础访问
     2
     3mydict["name"]     # → "Alice"
     4mydict.name        # → "Alice"(简写形式)
     5mydict@name        # → "Alice"(简写形式)
     6
     7# 动态键支持
     8let key = "ag" + "e"
     9dict[key]       # → 30
    10
    11# 嵌套访问
    12let data = {user: mydict}
    13data.user.age # → 100
  • 高级操作 参考 map 模块。

边缘情况

场景行为
访问不存在的数组索引触发[ERROR] key x not found in map错误
对非字典对象进行索引触发 [ERROR] not valid index option 错误
对未定义的符号进行索引返回字符串,因为shell中操作文件名是最常见的操作

相关文章