mojo初体验

目录标题

mojo初体验

试用地址

https://www.modular.com/get-started

与python基础语法很相似。

变量定义

  • let定义不可变变量
  • var定义可变变量

参数可变性和所有权

下面是一个基本的函数:

fn add(x: Int, y: Int) -> Int:
    return x + y

请注意,上面的add()不会修改x or y,它只会读取值。事实上,正如所写的,函数无法修改它们,因为默认情况下fn参数是不可变的引用。

就参数约定而言,这称为"借用",尽管这是函数的默认设置fn,但您可以使用borrowed如下声明将其明确化(其行为与直接使用add()完全相同):

fn add(borrowed x: Int, borrowed y: Int) -> Int:
    return x + y

如果您希望参数可变,则需要声明参数约定为inout。这意味着对函数内部参数所做的更改在函数外部可见。

例如,该函数可以修改原始变量:

fn add_inout(inout x: Int, inout y: Int) -> Int:
    x += 1
    y += 1
    return x + y

var a = 1
var b = 2
c = add_inout(a, b)
print(a)
print(b)
print(c)

2

3

5

另一种选择是将参数声明为owned,这为函数提供了该值的完全所有权(它是可变的并保证唯一)。这样,函数可以修改值,而不用担心影响函数外部的变量。例如:

fn set_fire(owned text: String) -> String:
    text += "🔥"
    return text

fn mojo():
    let a: String = "mojo"
    let b = set_fire(a)
    print(a)
    print(b)

mojo()

mojo

mojo🔥

在这种情况下,Mojo 会复制一份a并将其作为text参数传递。原来的a字符串仍然存在且完好。

总结:
borrowed 为默认,参数不可变
inout 参数可变
owned 参数可变,保留原参数

Structures

Mojo 中struct与 Python 中class类似:它们都支持方法、字段、运算符重载、元编程装饰器等。

后续

The Mojo🔥 SDK coming to your desktop soon!

九月初Mojo应该可以脱离playground在本地执行,目前已加入白名单,等待中。

相关推荐
bbqz00710 天前
逆向WeChat(六)
c++·微信·小程序·逆向·mojo·嗅探·抓包https·devtool·sniff
ecoolper23 天前
【maven插件】org.codehaus.mojo:build-helper-maven-plugin:timestamp-property
java·maven·mojo
bbqz0071 个月前
逆向WeChat (五)
c++·微信·逆向·mojo·ipc·wechat·mmmojo
启航学途1 个月前
Mojo 实现排序功能
mojo·mojo 实现排序功能·mojo入门·mojo基础·mojo教程·mojo sort排序·mojo 排序api
2401_857439692 个月前
分布式智能:Mojo模型在分布式系统中的动态使用策略
分布式·mojo
2401_857600952 个月前
Mojo模型与A/B测试:数据驱动决策的科学
mojo
2401_857026232 个月前
批量预测的加速器:Mojo模型的批处理预测能力
mojo
2401_857439692 个月前
压缩Mojo模型:轻装上阵的机器学习模型
人工智能·机器学习·mojo
代码之光_19802 个月前
云端智能:在云环境中部署Mojo模型的全面指南
mojo
杨哥带你写代码2 个月前
深度学习优化:Mojo模型中自定义特征的稀疏表示处理
人工智能·深度学习·mojo