LSR 014 - 多值变量/表达式
基本信息
- LSR 编号 014
- 标题 多值变量/表达式
- 作者 CGrakeski
- 状态 草案
- 类型 标准规范
- 创建日期 10-18-2025
- Lamina 版本 未决议
摘要
在Lamina发展的过程中,为了统一“数”与“多个数”的表示格式,并解决函数传递多个参数时可能出现的类型不匹配问题,编写此LSR。本规范引入多值变量/表达式,允许一个变量同时代表多个可能的值,在运算时自动对所有值进行计算,从而简化代码并增强语言表达能力。
技术规范
多值变量/表达式的定义与使用
一个多值变量/表达式表示,对一个变量/表达式,其有多重的值,在运算或者进行其他操作时,对每个值都进行运算。在Lamina中,它由竖线 | 分隔的多个值定义:
MultiValueA = 1 | 2 | 3
多值表达式可以与其他表达式相运算:
print(MultiValueA + 2) // 输出 3 | 4 | 5
print(MultiValueA * 2) // 输出 2 | 4 | 6
print(MultiValueA!) // 输出 1 | 2 | 6
若多个多值表达式相互运算,则将每种值都考虑到:
MultiValueB = 3 | 6 | 9
print(MultiValueA + MultiValueB) // 输出 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
对两个数之间可以构成多值表达式,多值表达式也可通过竖线|构成多值表达式:
print(MultiValueA | MultiValueB) // 输出 1 | 2 | 3 | 6 | 9
另外,多值表达式可以存放不同类型的值:
Everything = 1 | 'Multi' | [1, 2, 3] | (do |x, y| { return x + y; }) | null
若多值表达式在书写时有相同值,则自动化简,按从小到大的顺序排列,数字在前,其余的按类型名字典序与字符串化后的字典序排序:
EqualThings = 2 | 1 | 2 | 2 | 1 | 1 | 2 | 'b' | 'a' | 'b'
print(EqualThings) // 输出 1 | 2 | 'a' | 'b'
若多值表达式中有一些不能参与运算的值,此时进行运算,将会:
print(Everything / 3)
/* 报错:
Error: The element 'Multi' of 'Everything' causes the error(s):
Error: Arithmetic operation '/' requires numeric operands
*/
多值表达式的列表化
对一个多值表达式,将其转为列表,需要使用*运算符:
print(*EqualThings) // 输出 [1, 2]