我试图编译一些代码,但我得到了一个非常奇怪的错误:
对于类型core::fmt::Show+Sized
以及守则:
use std::fmt::Show;
fn main() {
println!("{}", return_showed()); // Error occurs here
}
fn return_showed() -> Box<Show+Sized+'static> {
box "test" as Box<Show+Sized>
}
比如说,我有一个函数,它接受BTreeMap作为参数,我想让它成为可选的。更好的方式是什么:
保持原样(BTreeMap)并传递一个不带键和值的BTreeMap实例
使其成为选项
你的问题非常抽象,没有具体的例子就无法回答。坦率地说,这在很大程度上取决于所需的语义
您可能希望考虑的一些问题:
传递一个空的BTreeMap有意义吗
空BTreeMap和满BTreeMap之间的行为是否一致
如果做了一个选项,如果传递了一些空的BTreeMap,会发生什么
根据这些问题和其他类似的问题,您必须决
我写了这段代码:
let x = 5;
let y = if x == 5 {
10
} else {
println!("shapoopoy");
};
当我使用cargo build编译时,我得到错误:
错误[E0308]:if和else具有不兼容的类型
-->src/main.rs:6:9
|
3 |设y=x=5{
| _____________-
4 | | 10
||——正因为如此,这是意料之中的
5 | |}其他{
6 | | println!(“
以下是一个简化的示例:
struct Connection {}
impl Connection {
fn transaction(&mut self) -> Transaction {
Transaction { conn: self }
}
}
struct Transaction<'conn> {
conn: &'conn Connection,
}
impl<'conn> Transaction&
标签: Rust
compiler-warningsstatic-analysis
我想在我的模块中导出一个函数,以便人们可以使用它。然而,在≈95%的情况下,使用它是一个坏主意
/// Check whether foo is a metasyntactic variable.
///
/// **Using this function is a mistake.** This function is slow,
/// since checking widgets is an extremely expensive operation.
/// You should be
考虑到,为了简单起见,我想要实现一个具有n个连续元素0,1,…,n-1的可转位向量v,即v[I]=I。该向量应按需填充,即,如果使用v[i],且当前该向量包含nLazyVector{
懒虫{
数据:vec![]
}
}
fn获取(&mut self,i:usize)->&usize{
对于self.data.len()中的x=i{
自我数据推送(i);
}
&自我数据[i]
}
}
pub fn main(){
设mut v=LazyVector::new();
println!([v[5]={
为什么这个不能编译
trait T{}
fn f,u>`
找到类型“std::result::result”`
=帮助:必须约束类型参数以匹配其他类型
=注:有关更多信息,请访问https://doc.rust-lang.org/book/ch10-02-traits.html#traits-作为参数
这个版本还可以:
trait T{}
fn f这是一个限制,我不知道它是否有一天会编译。原因是Rust不知道如何在两种结果类型之间转换,(dynt+'static)和U是完全不同的东西。如果这可
到目前为止,我有这个。我找不到一种方法来处理与足够好的比较。我正在研究计算机程序的结构和解释,我希望尽我所能符合本书中的实践。这个计划很简单。我明白了。只是需要帮助使我的防锈代码更通用
游乐场:
完成的操场:fn足够好(猜:T,x:T)->bool{
abs(square(guess)-x
我有一个结构:
struct Foo Foo`,它不实现“Copy”特性
错误[E0596]:无法将'parent'借用为可变的,因为它未声明为可变的
-->src/lib.rs:9:13
|
8 |如果让某些(&mut parent)=自父{
帮助--考虑改变这个是可变的:“沉默的父母”
9 | parent.bar();
|^^^^^^不能作为可变项借用
我尝试了该行的许多变体,但无法使其工作。我如何才能做到这一点?在您的if let语句中,您试图对self.parent进行解构,以获取p
我有一个Ref>
一种方法是:
fn get_refs<'a, T: Ord>(btree: Ref<'a, BTreeSet<T>>) -> Vec<Ref<'a, T>> {
let mut result = Vec::new();
for e in btree.iter() {
result.push(Ref::map(Ref::clone(&btree), |t| t.get(&am
我是新手。为什么这个代码可以工作
fn生成字符串()->string{
设x=String::from(“世界”);
x
}
fn main(){
设s=make_string();
}
按照我对规则的理解,当遇到make_string的右括号时,应该删除x的值,因为x是所有者,超出了范围。你可以说所有权转移了,但这似乎是在x超出范围后发生的
这是函数的特殊情况,还是我从根本上误解了规则?当您从函数返回值时,您移动该值,实质上是将所有权从该函数转移到父函数,父函数的作用域更大。由于作用域现在更
标签: Rust
move-semanticsownershipshadowing
我目前正在学习rustlings课程,当这个关于移动语义的练习出现时,我感到困惑。其要点如下:
fn main(){
let vec0 = Vec::new();
let mut vec1 = fill_vec(vec0);
//stuff happens
}
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
let mut vec = vec;
//do stuff
vec
}
fn main(){
设v
标签: Rust
closuresdestructuring
我修改了在internet上找到的代码,创建了一个函数,用于获取实现Eq的任何哈希类型的统计模式,但我不理解其中的一些语法。以下是函数:
使用std::hash::hash;
使用std::collections::HashMap;
pub fn mode.max_by_key(|&(|,count)| count)相当于.max_by_key(f),其中f是:
fn f<T>(t: &(T, usize)) -> usize {
(*t).1
}
而f2()
我正在尝试将一些图像加载到我的fltk rs应用程序中:
fltk = "1.0.1"
image = "0.23.14"
使用fltk:{app,app::*,window::*,prelude::*,window::window,button::*,group::*,image::*};
使用std::fs;
使用图像::*;
使用image::io::Reader作为ImageReader;
//..
对于光标路径中的x,输入到{
让mut but
编者按:这个问题是在Rust 1.0之前提出的,问题中的一些断言在Rust 1.0中未必正确。一些答案已经更新,以解决这两个版本
我有这个结构
struct Triplet {
one: i32,
two: i32,
three: i32,
}
如果我将其传递给函数,它将被隐式复制。现在,有时我读到一些值不可复制,因此必须移动
是否可以使此结构三元组不可复制?例如,是否有可能实现一种特性,使三元组不可复制,因此“可移动”
我在某个地方读到,一个人必须实现克隆特性来复制不
标签: Rust
rust-cargohyperrust-obsolete
我正在尝试运行Github自述文件中列出的hyper示例
extern crate hyper;
use std::io::Write;
use hyper::Server;
use hyper::server::Request;
use hyper::server::Response;
use hyper::net::Fresh;
fn hello(_: Request, res: Response<Fresh>) {
let mut res = res.start(
我通常能够使用trait作为Box之类的类型参数:
trait CtxVal{}
类型CtxNodes=HashMap;
但是当这个特性有它自己的泛型类型参数时,比如,我被卡住了
type CtxNodes = HashMap<String, Box<PartialEq>>;
您需要指定希望对象能够与之进行比较的内容:
fn foo(value: Box<PartialEq<u8>>) -> bool {
*value == 42
我在主页上运行以下hello world示例代码:
extern crate iron;
use iron::prelude::*;
use iron::status;
fn main() {
fn hello_world(_: &mut Request) -> IronResult<Response> {
Ok(Response::with((status::Ok, "Hello World!")))
}
Iron::ne
我试图理解如何在Rust中做一些简单的事情,但我一直在和借书人打交道,我不知道为什么。我已经编写了一个简单的函数,您可以在其中传递一个文件名,并在主目录中提供该文件的路径
节目如下:
use std::env;
fn filename_in_homedir(filename: &str) -> Option<&str> {
let mut homedir = match env::home_dir() {
None => retu
我有一个枚举:
pub enum Enum1 {
A(String),
B(i64),
C(f64)
}
我如何对一个目标进行模式匹配?也就是说,我想得到它的字符串值。我试过这个:
match optionMyEnum {
Some(A(x: String)) => ...
并且有很多编译错误。有一个完整的。我非常鼓励你阅读这一部分(以及整本书)。很多时间和精力都花在了文档上
您只需指定要绑定的名称。无需写出类型:
pub enum Enum {
A
灵感来源于evilone在帖子中提供的代码。为了显示矩阵,我编写了如下代码:
use std::{ops, fmt};
#[derive(PartialEq, Debug)]
pub struct Matrix<T> {
data: Vec<T>,
row: usize,
col: usize,
}
impl<T: Copy> Matrix<T> {
pub fn new(row: usize, c
我试图在Rust中创建一个节点网络,我希望网络中的每个节点都知道其他连接的节点。我认为这可以通过弱Rc来实现,比如:
use std::cell::Cell;
use std::cell::RefCell;
use std::rc::Rc;
use std::rc::Weak;
struct Node {
name: String,
known_nodes: Rc<RefCell<Vec<Weak<Node>>>>,
}
imp
是的,key的生存期与返回类型的生存期不同,但我看不到“key中的数据是如何在这里返回的”…我看到map中的数据也是使用该键返回的..嗯,只是返回值后不再需要的键
在我看来,get应该适用于传入的任何'k和'kr。返回值的生存期应该与map的生存期相同。这就是我试图表达的,但显然我的想法在某个地方是错误的。您的签名中有两个键,它们应该是相关的,但您没有将它们联系起来。最简单的解决方案是让它们具有相同的寿命:
use std::collections::HashMap;
#[derive(Eq,
我试图在Mac上使用Core audio录制音频,但我的输入回调没有被调用。我肯定我错过了一些明显的东西,但我整天都在寻找和尝试这些东西。我的代码是用Rust编写的,但希望C/C++的人不会太难理解。这是:
extern crate coreaudio_sys;
#[macro_use]
extern crate objc;
use std::mem::size_of_val;
use std::os::raw::c_void;
use std::ptr;
use coreaudio_sys
我试图为导入的类指定一个模板参数,这样就不需要每次使用它时都指定它。大概是这样的:
use self::binary_heap_plus::BinaryHeap<T,MinComparator> as BinaryMinHeap<T>;
使用self::binary\u heap\u plus::BinaryHeap作为BinaryMinHeap;
这可能吗
这可能吗
是的,可能如下所示:
pub type CustomResult<T> = Result
标签: Rust
traitstrait-objects
我有一个trait和一个实现该trait的结构(trait对象)。我想在堆上分配我的trait对象,并让其他结构引用它们
箱场
这也是可行的,但据我所知,我的材料将在堆栈而不是堆上分配。如果Material的值真的很大,我宁愿把它放在堆上,那该怎么办?这就引出了下一种不编译的方法:
对方框的引用
struct Sphere src/main.rs:16:19
|
16 |材料:m1,
|^^预期特征材料,发现结构“Iron”`
|
=注意:预期类型为“&std::boxed::BoxRc或Arc
在声明为返回布尔值的函数中:
pub fn is_palindrome(num: u64) -> bool {
let mut digits = Vec::new();
let mut temp = num;
loop {
digits.push(temp % 10);
temp /= 10;
if temp == 0 {
break;
}
}
for i in
我有一个包装器结构,它存储一个选项字段。我想获取此字段中存储的数据的引用。编译以下代码
struct包装器{
瓦尔:选项
}
impl包装器{
//删除了生存期说明符,因为Rust编译器可以推断它
//作为fn我的_deref选项{//它告诉我‘a从未被使用过。
瓦尔:选项
}
恳求{
键入Target=Option Option阅读turbulencetoo的评论后,我想出了以下代码,它完全符合我的意图。根据程序逻辑,Option字段将永远不会是None,因此我可以安全地将其展开。出于与本主题
考虑以下计划:
fn main() {
let c; |<-'a
let mut a = "Hello, world!".to_string(); |
{ |
let b = &mut a; |<-'b |
c = foo(
标签: Rust
terminologylifetimelifetime-scoping
Rust与非词汇生命周期相关,而非词汇生命周期将在语言中长期实现,Rust对该功能的支持有了很大的改进,被认为是完整的
我的问题是:什么是非词汇生命期?通过了解生命期是什么,最容易理解什么是非词汇生命期。在非词法生存期出现之前的Rust版本中,此代码将失败:
fn main() {
let mut scores = vec![1, 2, 3];
let score = &scores[0];
scores.push(4);
}
Rust编译器发现score是由s
标签: Rust
traitsreturn-type
我正试图得到一个随机数发生器。由于OsRng::new()可能会失败,如果必须的话,我想回到thread\u rng():
extern crate rand; // 0.5.5
use rand::{thread_rng, OsRng, RngCore};
fn rng() -> impl RngCore
{
match OsRng::new() {
Ok(rng) => rng,
Err(e) => thread_rng()
在阅读有关的内容后,我尝试切换此代码:
pub fn authorize<LoadClient>(get_client: LoadClient) -> Result<String, ()>
where
LoadClient: FnOnce(String) -> Result<Client, LoadingError>,
{
unimplemented!()
}
pub fn authorize(get_client:LoadCli
警告:这几乎生锈了。您需要执行以下命令行:rustup default nightly
(和rustup default stable返回到以前的配置)
我想从另一个类型定义一个类型。
如果我从常量泛型类型(参见1)创建一个类型,它就可以工作。
但是如果我从另一个const泛型类型创建一个const泛型类型,它将不起作用(请参见2)
我该怎么办
#![特征(const_泛型)]
结构板{
数组:[[T;宽度];高度],
}
a型=电路板;//工程(1)
类型SquareBoard=板;//不起作
我正在考虑跳过货物中的依赖项构建步骤。我有一个简单的项目,它使用3个板条箱作为Cargo.toml中提到的依赖项。我使用cargo build--release构建了一次项目。现在我有了另一个项目,它使用了它的Cargo.toml文件中提到的相同依赖项。我想跳过此项目的构建DEP,所以我只是通过在新项目的根目录中创建目标目录,将上一个项目的target/release/目录的内容复制到新项目中
我为新项目运行了cargo build--release,但它再次构建了所有依赖项。我认为它会跳过这一
标签: Rust
rust-proc-macros
我有一个派生样式的过程宏,我想在其中计算结构的序列化版本的潜在最大长度。例如,给定下面的structTestStruct,我想用所有字段调用一些函数来计算最坏情况的长度
#[派生(MyLengthProcMacro)]
结构测试结构{
f1:u32,
f2:i64,
f3:SomeOtherStruct
}
对于基本体,这可能类似于:
fn获取字符串长度(ty:&Type)->usize{
让type_string=quote!{#ty}.to_string();
匹配类型\u string.
我已将我的nom依赖项从4.x版本更新为5.x版本,并发现宏take\u until\u和\u consume已被弃用。Changelog说:
“这可以用take\u替换,直到与take组合使用。”
但是我不知道如何模仿直到你和你一起消费他们。
是否有人在版本更新时遇到过这样的问题,或者有人知道如何做到这一点
我是说这个不推荐的宏。这些新的:和我认为这是严格的,但这里有一个通用的实现:
fn获取\u直到\u和\u消费(标记:T)->impl fn(I)->nom::IResult
哪里
E:no
我有一个期货mpsc,它以随机的时间间隔接收代表交易数据的结构,我处理这些数据,然后将其插入数据库
结构交易数据{
id:i64,
资料来源:Vec,
}
async fn my_task(rx:mpsc::Receiver)->impl Future{
每个交易单位的接收(移动交易){
异步的{
让pool=pg_connection.connection_pool.unwrap().clone();
让client=pool.get().wait.unwrap();
let statemen
标签: Rust
traitsreference-counting
我有一个特性和一个实现它的struct。用Arc包装的struct可以调用trait的方法,但是Arc本身并没有实现它:
use std::sync::Arc;
trait Foo{
fn bar(&self);
}
struct A;
impl Foo for A{
fn bar(&self){ }
}
fn test<A: Foo>(arc_a: Arc<A>){
let foo_obj: & dyn Foo
我正在开发一个Rust程序,该程序使用给定的Rust gtk绑定具有GTK3 GUI。
该程序应该是跨平台的(至少是Linux和Windows)。
GUI应该能够显示自定义的明文和小的LaTeX片段,以允许使用数学环境(小的表示一个公式作为显示元素的大小)。
因此,我需要一种方法将LaTeX代码转换为GUI可以显示的内容
思想及其问题
我可以看到两种方法:
将LaTeX源代码编译成pdf,然后再编译成某种图像类型。应该可以使用Ghostscript来获取图像。但我不知道如何以一种轻量级(不包括
我正试图在我的台式计算机上构建一个riscv64gc二进制文件。我使用Rustop添加了工具链,它似乎是在编译,但没有链接。我没有看到三重传递的目标,也没有使用llvm链接器?发生什么事了
$ cargo build
Compiling rusty v0.1.0 (/home/gonzo/github/vmscript/programs/rusty)
error: linking with `cc` failed: exit code: 1
|
= note: "cc&q
是什么导致了这个问题?它是如何工作的?
问题是,.iter()总是返回引用值。
揭示了以下几点:
There are three common methods which can create iterators from a collection:
iter(), which iterates over &T.
iter_mut(), which iterates over &mut T.
into_iter(), which iterates ove
我被困在如何最好地让世界生锈(这是一个光线跟踪器)。我试着在这里举个小例子
看操场。我有很多不同的生命周期错误,所以你可能更容易只看代码
trait Material{}
结构金属{}
金属{}的impl材料
特质命中{
fn命中(&self)->选项;
}
结构球{
fn命中(&self)->选项{
一些(HitRecord){
材料:自我材料,
})
}
}
结构世界纪录{
让mut world=world::default();
设金属=金属{};
让金属=世界。添加材料(金属);
设球体
我正在使用async_std构建应用程序,但这将返回一个未解决的导入错误:
使用async\u std::sync::Sender;
在查看了1.8.0的文档之后,似乎async\u std::sync支持async\u std::channel。事实并非如此
更新到1.8.0后,我尝试替换使用async\u std::sync::Sender与一起使用async_std::channel::Sender
文档似乎同意它应该可以工作,但我仍然得到一个未解决的导入错误
我缺少什么?您需要启用不稳
我只需要从std::env::args()中获取的参数变量的字符串之间用空格分隔,我一直在使用fold函数创建它,如下所示:
std::env::args()
.fold("".to_string(), |accum, s| accum + &s + " ")
但是,这会在末端产生多余的空间。我尝试使用truncate函数,但是truncate不返回字符串,只是修改现有的字符串,而且这需要创建一个中间绑定,以便使用字符串的len()调用以定义被截断的字符串的长度(我相信由于Ru
我的头在向下投射时有些困难
我有一个包含装箱特征的结构,例如:
struct MyContainer{
读者:盒子,
}
我怎样才能将阅读器降级到我已知的类型
下面是我尝试做的一个简单示例:
通常,我会在特质上创建一个作为任何(&self),这将导致&dyn any,但这是一个我不拥有的外来特质。将你自己的特质定义为既有any又有Read作为超级特质,然后将其用作dyn类型
trait DowncastableRead:Read+Any{
fn as_any(&self)->&dyn any
我是新手,正在尝试学习和实验,这里有一个到操场的链接,问题和解释如下:
使用std::fmt;
#[派生(克隆、复制)]
结构动物{
fn new(name:&'a str)->Self{Self{name}
}
结构Barn Barnfmt::Barn的调试{
姓名:&'a str,
谷仓(农场主){
self.barns.push(谷仓)
}
fn将动物放置在谷仓中(&mut self,动物:动物,位置:&str){
用于谷仓中的谷仓和自助谷仓{
//我该怎么做才能让它工作呢?
如果barn
我试图在client.rs中使用parser\u utilities.rs中定义的pub函数
项目:
src/client.rs
src/lib.rs
src/parser_utilities.rs
client.rs:
use crate::parser_utilities::{parse_c_seq, parse_session};
use rtsp_client::parser_utilities::{parse_c_seq, parse_session};
error[E0433]
我知道pin是做什么的,以及它是如何工作的,但是自引用对象不能移动,也不能获取&mut ref
struct SelfRef<'a> {
s: String,
s_ref: Option<&'a str>
}
fn main() {
let mut a = SelfRef {
s: "hello".to_owned(),
s_ref: None
};
a.s_ref =
Petgraph通过直接在图形上访问(graph[edge\u id])或通过update\u edge,可以非常轻松地更改边权重
但有时需要更改边连接的节点。是否有任何方法可以在位编辑边的源或目标?我还没有找到一个,所以我只是删除和重新创建边,但有时有点复杂
标签: Rust
ownershipreference-counting
我从生锈开始,我已经面临数据所有权方面的问题
我想实现一个名为Port的通用结构,它有一个值向量Vec。此外,此结构具有指向相同类型的其他结构的引用计数指针向量,Vec:
使用std::slice::Iter;
使用std::rc::rc;
发布结构端口{
价值观:Vec,
港口:Vec,
}
其思想如下:有多种类型的结构Port。您可以向给定端口添加类型为T的值。每个端口将这些值存储在其values属性中。但是,可以使用引用计数指针将一个端口“链接”到其他端口:
impl端口{
pub fn
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 295 页