aligo
2011-03-13 21:14:22 +08:00
晚上把我对基本语法的想法写下来,欢迎吐槽
一切都是对象和方法调用(类似Smalltalk),并且完全基于lambda(类似Lisp),实现各种语言的基本功能
最简单例子1+1其实是1.+(1)
包括代码块也是方法调用,所有代码其实都是一个顶层对象Source的内部调用
如果创建一个类
class A
def a
print "helloworld"
其实是
Source.class(A,{
this.def(a,{
print "helloworld"
})
})
if(x == 0)
...
else
...
其实是
this.if((x == 0),{...},{...})
因此三目运算符
(x == 0) ? 1 : 2
其实是
this.if((x == 0),1,2)
调用方法的点是可选的,传递参数过程中圆括号可以省略,逗号可以用空格替代,花括号可以用换行缩进替代,end闭合代码块是可选的
arr.each({...})
str.replace("a","b")
可以为
arr each
...
str replace "a" "b"
lambda部分,具名输入为
{(arg1,arg2,args*)
...
}
如果
{
print "helloworld"
}
print方法的调用对象,是上下文对象列表中的由最后一个到第一个中的一个,按顺序,第一个永远是Source
所以对一个lambda对象执行call/apply方法
lambda.apply(this) #定义上下文不调用方法
lambda.call(...) #传入参数调用方法
或者
lambda(...)
的输入参数永远是被加入到当前上下文对象列表中的最后一个
基本上就是一个lambda会继承包裹自己的lambda的上下文对象列表,并且加入新的对象,再传递给自己内部的lambda
用俗话说,就是类似闭包感觉,另外当然闭包也是存在的,唯一的区别就是不会在闭包能访问的对象上调用前面说到的print方法等
简单说就是糅合各种语言,集大成的山寨语法
另外我没把上面这些为什么这么做的好处写出来,要写估计又是一大堆了,有可能,我打算尽快着手实现