CONCEPT
        lfuns

DESCRIPTION
        A lfun is a LPC function within an object which is public and can
        be called by other objects. In OO terms, lfuns are "methods"
        which you can send "messages" to.

        Calling lfuns is done by using the efun call_other(), which
        takes as arguments the object in which the lfun is to be called,
        the name of the lfun to be called in the object, and additional
        and optional arguments.

        An example looks like this:

            call_other(drink, "QueryShort");

        This call may also be written as

            drink->QueryShort();

        This means call_other(object, "function", args...) can also be
        written as object->function(args...). The second form is
        preferred as it is easier to read.

        call_other() will return 0, if the function does not exist
        or is not accessible. As an alternative there is call_strict()
        which will result in an error in such a case. The call is
        similar:

            call_strict(drink, "QueryShort")

        And can be written as

            drink.QueryShort();

        Some lfuns have a special meaning for the LPC driver, because
        they are applied by the interpreter instead from an LPC object.
        To distinguish those, they are called ``applied lfuns''.

SEE ALSO
        efuns(LPC), efun(E), applied(A), master(M), call_other(E)
