开发自己的编程语言(六)—— First-Class Value
来源:互联网 发布:java输出所有希腊字母 编辑:程序博客网 时间:2024/05/16 15:23
从0.16版本开始,Snail Language语言将函数作为First-Class Value。First-Class Value指的是:函数名和变量名之间没有区别,它们可以相互赋值。要注意的是,print既是函数名又是关键字,所以print可以作为右值,但是不能作为左值。现在一个变量可以表示为:整数、浮点数、字符串、数组、函数。由于是所有的变量都是动态类型,所以赋值时不需要在意当前的类型。
First-Class Value实现原理:
- Value是Snail Language中所有类型的数据结构,在Value类型中支持函数类型FUNCTION。
- 将函数定义时的函数名放入全局变量中,变量的类型为FUNCTION。
- 当调用函数时,查看当前变量的类型是否为FUNCTION。
其他功能:
除了实现First-Class Value,0.16版本还实现了:
- 用__FUNCTION__表示当前的函数名。__FUNCTION__是一个全局变量,每次调用函数的时候,将函数名保存到__FUNCTION__中。用途:debug时候可以打印函数log
- 每个函数都可以指定一个Action函数,在return之前脚本自动调用。实现过程:当执行return之前,在分析树上插入一个新生成的节点,这个节点表示Call Action所指的函数,接着调用这个节点。最后调用return。用途:希望在一个函数返回时做一些处理,通过使用Action,可以不用在每个return前都增加处理代码。
例子:
myprint = print //print的别名funcname = ""func add(a, b){ funcname = __FUNCTION__ return a + b}func test(){ print(funcname,"的结果为: ")}add.Action = test //在add return之前,调用test函数f = addadd = 100myprint(f(10, 10), " Type=", f.Type(), "\n")print(add, " Type=", add.Type(), "\n")add = fprint(add(1, 2), " Type=", add.Type(),"\n")
结果:
f的结果为: 20 Type=function100 Type=integeradd的结果为: 3 Type=function
软件下载:
http://download.csdn.net/detail/u012813593/6848621
反馈和交流:
isurface@qq.com
1 0
- 开发自己的编程语言(六)—— First-Class Value
- 开发自己的编程语言(一)
- 开发自己的编程语言(二)
- 开发自己的编程语言(三)
- 开发自己的编程语言(四)
- 开发自己的编程语言
- 开发自己的编程语言(五)—— CIL中间代码的生成
- 开发自己的编程语言(七)—— 字典数(相关联数组)
- 开发自己的编程语言(八)—— 在Snail中调用C#函数
- 开发自己的编程语言(九)—— 生成EXE文件
- 自己的编程语言
- ASP.NET AJAX客户端编程之旅(六)——来做一个自己的客户端控件
- ASP.NET AJAX客户端编程之旅(六)——来做一个自己的客户端控件(3)
- 我的编程之路(六) 投资自己——读书
- 高级编程语言的发展历程(六)
- 软件开发中的理想与现实(六)——给自己留颗后悔药
- 自己实现基于key-value的NoSQL数据库(四)—— 新版本的数据库
- 自己实现基于key-value的NoSQL数据库(一)——起步,初版
- Android【USB名称修改系列】第6项-如何修改手机在PC桌面右下角弹出的“MT65xx Android Phone”提示框
- SGU 141 Jumping Joe(扩展欧几里得)
- Android EditText 监听输入
- MYSQL集群服务配置
- C指针原理(56)-Ncurses-文本终端的图形
- 开发自己的编程语言(六)—— First-Class Value
- Android【USB名称修改系列】第7项-如何修改PTP设备在PC上弹出的对话框的标题
- 上传文件时IE浏览器中拒绝访问 -- 备忘
- '$.browser.msie' 为空或不是对象
- sql语句中的特殊符号
- NSUserDefaults使用(学习网址)
- How to fold up content in MediaWiki
- uva 11569 Lovely Hint (DP)
- 锋利jquery---第四章