Well, I will try to remember everything we wrote about the quotes and strings.
Anything in quotes is treated as a string, so "RotZ" will simply return RotZ. This can be used when you want to affect a variable, for example
ANIMATE("RotZ", 0, 90)
which will animate RotZ through 0 to 90 degrees.
Not putting something in quotes means it will be evaluated, eg:
IF(RotZ=90, 1, 0)
which will return 1 if the value of RotZ is 90 and 0 if it is not.
& is used to concatenate strings, so
"Rot" & "Z" = "RotZ"
2 & 5 = 25
There are many ways of getting from A to B, so if you are having trouble getting your component to animate the way you want, first check whether you should be using positive or negative degrees (270 and -90 are the same, apart from how you got there) and then try fixing values using =0 (or whatever the value should be). if you are trying to animate RotZ, then it may help to set RotX and RotY to =0, to make sure that only RotZ can change. Note that it is =0 and not just 0 (which will just set the value for now, not carve it in stone).
To refer to an attribute in the same subcomponent you simply need its name, for example RotZ (noticing a theme emerging?). To refer to an attribute of another subcomponent you precede the attribute with the subcomponent name followed by an exclamation mark, eg gears!RotZ
A special case of this is using parent!attribute which will refer to an attribute of the parent component.
You can only refer to on the same or neighbouring levels, so you cannot refer from one component to the child of a child or vice versa. Like in Gears( gear( tooth))) having an attribute of tooth which refers to an attribute of Gears. You can get round this using custom attributes at each level to pass the message along (create a custom attribute of gear, in this case, which Gears and tooth will then both be able to reference).
It is also good practice to custom attributes as an intermediary when doing something like ANIMATE, rather than referring to them directly.
That's a start, at least. There was something else that caused a string to be evaluated, I think, but I can't remember what it is.