Asterisk Macro

Hi, I’m new to Asterisk Macro and I have a few questions.

Is there a way to return a value in Macro like functions do?
What’s the best practice if I want to return a value or a string out?

I try to use a Macro A to call Macro B, however, I find if I use MacroExit in Macro B, I exit from A also. What do I do to exit Macro B and return to Macro A to continue the work?

Thanks in advance.