博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lua函数传入参数问题
阅读量:6456 次
发布时间:2019-06-23

本文共 1127 字,大约阅读时间需要 3 分钟。

写在前面

使用lua时,会发现这样一个情况

print("aa") -- 输出aaprint('aa') -- 输出aaprint "aa"  -- 输出aaprint 'aa'  -- 输出aaprint {}    -- 输出某地址。

可以发现lua的写法十分灵活,为什么能这么些呢,lua又是怎么解析这些句子的呢,接下来来分析下Lua源代码(基于5.3.5)

解析过程

//parser.cstatic void suffixedexp (LexState *ls, expdesc *v) {  /* suffixedexp ->       primaryexp { '.' NAME | '[' exp ']' | ':' NAME funcargs | funcargs } */  FuncState *fs = ls->fs;  int line = ls->linenumber;  primaryexp(ls, v);    ...}

1.首先我们进入suffixedexp后再进入primaryexp

 

static void primaryexp (LexState *ls, expdesc *v) {  /* primaryexp -> NAME | '(' expr ')' */  switch (ls->t.token) {    ...    case TK_NAME: {      singlevar(ls, v);      return;    }    ...  }}

2.我们获取了函数的名字然后在suffixedexp过程中 有

 

static void suffixedexp (LexState *ls, expdesc *v) {  ...  for (;;) {    switch (ls->t.token) {      ...      case '(': case TK_STRING: case '{
': { /* funcargs */ luaK_exp2nextreg(fs, v); funcargs(ls, v, line); break; } ... } }

3.可以得到如下结论,lua的函数接受三种写法传入参数,且能起到相同的作用

1. (arg1, arg2, arg3 ... )

2. "argv" 'argv'

3. {}

后两种类型的参数数量只能为1,而且类型限定为字符串或者表。

转载于:https://www.cnblogs.com/Ntcrush/p/9456517.html

你可能感兴趣的文章
mysql插入缓存
查看>>
Office 365 轻松上手指南 - OneDrive for Business (一)
查看>>
SpringMvc 框架阅读记录
查看>>
行业深度见解•SD-WAN对于企业云的重要性
查看>>
idea 常用快捷键及eclipse 部分快捷键
查看>>
Throwable cause的使用
查看>>
老司机教你注册电子邮箱后,如何搬迁邮箱!
查看>>
android之listivew实现下拉刷新
查看>>
centos6更新yum源为阿里云
查看>>
【行业动态】使用动态ip软件前,这几个概念你必须弄懂!
查看>>
VMware14安装CentOS7
查看>>
您对TOP Server的德语、中文和日语语言支持了解吗?(二)
查看>>
如果你想找建站公司,那么你需要了解这些知识
查看>>
Nginx简单web负载均衡
查看>>
数据库的基本操作
查看>>
我的友情链接
查看>>
centos中yum的使用
查看>>
c# js前端判断实例
查看>>
COCOS CREATOR(TS)之节点鼠标事件
查看>>
隐藏file控件,用button实现文件上传
查看>>