在D中,什么';私人导入和普通导入的区别是什么?

在D中,什么';私人导入和普通导入的区别是什么?,d,D,在D编程语言中,它们之间的区别是什么 private import tango.io.File; 及 在D2.0中,私有导入与导入同义,而不是公共导入。默认情况下,导入是私有的。见 编辑:默认情况下,导入也是私有的。有一段时间,导入默认为公共的;也就是说,当您导入另一个模块时,它的内容不仅可以从您的模块中看到,还可以从导入您的模块的任何模块中看到 最终,它被更改为默认情况下是私有的 但是,手动指定private有几个原因: 如果导入处于公共上下文中,则可以将其设置为公共。例如: public:

在D编程语言中,它们之间的区别是什么

private import tango.io.File;


在D2.0中,
私有导入
导入
同义,而不是
公共导入
。默认情况下,导入是私有的。见


编辑:默认情况下,导入也是私有的。

有一段时间,导入默认为
公共的
;也就是说,当您导入另一个模块时,它的内容不仅可以从您的模块中看到,还可以从导入您的模块的任何模块中看到

最终,它被更改为默认情况下是私有的

但是,手动指定
private
有几个原因:

  • 如果导入处于
    公共
    上下文中,则可以将其设置为
    公共
    。例如:

    public:
    
    // Lots of stuff
    
    import blah; // oh no, everyone can see my imports!
    
  • DMD充斥着与导入相关的bug。例如,选择性导入默认情况下是公共的,尽管被认为是私有的。这可能会导致各种可怕的噩梦场景,其中在一个模块中公开导入的符号(错误地)会导致完全不同模块中的符号消失并中断程序


  • 换句话说,他们在Tango中可能是私有的,因为开发人员与DMD合作的时间太长了,他们不相信DMD能把这件事做好。

    re pt 2你说的是D2还是D1?我不使用D2。也就是说,如果D2没有同样的问题,我会有点惊讶;DMD1.x和DMD2.x是从相同的源代码构建的,只是具有不同的预处理器定义。据我所知,导入在1.x和2.x之间并没有真正改变。似乎是显式导入符号,这些符号在导入模块中成为公共符号。例如,模块2
    导入模块1:Foo
    ,模块3
    导入模块1;导入模块2导致冲突的
    Foo
    。(这里
    Foo
    是一个类名,我的dmd版本2.059。)
    public:
    
    // Lots of stuff
    
    import blah; // oh no, everyone can see my imports!