I tried to define a function pointer type like this:
pub type Reader = fn(&str) -> Reader;
It's not supported. It seems that I can't use a trait as an alternative in this scenario either.
So must I use raw pointer and type cast in this scenario ?
I tried to define a function pointer type like this:
pub type Reader = fn(&str) -> Reader;
It's not supported. It seems that I can't use a trait as an alternative in this scenario either.
So must I use raw pointer and type cast in this scenario ?
How is this type expected to be used? For now, the only thing you can do with Reader
is pass into it a string and get another Reader
, which doesn't look like it's solving any actual problem.
You can definite it but it doesn't know how to reason about it.
Indirection only gets you so far.
I don't know that I'd recommend resorting to pointers though.
Every Reader executed then return next Reader for execute,until return std::option::None。
pub type Reader = fn(&str) -> option<Reader>;
Looks like something I want, I'll try this way.
Finally, instead of return the Reader, I use a param carry out the result
It sounds like this should be an Iterator
instead.
Actually it's a state machine, this code was written in Java. I'm trying migrate to Rust.
IMO, finite state machines are easiest to write with enums. But it is also possible to write an FSM with async fn
at the cost of polling it to completion with an async runtime [1]. The function signature you want to use looks a lot like a parser combinator.
Which could be as simple as pollster
. No need to think of async runtimes as somehow inherently complex or heavyweight. ↩︎