导入和别名 #
use
语法可用于为其他模块中的成员创建别名。use
可用于为整个模块或给定的表达式块范围创建别名。
句法:
use <address>::<module name>;
use <address>::<module name> as <module alias name>;
use <address>::<module name>::<module member>;
use <address>::<module name>::<module member> as <member alias>;
use <address>::<module name>::{<module member>, <module member> as <member alias> ... };
一些例子:
use std::vector;
use std::debug as d;
use std::debug::print as p;
Self
:
如果除了模块成员之外还需要为模块本身添加别名,则可以使用 use
和 Self
一次性完成。Self
是引用模块的 sorts 的成员。
use std::simple_map::{Self, SimpleMap};
在模块内部:
在模块内部,无论声明顺序如何,所有 use
声明都是可用的。
module my_addrx::example {
use std::vector;
fun example(): vector<u8> {
let v = empty();
vector::push_back(&mut v, 0);
vector::push_back(&mut v, 10);
v
}
use std::vector::empty;
}
在该模块中可用的模块中通过 use
声明的别名。
在一个表达式中:
您可以将 use
声明添加到任何表达式块的开头
module my_addrx::example {
fun example(): vector<u8> {
use std::vector::{empty, push_back};
let v = empty();
push_back(&mut v, 0);
push_back(&mut v, 10);
v
}
}
与 let
一样,在表达式块中使用 use
引入的别名在该块的末尾被删除。
module my_addrx::example {
fun example(): vector<u8> {
let result = {
use std::vector::{empty, push_back};
let v = empty();
push_back(&mut v, 0);
push_back(&mut v, 10);
v
};
result
}
}
在块结束后尝试使用别名将导致错误
fun example(): vector<u8> {
let result = {
use std::vector::{empty, push_back};
let v = empty();
push_back(&mut v, 0);
push_back(&mut v, 10);
v
};
let v2 = empty(); // ERROR!
// ^^^^^ unbound function 'empty'
result
}
任何 use
都必须是块中的第一项。如果 use
出现在任何表达式或 let
之后,将导致解析错误
{
let x = 0;
use std::vector; // ERROR!
let v = vector::empty();
}
命名约定:
别名必须遵循与其他模块成员相同的规则。这意味着结构或常量的别名必须以 A
到 Z
开头。
Unused Use or Alias:
An unused use
will result in an error
未使用的导入或别名:
未使用的 use
将导致错误
module my_addrx::Example
{
use std::debug; //ERROR -> Unused 'use' of alias 'debug'. Consider removing it
fun printing()
{
//do nothing
}
}