Move 支援的 Primitive Type 如下,我們將依序介紹 Integers (u8, u64, u128), Bool, and Address
Move 支援三種數字類型: u8
, u64
, u128
對應的長度如下:
// 幾種可以使用的宣告模式
script {
fun main() {
let a: u8;
a = 10;
let b: u64 = 10;
let c = 10;
}
}
擁有以下幾種運算符號可以操作
+
-
*
%
/
擁有以下幾種運算符號可以操作
<
>
<=
>=
==
!=
轉換可以用在兩個地方
as
來執行強制轉換Move 只支援整數
進行此操作script {
fun main() {
let a: u8 = 10;
let b: u64 = 100;
// 只能比較相同類型
if (a == (b as u8)) abort 11;
if ((a as u64) == b) abort 11;
// 轉換為另一種大小
2u8 as u64
1 + 3 as u128
}
}
與其他語言相同使用方式,true or false
支持三種邏輯運算
&&
||
!
用於表示全局存儲中的位置(有時稱為帳戶)
值是一個 address
128 位(16 字節)的標識符。在給定的 address 可以存儲兩件事:Module
and Resource
不能修改,不支持算數運算(類似於 C 語言的指針算法也不允許),因為一開始就被設計為支持靜態驗證
可以使用運行時的 address 來訪問該處的 Resource,但不能訪問 Module
任何有效的 u128 數字值都可以用作 address 的值,例如 42, 0xCAFE, 2021 都是有效的
使用的語法會根據使用的上下文而有所不同:
當用於表達式時,必須以 @
為前綴
@<named_address_identifier>
@<numerical_value>
在表達是上下文之外,可以不使用 @
為前綴
允許在使用地址的任何地方使用標識符代替數值。
let a1: address = @0x1; // 0x00000000000000000000000000000001
let a2: address = @0x42; // 0x00000000000000000000000000000042
let a3: address = @0xDEADBEEF; // 0x000000000000000000000000DEADBEEF
let a4: address = @0x0000000000000000000000000000000A;
let a5: address = @Std; // 將名為 Std 地址的值分配給 a5 常數
let a6: address = @66;
let a7: address = @0x42;
// 上面都是所謂的表達式,所以都需要加上前綴 @
// 下面則不需要
module 66::SomeModule {
use 0x1::OtherModule;
use Std::Vector; // 使用其他 Module 時可以使用命名地址作為命名空間
...
}
module Std::OtherModule { // 可以使用命名地址作為命名空間來聲明 Module
...
}
本篇介紹了三種類型,基本上很常使用,需要掌握本篇內容。
讓我們 Move to Day4