gpt4 book ai didi

constructor - 无法将构造函数用作或转换为 fn

转载 作者:行者123 更新时间:2023-11-29 07:48:46 25 4
gpt4 key购买 nike

我想写这样的东西:

use std::{iter, ops};

struct Idx(usize);

fn get_inds() -> iter::Zip<iter::Map<ops::RangeFrom<usize>, fn(usize) -> Idx>, ops::RangeFrom<usize>> {
(0..).map(Idx).zip(0..)
}

但是,编译失败:

error: mismatched types [--explain E0308]
--> src/main.rs:6:9
6 |> (0..).map(Idx).zip(0..)
|> ^^^^^^^^^^^^^^^^^^^^^^^ expected fn pointer, found fn item
note: expected type `std::iter::Zip<std::iter::Map<std::ops::RangeFrom<usize>, fn(usize) -> Idx>, std::ops::RangeFrom<usize>>`
note: found type `std::iter::Zip<std::iter::Map<std::ops::RangeFrom<usize>, fn(usize) -> Idx {Idx::{{constructor}}}>, std::ops::RangeFrom<_>>`

然后我转换函数:

fn get_inds() -> iter::Zip<iter::Map<ops::RangeFrom<usize>, fn(usize) -> Idx>, ops::RangeFrom<usize>> {
(0..).map(Idx as fn(usize) -> Idx).zip(0..)
}

这会生成以下编译器警告。为什么我会收到警告?像这样使用构造函数的正确方法是什么?

warning: can't cast this type, #[warn(const_err)] on by default
--> src/main.rs:6:19
6 |> (0..).map(Idx as fn(usize) -> Idx).zip(0..)
|> ^^^^^^^^^^^^^^^^^^^^^^^

最佳答案

这是一个虚假警告,由最近对编译器常量计算器的更改引起。参见 #33452 , #33291等。我不担心,但值得向 Rust 存储库提交错误,以便修复它。

关于constructor - 无法将构造函数用作或转换为 fn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39056284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com