数据类型
现在您已经了解了如何在 Move 中初始化变量和常量,接下来我们来介绍一下可以使用什么类型的数据类型来定义这些变量和常量。让我们深入研究它们。
无符号整数类型
以下是您可以在 Move 中使用的以下无符号整数类型。
u8
:该类型可以存储 0 到 2^8 - 1 之间的数字,等于 0 - 255。u16
:该类型可以存储0到2^16 - 1之间的数字。u32
:该类型可以存储从 0 到 2^32 - 1 的数字。u64
:该类型可以存储0到2^64 - 1之间的数字。u128
:该类型可以存储从 0 到 2^128 - 1 的数字。u256
:该类型可以存储从 0 到 2^256 - 1 的数字。
现在,让我们看一个示例来了解如何在代码中使用它们。
#![allow(unused)] fn main() { let a : u8 = 100; let b : u64; b = 300 }
以下是如何在 Move 中使用数据类型。
module examples::integers {
use sui::object::UID;
use sui::tx_context::{Self, TxContext};
// Declaring the ExampleObject
public struct ExampleObject has key {
id: UID,
a: u8,
b: u16
}
// Initializing the constructor
fun init(a: u8, b: u16, ctx: &mut TxContext) {
let object = ExampleObject {
id: object::new(ctx),
a: a,
b: b,
}
}
}
在此示例中,我们在对象 ExampleObject
和 b
以及 u8
和 u16
数据类型> ,然后在 init
构造函数中初始化它们。
布尔值
在 move 中,布尔值的工作方式与其他编程语言中相同。它有两个值: true
和 false
。让我们看看如何在代码中使用它们。
#![allow(unused)] fn main() { let a = true; let b : bool; b = false; let c : bool = true; }
以下是如何在 Move on Sui 中使用它们。
module examples::boolean {
use sui::object::UID;
use sui::tx_context::{Self, TxContext};
// Declaring the ExampleObject
public struct ExampleObject has key {
id: UID,
a: u8,
flag: bool,
}
// Initializing the constructor
fun init(a: u8, flag: bool, ctx: &mut TxContext) {
let object = ExampleObject {
id: object::new(ctx),
a: a,
flag: flag,
}
}
}
在此示例中,我们在对象中声明了 a
和 u8
以及 b
和 bool
数据类型, ExampleObject
,然后在 init
构造函数中初始化它们。
向量
Vector是一种数据结构,其工作原理类似于move中的数组。要使用向量,我们导入一个模块 std::vector
,并使用 let
来声明它。向量的格式如下: vector<T>
,其中 T
是任何数据类型。以下是如何将空向量声明为 Move。
#![allow(unused)] fn main() { module examples::boolean { use std::vector; let v = vector::empty<u8>(); } }
在 Move 中, vector
最常见的用法是使用 vector<u8>
,它作为字节类型字符串来定义或使用字符类型变量。
字符串
在 move 中,您需要一个外部模块 std::string
来处理字符串并将字符串类型数据类型定义为变量。让我们看看如何与他们合作。
module examples::strings {
use sui::object::UID;
use sui::tx_context::{Self, TxContext};
// std::string import
use std::string::{Self, String};
// Declaring the ExampleObject
public struct ExampleObject has key {
id: UID,
name: String,
}
// Initializing the constructor
fun init(name_bytes: vector<u8>, ctx: &mut TxContext) {
let object = ExampleObject {
id: object::new(ctx),
name: string::utf8(name_bytes)
}
}
}
在这里,我们进行了类型转换以将字符串存储在 name
中。我们使用 vector<u8>
通过使用 string::utf8()
方法进行类型转换来填充 name
字符串。
地址
在 move 中,您可以使用 @
符号用地址初始化变量。以下是您可以如何做到这一点。
#![allow(unused)] fn main() { let addr = @0x2; }
这里, 0x2
是一个地址, @
帮助识别它是一个地址。现在,让我们看看可以使用的不同形式的地址书写格式。
@0x1
:这是0x00000000000000000000000000000001
的缩写形式。@0x42
:这是0x00000000000000000000000000000042
的缩写形式。@0xDEADBEEF
:这是0x000000000000000000000000DEADBEEF
的缩写形式。@0x0000000000000000000000000000000A
:这是一个完整的地址形式。@std
:这将指向std
的地址。
要将地址传递给函数或在对象中定义地址,您需要在 Move 中使用名为 address
的关键字。以下是您可以如何做到这一点。
module examples::address {
use sui::object::UID;
use sui::tx_context::{Self, TxContext};
// std::string import
use std::string::{Self, String};
// Declaring the ExampleObject
public struct ExampleObject has key {
id: UID,
addr: address,
}
// Initializing the constructor
fun init(add: address, ctx: &mut TxContext) {
let object = ExampleObject {
id: object::new(ctx),
addr: add
}
}
}
在此示例中,我们在对象 ExampleObject
中声明了 addr
和 address
,然后在 init
构造函数中初始化它们。
小结
在本课中,我们介绍了各种示例。您想尝试在您的系统上运行它们吗?您可以执行以下操作:创建一个名为 examples
的新模块,然后创建不同的包,例如 integers
、 strings
、 vector
,和 address
es。最后,使用 sui move build
命令运行它们,看看会发生什么。如果您遇到任何错误,也请尝试修复它们。
整数、布尔值、字符串、向量和地址是使用 move 时经常使用的主要数据类型。这些数据类型将帮助您构建基础并开始编写您的第一个应用程序。接下来,我们将深入研究控制流并学习如何在 move中使用这些数据类型。