-
-
Notifications
You must be signed in to change notification settings - Fork 485
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
from_iter
implementation may run indefinitely
#1391
Comments
Good catch. We should probably make it panic, since it's likely a mistake by the user if it doesn't fit, and if it's not the user can simply call |
After looking at the PR (which looks great btw!) I'm a little bit uncertain about my previous statement. It might break some user's code (though should be easy to fix ...), and I'm unsure of how e.g. the |
No problem! FWIW, simply cutting off the iterator also seems like a reasonable option. This would enable things like DVector::from_iterator(70, 0..); Notably, the current behaviour is inconsistent at the moment: for static matrices, additional entries will be ignored, while for dynamic matrices the code will either panic or run indefinitely. |
Yeah, in any case we should fix the problem of iterators running indefinitely, and make the behavior consistent 👍 |
Tough call. I didn’t find any occurrence of In a way I prefer the option where we cut off the iterator instead of panicking, since it would avoid breaking the existing behavior for dynamic matrices (so we won’t start panicking existing code that relied on it), and it allows a couple of nice patterns like: DVector::from_iterator(70, 0..); as suggested by @ThomasdenH. Or even: let mut my_iterator = ...;
let v1 = Vector3::from_iterator(&mut my_iterator); // Will get elements [0, 3) of `my_iterator`
let v2 = Vector3::from_iterator(&mut my_iterator); // Will get elements [3, 6)
let v3 = Vector3::from_iterator(&mut my_iterator); // And elements [6, 9) |
Thanks for your input @sebcrozet. I agree with that for the vector case, but the matrix case is what's troubling me. I can't imagine a single case where I'd legitimately have an iterator with a different number of elements than the number of entries in a matrix. This may be a fault of my imagination, however. In any case, I'm fine with keeping the current behavior and just cut the iterator off. |
What about |
This is not quite true, the current behaviour is
|
Creating a vector or a matrix with the
from_iter
method may run indefinitely. I don't think this is the expected behaviour. I.e.will never finish. (Playground)
I think it would make sense to either:
The text was updated successfully, but these errors were encountered: