Skip to main content
变量 用于为值命名并保存计算结果,引用运算符 & 用于在表达式中读取变量值。本章覆盖赋值、复合赋值、 引用与作用域要点。

基本赋值

想复用中间结果时,可以把值赋给变量。使用 = 即可创建或更新变量:
要点如下:
  • 不需要 varlet 等关键字,直接写 name = expression 即可创建或更新变量。
  • 对同名变量再次赋值会覆盖先前的值,后一次赋值生效。
除了最基础的 = 赋值外,Fluxon 还支持常见的复合赋值运算符:
其语义与大多数 JVM 语言保持一致,相当于在 原有值 的基础上就地更新。

常量

Fluxon 通过 命名约定 识别常量:全大写标识符(模式 [A-Z][A-Z0-9_]*)在赋值字面量时自动成为常量。
常量具有以下特性:
  • 不可重新赋值:尝试修改常量会在解析期报错
  • 编译时内联:常量引用在解析阶段被替换为字面量值,无运行时查找开销

常量 vs 变量

只有「全大写标识符 + 字面量值」的组合才会被识别为常量:

常量内联优化

常量在解析阶段被内联,这意味着 &PI 会被直接替换为 3.14159

引用运算符 &

在 Fluxon 中,始终显式区分「变量本身」和「变量里的值」。在表达式中读取变量的值时,需要在变量名前添加 &, 表示「取出该变量当前绑定的值」:
使用 & 时需要注意:
  • &name 可以出现在任意表达式的位置,用于取出当前作用域中对应变量的值。
  • 赋值语句左侧始终写作 name = ...,不会出现 &name = ... 这样的形式。
  • 在函数体或控制流结构(如循环、分支)内部使用 &,可以直接访问外层已存在的变量。
一个常见的出错场景是「忘记写 &」:

作用域要点

Fluxon 的多种语法结构都会引入新的作用域:
  • forwhen 等控制流结构以及函数体都会形成各自的作用域。
  • 在这些结构内部新建的变量,默认只在本作用域内可见。
如果希望在循环或分支内部计算得到的结果在外层同样可用,通常的写法是:
  1. 在外层先声明并初始化变量。
  2. 在内部作用域中,通过赋值对该变量进行累积或更新。
如果把累加结果写成循环内部的新变量,那么外层就无法使用它:

条件分支中的作用域

when 或其他分支结构体内定义的变量,默认只在对应分支中可见:
在分支内部如果使用 localMsg = ... 这样的新变量名,则该变量只在当前分支块内有效,外层无法访问。

函数与嵌套作用域

函数体同样形成自己的作用域,函数参数和在函数内声明的变量不会泄漏到外层:
在多层嵌套结构中,内层可以通过 & 引用外层变量,但应避免复用相同的变量名,从而遮蔽外层含义:
如果在内层重新声明了同名变量,就会发生「变量遮蔽」(shadowing):

相关链接