26th July 2023 at 2:59pm
Ways to define variables and parameters
| how declared | how parameters are defined | accessing parameter values in the body |
|---|---|---|
| \define | () | $param$, <<__param__>> |
$parameters or \parameters | <<param>> | |
$set, $let, $vars | $parameters or \parameters | <<param>> |
| \procedure, \widget | (), $parameters or \parameters | <<param>> |
| \function | () | <param> |
| javascript macros | exports.params javascript property array | passed as normal javascript function parameter and so accessed as a normal javascript variable |
Examples
These examples are meant to provide insight into the various ways of defining and using parameters. In many cases they do not illustrate best practices.
\define
\define mp1(a1) $a1$ - <<__a1__>>
\define mp2() <$parameters a1><<a1>></$parameters>
\define mp3()
\parameters(a1)
<<a1>>
\end
|<<mp1 foo>>|<<mp2 foo>>|<<mp3 foo>>|
$set, $let, $vars
<$set name="sp1" value="<$parameters a1><<a1>></$parameters>">
<$set name="sp2" value="""
\parameters(a1)
<$parameters a1><<a1>></$parameters>
""">
<$vars vp1="<$parameters a1><<a1>></$parameters>" vp2="""
\parameters(a1)
<$parameters a1><<a1>></$parameters>
""">
<$let lp1="<$parameters a1><<a1>></$parameters>" lp2="""
\parameters(a1)
<$parameters a1><<a1>></$parameters>
""">
|<<sp1 foo>>|<<sp2 foo>>|
|<<vp1 foo>>|<<vp2 foo>>|
|<<lp1 foo>>|<<lp2 foo>>|
</$let>
</$vars>
</$set>
</$set>
\procedure, \widget
\procedure pp1(a1) <<a1>>
\procedure pp2() <$parameters a1><<a1>></$parameters>
\procedure pp3()
\parameters(a1)
<<a1>>
\end
\procedure wp1(a1) <<a1>>
\widget wp2() <$parameters a1><<a1>></$parameters>
\widget wp3()
\parameters(a1)
<<a1>>
\end
|<<pp1 foo>>|<<pp2 foo>>|<<pp3 foo>>|
|<<wp1 foo>>|<<wp2 foo>>|<<wp3 foo>>|
\function
\function fp1(a1) [<a1>]
|<<fp1 foo>>|
Behaviour of invoked variables depends on how the variable was declared
Namespaces
- tiddler titles - tiddlers are uniquely identified by their title. The namespace for tiddler titles and variable names are completely separate.
- variables - \define,
$set,$let,$vars, \procedure, \widget, \function all create variables. If the same name is used, then later define will overwrite earlier defined functionfilter operator parameter - only variables defined using \function can be called using thefunctionoperator- filter operators - only the javascript defined filter operators and variables defined using \function with name containing a dot can be called
- widgets - variables defined using \widget can be invoked using
<$widget/>syntax ONLY if the name starts a dollar sign. Without the dollar sign prefix, defining variables using \widget is no different than using \procedure.