小编mq7*_*mq7的帖子

#[allow(unused_must_use)] 一行

我有返回的行Result。结果并不重要,我不想要unwrap()或任何日志记录。(预期频繁失败)

我怎样才能让这些行的未使用警告静音?

#[allow(unused_must_use)] 应用于 fn 级别时似乎有效,但这不起作用:

#[allow(unused_must_use)]
std::fs::remove_file(&path1);
#[allow(unused_must_use)]
std::fs::remove_file(&path2);
Run Code Online (Sandbox Code Playgroud)

编辑: whilelet _ = ..作为一种解决方法,#[allow(unused..)]专门针对这种情况而存在,并且编译器也建议使用它。阅读let _ = ..增加了另一层思维。(分配然后放弃)所以我更喜欢#[allow(..)]虽然它更冗长。(如果我let _ = ..经常看到并且习惯了,我可能会改变我的偏好)

所以我四处搜索,发现了一些将宏应用于语句级别的代码。这个问题询问为什么#[allow(unused_must_use)]一行不起作用 - 语法错误?漏洞?只是尚未实现unused_must_use

编辑: 根据这个:

如何在 Rust 中消除单个语句的警告? 我的代码应该可以工作。

阅读这些:

https://github.com/rust-lang/rust/issues/36675

https://github.com/rust-lang/rust/issues/15701

我在范围级别尝试了允许并且它起作用了。

#[allow(unused_must_use)] {
    std::fs::remove_file(&path1);
    std::fs::remove_file(&path2);
}
Run Code Online (Sandbox Code Playgroud)

rust

7
推荐指数
0
解决办法
2457
查看次数

带有特征的 tokio-async-await

我想在 trait 中编写异步函数,但由于async fn尚不支持 in trait,我试图找到等效的方法接口。这是我每晚在 Rust 中尝试过的(2019-01-01):

操场

#![feature(await_macro, async_await, futures_api)]
#[macro_use]
extern crate tokio;
use tokio::prelude::*;

trait T {
    async fn f();
}

fn main() {
}
Run Code Online (Sandbox Code Playgroud)
error[E0706]: trait fns cannot be declared `async`
 --> src/main.rs:7:5
  |
7 |     async fn f();
  |     ^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

我在某处读到async只是impl Future.

trait T {
    fn f() -> impl futures::Future<Item = (), Error = ()>;
}
Run Code Online (Sandbox Code Playgroud)
error[E0562]: `impl Trait` not allowed outside of function and inherent method return …
Run Code Online (Sandbox Code Playgroud)

rust async-await rust-tokio

6
推荐指数
1
解决办法
2089
查看次数

与getDerivedStateFromProps中的先前道具进行比较

考虑一个具有道具“名称”和状态“经过”的组件。

new Component(name) => "Hi {name}. It's been {elapse} seconds"
Run Code Online (Sandbox Code Playgroud)

{elapse}道具{name}更改时应将其重置为0 。

如果道具在10秒内从“爱丽丝”变为“鲍勃”,则消息应从

嗨,爱丽丝。已经十秒钟了

嗨,鲍勃。到了0秒

  • getDerivedStateFromProps不能使用,因为{elapse}它不是的纯函数{name},我不能返回0,因为它可能在重新渲染时被调用。

  • componentDidUpdate最终将更新{elapse}为0,但在此之前,会向用户显示无效状态“嗨,鲍勃。已经为0秒”

可以getDerivedStateFromPropscomponentDidUpdate实现这个场景?

  1. 在许多情况下,状态不是道具的纯粹功能。是getDerivedStateFromProps仅适用于无状态的功能部件?反应是否鼓励使用无状态组件?

  2. 如何getDerivedStateFromProps替换componentWillReceiveProps有状态组件?

reactjs

5
推荐指数
1
解决办法
9099
查看次数

从 Rust BTreeMap 中删除一个范围

我有一个BTreeMap<f64,_>并想x在其中留下号码low < x < high。但split_off(k)无法控制k包容性或排他性。

这是 eps 的临时解决方案:

// delete all numbers >= high
let _ = map.split_off(high);

// want to delete all numbers <= low
map = map.split_off(low+1e-8);
Run Code Online (Sandbox Code Playgroud)

正确的做法是把元素一一删除,我认为是可以采取的O(n lg n)。有没有办法使用map.range((Excluded(&low), Excluded(&high)))和删除 中的范围O(lg n)?看起来我需要map.erase(range)map.split_off_after(k)

rust

5
推荐指数
0
解决办法
422
查看次数

货物自定义输出目录

我把它放在我的Cargo.toml中

[build]
target-dir = "../my-target"
Run Code Online (Sandbox Code Playgroud)

但是Cargo不承认这个钥匙.

cargo run --release --bin my_project

warning: unused manifest key: build
error: failed to open: /.../project-root/target/releases/.cargo-lock

Caused by:
  Permission denied (os error 13)
Run Code Online (Sandbox Code Playgroud)

带有环境变量的自定义目标目录有效:

CARGO_TARGET_DIR=../my-target cargo run --bin my_project
Run Code Online (Sandbox Code Playgroud)

但是如何在Cargo.toml中指定"../my-target"

rust rust-cargo

3
推荐指数
2
解决办法
873
查看次数

复用流与多流之间的区别

多流(yamux,多流选择,..)和多路复用(mplex)之间有什么区别?我想将一个TCP连接用于RPC,HTTP等(一个客户端位于防火墙后面),如下所示:

conn = tcp.connect("server.com:1111")
conn1, conn2 = conn.split()

stream1 = RPC(conn1)
stream2 = WebSocket(conn2)
..

// received packets tagged for conn1 is forwarded to stream1
// received packets tagged for conn2 is forwarded to stream2
// writing to stream1 tags the packets for conn1
// writing to stream2 tags the packets for conn2
Run Code Online (Sandbox Code Playgroud)

哪一个适合这种情况?

libp2p

1
推荐指数
1
解决办法
148
查看次数

标签 统计

rust ×4

async-await ×1

libp2p ×1

reactjs ×1

rust-cargo ×1

rust-tokio ×1