Lua奇技淫巧之一——模拟Pascal中的with

Pascal(Delphi)、VB中都有一个with关键字,可以帮助程序员减少大量的输入、提高效率。Lua
中没有这个关键字,但我们可以利用以下方式模拟。 

说在前面的废话:

例:

很久以前就关注了泰课在线,因为是学习Unity3D的,所以在找视频教程的时候找到了siki老师的《黑暗之光》教程,从那以后就很喜欢siki老师的课程。(绝对不是在打广告!!)
后来心知肚明地告诉自己基础学得一塌糊涂,所以决定从最基本的开始抓起。好在siki老师不仅有Unity3D的课程,也有C#基础教程,所以从那时起,我手里就捏着siki老师的教程,可笑的是竟然没有下定决心学起,平白无故地浪费了那么多的时间。
2016年,差不多是在新一年的开端吧,我想:还等什么呢?难道还有契机让我等待吗?
没有了,从现在开始,最坏的结果也不过是大器晚成!

2016年1月14日,正式开始学习编程,因为以前玩了三年的编程了,自己什么都不会!没脸说自己学过编程!乖乖从头开始学吧! 
a={}
setfenv(function()
    a=1
    b=2
end,a)()

既然是从头学起,那理所当然的要从最简单的说起:
命名:
C#中有两种命名方式,一种叫驼峰命名法,另一种叫Pascal命名法。
驼峰命名法的要求是:第一个单词的所有字母全部小写,后面的所有单词首字母大写,其余字母小写;
如:

以上代码效果等于:

String myPhone = "IPhone5S";     //定义字符串:我的手机
int enemyAge = 300;       //定义整型数值:敌人的年龄
a.a=1
a.b=2

Pascal命名法的要求则是:组成标识符的所有单词首字母都要大写,其他字母一律小写;而当该标识符是英文单词的缩写时,则所有字母都要大写(这个类似于常量的定义方法);
如:

等价于Pascal中的:

class EnemyMove{};       //定义一个敌人移动的类
class PlayerShoot{};     //定义一个玩家射击的类
class OpenDoor{};        //定义一个开门的类
class HP{};              //定义一个血量的类
static void GameStart(){};  //定义一个游戏开始的方法
static void ClickButton(){};  //定义一个点击按钮的方法
with a do
  begin
    a:=1;
    b:=2;
  end;

以上就是两种命名方法的实例,但是我们也可以看到实例中命名不太一样,为什么会这样呢?
那是因为我们在C#编程中用驼峰命名法来定义变量,用Pascal命名法来定义类和方法,所以上面这种故意为之的命名就可以得到解释:为什么我两种命名方法运用在不同类型的对象中(变量、类、方法)。

当然,这样只能用于赋值,如果需要在a{}中写函数就不能这么写了。这时可以这样写:

在这里要说一点:定义标识符的时候一定要注意避开关键字,像class、string、using、int、static、void等都是关键字。
只要我们遵守命名规范,一般不会与关键字冲突,因为关键字一般都是所有字母全部小写,而无论是驼峰命名法还是Pascal命名法里面都包含了大写。
因此,我们平时命名时一个变量只用一个单词来表示而且所有字母都小写其实是一种不太严谨的做法。

a=setmetatable({}, {__index = _G})
setfenv(function()
    a=1
    b=2
    function c()
    print("OK")
    return 0
    end
end, a)()

接下来说说语句和块:
其实我们所编写的代码都是一个个程序指令,我们把它们称为语句;
我们常见的语句有:

以上代码效果等于:

int studentAge=23;
float iphonePrice=2599.00f;
studentID = student1.studentID;
Console.WriteLine("程序猿,你好!");
a.a = 1
a.b = 2
function a.c()
    print("OK")
    return 0
end

这种我们常写的代码其实就叫做语句,语句最终以;结束。

块有什么呢?
我的理解是:块是语句的集合。我们有时候说代码块,代码块,应该就是指这个东西。

{
    int studentAge=23;
    float iphonePrice=2599.00f;
    studentID = student1.studentID;
}

对于一个块来说,它包含0条或多条语句,它以{开始,以}结束。C#就是块结构语言。
如:

if(i>3)
{
    i++;
    j+=2;
    c=i+j;
}

澳门新葡亰8455下载app,这是一个我们非常熟悉的很简单的代码段,我们不讨论它的意义,单单从形式上看,它算得上是C#中最常见的一种结构了,可以说,几乎C#的所有代码都是在花括号中的(引入命名空间除外)。
我们看花括号包括它里面的语句,这就是一个块嘛!所以我们说C#就是一种块结构语言,同时JAVA也一样,是块结构语言的一种。

我们今天学习的第一个方法就是Write()方法,还有它的弟弟WriteLine()方法。

Console.Write("程序猿,你好!");

很明显会在控制台输出“程序猿,你好!”这几个字。
澳门新葡亰8455下载app 1
Ctrl+F5运行会使程序运行后暂停,按任意键才会结束执行。

再来看看它的弟弟:WriteLine()方法。

Console.WriteLine("程序猿,你好!");

澳门新葡亰8455下载app 2
我们比较一下,Write()方法和WriteLine()方法都是在控制台中输出一个字符串,但Write()方法输出一个字符串后就紧接着在其后面执行其他操作,而WriteLine()方法则是在输出一个字符串后换一行,然后再执行后续操作。

与Write()方法和WriteLine()方法类似的还有Read()方法和ReadLine()方法0。
从字面上就可以看出一个是读,一个是写,也就是说一个是展示数据,另一个是获取数据。
我们刚才介绍Write()方法和WriteLine()方法的时候运行是怎么运行的?
是通过键盘组合键Ctrl+F5运行的吧?Ctrl+F5运行有什么效果呢?就是会使程序运行后暂停,等键盘按下任意键的时候才继续运行(鼠标不行,只能是键盘任意键!)。
我们再来看看一个Write()方法加上一个Read()方法有什么效果呢?

网站地图xml地图