Rust 裡應該如何返回 Iterator?

時間 2021-06-05 12:13:56

1樓:菜花狗

按標準庫目前的正規化,最好還是在使用時將閉包做引數傳入供型別推導,總之就是不開 conservative_impl_trait 要想用閉包寫個高階函式那叫乙個麻煩。

如果是第一種寫法,不用閉包而是用 fn 還是可以實現的, html.select(selector) 返回的 Select 既然可以 flat_map 應該已經是 Iterator。extractTexts 看上去只是為了減少每次都手動傳 trans 的次數。

應該可以

impl<'a, 'b> for Select<'a, 'b> {

fn extractTexts<'c>(&self) -> FlatMap, fn(Self::Item) -> Text<'c>> {

至於返回的 FlatMap 要再 Map 而且還想再偷懶寫 map(|| ...),那最好還是老老實實使用的時候 flat_map map 吧。

至於第二種寫法,也是目前常見的做法,多個生命週期的交集限定是 Box

第三種是標準庫現在的做法,在使用的時候傳入閉包就可以推導型別了。問題中的 Select 不是已經實現了 Iterator 了麼?不會造成用不了 flat_map 啊,反而是 impl 才能使用呢

至於 conservative_impl_trait ,可以看下面這個鏈結

Implement `impl Trait` in return type position by anonymization. by eddyb · Pull Request #35091 · rust-lang/rust

2樓:F001

impl trait就是用於解決這個問題的。需要nightly版本,開啟乙個feature gate。

只想在穩定版上開發的話,只能用Box>。用trait object的壞處是會分配記憶體,有額外效能開銷。

應該如何評價《白色巨塔》裡的裡見?

裡見喜歡談崇高理想,但他所作所為卻無不與他的理想背離。而且這種人是很可怕的,因為他成就自己的代價居然是慷他人之慨,他搭上的是財前的職業生涯,而不僅是自己和妻兒的前程。財前就沒有理想嗎,他只是懂得忍辱負重,懂得要打敗學閥首先要自己成為學閥。很多人希望看到更多的 裡見 但往往有能力解決問題扭轉乾坤的還是...

我應該如何延續Minecraft裡的友誼?

路空 天下沒有不散的筵席。在長久的時間河流中,總有結束的mc伺服器,又總會有新的開始。對我來說,長長久久的伺服器固然不錯,而再次去起航又會充滿新的未知。人總是要向前看的。而想要鞏固群體的關係的話,按照我個人的經歷來談幾點。首先,如果非常非常想留住群體的每個人的話,對我來說,一定不要讓群體再加入新的人...

大學裡應該如何有效的聽課,做筆記?

雲悠水澈 高效聽課乃至高效學習的首要前提是預習。沒有預先對課程內容的初步了解 思考 熟悉,聽課的效率極低,很難跟上 理解講者的思路。建議預習時就做簡單的筆記,包括課程的綱要輪廓,疑難和自己的問。標註在書上 紙上或軟體都行。課堂的重點在聽講 提問,筆記盡量快捷,專注於講者才能收穫更多,記得以前有人說過...