Note that the expansion of \directlua is a sequence of characters, not of tokens, contrary to all TeX commands. So formally speaking its expansion is null, but places material on a pseudo-file to be immediately read by TeX, as etex's \scantokens.
For a description of print functions look at section 4.13.10.
Is that really true? When you assign catcodes (catcode tables) to the print functions, >TeX's behavior is different from scantokens. I have never used scantokens, so I am >not 100% sure. Take for example:
tex.print(-2, "\\def\\foo{abc}")
will not define \foo. While you have referenced the section with the print commands, I >think that the description is misleading.
Patrick
The section on print commands says:
"The arguments to these three functions are all stored in an in-memory
virtual file that is fed to the TEX scanner as the result of the
expansion of \directlua."
An so what is fed to TEX are characters, no tokens. Your example,
indeed, is a good one to exhibit that behaviour. The fact that you can
change the catcodes and read the string again shows that TEX reads
characters, tokenizing them. If it where not and the expansion were a
sequence of tokens then \foo would get defined. Your example is like
\def\scanasothers#1{
\foo=undefined. l.8 \show\foo
and the dvi output includes the \'s output as " (the character in the font at the position of \). Javier