Lua基础(2)

-----------------------------------------------------
--算数运算
  a = 10
  b = -3
  r = a % b --a - floor(a/b) * b,结果与与b的符号相同
  print(r)
  
  a = 10.3
  n = a % 1 --去正实数的小数部分:0.3
  p = a - n --取正实数的整数部分:10
  print(n , p)
  
  
  a = -10.3
  n = a % (-1)  --去负实数的小数部分:-0.3
  p = a - n     --取负实数的整数部分:-10
  print(n , p)
  
  x = math.pi
  print(x - x%0.01) --取精确到小数点两位的结果:3.14(不会进行四舍五入,直接截取)
  
-----------------------------------------------------
--  关系运算 <、>、>=、<=、~=、==
--  对与table/userdata/函数,比较的是引用(是否引用同一个对象),不是内容
arr1 = {}; arr1.x = 10; arr1.y = 10
arr2 = {}; arr2.x = 10; arr2.y = 10
arr3 = arr1
print("arr1 == arr2? " .. tostring((arr1 == arr2))) -- false
print("arr1 == arr2? " .. tostring((arr1 == arr3))) -- true

-- table
print(type(arr1))

-----------------------------------------------------
-- 逻辑运算(and、or、not),and(第一个为假,就返回第一个,否则返回第二个)和or(第一个为真就返回第一个,否则返回第二个)都是短路求值
print(false and "hello")  --false
print(nil or "hello")     --hello
print(false or "hello")   --hello
print(4 or "hello")       --4
print(4 and "hello")      --hello

if ((type(arr1) == "table") and arr1.x == 10) then
	print("arr1 is a table and arr1.x = " .. arr1.x)
end

-----------------------------------------------------
-- x = x or v
default = "default_value"
x_value = x_value or default
print(x_value)

if not x_value then  x_value = default end
print(x_value)

-----------------------------------------------------
--a and b or c (前提是b要为真,and的优先级大于or,类似于a ? b : c),
a = 10
b = 12
max = (a > b) and a or b --等价于max(x,y),如果a和b未定义,会报错的
print(max, ((a > b)))

-----------------------------------------------------
--table
my_table = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
for var=1, #my_table do
	print("my_table[".. var .. "]=" .. my_table[var]) --索引从1开始
end

rev_table = {}
my_table[0]=100
for key, var in pairs(my_table) do
	print("pairs <" .. key .. ", " .. var .. ">")
	rev_table[var] = key
end

--table反转
print("rev_table is",#rev_table) --结果为0,因为#rev_table计算的是以整数为key的entry的个数
for key, var in pairs(rev_table) do
  print("rev_table[".. key .. "]=" .. var) --索引从1开始
end

complex_table = {x=10, y=20}
complex_table.z = my_table; --用table作为value
print(complex_table.z[2])

complex_data = {color="blue", thickness=2.3, points_count=4,
  {x=10,y=3},
  {x=30,y=8},
  {x=20,y=13},
  {x=50,y=6}
}

for key, var in pairs(complex_data) do
  print("complex_data pairs <" .. key .. ", " .. tostring(var) .. ">")
end

for var=1, #complex_data do
  print("complex_data[".. var .. "]=" .. tostring(complex_data[var].x)) --索引从1开始(attempt to concatenate field '?' (a table value))
end

complex_data2 = {
  ["*"] = "mul", ["/"] = "div", ["+"] = "add", ["-"] = "sub"
}
-----------------------------------------------------
--赋值
x = 10; y = 100
x, y = y, x
print(x,y)

complex_data2["+"], complex_data2["-"] = complex_data2["-"], complex_data2["+"]
print(complex_data2["+"], complex_data2["-"])


--作用域
global_var = 10
do
  local global_var = 122  --local
  global_var = 10000      --local
  print("global_var is " .. global_var) --问题,如何访问全局变量?
end

local global_var = global_var;          --创建一个local变量,并且用global变量初始化
print("global_var is " .. global_var)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值