您的位置:首页 > 编程语言 > Lua

Lua学习记录 — (1) 变量及数据类型

2018-01-31 17:37 337 查看
BasicSyntax.lua

--#!/usr/bin/lua    -- 告诉操作系统所使用lua解释器的路径(这里是Linux系统路径)

-- 这里是单行注释

--[[
这里是
多行注释
]]

--[=[
这里是
多行注释
]=]

-- 代码块 (使用关键字)

if (true)
then
result = "这里会输出,1"
print (result)
else
result = "这里不会输出"
print (result)
end
print "这里会输出,2"

-- 多行语句 (直接跨行)

a=5
b=6
c=a
+b

print (a
+b) print (c)


VariablesAndDataTypes.lua

------------------------------------ 数据类型 ------------------------------------

-- nil无效值(条件表达式中相当于false)
print(nil_)

-- Boolean布尔值(只有false与true )
bool_ = true
print(bool_)
bb33
--> nil
print(type(bool_) , bool_)                              --> boolean true

-- Number数字(双精度double)
number_ = 5
print(type(number_) , number_)                          --> number  5

-- String字符串(用一对单引号或双引号表示)
string_ = "我是字符串"
print(type(string_) , string_)                          --> string  我是字符串

-- Function函数
function function_()
end
print(type(function_) , function_)                      --> function    function: 003CA1C0

-- table表(关联数组,数组的索引可以是数字或字符串)
table_ = { "BeiJiaan",173,25,63.5,"man" }
print(table_)                                           --> table: 003C4620
for k,v in ipairs(table_) do
print(k,v)                                          --> 1 BeiJiaan / 2 173 / ...
end
table_ = { name="BeiJiaan",height=173,age=25,weight=63.5,sex="man"}
print(table_)                                           --> table: 003C4800
for k,v in pairs(table_) do
print(k,v)                                          --> name    BeiJiaan / height 173 / ...
end

-- userdata(表示任意存储在变量中的C数据结构)
--

-- thread线程(表示执行的独立线路,用于执行协同程序)
--

-- 变量类型转换(lua的变量类型是动态的,不用指定类型)
a = 1
print(type(a))                                          --> number
a = "string"
print(type(a))                                          --> string

--[=[   《补充》

1. Lua会自动在sring和numbers之间自动进行类型转换:
a. 当一个字符串遇到算数操作时,string会自动转换为数字 print("1"+1) => 输出2
b. 当字符串连接数字时,数字会自动转化为string print("i am " .. 25 .. "years old;") => 输出i am 25 years old;
2. Lua是从1开始排序的(如table表),在使用pairs遍历时,会先按照数字顺序输出,再轮到键值对;
3. table表的索引有2种:
value = t["key"]
value = t.key
4. boolean只有两个值:true和false;Lua把false和nil看作“假”,其他都为“真”;
5. numbers只有double双精度类型;
6. string字符串可以使用一对单引号或者双引号来表示,也可以使用 [[ ]] 来表示一块字符串;
7. string字符串可以使用#号来计算字符串长度;如:#str / #"hello"
8. function可以以匿名函数的方式通过参数传递;

]=]

------------------------------------ 变量 ------------------------------------

-- 所有未创建的变量值都是nil;
print(b)                                                --> nil

-- 删除变量(直接赋值nil,lua会回收其所占内存)
a = nil
print(a)                                                --> nil

-- 多变量赋值(多余的为nil或舍弃)
a,b,c = 1,2
print(string.format("a = %d ; b = %d ; c = ",a,b),c)    --> a = 1 ; b = 2 ; c = nil

-- 交换变量值(利用lua赋值时先计算值再赋值的特性)
a,b=b,a
print(string.format("a = %d ; b = %d ;",a,b))           --> a = 2 ; b = 1 ;

--[=[   《补充》

1. nil还有一个“删除”的作用,给全局变量或者table表里的变量赋nil值,等同于把它们删掉;

]=]

------------------------------------ 变量作用域 ------------------------------------

-- 全局变量(lua中没有块级作用域)
val1 = "val"
if (true) then
val1 = "val1"
val2 = "val2"
end
print(val1)                                             --> val1
print(val2)                                             --> val2 (块中定义的,在外界一样可以访问)

-- 局部变量(只有使用local声明的才是局部变量,其余块或函数里面的都是全局变量)
function fun()
val3 = "val3"
end
fun()
print(val3)                                             --> val3(调用函数后,就创建了val3变量,外部就可以访问)

if (true) then
local val4 = "val4"
end
print(val4)                                             --> nil(local局部变量的作用域为从声明处到所在语句块结束处)

-- 作用域链(local局部变量的作用域为从声明处到所在语句块结束处)
val = 1

function f1()
val = 2
function f2()
val = 3
print(val)                                      --> 3
end
f2()
end
f1()
print(val)                                              --> 3

val = 1

function f1()
local val = 2
function f2()
val = 3
print(val)                                      --> 3 (会变量会先向外层寻找,直到寻找到为止)
end
f2()
print(val)                                          --> 3
end
f1()
print(val)                                              --> 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: