相关疑难解决方法(0)

如何使用image :: ImageBuffer作为成员创建Rust结构?

我正在使用图像包来进行图片处理,并希望创建一个小包装器,以使我的代码更有趣.

extern crate image;

const BLACK: [u8; 4] = [0, 0, 0, 255];
const WHITE: [u8; 4] = [255, 255, 255, 255];
const RED: [u8; 4] = [255, 0, 0, 255];

pub struct Picture {
    buffer: image::ImageBuffer,
    width: u32,
    height: u32
}

impl Picture {
    // My functions like fill(), line() etc.
}
Run Code Online (Sandbox Code Playgroud)

但是当我编译它时,我有一个错误:

src\pic.rs:11:13: 11:31 error: wrong number of type arguments: expected 2, found 0 [E0243]
src\pic.rs:11     buffer: image::ImageBuffer,
                          ^~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

在源代码中,我看到它ImageBuffer接受两个参数:

pub struct ImageBuffer<P: Pixel, …
Run Code Online (Sandbox Code Playgroud)

struct rust

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

在Rust中看似矛盾的借阅场景

第一个Rust程序将无法编译,因为b它在引用之前被删除r,这是有道理的:

fn main() {
    let a = "a";
    let v;
    {
        let b = "b";
        v = &b;
    }
    println!("{}", v);
}
Run Code Online (Sandbox Code Playgroud)

在第二个Rust程序中,b通过函数检索引用,突然之间没有问题:

fn getRef(b: &str) -> &str {
    b
}

fn main() {
    let a = "a";
    let v;
    {
        let b = "b";
        v = getRef(&b);
    }
    println!("{}", v);
}
Run Code Online (Sandbox Code Playgroud)

问题是,v仍然是一个参考b,并且b超出范围println!().

为什么这两个不同?

scope rust

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

如何创建一个空字节数组?

我如何创建一个空的[u8]然后传递给openssl函数,以便它可以将结果写入其中?

fn test_encrypt(key_pair: openssl::rsa::Rsa) {
    let text = b"Hello";
    println!("{:?}", text);
    let mut result = b" ";
    let pad = openssl::rsa::Padding::from_raw(1);
    key_pair.private_encrypt(text, result, pad);
}
Run Code Online (Sandbox Code Playgroud)

我的代码当前导致以下错误:

fn test_encrypt(key_pair: openssl::rsa::Rsa) {
    let text = b"Hello";
    println!("{:?}", text);
    let mut result = b" ";
    let pad = openssl::rsa::Padding::from_raw(1);
    key_pair.private_encrypt(text, result, pad);
}
Run Code Online (Sandbox Code Playgroud)

rust

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

Rust在运行时如何存储类型?

A u32占用4个字节的内存,a String占用3个指针大小的整数(用于位置,大小和保留空间),在栈上加上一些内存。

在我看来,这意味着Rust在执行代码时不知道在特定位置存储什么类型,因为这种知识将需要更多的内存。

但是同时,是否不需要知道在0xfa3d2f10存储什么类型,以便能够解释该位置的字节?例如,要知道接下来的字节构成String堆上a的规范吗?

memory types rust

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

使用rustc_serialize并获取不带引号的字符串

所以我已经完成了关于Rust的90%的教程,我想我大部分都掌握了语法.我正在尝试用它来开始编写代码我正在使用该rustc_serialize库解析JSON stdin,我没有得到我期望的结果.我有以下JSON文件,名为message.txt以下内容:

{"text": "hello world"}
Run Code Online (Sandbox Code Playgroud)

这是接受stdin和解析text字段的Rust代码:

extern crate rustc_serialize;

use std::io::{self, Read};
use rustc_serialize::json::Json;

fn main() {
    // provide a buffer for stdin
    let mut buffer = String::new();
    let _ = io::stdin().read_to_string(&mut buffer);

    // parse the json
    let message = match Json::from_str(&mut buffer) {
        Ok(m) => m,
        Err(_) => panic!("Stdin provided invalid JSON")
    };

    // get the message object and "text" field string
    let message_object = message.as_object().unwrap();
    let message_string = message_object.get("text").unwrap(); …
Run Code Online (Sandbox Code Playgroud)

rust

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

在声明for循环变量时,&mut会做什么吗?

考虑以下(哑)程序:

fn main() {
    let mut array = &mut [1u8, 2u8, 3u8];
    for &mut value in array {
    }
}
Run Code Online (Sandbox Code Playgroud)

它编译并运行正常(虽然警告未使用的变量/不必要的可变性,如预期的那样).但是&mutfor声明中做了什么?

它似乎没有给你一个可变的数组引用,因为尝试value = 0;在错误中分配结果:

error[E0384]: re-assignment of immutable variable `value`
Run Code Online (Sandbox Code Playgroud)

这是&mut一个无操作吗?

rust

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

将向量传递到“ for”循环中而不是对向量的引用意味着什么?

我对Rust for循环的工作方式感到困惑。考虑以下:

#![feature(core_intrinsics)]

fn print_type_of<T>(_: T) {
    println!("{}", unsafe { std::intrinsics::type_name::<T>() });
}

fn main() {
    let nums = vec![1, 2, 3];
    for num in &nums { print_type_of(num); }
    for num in  nums { print_type_of(num); }
}
Run Code Online (Sandbox Code Playgroud)

它输出以下内容:

&i32
&i32
&i32
i32
i32
i32
Run Code Online (Sandbox Code Playgroud)

传递向量for与引用向量相比是什么意思?为什么当您传递参考时,您获得对项目的参考,而当您传递实际向量时,却获得了实际项目?

for-loop rust

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

是否可以使用其中一种方法获取结构的名称?

例如:

struct ABC;

impl ABC {
    fn some_method(&self) -> &str {
        // return the name of its struct -> "ABC"
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在编写Python扩展,我需要一种方法来返回其repr方法的当前结构名称.在Python中,我可以使用它self.__class__.__name__.Rust中有类似的东西吗?

reflection types rust

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

将大于i32的数字存储到变量中时,为什么不出现文字超出范围的错误?

Rust文档说默认的整数类型是i32,这意味着变量默认可以保存的最大数字是2147483647ie 2e31 - 1。事实证明,这是千真万确的:如果我试图挽救数量大于2e31 - 1x变,我得到的错误literal out of range

fn main() {
    let x = 2147483647;
    println!("Maximum signed integer: {}", x);
    let x = 2e100;
    println!("x evalues to: {}", x);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我2e100x变量中保存值,为什么我不会出错?它的计算结果肯定大于2e31 - 1

输出量

fn main() {
    let x = 2147483647;
    println!("Maximum signed integer: {}", x);
    let x = 2e100;
    println!("x evalues to: {}", x);
}
Run Code Online (Sandbox Code Playgroud)

fn main() {
    let …
Run Code Online (Sandbox Code Playgroud)

types literals rust

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

如何确定 Rust 迭代器的结果类型?

我正在通过rustlings练习来学习 Rust。我已经达到了iterator3.rs练习并且被卡住了。这个练习要求我提供一行代码,作为操作的一部分,将结果从一种类型映射到另一种类型;我需要用正确的操作填写 x= 行。有两部分 - 第一部分阅读:

let numbers = vec![27, 297, 38502, 81];
let division_results = numbers.into_iter().map(|n| divide(n, 27));
let x = ???
assert_eq!(format!("{:?}", x), "Ok([1, 11, 1426, 3])");
Run Code Online (Sandbox Code Playgroud)

下一个是相同的,但输出断言的格式略有不同:

assert_eq!(format!("{:?}", x), "[Ok(1), Ok(11), Ok(1426), Ok(3)]");
Run Code Online (Sandbox Code Playgroud)

我相信我明白第一个实例需要返回一个包含 i32 向量或某种错误类型的结果。第二个需要返回一个结果向量,每个结果都有一个 i32 或一个错误类型。

但是,我通常难以理解如何确定 into_iter、map 和 collect 的组合返回的类型。我可以使用一些帮助来学习如何推理或获得编译器帮助。

这是我到目前为止的位置:

我不明白 Division_results 的结果类型是什么。我曾尝试使用编译器错误消息以及此问题的答案来查找,但结果对我来说是不透明的,可能是因为懒惰的评估。例如,只需将 x 替换为 Division_results,这样 assert 就会显示类型,如下所示:

assert_eq!(format!("{:?}", division_results), "Ok([1, 11, 1426, 3])");
Run Code Online (Sandbox Code Playgroud)

给我这个结果:

left: `"Map { iter: IntoIter([27, 297, 38502, 81]) }"`,
right: `"Ok([1, 11, …
Run Code Online (Sandbox Code Playgroud)

rust

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

标签 统计

rust ×10

types ×3

for-loop ×1

literals ×1

memory ×1

reflection ×1

scope ×1

struct ×1