rust - 为什么即使我没有设置 default-features = false,rand::Rng 也能在无标准环境中工作?
问题描述
我不应该在环境中使用它之前禁用 rand 的std
功能标志吗?no_std
库文件
#![no_std]
use rand::Rng;
pub fn random_small() -> u8{
rand::thread_rng().gen::<u8>()
}
货运.toml
[dependencies]
rand = "0.6.5"
我没有#![no_std]
在我的main.rs中使用。
解决方案
是的,您需要禁用 rand 的std
功能才能在std
不可用的环境中使用它。但是,如果std
可用,不禁用该std
功能仍然有效。
将#![no_std]
您的箱子的前奏从std
前奏变为core
前奏。std
前奏长这样:
extern crate std;
use std::prelude::v1::*;
core
前奏是相同的,但用而core
不是std
。这意味着,除非你 write ,否则你extern crate std;
的 crate 不会直接依赖std
。
但是,#![no_std]
对您的依赖项没有影响。Rust 参考有一个相关的警告:
⚠️ 警告:使用
no_std
并不会阻止标准库的链接。放入extern crate std;
crate 中仍然有效,依赖项也可以链接。
因此,如果std
它可用于您的目标并且您的依赖项之一需要std
,那么它将能够使用它。另一方面,如果std
对目标不可用,则尝试使用它(隐式或显式)的 crates 将无法编译。
推荐阅读
- javascript - 如何在 highcharts 中添加跨越多个刻度的自定义内容
- python-3.x - 在 python 脚本中单击控制台时防止控制台标题更改
- php - Google API RefreshToken 不适用于 Google Drive
- video - videojs-http-streaming 浏览器内存堆总是增长
- c# - Entity Framework Core 级联删除
- php - 在 php 或 laravel 中读取 260 万条记录的 excel 文件
- flutter - 单击左上角按钮单击(汉堡图标)时如何从侧面打开屏幕?
- javascript - 在 React 中创建了多过滤按钮,但每次单击其他过滤按钮时列表都不会显示
- daml - 在 DAML 中可以使用什么来代替 Either?
- javascript - 添加新的
- 元素成
- 问题
- 元素成