Lua基础(2)

来源:互联网 发布:sap是什么软件 编辑:程序博客网 时间:2024/06/04 19:21
-------------------------------------------------------算数运算  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 = 10arr2 = {}; arr2.x = 10; arr2.y = 10arr3 = arr1print("arr1 == arr2? " .. tostring((arr1 == arr2))) -- falseprint("arr1 == arr2? " .. tostring((arr1 == arr3))) -- true-- tableprint(type(arr1))------------------------------------------------------- 逻辑运算(and、or、not),and(第一个为假,就返回第一个,否则返回第二个)和or(第一个为真就返回第一个,否则返回第二个)都是短路求值print(false and "hello")  --falseprint(nil or "hello")     --helloprint(false or "hello")   --helloprint(4 or "hello")       --4print(4 and "hello")      --helloif ((type(arr1) == "table") and arr1.x == 10) thenprint("arr1 is a table and arr1.x = " .. arr1.x)end------------------------------------------------------- x = x or vdefault = "default_value"x_value = x_value or defaultprint(x_value)if not x_value then  x_value = default endprint(x_value)-------------------------------------------------------a and b or c (前提是b要为真,and的优先级大于or,类似于a ? b : c),a = 10b = 12max = (a > b) and a or b --等价于max(x,y),如果a和b未定义,会报错的print(max, ((a > b)))-------------------------------------------------------tablemy_table = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}for var=1, #my_table doprint("my_table[".. var .. "]=" .. my_table[var]) --索引从1开始endrev_table = {}my_table[0]=100for key, var in pairs(my_table) doprint("pairs <" .. key .. ", " .. var .. ">")rev_table[var] = keyend--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开始endcomplex_table = {x=10, y=20}complex_table.z = my_table; --用table作为valueprint(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) .. ">")endfor var=1, #complex_data do  print("complex_data[".. var .. "]=" .. tostring(complex_data[var].x)) --索引从1开始(attempt to concatenate field '?' (a table value))endcomplex_data2 = {  ["*"] = "mul", ["/"] = "div", ["+"] = "add", ["-"] = "sub"}-------------------------------------------------------赋值x = 10; y = 100x, y = y, xprint(x,y)complex_data2["+"], complex_data2["-"] = complex_data2["-"], complex_data2["+"]print(complex_data2["+"], complex_data2["-"])--作用域global_var = 10do  local global_var = 122  --local  global_var = 10000      --local  print("global_var is " .. global_var) --问题,如何访问全局变量?endlocal global_var = global_var;          --创建一个local变量,并且用global变量初始化print("global_var is " .. global_var)

0 0