如何轻松地将矢量矢量作为一片切片借用?
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]]> …
如何使用 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 导入不起作用的副本,因为我想知道如何处理嵌套的工作区。
如果我写下面的代码,我会得到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.
我在哪里错过了什么?
我正在寻找类似于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) 我想在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_something在reboot运行之前是否有任何可能无法完成所有工作(例如i/o操作)?
在这种情况下,这些中最好的解决方案是什么:
sync之前添加reboot.sleep 5之前添加reboot.sync和sleep之前reboot.