字符串 - String
字符串在 Move 中并不严格是原始类型,而是作为标准库中的一个模块实现的。字符串不同于其他结构,它们得到了虚拟机 (VM) 和 API 的大量支持。 字符串可以直接作为交易参数传递,通过 SDK 传递,并且在后台会被正确地序列化/反序列化为 String 结构。
Move 中的函数可以直接接受 String 参数:
public fun do_something(s: String) {
// ...
}
在 Move 中,由于字符串不是原始类型,它没有直接的字面量语法。相反,你可以使用 string 模块中的 utf8 函数来创建字符串:
let s = std::string::utf8(b"Hello, World!");
b"Hello, World!" 是一个字节数组字面量 (vector
字符串不能直接作为常量设置,因为常量表达式不支持函数调用。你需要先将字节值赋给常量,然后再将其转换为字符串:
const HELLO_WORLD: vector<u8> = b"Hello, World!";
public fun hello_world(): String {
std::string::utf8(HELLO_WORLD)
}
这将创建一个 UTF-8 字符串。
Move 还支持 ASCII 字符串,这是一个不同的模块:
let s = std::ascii::from_asciistring(b"Hello, World!");
然而,UTF-8 字符串更常用,ASCII 字符串则较为罕见。
字符串是可变的。你还可以将字符串连接在一起:
let s1 = std::string::utf8(b"Hello, ");
let s2 = std::string::utf8(b"World!");
std::string::append(&mut s1, s2);
或取子字符串:
let s = std::string::utf8(b"Hello, World!");
let sub = std::string::sub_string(&s, 0, 5);
你也可以在特定索引处插入字符串:
let s = std::string::utf8(b"Hello, World!");
let s2 = std::string::utf8(b"Brave ");
std::string::insert(&mut s, 7, s2);
你还可以找到子字符串的索引:
let s = std::string::utf8(b"Hello, World!");
let s2 = std::string::utf8(b"World");
let index = std::string::index_of(&s, &s2);