I'm especially interested in the second bound on F
. I'm struggling to find any explanation in the book and reference of why a parameter would appear twice following where
. Why doesn't this definition use two +
's? Is FnOnce
also a trait here?
pub fn spawn<F, T>(f: F) -> JoinHandle<T>
where F: FnOnce() -> T, F: Send + 'static, T: Send + 'static
1 Like
FnOnce
is indeed a trait. FnOnce() -> T
is syntactic sugar for FnOnce<(), T>
. Not sure why F
is listed twice in that list, but it might make things a bit easier to read since FnOnce() -> T + Send + 'static
is a bit harder to visually parse.
2 Likes
Thanks! From this I will assume there's no way for a bound not to apply if it appears, so I should treat them all the same no matter what syntax they use.
I'll read up on closures some more to work out exactly what the effect of each of these bounds is.