Whoah!
Thanks Bart, but this is not exactly my experience - in fact, I think I've worked it out, but it's kinda blown my mind.
For background. this is all happening in the type format of an asset listing.
My first use of the keyword is like this: %asset_parents^index:0^as_asset:asset_name_linked%, and it works fine as an array without conversion, and I continue using it as an array for a number of different operations in a little code block.
In a second block of code, I try to use %begin_asset_parents^contains:2062797% and it fails - presumably, because it's returning an array and I'm trying to run a string operation.
So, I threw in the raw keyword again, just to help with debugging, but it got the second block working, and now the first code block failed! It was like I'd switched the state of the keyword from array to string, simply by calling it again.
Not to be defeated, I threw in a modifier which would return a string: %begin_asset_parents^as_csv_noheader^contains:2062797% and it worked - without breaking the first code block!
The lesson seems to be that the %asset_parents% keyword will work either as an array, or a string, depending on how you first use it, but that once you've used it one way, you can't use it the other.
I hope this is useful, because I've just wasted hours learning the lesson!! :-)
Cheers,
Andrew H