引用系统
Alia 的引用系统提供 ref、load、store 三个关键字,用于创建和操作变量引用。
1. 引用关键字
ref — 创建引用
ref <Variable name>
ref 创建一个指向已有变量的引用对象,返回类型为 Ref。
load — 读取引用
load <Value ref>
load 解引用并读取引用指向的变量的当前值。
store — 写入引用
store <Value ref> <Value val>
store 通过引用修改其所指向的变量的值。
2. 基本用法
创建引用并读取值
let x = 42
let r = ref x
print load r ~ 输出 42
通过引用写入值
let y = 10
let r2 = ref y
store r2 99
print y ~ 输出 99
多个引用指向同一变量
let z = 5
let r1 = ref z
let r2 = ref z
store r1 10
store r2 20
print z ~ 输出 20
3. 进阶用法
在循环中通过引用修改变量
let counter = 0
let r = ref counter
for { let i = 0 } i < 10 { i ++ } {
store r counter + 1
}
print counter ~ 输出 10
在条件分支中通过引用修改变量
let value = 100
let r = ref value
if true {
store r 200
}
print value ~ 输出 200
通过引用的链式操作
let a = 1
let b = 2
let ra = ref a
let rb = ref b
let va = load ra
let vb = load rb
store ra ((va as Number) + (vb as Number))
print a ~ 输出 3
通过引用交换变量值
let x = 'hello'
let y = 'world'
let rx = ref x
let ry = ref y
let temp = load rx
store rx load ry
store ry temp
print x ~ 输出 'world'
print y ~ 输出 'hello'
4. 类型信息
typeOf对引用值返回'Ref'- 尝试
load非Ref类型的值会抛出错误 - 尝试
store写入非Ref类型的值会抛出错误
let x = 42
let r = ref x
print typeOf r ~ 输出 'Ref'
5. 错误处理
~ 引用未定义的变量会抛出错误
let r = ref nonexistent ~ Error
~ 对非引用值执行 load 会抛出错误
let x = 42
load x ~ Error
~ 对非引用值执行 store 会抛出错误
let y = 10
store y 100 ~ Error
6. 机制说明
ref创建一个指向已有变量的引用对象,返回类型为Refload解引用并读取引用指向的变量的当前值store通过引用修改其所指向的变量的值- 引用遵循变量作用域规则:不能引用当前作用域不可访问的变量
ref与Has均以Variable为实参:ref引用当前作用域中的简单变量,Has <Variable name>检查可变栈内是否存在指定变量
7. 作用
- 间接访问:通过引用间接操作变量,适用于需要传递变量"指针"的场景
- 数据交换:方便地在不同作用域或函数间交换变量值
- 可变状态管理:通过引用在封闭语境中修改外部状态