簡體   English   中英

具有盒裝 impl 特征的結構

[英]Struct with boxed impl trait

我無法弄清楚為什么這不會編譯。 我只想擁有一個帶有迭代器的結構,其中迭代器是使用返回impl Trait的 function 創建的。 我將我的代碼更改為這篇文章的最小示例。

在 Rust 游樂場打開

struct Foo {
    pub it: Option<Box<dyn Iterator<Item=i32>>>,
}

impl Foo {
    fn new() -> Self {
        let it = Some(Box::new(my_numbers()));
        Self { it: it }
    }
}

fn my_numbers() -> impl Iterator<Item=i32> {
    1..10
}

編譯器 output:

   |
8  |         Self { it: it }
   |                    ^^ expected trait object `dyn std::iter::Iterator`, found opaque type
...
12 | fn my_numbers() -> impl Iterator<Item=i32> {
   |                    ----------------------- the found opaque type
   |
   = note: expected enum `std::option::Option<std::boxed::Box<(dyn std::iter::Iterator<Item = i32> + 'static)>>`
              found enum `std::option::Option<std::boxed::Box<impl std::iter::Iterator>>`

編輯:

我發現一種解決方法是使用#![feature(type_alias_impl_trait)] ,但這並不穩定。

將裝箱值,即Box::new(my_numbers()) as Box<dyn Iterator<Item=_>>通過穩定的 Rust 1.41.0 解決了這個問題。 啟用type_alias_impl_trait可能有助於解決這個缺失的類型推斷方面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM