看一下Rust1。64的新特性 Rust1。64今天已经到来,这个版本将影响网络上数百个各种类型的项目。 这样做的原因是它具有一个关键特性,任何项目都被划分为大量不同的crate。这个特性是工作空间继承,它允许我们在crate之间共享版本号或元数据字段等字段。Cargo。toml文件终于开始遵循DRY原则。 告别复制粘贴许可证和作者 任何人在创建新crate时要做的第一件事就是打开前一个crate的清单并复制两者之间共有的所有部分即使它们在同一个工作区中。 例如,在我用来展示代码示例的存储库中,您可以看到我曾经在每个crate中拥有相同的authors密钥。现在我可以去掉所有的重复。如何?首先,使根Cargo。toml如下所示:〔package〕namesotoestevezmediumversion0。1。0〔workspace〕members〔addtrait,beginningtips,generifywithcompilererrors,modules,scopedthreads〕〔workspace。package〕edition2021authors〔SotoEstvezricardosotoestevez。dev〕descriptionDemosofthearticlesathttps:medium。comsotoestevezdocumentationhttps:medium。comsotoestevezreadme。README。mdhomepagehttps:www。sotoestevez。devrepositoryhttps:github。comkriogeniamediumlicenseMITORApache2。0 在这个新版本中,在〔workspace。package〕下,您可以定义要声明为工作区默认值的package部分的一些键。 这将允许工作区crate选择加入并继承那些相同的部分,否则会被复制(在此示例中,它们是您在workspace。members中看到的存储库的所有crate)。 现在,要使用这些默认值,我们只需将它们调用到其他清单中。例如,现在是addtraitCargo。toml:〔package〕nameaddtraitversion0。1。0edition。workspacetrueauthors。workspacetruedescriptionDissectingRustTraitstoLearnTheirSecretsdocumentationhttps:betterprogramming。pubdissectingrusttraitstolearntheirsecrets839845d3d71ehomepage。workspacetruerepository。workspacetruelicense。workspacetrue addtrait的清单现在将继承我们在根目录中为我们使用{key}。workspace带来的键设置的值,例如edition或authors。另请参阅我们如何忽略那些我们不想带来的内容,例如自述文件,因为这个箱子没有;或描述,这是不同的,我们是压倒一切的。 有了这个新清单,所有项目将始终使用相同的版本,并且无需在每个项目中手动更新诸如更改许可证之类的更新。 保持版本同步 但是我们可以利用这种新的继承来做另一件事,这将是商业项目的关键。这是使用继承来授予依赖项之间的同步性。为此,我们可以采用与〔package〕相同的方法,但使用〔workspace。dependencies〕和典型的依赖声明(但我们不能在这里使用optional)。 例如,将其添加到根Cargo。toml会将工作区默认版本和功能设置为这三个依赖项:〔。。。restofthemanifest〕〔workspace。dependencies〕num{version0。4,defaultfeaturesfalse}vector2d2。2rand0。8。5 现在,在generifywithcompilererrors,我们可以将这些依赖项与工作区版本和功能一起使用,并在下面的示例中在宣言中声明它们:〔package〕namegenerifywithcompilererrorsversion0。1。0edition2021authors。workspacetrue〔dependencies〕num{workspacetrue,defaultfeaturestrue}vector2d。workspacetrue〔devdependencies〕rand{workspacetrue,features〔log〕} 看看我们如何在工作区中以相同的方式声明vector2d,但是我们如何覆盖num依赖项,因为这个crate需要使用默认功能,我们只使用相同的版本。这个crate不使用rand,但我添加它是为了展示如何在声明的特性之上声明特性,并将依赖项不仅引入〔dependencies〕,还引入〔devdependencies〕和〔builddependencies〕。 关注七爪网,获取更多APP小程序网站源码资源!