Syntax:
#def METHOD[(ARGUMENTS)] #end def
Or the one-line variation:
#def METHOD[(ARGUMENTS)] : TEXT_AND_PLACEHOLDERS
The #def
directive is used to define new methods in the generated
Python class, or to override superclass methods. It is analogous to Python's
def
statement. The directive is silent, meaning it does not itself
produce any output. However, the content of the method will be inserted into
the output (and the directives executed) whenever the method is later called by
a $placeholder.
#def myMeth() This is the text in my method $a $b $c(123) ## these placeholder names have been defined elsewhere #end def ## and now use it... $myMeth()
The arglist and parentheses can be omitted:
#def myMeth This is the text in my method $a $b $c(123) #end def ## and now use it... $myMeth
Methods can have arguments and have defaults for those arguments, just like
in Python. Remember the $
before variable names:
#def myMeth($a, $b=1234) This is the text in my method $a - $b #end def ## and now use it... $myMeth(1)
The output from this last example will be:
This is the text in my method 1 - 1234
There is also a single line version of the #def
directive.
Unlike the multi-line directives, it uses a colon (:) to delimit the method
signature and body:
#attr $adj = 'trivial' #def myMeth: This is the $adj method $myMeth
#def myMeth2 This is the $adj method #end def
#slurp
:
#def myMeth3 This is the $adj method#slurp #end def
Because #def
is handled at compile time, it can appear above or
below the placeholders that call it. And if a superclass placeholder
calls a method that's overridden in a subclass, it's the subclass method
that will be called.