2.3 运算符
December 6, 2025 · View on GitHub
CovScript 提供了丰富的运算符,用于执行各种操作。
2.3.1 算术运算符
基本算术运算
var a = 10
var b = 3
# 加法
var sum = a + b # 13
# 减法
var diff = a - b # 7
# 乘法
var product = a * b # 30
# 除法
var quotient = a / b # 3.333...
# 取模
var remainder = a % b # 1
# 幂运算
var power = a ^ 2 # 100
自增自减运算符
var count = 5
# 后置自增
var old = count++ # old = 5, count = 6
# 后置自减
var val = count-- # val = 6, count = 5
# 前置自增
var new = ++count # new = 6, count = 6
# 前置自减
var current = --count # current = 5, count = 5
2.3.2 比较运算符
比较运算符用于比较两个值,返回布尔类型结果。
var x = 10
var y = 20
# 等于
var isEqual = (x == y) # false
# 不等于
var notEqual = (x != y) # true
# 大于
var greater = (x > y) # false
# 小于
var less = (x < y) # true
# 大于等于
var greaterOrEqual = (x >= 10) # true
# 小于等于
var lessOrEqual = (x <= 20) # true
2.3.3 运算符重载
CovScript 支持为自定义类型重载运算符。结构体可以定义 +, -, *, /, ==, != 等运算符的行为。
class Vector
var x = 0
var y = 0
# 重载加法运算符
function op_add(other)
var v = new Vector
v.x = this.x + other.x
v.y = this.y + other.y
return v
end
# 重载乘法运算符(标量乘法)
function op_mul(scalar)
var v = new Vector
v.x = this.x * scalar
v.y = this.y * scalar
return v
end
end
var v1 = new Vector
v1.x = 1
v1.y = 2
var v2 = new Vector
v2.x = 3
v2.y = 4
var v3 = v1 + v2 # 调用重载的 + 运算符
var v4 = v3 * 4 # 调用重载的 * 运算符
2.3.4 逻辑运算符
逻辑运算符用于布尔逻辑运算。
逻辑与(AND)
var a = true
var b = false
# 使用 && 符号
var result1 = a && b # false
# 使用 and 关键字
var result2 = a and b # false
# 短路求值
var x = true && (10 > 5) # true
逻辑或(OR)
var a = true
var b = false
# 使用 || 符号
var result1 = a || b # true
# 使用 or 关键字
var result2 = a or b # true
# 短路求值
var x = true || (10 / 0) # true,不会执行除零操作
逻辑非(NOT)
var flag = true
# 使用 ! 符号
var inverted1 = !flag # false
# 使用 not 关键字
var inverted2 = not flag # false
复合逻辑表达式
var age = 25
var hasLicense = true
# 复合条件
var canDrive = (age >= 18) && hasLicense
# 多重条件
var isAdult = (age >= 18) && (age < 65) && hasLicense
2.3.5 赋值运算符
基本赋值
var x = 10
x = 20 # 简单赋值
复合赋值运算符
var num = 10
# 加法赋值
num += 5 # num = num + 5, 结果为 15
# 减法赋值
num -= 3 # num = num - 3, 结果为 12
# 乘法赋值
num *= 2 # num = num * 2, 结果为 24
# 除法赋值
num /= 4 # num = num / 4, 结果为 6
# 取模赋值
num %= 4 # num = num % 4, 结果为 2
2.3.6 特殊运算符
点运算符(.)
点运算符用于访问命名空间、包的成员,以及对象的属性和方法。
# 访问命名空间成员
system.out.println("Hello")
# 访问静态成员
math.abs(-5)
# 链式访问
system.console.clrscr()
# 访问哈希映射(字符串键)
var map = new hash_map
map.insert("name", "Alice")
var name = map.name # 等价于 map["name"]
冒号运算符(:)
冒号运算符用于创建键值对。
# 创建键值对
var pair = "key":"value"
var numPair = 1:100
# 在数组中使用
var pairs = {1:"one", 2:"two", 3:"three"}
箭头运算符(->)
箭头运算符用于访问指针指向的对象的成员。注意:在 CovScript 中,new 创建的是普通对象(引用),gcnew 创建的才是指针。
# 使用 gcnew 创建指针
struct MyClass
var value = 0
function method()
system.out.println("Method called")
end
end
var ptr = gcnew MyClass
ptr->value = 10
ptr->method()
解引用运算符(*)
解引用运算符用于获取指针指向的值。使用 gcnew 创建指针。
# 使用 gcnew 创建指针
var ptr = gcnew number
*ptr = 42
# 解引用读取值
var value = *ptr # 42
# 修改指针指向的值
*ptr = 100
取址运算符(&)
取址运算符用于获取变量的引用(指针)。
var x = 10
# 获取引用(指针)
# 取址会延长 x 底层内存的生命周期
var ptr = &x
# 通过指针修改值
*ptr = 20
system.out.println(x) # 20
索引运算符([])
索引运算符用于访问数组、列表等容器的元素。
# 数组索引
var arr = {1, 2, 3, 4, 5}
var first = arr[0] # 1
var third = arr[2] # 3
# 字符串索引
var str = "Hello"
var ch = str[1] # 'e'
# 修改元素
arr[0] = 100
运算符优先级
从高到低的优先级顺序:
- 括号
() - 成员访问
.,-> - 一元运算符
!,not,++,--,*,& - 幂运算
^ - 乘除模
*,/,% - 加减
+,- - 比较运算符
<,>,<=,>= - 相等运算符
==,!= - 逻辑与
&&,and - 逻辑或
||,or - 赋值运算符
=,+=,-=, 等
# 使用括号改变优先级
var result1 = 2 + 3 * 4 # 14 (乘法优先)
var result2 = (2 + 3) * 4 # 20 (括号优先)
# 复杂表达式
var value = 10 + 5 * 2 - 3 # 10 + 10 - 3 = 17