On Wed, Jul 31, 2019 at 7:07 AM Soni "They/Them" L. wrote:
Cratera is a language very similar to Lua, and as such most of the Lua
manual applies to it. Additionally, it supports the following syntax
sugar, called "traits":
mytable:[mytrait].myfunction(myargument)
which is equivalent to:
mytable[mytrait].myfunction(mytable, myargument)
1)
Is this feature really needed?
Please show an example.
2)
Am I able to invoke a method by its name from a variable in Cratera?
local methodname = "close"
file:[methodname]()
3)
Cratera's feature could be generalized further.
The following two simple rules look like a natural extension to Lua syntax:
- There could be multiple colons in a chain
- Each colon means "use current value as extra argument"
Examples:
a:b[c].f(x) -> a.b[c].f(a, x)
a.b:[c].f(x) -> a.b[c].f( a.b, x)
a.b[c]:f(x) -> a.b[c].f( a.b[c], x)
a:b[c]:f(x) -> a.b[c].f(a, a.b[c], x)
a.b[c].f:(x) -> a.b[c].f( a.b[c].f, x)
a:b:[c]:f:(x) -> a.b[c].f(a, a.b, a.b[c], a.b[c].f, x)
c:() -> c(c)
It's not a monkey smile in the last line, variable "c" contains a "callable object"