Finn

Finn

👨🏻‍💻工作:Web3 产品经理 🏙️城市:香港 🧩性格:INFP 最近在做 GameFi,能赚钱的游戏
jike
email

Move on Aptos 春季训练营笔记 | 01 & 02

02 Move 语言与变量#

变量#

  • 变量:是有名字的对象;

  • 对象:存储某个类型值的内存区域;(类似 C++ 的指针)

  • 值:按照类型进行解释的 bytes 集合;

  • 类型:定义可能值的操作

存储#

  • 值类型

    • 通过栈进行存储

    • 简单类型:布尔、整数、浮点数…

  • 引用类型

    • 通过堆进行存储

    • 复杂类型:对象、数组、类、函数…

通常我们定义一个变量为对象时,其对象的值存储在堆上,其堆内存的索引存储在栈上,用栈上的索引指向堆上存储的引用类型数据。(变量指向对象)

Move 核心差异#

在值类型与引用类型关系上,不同于其他语言的索引方式。而是以 “所有权” 来作为引用类型的操作。

  1. 所有权只能同时由 1 “人” 拥有;

  2. 所有权以转移的形式流转给其他变量;

例如:

B = A;

C = B;

此时 B 为空,而 C 指向 A。

这样的好处:

  1. 避免内存泄露,不同于其他语言,在编译阶段就可以告知什么时候可以回收内存;

  2. 提高内存使用效率,避免对引用类型的不必要拷贝;

  3. 更好的可读性和可维护性;

03 uint,Stirng,Bool,address 四大类型#

unint 类型#

多种写法

#[test]
    fun test_num(){
        let num_u8: u8 = 42; // 0-2**8-1
        let num_u8_2: u8 = 43u8;
        let num_u8_3: u8 = 0x2A;//hash
        let num_u256:u256 = 100_000;
        let num_sum: u256 = (num_u8 as u256) + num_u256;
        print(&num_u8); //42
        print(&num_u8_2); //43
        print(&num_u8_3); // 42
        print(&num_u256); //100000
    }

Bool 类型#

#[test]
    fun test_bool(){
        let bool_true: bool = true;
        let bool_false: bool = false;
        print(&bool_true); //true
        print(&bool_false); //false
        print(&(bool_true == bool_false)); //false
    }

String 类型#

#[test]
    fun test_string(){
        let str:String = utf8(b"hello world");
        print(&str); //"hello world"
    }

address 类型#

输出是 @0×2a 其实中间会自动补 0

#[test]
    fun test_addr(){
        let addr:address = @0x2A;
        let addr2:address = @0x000000000000000000000000000000000000000000000A;
        print(&addr); //@0x2a -> @0x(0000...)2a
        print(&addr2); //@xa
    }
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。