我正在执行一个评估Collatz猜想的小程序。作为这项工作的一部分,我有一个递归调用的函数,我想存储正在计算的当前数字,确定它是奇数还是偶数(如果它只是1,则终止),执行该猜想分支,然后用新数字调用自己
为此,我想将一个向量传递到这个函数中,并将当前的数字推到该向量上,但我很难理解如何传递可变向量引用
以下是我的代码:
fn evaluate_conjecture(number_to_be_evaluated: u64, mut intermediate_results: &Vec<
我正在努力确保我理解上面的所有示例,而我一直坚持的一件事与FizzBuzz无关,而是要编写()的参数
考虑下面的代码:在像Fizz=>f.write(b“Fizz”)这样的行中,“b”是什么,它来自哪里
use std::fmt;
enum FizzBuzzItem {
Fizz,
Buzz,
FizzBuzz,
Number(int),
}
impl fmt::Show for FizzBuzzItem {
fn fmt(&self, f:
这是一个简单但我不知道怎么做的生锈的东西
简言之:
pub fn pair_matcher(tup: &(String, String)) {
match tup {
&("foo".as_string(), "bar".as_string()) => print!("foobar"),
_ => print!("Unknown"),
}
}
我得到了错误
-:3:17: 3:18 error: expected `,
这是我多次遇到的问题
您有需要转到任务的数据
您希望安全地将数据发送到任务并远程处理它
…而你需要等待结果
类似于这个游戏笔的东西:
使用std::thread::thread;
#[导出(调试)]
结构Foo{
fn new(v:&'a u32)->Foo其中您编写的代码现在可以工作了:
use std::thread;
#[derive(Debug)]
struct Foo<'a> {
fp: &'a u32
}
impl<'a> Foo<
我正在包装一个有两个结构的C库:一个有指向另一个的指针
struct StructA {
void * some_mem;
};
struct StructB {
void * some_mem;
struct StructA * some_struct;
};
这两个结构都有内存,所以我的包装器都有构造函数和析构函数
struct StructA(*mut c_void);
impl StructA {
fn new() -> Self {
我对str有一个特征定义,其中我定义了一个函数&self。如果我在static&str上从main调用这个函数,一切都很好。如果我从使用trait对象参数的函数调用同一个函数,我会遇到以下错误:MyTrait没有为类型实现&str[E0277]
最后我有一个解决办法,但我不清楚成本,我是在复制字符串吗
#[derive(Debug)]
struct Thingie{
pub name: String, // rather than &a str for Thingie<'a>
我对生锈还很陌生,我一直在慢慢地跟随它,这对它所经历的概念有很大的帮助
在创建主菜单的教程中,作者建议读者做“家庭作业”,让主菜单上的标签(“新游戏”、“退出”)在聚焦和非聚焦时设置大小变化动画,而不是跳转到空闲/聚焦大小。这就是我一直有困难的地方
在我开始实施变更之前,代码相关部分的基本布局如下:
// equivalent to 'menu option'
struct Action {
/// function executed if action chosen
func:
我想从向量中提取x的第一个和最后一个元素,并将它们连接起来。我有以下代码:
fn main() {
let v = (0u64 .. 10).collect::<Vec<_>>();
let l = v.len();
vec![v.iter().take(3), v.iter().skip(l-3)];
}
fn main(){
设v=(0u64..10);
设l=v.len();
vec![v.iter().take(3),v.iter().s
显示如何使用路由器宏
下面的示例代码说明了需要能够从数据库或可插拔代码“引导”路由,我目前已经能够使用Iron web框架实现这一点:
pub struct Route {
pub http_method: String,
pub url_path: String,
pub callback_func: fn(_: &mut Request) -> IronResult<Response>,
}
impl Route {
pub fn
我想实现一个函数,它实例化一个新元素,将它添加到一个链表中,然后返回对它刚刚创建的元素的引用。这就是我想到的:
use std::collections::LinkedList;
struct Bar {
ll: LinkedList<Foo>
}
struct Foo {}
impl Bar {
fn foo_alloc<'a>(&'a mut self) -> &Option<&'a mut Foo>
我正在尝试实现一个查找函数,该函数将返回对self值中包含的值的可变引用。通常,由于返回的参考点指向lookup函数(self.verts)之外的数据,因此借阅检查器认为这没有问题。然而,在我的例子中,我在返回引用并将其绑定到新的自有名称之前过滤self.verts。当我尝试从本地拥有的数组返回值时,我得到编译时错误:
错误:`vs`寿命不够长
-->src/util/graph.rs:18:37
|
18 | if vs.len()>0{Some(&mut vs[0])}else{None}
标签: Rust
emscriptenwebassembly
我想了解Rust程序编译为wasm文件时实际输出的内容,以便为实例化函数提供有效的importObject:
WebAssembly.instantiate(bufferSource, importObject);
据我所知,实现这一点的唯一方法是导出一个类似于s语法的编译代码文件。我在他们的文档或网络搜索中找不到如何做到这一点。您可以使用诸如'swasm2wast之类的工具将.wasm文件转换为等效的.wast。那会满足你的要求
但是,您不一定需要这样做!JavaScript API为您提供
我读到了
共享引用类型是在需要指定显式生存期时写入的&type,或&A type
已理解的&用于共享参考,但不理解类型和'a在语言上的区别
在我读到的代码中:
#[derive(Debug)]
struct Person<'a> {
name: &'a str,
age: u8
}
fn main() {
let name = "Peter";
let age = 27;
let peter = Person { name, age
我正在编写如下代码:
use std::cell::RefCell;
struct CallbackWithArgs<T> {
callback: Box<Fn(&mut T) -> ()>,
arg: RefCell<T>,
}
struct S {
args: CallbackWithArgs<_>,
}
使用std::cell::RefCell;
结构CallbackWithArgs{
回调:Box
我使用futures v0.1编写了这段代码:
impl ArcService for (Box<MiddleWare<Request>>, Box<ArcService>) {
fn call(&self, req: Request, res: Response) -> Box<Future<Item = Response, Error = Error>> {
box self.0.call(re
我有一个扩展特性,其方法只是适配器/组合器的简写:
fn foo(self) -> ... { self.map(|i| i * 2).foo().bar() }
Trait::foo()的返回类型是一些嵌套的Map覆盖了所有现有的解决方案。您没有使用的一种方法是用函数指针替换闭包,然后使用类型别名(可选地包装为newtype)。这并不总是可能的,但由于您没有提供代码的详细信息,我们无法判断这是否适用于您:
use std::iter;
type Thing<T> = it
我有一个cargo init制作的生锈项目:
迪尔
|-src
|-梅因
|-设置
|-功能
我在settings.rs中有:
use functions;
pub fn something() {
functions::some_function_here();
}
但在编译时,我得到一个错误:
错误[E0432]:未解析的导入函数`
->src/settings.rs:3:5
|
3 |使用::函数;
|^^^^^^^^^^^^^^根目录中没有“函数”
在您的评论中,您声明:
我
#[派生(默认)]
结构杆;
#[衍生(默认)]
结构Baz;
fn main(){
让mut-vec=vec:::new();
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
向量推送(框:新(条));
矢量推送(盒::新(Baz));
}
是一种体型特征,也就是说你
对于上面的示例,是否有一个变通方法,以便我可以将大小特征存储在Vec(或任何其
我是新手,正在尝试学习使用借阅检查器的惯用方法
我正在尝试编写一个简单的函数,它接受一个切片(在数据类型上是泛型的),并返回最后一个元素,这样我就可以在之后对切片进行变异。naive实现给了我一个错误:
fn last_element<T>(list: &[T]) -> T {
list[list.len() - 1]
}
fn main() {
let mut slice = [1, 2, 3, 4, 5];
let x = last_ele
Rust的标准库公开为两个包:std和core。就API而言,core中的功能是std的子集,可以在不依赖任何操作系统集成或堆分配的情况下得到支持。在为我的库编写导入时,我一直试图通过更兼容的core来引用模块,而不是std,如果两者都有
然而,我不清楚他们对相同功能的实现是否会有所不同。如果我使用core::cell::RefCell,我能得到一个比引用std::cell::RefCell效率更低的实现吗
通过core而不是std引用模块(如果两者都有)有什么缺点吗?Rust旨在成为一种通用语
为什么我们不能在Rust中使用RefCell进行递归数据结构
无效:
enum List {
Cons(i32, RefCell<List>),
Nil,
}
枚举列表{
Cons(i32,参考电池),
无
}
有效期:
enum List {
Cons(i32, Rc<List>), // or Box<List>
Nil,
}
枚举列表{
Cons(i32,Rc),//或Box
无
}
RefCell包含对象,并将其包
标签: Rust
futurerust-tokio
我有一个永远不会完成的东京未来(rx是一个Receiver,sock是一个东京UdpSocket)。它基本上从数据包队列中读取数据包,并通过套接字进行传输:
poll_fn(move || {
match try_ready!(rx
.poll()
.map_err(|_e| tokio::io::Error::new(tokio::io::ErrorKind::Other, "Poll error")))
{
Some((pack
我正在尝试在Rust中开发一个基于超链接的服务器应用程序。有一个INI文件包含绑定IP、数据库等配置
我不想在每个请求上解析INI文件,在服务器重新启动之前保留配置数据是可以的。如何向请求处理程序提供已解析数据的结构
我已经尝试过几种方法,比如使用std::sync::Arc,但到目前为止唯一有效的方法是使用静态,但我希望避免不安全的块
以下是一个完整的(非工作)示例:
Cargo.toml
[package]
name = "demo"
version = "0.1.0"
edition =
我想写一个函数,返回实现一个公共特性的结构
如果我的函数指定了返回类型->impl MyTrait,则在使用匹配项时,我将无法兼容,因为匹配项必须返回相同的类型。例如:
fn获取结构(枚举:MyEnum)->impl MyTrait{
匹配一个枚举{
MyEnum::MyEnumFoo=>MyStruct1{},
MyEnum::MyEnumBar=>MyStruct2{},
}
}
产生:
错误[E0308]:匹配臂的类型不兼容
-->src/main.rs:22:5
|
22 |/匹配一个
我试图数一数邮件中的字母,然后将它们导出到图像中
我已经成功地用这些字母创建了一个BTreeMap,并对它们进行了计数。我遇到的问题是将它们导出到带有plotlib的SVG。我对使用其他图书馆持开放态度,但我觉得我的问题在于更多地使用图书馆而不是图书馆本身
这是我的柜台密码
Cargo.toml
[dependencies]
plotlib = "0.4.0"
main.rs
使用std::collections::btree\u map::BTreeMap;
使用plotlib::style
exit只是用您给它的代码终止您的进程。退出意味着一切正常。好吧,在一个发布的程序中,恐慌永远不会发生。它为开发人员提供信息,但不提供任何用户友好的信息。我要说的是,对于不应该在prod中发生的错误,可以使用它
exit只是用您给它的代码终止您的进程。退出应该意味着一切正常。根据您对Cargo.toml中定义的恐慌发生时的定义,可能有差异,也可能没有差异。根据您将其设置为“解除”还是“中止”,将发生不同的情况:
使用“展开”时,这将如名称所示展开堆栈。特别是,通过这种方式,可以获得完整的堆栈跟踪
我正在使用AWS Lambda和Rust构建RESTAPI。我希望Rust代码处理同一库中的多个资源,因为这似乎比为每个资源创建单独的二进制更有意义
我想做的是使用的配置和中间件选项来配置我的REST端点。因为我的代码是在AWS Lambda环境中运行的,所以我不需要使用actix\u web的HttpServer部分。代码只需使用actix\u web中的App配置,从同一线程内响应请求即可
我已经研究过了,但它实际上为HttpServer启动了一个单独的线程,这似乎是不必要的资源使用
我要编
标签: Rust
associated-typesdynamic-dispatchtrait-objects
为什么这里需要关联的类型,即使它从未使用过
trait Tr {
type Ty;
fn go(&self) -> () {}
}
fn foo(t: dyn Tr) -> () {
t.go()
}
我明白了
2 | Ty型;
|----------`Ty`在此处定义
...
6 | fn foo(t:dyn Tr)->{
|^^^必须指定关联的类型'Ty'
您正在创建一个trait对象,trait对象需要指定所有关联的类型。您的案例非常简单
我有一个structMyStruct,它实现traitMyTrait
如何映射Result以获得Result,而无需传递给map()带有返回类型的显式lambda
代码
#[派生(调试)]
结构MyStruct;
性状MyTrait{}
MyStruct{}的impl MyTrait
#[导出(调试)]
结构MyError;
类型Result=std::Result::Result;
fn foo(u:&mut dyn MyTrait){}
fn main(){
设res:Result=Ok(M
我最近开始使用rust,现在正在一个图书馆工作。
下面的代码可以工作,但看起来像是代码重复
#[cfg(feature = "serde_support")]
use serde::Serialize;
#[cfg(not(feature = "serde_support"))]
pub struct Teststruct<T>
{
graph: T
}
#[cfg(feature = "serde_support")]
#[derive(Serialize)]
pub
我试图在按键时显示消息对话框。到目前为止,它似乎没有任何作用。代码可以编译,但不起作用。代码验证按键是否工作,但对话框根本不会显示。我曾尝试使用返回的IAsyncOperation并使用“get()”,但这似乎完全冻结了应用程序。我错过了什么
//#![windows_subsystem = "windows"]
use winit::{
event::{Event, WindowEvent},
event_loop::{ControlFlow, EventLoop},
标签: Rust
clonereference-counting
我试图了解以下两者之间的利弊:
使用Arc并克隆Arc(我在不同的地方/线程中使用了一些东西)
vs
使用Something.clone()
除了衡量和比较绩效结果(我不认为两者中的任何一个在绩效方面会差得多)之外,我还试图理解在Rustacean人心目中什么是“总体上更好”或“更惯用”
如果我理解正确:
Arc和克隆:我在堆上有1个东西(与堆栈相比比较昂贵)+我正在克隆Arc(与Rc.clone相比比较昂贵,但如果需要跨线程使用,则需要),因此我根据克隆/删除的次数创建/删除N个Ar
在字节数组上运行ascii::AsciiString::from\u ascii时出错
错误是线程'main'在'Failed:索引3处的字节不是ASCII'
位置3处的字节是137,应该是ë。我还得到了位置2和4的值,只是为了确定索引没有任何错误,它们似乎都有合适的值
字节[2]=38/&
字节[3]=137//ë
字节[4]=56//8
我不明白我在这里做错了什么。阅读这篇文章,我不完全确定这为什么行不通
我做错了什么?为什么会抛出此错误?ASCII以序号127结尾ë不是ASCII(137也
我正在为我的游戏引擎开发一个资产管理器
以下是代码的简化版本:
trait Animal {
fn create<P>(name: P) -> Self
where
P: Into<PathBuf>;
}
struct Dog;
impl Animal for Dog {
fn create<P>(name: P) -> Self
where
P: Into<PathBuf&
以下代码生成错误:
struct IntParseVisitor>{
参观者:V,,
}
酒吧特征访客?解决这个问题的最好办法是什么?请注意,我无法更改访问者的代码,因为它位于Serde中。您可以按照错误建议进行操作:
帮助:考虑删除 DE ,在字段中引用它,或使用标记,如STD::Mault::PotoMoDATIOS/P>
struct IntParseVisitor>{
参观者:V,,
_幻影_数据:std::marker::PhantomData啊,多亏@Shepmaster的提示,我尝
标签: Rust
closureslifetime
当我发现这是一个终生的问题时,我正在制造执行器/反应堆。它与async/Future无关,可以在没有async sugar的情况下复制
使用std::future::future;
结构运行时;
fn使用_运行时启动_(闭包:C)
哪里
C:对于F,
F:未来
{
设rt=运行时;
让未来=结束(&rt);
//封锁(未来);
}
async fn async\u main(\u rt:&Runtime){
//我可以在这里使用rt来做异步的事情
}
fn main(){
使用|运行时(| rt
我试图在借用了内容的结构上派生反序列化:
#[宏使用]
外部板条箱serde_;
使用std::net::SocketAddr;
#[派生(哈希、Eq、PartialEq、调试、克隆、序列化、反序列化)]
不满足发布结构MyS`
-->src/lib.rs:7:5
|
7 |发布地址:&'a SocketAddress,
|^^^trait`\::\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
标签: Rust
compiler-warnings
两者的区别是什么
#[允许(死代码)]
//…一些代码
及
#[允许(未使用)]
//…一些代码
是一种特殊的线头,它:
declare\u lint!{
酒馆死亡代码,
警告,,
检测未使用、未报告的项目
}
unused是一种由dead\u code和许多其他绒毛组成的纤维。它:
add_lint_组!(
“未使用”,
未使用的进口,
未使用的_变量,
未使用的作业,
死亡代码,
未使用的_MUT,
无法访问的_代码,
无法到达的_模式,
重叠的图形,
未使用的(必须使用),,
未使用或
Rust Book的列表中包含以下for循环:
12..buffer.len()中的i的{
让预测=系数
.国际热核实验堆(iter)
.zip(&buffer[i-12..i])
.map(|(&c,&s)| c*s作为i64)
.sum::()
}
除了“I-12..I”位之外,我理解它的作用。我不知道你可以从一个整数中减去一个范围得到。。。又回来了吗
我使用示例来了解这种语法是如何根据经验工作的:
println!("\"3 - 3..4\": {:?}", 3 - 3..4);
普林顿
我正在翻阅Rustlang的官方书籍,已经到了第二章。但是,一旦我到达构建工作区的某个点,编译器就会抛出一个错误。我的项目看起来像这样(根据书)
使用Cargo.toml
[workspace]
members = [
"adder",
"add-one",
]
...
[dependencies]
add-one = { path = "../add-one" }
添加一个/src/lib.rs
#![allo
我需要构建一个字节数组来表示设备的命令。它可能看起来像这样:
let cmds=[
0x01,//cmd 1
0x02,//cmd 2
0x03,0xaa,0xbb,//cmd 3
0x04,//cmd 4
0x05,0xaa,//cmd 5
];
有些命令接受参数,有些不接受参数。有些参数需要计算。每个命令的大小都是固定的,因此在编译时就知道数组需要多大
最好这样构造,我将字节组抽象为命令:
let cmds=[
cmd1(),
cmd2(),
cmd3(0,true,[3,4]),
cmd
假设我有一个值x,其类型为选项,如何将其转换为选项?
我尝试使用map:
let result=x.map(|x |&x)
^^错误
但我得到了一个错误:
cannot return reference to function parameter `x`
returns a reference to data owned by the current function
经过反复试验,我找到了方法,它是as\u ref
参考资料:经过一些尝试和错误,我找到了方法,它是,如_ref
参考资料:相
我有一个可变切片,如果它等于某个切片,我想替换它的前缀
我试过这个:
let len=prefix.len();
if slice.u以(前缀)开头{
切片[…len-1]=子序列;
}
但是,
error[E0277]: the size for values of type `[{integer}]` cannot be known at compilation time
--> src/main.rs:13:9
|
13 | slice[.. len -
我试图使用炉甘石板条箱将xlsx文件加载到Vec中,但是在for循环中使用迭代器的.next()方法时,只解析第一行,所以我显然做错了什么。作为可能有用的额外信息,xlsx文件由23851行和28列组成,实际数据(不考虑标题,这些标题不是要读取的)从位置A3开始
let range = excel
.worksheet_range("Sheet0")
.ok_or(calamine::Error::Msg("Cannot fi
我知道我可以通过每晚运行rustup override set,在项目上设置rust。但是我想知道我是否可以在Cargo.toml上声明它,所以如果我在另一台机器上构建它,它从一开始就可以每晚运行。到目前为止,我还没有找到一种方法来完成它。根据,无法在Cargo.toml文件中指定它。
但您可以创建一个名为rust toolchain.toml的新文件,其中包含以下内容:
[toolchain]
channel = "nightly"
有关更多选项,请参阅同一文档中的部分。
我试图在一个文件上构建一个抽象,其中内容存储在内存中,并在将其写入文件系统之前计算哈希值,这应该在close()方法中进行
使用std::path::PathBuf;
使用sha2::{摘要,Sha256};
fn main(){
让mut fwh=FileWithHash::new(PathBuf::from(“somepath.txt”);
fwh.write(“第一行”\n);
fwh.write(“第二行\n”);
fwh.close();
}
结构FileWithHash{
路径:Pa
如果不将夜间设置为全局默认值,如何将货物项目设置为使用夜间默认值构建和运行(即货物构建实际上是货物+夜间构建)
这与我们的问题不同。如果您阅读这两个问题,您将看到该问题是关于全局切换Rust toolchains的,而我希望在不更改全局设置的情况下切换Rust toolchains。通过每晚设置Rustop override,它将该目录的默认值设置为每晚:
通过每晚设置生锈覆盖它将该目录的默认值设置为每晚:
建议的重复目标并不特定于全局设置Rust工具链。建议rustup override s
我正在尝试使用Serde处理一个非常大的JSON文件(1TB)的Graphson数据,以生成一个Gremlin查询。我知道JSON文件的确切格式,但我无法将其直接映射到Rust structs,因为我认为它会溢出内存。反序列化的结构类似于:
struct G{
vs:Vec,
es:Vec
}
结构V{
id:i32,
标签:字符串
}
结构E{
id:i32,
标签:字符串,
摘自:i32,
参见:i32
}
我的想法是为生成的每个V和E调用回调来更新我的全局查询。我可能已经找到了一种方法,
嘿,大家好,我是个新手,在过去的一周里,我一直把头撞在墙上,想弄明白些什么。我正在通过ODBC机箱使用ODBC驱动程序查询SQL数据库。我正试图分解它返回的内容。我不知道如何成功地做到这一点。我尝试过将元素切碎并将其放入结构中,但没有成功。我试着让它保持原样,并在这方面给我做逻辑分析,结果很快变得非常复杂。我非常希望能举一个例子,说明如何在生锈的情况下处理这种情况
代码:
'''
'''
输出有8行以上相同格式的内容,但我省略了它,因此我不必清除每个内容的所有敏感位。解构在编译时发生。您正在处理
有人能在这里为我解释一下静态的用法吗?我看到了这段代码,但我不明白它是如何使用的
//什么时候应该将“静态绑定”添加到特征定义中
pub trait finalitysyncipeline:'静态+克隆+调试+发送+同步{
///最终性证明来源的名称。
常量源名称:&'static str;
///最终性证明目标的名称。
const TARGET_NAME:&'static str;
///我们正在同步的标头由此哈希标识。
类型散列:Eq+Clone+Copy+Send+Sync+Debug;
1 2 3 4 5 6 ...
下一页 最后一页 共 288 页