linux应用参数 冒号,Lua-面向对象中函数使用时冒号(:)和点(.)的区别

Lua-面向对象中函数使用时冒号(:)和点(.)的区别,我们先来看一段简单的代码:

local Animal ={}functionAnimal:Eat( food )print("Animal:Eat", self, food)end

functionAnimal.Sleep( time )print("Animal.Sleep", self, time)endAnimal:Eat("grass")

Animal.Eat("grass")

Animal:Sleep(1)

Animal.Sleep(1)

输出结果为:

Animal:Eat table: 0x7f8421c07540 grass

Animal:Eat grassnilAnimal.Sleepniltable: 0x7f8421c07540

Animal.Sleepnil 1

由此可见,

定义:

在Eat(冒号函数)内部有一个参数self,在Sleep(点函数)内部没有参数self;

调用:

用冒号(:)调用函数时,会默认传一个值(调用者自身)作为第一个参数;

用点(.)调用函数时,则没有;

-- 如果要使结果一致,则:

Animal:Eat("grass")

Animal.Eat(Animal,"grass")

Animal:Sleep()

Animal.Sleep(Animal)

输出结果:

Animal:Eat table: 0x7f8421c07540 grass

Animal:Eat table: 0x7f8421c07540 grass

Animal.Sleepniltable: 0x7f8421c07540

Animal.Sleepnil table: 0x7f8421c07540

-- 我们为什么可以用.和:来定义函数

function Animal.Sleep( time ) end

-- 这种写法是一种语法糖(syntactic sugar),它的原型是:

Animal.Sleep = function ( time ) end

用双冒号(:)时,也是一种语法糖,实际上默认传递一个self(Animal)参数:

function Animal:Eat( food ) end

等价于

function Animal.Eat( self, food ) end

可参考Lua函数定义:

http://www.lua.org/manual/5.2/manual.html#pdf-next

3.4.10 – Function Definitions

The syntax for function definition is

functiondef ::= function funcbody

funcbody ::= ‘(’ [parlist] ‘)’ block end

The following syntactic sugar simplifies function definitions:

stat ::= function funcname funcbody

stat ::= local function Name funcbody

funcname ::= Name {‘.’ Name} [‘:’ Name]

The statement

function f () body end

translates to

f = function () body end

The statement

function t.a.b.c.f () body end

translates to

t.a.b.c.f = function () body end

The statement

local function f () body end

translates to

local f; f = function () body end

not to

local f = function () body end

Lua 的详细介绍:请点这里

Lua 的下载地址:请点这里

0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux tcp cork,在此用例中,TCP_CORK和TCP_NODELAY是否有显着差异?

在写完关于TCP_NODELAY和TCP_CORK的答案之后,我意识到我必须缺少对TCP_CORK的要点的了解,因为我尚不清楚100%为何Linux开发人员认为有必要引入一个新的TCP_CORK标志,而不是仅仅依靠应用程序在适当的时间设置或清除现有的TCP_NODEL…

linux 优先级必须为整数,进程友好性(优先级)设置对Linux没有影响

您看到的行为几乎可以肯定是因为Linux 2.6.38(2010年)中添加了自动组功能.据推测,当您描述运行这两个命令时,它们在不同的终端窗口中运行.如果你在同一个终端窗口中运行它们,那么你应该看到nice值有效.这个答案的其余部分详细阐述了这个故事.内核提供了一种称为自动分组的功能,…

欧框语言框架标准C2,CEFR欧洲语言共同参考框架

http://www.v4.cc/News-3997660.htmlCEFR全称是Common European Framework of Reference for Languages,是由欧洲语言测试者协会(ALTE)于2001年首次发布的一套建议标准,用来评估语言学习者在所学语言的成就,同时也给予一个教育上的评估方针。…

车羊问题c语言编程,C语言-人狼羊菜问题-最容易看懂的解决方法及代码

题目描述:农夫需要把狼、羊、菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊。请…

c语言简短的泡沫排序法编程,冒泡排序--简单(c语言)

//// main.cpp// bubble//// Created by duanqibo on 2019/7/17.// Copyright © 2019年 duanqibo. All rights reserved.// 冒泡排序 c语言#include #include #include #include #define N 4typedef struct student{int num;char name[20];char sex[2];int age;}stu[…

c语言求a1到an的和,C语言菜鸟基础教程之a++与++a

(一)a在C语言或其它语言中,符号表示“自加”,就是变量在原来的基础上加1。例1:a 0;a;则此时a的值为1。同样的道理,--表示”自减”。例2:a 100;a--;则此时a的值为99。注意,程序语言里没有”自乘”和”自除…

c语言 u16 printf,C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)...

u16首先必须知道u8,s8等数据类型的定义:typedef signed char s8;typedef unsigned char u8;typedef signed short s16;typedef unsigned short u16;typedef signed int s32;typedef unsigned int u32;typedef signed long long s64;typedef unsigned long long u64;…

算法与数据结构c语言版PPT,C语言算法与数据结构.ppt

C语言算法与数据结构.ppt第十二章 算法与数据结构12.1 算法的基本概念,该节知识点所占试题比重为12,属于重点考查对象,基本上每次必考,主要考查算法的定义和对算法复杂度的理解。历次试题分值在04分之间波动。,12.1.1 考点1 算法的定义,算法是…

android 应用自动重启,Android 应用崩溃后自动重启的方法

public class HKApplication extends Application {private List activityList new ArrayList();Overridepublic void onCreate() {super.onCreate();// 以下用来捕获程序崩溃异常if (!Config.debug) {Thread.setDefaultUncaughtExceptionHandler(restartHandler); // 程序崩溃…

android+自定义版本号,Android打包版本号设置方法

之前没有设置过打包的命名,每次打包都是默认的"app-realease.apk",之后手动修改名字来显示出它是一个新版本。晚上学习了如何配置打包名称,很简单,修改build.gradle里的代码就行。详细记录如下:1、打开app这…

android工程师饱和,Android开发是否饱和了?你所不了解的Android开发

原标题:Android开发是否饱和了?你所不了解的Android开发Android开发是否饱和了?是很多人关心的问题,对于想要从事Android开发的人更是头等大事。如今,就业难成横亘在求职者面前的难题,而与 之相反是互联网行业的高薪多…

android的读取xml配置文件,android中XMl文件的读取

废话不多说了直接上代码:新建一个Xml文件用于读取:test.xmljavaEclipseSwiftXcodeC#Visual Studio后台:import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.util.Log;import android.widget.TextView…

android 获取wifi的加密类型,wifi加密类型

最近开发wifi方面的功能,需要根据wifi加密类型来展现UI。遇到了一个比较蛋疼的问题:如何判断wifi加密类型wifi的管理需要通过WifiManager来操作WifiManager mWifiManager (WifiManager) context.getSystemService(Context.WIFI_SERVICE);开启和关闭wifi…

android编译的tool版本有多少,macOS Mojave(10.14.2)系统上编译LunarG/VulkanTools工程的Android版本...

$ cd ~$ git clone https://github.com/LunarG/VulkanTools.git$ cd VulkanTools$ cd build-android$ export ANDROID_SDK_HOME~/Library/Android/sdk$ export ANDROID_NDK_HOME~/Library/Android/sdk/ndk-bundle# 当前的版本需要Android SDK 23.0.0,但是需要Java 11以下版本的…

android底部导航栏软件,三步搞定android应用底部导航栏

很多android应用底部都有一个底部导航栏,方便用户在使用过程中随意切换。目前常用的做法有三种:一种是使用自定义tabHost,一种是使用activityGroup,一种是结合FrameLayout实现。笔者再做了多款应用后,为了节约开发周期&#xff0c…

html列表滑动字母索引,js实现做通讯录的索引滑动显示效果和滑动显示锚点效果...

只做实现。。完全没考虑性能优化。所以我实现了以后特别卡。第一个是在通讯录右边的索引条上进行滑动,滑动到相应字母就跳转到相应字母的锚点上。思路:监听touchmove事件,获取clientX和clientY,传入到elementFromPoint&#xff0c…

html一行中怎么写空格,html – 用一行填写空格

如何创建一个下划线,填充文本行末尾和DIV宽度结束之间的空白区域.我正在尝试以下方法:我希望当屏幕变小时,产品线会中断.我希望价格保持在右边,并加下划线.最后一个单词(Mayo)和价格之间的空格必须自动填充下划线.大屏幕:老奶酪 – 沙拉,牛油果,鸡蛋,草药…

android 屏幕飘动,Android自定义View实现飘动的叶子效果(三)

上一篇对自定义View及一些方法有所了解,下面做一个简单的叶子飘动的例子主要技术点1、添加背景图片canvas.drawBitmap()2、Matrix动画类3、Matrix添加到画布上步骤1、添加黄色背景颜色public LeafView(Context context, AttributeSet attrs) {super(context, attrs)…

html加入购物车的动画,vue实现加入购物车动画

预备基础整体思路定义商品列表,设置点击的元素(点击后触发加入购物车的函数addToShopCart)注:这里要把$event传递过去,方便得到target定义一个component用来放购物车和运动的小球定义一个component用来放运动的小球,里面包含多个b…

html 美化input file,Input[type=”file”] 显示效果美化方法 | 智慧宫

Html中input可以作为上传图片代码如下但是演示非常不好看,下面做一番美化处理,效果如下:文件上传美化前后对比美化方法隐藏 input 标签使用 label 标签在input标签位置显示;用js获取 input 中上传的文件名称,并在 labl…