Created
January 15, 2014 12:42
-
-
Save huonw/8435502 to your computer and use it in GitHub Desktop.
do-while loops in Rust
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
while { | |
let x = foo(); | |
bar(x); | |
x != 0 | |
} {} | |
i see :)
You can do the same trick in C, too:
int x;
while (
x = foo(),
bar(x),
x != 0
) {}
and even weirder, like this (on some compilers):
int x;
while (({
x = foo();
bar(x);
x != 0;
})) {}
This is an ancient thread but I thought I'd share a trick from my first rust project -- it's crazy that this still doesn't exist in stable rust (and I haven't found any mention of it in the nightly book).
macro_rules! run {
($x:block until $y:expr) => {{
while {
$x;
!$y
} {}
}};
($x:block if_still $y:expr) => {{
while {
$x;
$y
} {}
}};
}
Additionally, I think keyword!
should be parsed seperately to keyword
, so you could write this as do! while! without the compiler complaining.
(Should note that I never ended up using this macro because it was too ugly in use, so take from that what you will)
really helps porting javascript . thanks
Here have a star
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Arg, It's even worse : with this syntax, you don't see the dirty trick at all.
Until you try to use break or continue ...