2014-09-03 15 views
2

我attemping做出結構與Filter iterator中:防鏽:拿着結構內部的過濾器

struct Foo { 
    inner_iter: Filter<...>, 
} 

然後我打算讓富的迭代器本身,這將在內部使用的過濾器。

問題是,我似乎無法弄清楚Filter之後大括號之間的內容。該文檔說過濾器如下:

pub struct Filter<'a, A, T> { 
    // some fields omitted 
} 

A似乎是我的返回類型。 'aT是什麼?沒有任何我試圖讓它編譯。

謝謝!

回答

3

您可以通過以下方式看到hereFilter工具Iterator特點:

impl<'a, A, T: Iterator<A>> Iterator<A> for Filter<'a, A, T> 

這意味着是,A是它的元素類型,T底層迭代器類型。如果你看看Filter的定義,你也會發現'a是謂詞關閉環境的生命週期。

如果你想使自己的Filter包裝,它看起來是這樣的:

struct CustomWrapper<'a, A, T> { 
    inner_iter: Filter<'a, A, T> 
} 

您需要通過所有參數傳遞給Filter。當然,如果你使用一些特定的元素類型的工作,你可以指定它代替使用類型參數:

struct CustomWrapper<'a, T> { 
    inner_iter: Filter<'a, int, T> 
} 

但是,你仍然需要通過'aT,因爲他們很可能是任意的。

+0

碰巧,我正在使用'int's。我的'Foo'結構不會是多態的。既然我在內部處理'int'和ONLY' int',我應該怎麼做'a和T? – 2014-09-03 16:00:39

+0

如果您從某個由用戶傳遞給您的API的迭代器派生'Filter',您應該將它們保持原樣並將它們作爲泛型參數傳遞。它們必須是通用的,因爲用戶可以傳遞* any *迭代器,並且它的類型必須出現在'Filter'簽名中。 – 2014-09-03 17:13:17

+0

我不需要一般,因爲我只是爲了自己的目的製作玩具程序。我只是想弄清楚'a和T_的值可以接受。 – 2014-09-03 23:28:09