Mojo语法基础 #

一、关键字 #

1.1 Mojo关键字列表 #

Mojo保留了以下关键字:

关键字 用途
def 定义动态函数
fn 定义静态函数
let 定义常量
var 定义变量
struct 定义结构体
if 条件语句
else 否则分支
elif 否则如果
while while循环
for for循环
in 成员检测
return 返回值
import 导入模块
from 从模块导入
as 别名
pass 占位语句
break 跳出循环
continue 继续循环
True 布尔真
False 布尔假
None 空值
and 逻辑与
or 逻辑或
not 逻辑非
is 身份检测
async 异步函数
await 等待异步
try 异常处理
except 捕获异常
finally 最终执行
raise 抛出异常
with 上下文管理
yield 生成器
lambda 匿名函数
class 类定义(保留)
self 实例自身
owned 所有权转移
inout 输入输出引用
ref 引用

1.2 标识符规则 #

  • 以字母或下划线开头
  • 后续可以是字母、数字或下划线
  • 区分大小写
  • 不能使用关键字
mojo
let valid_name = 1
let _private = 2
let camelCase = 3
let PascalCase = 4

二、运算符 #

2.1 算术运算符 #

mojo
def main():
    let a = 10
    let b = 3
    
    print(a + b)
    print(a - b)
    print(a * b)
    print(a / b)
    print(a % b)
    print(a ** b)
    print(a // b)

main()
运算符 描述 示例
+ 加法 a + b
- 减法 a - b
* 乘法 a * b
/ 除法 a / b
% 取模 a % b
** 幂运算 a ** b
// 整除 a // b

2.2 比较运算符 #

mojo
def main():
    let a = 10
    let b = 3
    
    print(a == b)
    print(a != b)
    print(a > b)
    print(a < b)
    print(a >= b)
    print(a <= b)

main()
运算符 描述 示例
== 等于 a == b
!= 不等于 a != b
> 大于 a > b
< 小于 a < b
>= 大于等于 a >= b
<= 小于等于 a <= b

2.3 逻辑运算符 #

mojo
def main():
    let a = True
    let b = False
    
    print(a and b)
    print(a or b)
    print(not a)

main()
运算符 描述 示例
and 逻辑与 a and b
or 逻辑或 a or b
not 逻辑非 not a

2.4 位运算符 #

mojo
def main():
    let a = 0b1010
    let b = 0b1100
    
    print(bin(a & b))
    print(bin(a | b))
    print(bin(a ^ b))
    print(bin(~a))
    print(bin(a << 2))
    print(bin(a >> 2))

main()
运算符 描述 示例
& 按位与 a & b
| 按位或 a | b
^ 按位异或 a ^ b
~ 按位取反 ~a
<< 左移 a << n
>> 右移 a >> n

2.5 赋值运算符 #

mojo
def main():
    var a = 10
    
    a += 5
    print(a)
    
    a -= 3
    print(a)
    
    a *= 2
    print(a)
    
    a //= 4
    print(a)

main()
运算符 等价于
+= a = a + b
-= a = a - b
*= a = a * b
/= a = a / b
%= a = a % b
//= a = a // b
**= a = a ** b
&= a = a & b
|= a = a | b
^= a = a ^ b
<<= a = a << b
>>= a = a >> b

三、表达式 #

3.1 算术表达式 #

mojo
let result = (10 + 5) * 2 - 3 / 1.5

3.2 比较表达式 #

mojo
let is_valid = age >= 18 and age <= 65

3.3 三元表达式 #

mojo
let status = "adult" if age >= 18 else "minor"

3.4 Walrus运算符 #

mojo
def main():
    var data = [1, 2, 3, 4, 5]
    var i = 0
    while (val := data[i]) < 4:
        print(val)
        i += 1

main()

四、运算符优先级 #

从高到低:

优先级 运算符
1 **
2 +x, -x, ~x
3 *, /, //, %
4 +, -
5 <<, >>
6 &
7 ^
8 |
9 ==, !=, <, >, <=, >=
10 not
11 and
12 or
mojo
let result = 2 + 3 * 4
let result2 = (2 + 3) * 4

五、类型注解 #

5.1 基本类型注解 #

mojo
fn add(a: Int, b: Int) -> Int:
    return a + b

let result: Int = add(1, 2)

5.2 可选类型 #

mojo
fn find_value(arr: List[Int], target: Int) -> Optional[Int]:
    for i in range(len(arr)):
        if arr[i] == target:
            return arr[i]
    return None

5.3 泛型类型 #

mojo
fn generic_add[T: Numeric](a: T, b: T) -> T:
    return a + b

六、代码风格 #

6.1 缩进 #

使用4个空格缩进:

mojo
def main():
    if True:
        print("Indented")
main()

6.2 行长度 #

建议每行不超过88个字符。

6.3 空行 #

  • 函数之间空两行
  • 类方法之间空一行
mojo
def function_one():
    pass


def function_two():
    pass


struct MyStruct:
    fn method_one(self):
        pass
    
    fn method_two(self):
        pass

6.4 命名约定 #

类型 约定 示例
变量 snake_case my_variable
常量 UPPER_CASE MAX_VALUE
函数 snake_case my_function
结构体 PascalCase MyStruct
模块 snake_case my_module

七、总结 #

本章学习了:

  • Mojo关键字和标识符规则
  • 各类运算符的使用
  • 表达式和优先级
  • 类型注解
  • 代码风格规范

下一章,我们将学习Mojo的数据类型。

最后更新:2026-03-27