On 10/15/2019 10:04 AM, Taco Hoekwater wrote:
Hi Rudolf,
On 15 Oct 2019, at 00:50, Rudolf Bahr <[email protected]> wrote:
Now to your suggestion not to use "assert ()". Indeed it's a solution! My
program
works! I append again its output (again just for fun!). Did you really try it or
has it been just an idea?
First, let me say that embedded lua versions are typically a little bit
different
from standalone. Just how much different depends on the embedding program.
Luatex
is actually pretty close to standalone lua. Luatex adds a bunch of extension
libraries,
but it changes very little of the core language. And all those changes are
documented
in the luatex manual. None of those changes affect your minimal example, except
that lua errors are handled a little differently.
Note that standalone lua *also* produces an error, as that is what assert() is
supposed to do. And when lua runs into an error, it ignores the rest of the
current
chunk:
“... whenever an error occurs, Lua ends the current chunk and returns
to the application.” (from lua.org)
Standalone lua typically sees only one chunk (the file you pass on the command
line) but embedded lua implementation often see (sometimes many) more chunks.
In luatex’s case, each \directlua is a separate chunk (in ConTeXt, that means
every
\startluacode block and every \ctxlua call is a separate chunk).
The only unusual thing here is that standalone lua silently quits and returns a
non-zero exit code to the shell, whereas luatex gives you the typical TeX-style
error prompt. The rationale for that is: lua errors can happen in many places in
your input file, and if they were silently ignored, your typeset pages could be
wrong without you realising it.
And to answer your question above: I did not have to try or guess. I know about
how assert() works because it is documented in the lua manual (and as it closely
mimics the assert() C function, that is easy for me to remember).
as you say, it's all normal lua behaviour:
if you do:
print(io.open("crap.crap"))
one gets
nil crap.crap: No such file or directory 2
and i think that assert then returns the second returned argument
but if one does
context(io.open("crap.crap") and "yes" or "no")
then the first argument is checked against
Hans
-----------------------------------------------------------------
Hans Hagen | PRAGMA ADE
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the
Wiki!
maillist : [email protected] / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage : http://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___________________________________________________________________________________