小编Oli*_*ier的帖子

你怎么能轻易借用Vec <Vec <T >>作为&[&[T]]?

如何轻松地将矢量矢量作为一片切片借用?

fn use_slice_of_slices<T>(slice_of_slices: &[&[T]]) {
    // Do something...
}

fn main() {
    let vec_of_vec = vec![vec![0]; 10];
    use_slice_of_slices(&vec_of_vec);
}
Run Code Online (Sandbox Code Playgroud)

我会收到以下错误:

error[E0308]: mismatched types
 --> src/main.rs:7:25
  |
7 |     use_slice_of_slices(&vec_of_vec);
  |                         ^^^^^^^^^^^ expected slice, found struct `std::vec::Vec`
  |
  = note: expected type `&[&[_]]`
             found type `&std::vec::Vec<std::vec::Vec<{integer}>>`
Run Code Online (Sandbox Code Playgroud)

我可以很容易地定义use_slice_of_slices

fn use_slice_of_slices<T>(slice_of_slices: &[Vec<T>]) {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

并且外部向量将作为切片借用,并且所有都可以工作.但是,如果仅仅为了争论,我想把它作为一片切片借用呢?

从假设自动胁迫&Vec<Vec<T>>&[&[T]]是不可能的,那么我怎样才能定义一个函数borrow_vec_of_vec,如下?

fn borrow_vec_of_vec<'a, T: 'a>(vec_of_vec: Vec<Vec<T>>) -> &'a [&'a [T]] {
    // Borrow vec_of_vec...
}
Run Code Online (Sandbox Code Playgroud)

把它用另一种方式,我怎么可能实现Borrow<[&[T]]> …

rust

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

如何处理多个嵌套的工作区根?

如何使用 Cargo 拥有多个嵌套工作区?

我有以下项目结构:

myworkspace
??? project_a
?   ??? Cargo.toml
??? project_b
?   ??? Cargo.toml
?   ??? project_b_dependency
|       ??? Cargo.toml
??? Cargo.toml
Run Code Online (Sandbox Code Playgroud)

哪里project_b_dependency是一个大库,它是一个 git 子模块,它本身有一个工作区。

运行时出现错误,cargo build因为工作区中有工作区。

$ cargo build
error: multiple workspace roots found in the same workspace:
  /myworkspace
  /myworkspace/project_b/project_b_dependency
Run Code Online (Sandbox Code Playgroud)

有没有简单的解决方法?我想project_b_dependency作为子模块保留源代码管理。

这不是重构到工作区结构导致 extern crate 导入不起作用的副本,因为我想知道如何处理嵌套的工作区。

rust rust-cargo

6
推荐指数
2
解决办法
2965
查看次数

结构参考参数化函数的生命周期错误

如果我写下面的代码,我会得到error[E0309]: the parameter type 'T' may not live long enough.

struct Function<T> {
    f: fn() -> T,
}

struct FunctionRef<'f, T> {
    f: &'f Function<T>,
}
Run Code Online (Sandbox Code Playgroud)

这修复了错误:

struct FunctionRef<'f, T: 'f> {
    f: &'f Function<T>,
}
Run Code Online (Sandbox Code Playgroud)

但是,就我所知,T不受生命的束缚'f.实际上,是运行T类型函数时创建的新对象fn () -> T.

我在哪里错过了什么?

rust

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

是否有一个具有单个强所有者和多个弱引用的共享指针?

我正在寻找类似于Arc/的智能指针,Rc但它不允许共享所有权。

我想要尽可能多的rc::Weak引用,但我只想要一个强引用,也就是所有者。我想用类型系统来强制执行。

Arc/Rc可以被克隆,它们可以在多个地方拥有。

卷起我自己的智能指针将是一种选择,但我相信这样的数据结构应该已经存在,即使在标准库之外。

我正在寻找一种提供这种接口的数据结构:

impl MySmartPointer<T> {
    fn new(object: T) -> Self;
    fn weak_ref(&self) -> WeakRef<T>;
    fn get_mut(&mut self) -> &mut T;
}

impl WeakRef<T> {
    /// If the strong pointer `MySmartPointer` has been dropped,
    /// return `None`. Else return Some(&T);
    fn get(&self) -> Option<&T>;
}
Run Code Online (Sandbox Code Playgroud)

smart-pointers rust

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

运行命令后安全重启?

我想在cronjob中运行一些代码后重启linux机器.

代码基本上如下所示:

#!/bin/sh
do_something
reboot
Run Code Online (Sandbox Code Playgroud)

do_something基本上在哪里:

function do_something {
    local REPORT_URL=https://example.com/services/status
    local PAYLOAD='{"message":"Update script run with success.","code":'$UPDATE_SUCCESS'}'
    curl -X POST --form "payload=$PAYLOAD" "$REPORT_URL"
}
Run Code Online (Sandbox Code Playgroud)

do_somethingreboot运行之前是否有任何可能无法完成所有工作(例如i/o操作)?

在这种情况下,这些中最好的解决方案是什么:

  • sync之前添加reboot.
  • sleep 5之前添加reboot.
  • 添加syncsleep之前reboot.

linux bash curl

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

标签 统计

rust ×4

bash ×1

curl ×1

linux ×1

rust-cargo ×1

smart-pointers ×1