How to constrain the element type of an iterator?

前端 未结 3 1352
离开以前
离开以前 2021-01-19 04:15

I’m converting some older Rust code to work on 1.0.0. I need to convert a function that takes an iterator over characters, which used to be written like this:



        
相关标签:
3条回答
  • 2021-01-19 04:36

    Okay, I was able to figure this out from reading some RFC discussions, and the answer is that you can instantiate associated types in the trait (like signature fibration in ML):

    fn f<I: Iterator<Item = char>>(char_iter: I)
    

    Soon it should be possible to use equality constraints in where clauses, but this doesn’t work in 1.0.0-alpha:

    fn f<I: Iterator>(char_iter: I) where I::Item == char
    
    0 讨论(0)
  • 2021-01-19 04:39

    You can write I: Iterator<Item = char>. At some point in the future, a where clause like where I::Item == char may work too, but not now.

    0 讨论(0)
  • 2021-01-19 04:42
    fn f<I: Iterator<Item = char>>(char_iter: I)
    

    Associated types were recently added to the language, and many library types were updated to take advantage of them. For example, Iterator defines one associated type, named Item. You can add a constraint on the associated type by writing the name of the associated type, an equals sign, and the type you need.

    0 讨论(0)
提交回复
热议问题