Gox语言中的运算符和操作符还是比较简单的,
// Assignment
a = nil
println(a)
a = true
println(a)
println("-----")
// basic operators
a = 2 + 1
println(a)
a = 2 - 1
println(a)
a = 2 * 1
println(a)
a = 4 / 2
println(a)
println("-----")
// ++ and --
a = 1
a++
println(a)
a--
println(a)
println("-----")
// +=, -=, *=, /=
a = 1
a += 1
println(a)
a -= 1
println(a)
a *= 4
println(a)
a /= 2
println(a)
a = 2 - (-2)
println(a)
println("-----")
// bitwise and/or/not
a = 1 & 3
println(a)
a = 1 | 2
println(a)
a = !true
println(a)
println("-----")
// bitwise shift
a = 2 << 3
println(a)
a = 8 >> 2
println(a)
println("-----")
// mod
a = 7 % 3
println(a)
println("-----")
// bitwise complement
a = bitXor(1.1, 2)
println(a)
输出的结果是:
λ gox operators.gox
<nil>
true
-----
3
1
2
2
-----
2
1
-----
2
1
4
2
4
-----
1
3
false
-----
16
2
-----
1
-----
0
注意,由于Gox语言中Qlang引擎占用了“^”作为取地址符,因此按位异或的操作只能用bitXor函数来实现。
另外,结构体的成员变量用“.”操作符一般获取的是其值,如果要获得其指针,需要用“@”操作符。
* 注:由于0.988版本后,为了减少不必要的文件体积,Gox已经放弃了其他脚本引擎,仅支持Qlang引擎,因此本文中的内容已经无效,仅留作对旧版本的参考。
下面是使用Anko引擎的版本。
// Assignment
a = nil
println(a)
a = true
println(a)
println("-----")
// basic operators
a = 2 + 1
println(a)
a = 2 - 1
println(a)
a = 2 * 1
println(a)
a = 4 / 2
println(a)
println("-----")
// ++ and --
a = 1
a++
println(a)
a--
println(a)
println("-----")
// +=, -=, *=, /=
a = 1
a += 1
println(a)
a -= 1
println(a)
a *= 4
println(a)
a /= 2
println(a)
a = 2 - (-2)
println(a)
println("-----")
// bitwise and/or/not
a = 1 & 3
println(a)
a = 1 | 2
println(a)
a = !true
println(a)
println("-----")
// bitwise shift
a = 2 << 3
println(a)
a = 8 >> 2
println(a)
println("-----")
// mod
a = 7 % 3
println(a)
println("-----")
// bitwise complement
a = ^1.1
println(a)
// string manipulation
a = "a" * 4
println(a)
输出结果是:
<nil>
true
-----
3
1
2
2
-----
2
1
-----
2
1
4
2
4
-----
1
3
false
-----
16
2
-----
1
-----
-2
aaaa
最后一个运算符是bitwise complement按位取反,按照Go语言官方的解释是:
^x bitwise complement is m ^ x with m = "all bits set to 1" for unsigned x
and m = -1 for signed x