lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


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"