import

基本导入工作原理:首先,在当前名字空间里搜索名字。如果没有找到,那么就到所有导入的模块里去找。如果在这些导入模块中唯一找到一个,则使用它。如果在多个导入模块里都找到,则报错。


默认情况下,导入是private的。即如果 A 导入模块 B,同时 B 又导入模块 C,则 C 的名字是不会被搜索的。一个导入可以特别地声明为public的,即如果在B中导入C的语句形如:public import C;,则在A中就可以看到C中的符号。


// 静态导入
static import std.stdio;
int main(string[] argv)
{
    //writefln("hello!"); // 错误,writefln 未定义
    std.stdio.writefln("hello!"); // 正确,writefln 被完全限定
    
    return 0;
}


// 更名导入。在处理很长的导入名时较方便
import io = std.stdio;
int main(string[] argv)
{
    io.writefln("hello!"); // 正确,调用 std.stdio.writefln
    //std.stdio.writefln("hello!"); // 错误,std 未定义
    //writefln("hello!"); // 错误,writefln 未定义
    
    return 0;
}


// 选择性导入,只导入一个包中的若干符号。注意:static不能跟选择性导入一起使用
import std.stdio : writefln, foo = writef;
void main()
{
    //std.stdio.writefln("hello!"); // 错误,std 未定义
    writefln("hello!"); // 正确,writefln 被绑定到当前名字空间
    //writef("world"); // 错误,writef 未定义
    foo("world"); // 正确,调用 std.stdio.writef()
    //fwritefln(stdout, "abc"); // 错误,fwritefln 未定义
}


// 更名的且带选择性的导入
import io = std.stdio : foo = writefln;
void main()
{
    //writefln("bar"); // 错误,writefln 未定义
    //std.stdio.foo("bar"); // 错误,std 未定义 
    //std.stdio.writefln("bar"); // 错误,std 未定义
    foo("bar"); // 正确,foo 被绑定到当前名字空间
    io.writefln("bar"); // 正确,io=std.stdio 将在当前名字空间里的名称 io绑定来引用整个模块
    //io.foo("bar"); // 错误,foo 被绑定到当前名字空间, foo 不是 io 的成员
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值