houmee实习日记4.17

--算术运算操作符
--二元 + - * / % ^这个是(指数) 
--一元  -(负号)
-- x = 2
-- n = x^0.5 --x的平方根(开平方)
-- m = x^(-1/3) --x的立方根的倒数
-- print(n)
-- print(m)
-- x = math.pi   --x = 3.141592653....
-- print(x - x%0.01)  -->3.14 保留两位小
--关系运算符
--< > <= >= == ~=(等同于不等性测试)    (ture,false)
--逻辑操作符 and or not (false,nil视为假)
--(符合短路逻辑)
-- print(4 and 5) --5
-- print(nil and 13) --nil
-- print(false and 13) -- false 
-- print(4 or 5) -- 4
-- print(false or 5) --5   --都符合短路逻辑
-- x = x or v 
-- if not x then x = v end  --两条语句等价
--在没有初始化x的时候为nil所以为假,or根据短路选择x = v
-- (a and b) or c 
-- -- a ? b: c  --C语言,等价上面语句
-- max = (x > y) and x or y
-- --求最大值 

--优先级  (高到低)
-- ^
-- not # -(负号)
-- * / %
-- + -
-- ..
-- < > <= >= ~= ==
-- and
-- or
--table构造式{}
days = {"sunday","monday","friday"}
--days[1] == sunday ,所以上面是数组初始化,下标1开始
print(days[1])
a = {x=10 ,y=20}
print(a.x)
w = {x=0,y=0,label="console"}
x = {math.sin(0),math.sin(1),math.sin(2)}
w[1] = "another field"
x.f = w
print(w.["x"])
print(w[1])
print(x.f[1])
w.x = nil
--链表表达式
list = nil
for line in io.lines() do
 list = {next = list,value = line}
end 
--遍历链表
local l = list
while l do
 print(l.value)
 l = l.next
end 

--
polyline = 
{     color = "blue",thickness = 2, npoints = 4,
      {x=0, y=0},
      {x=-10,y=0},
      {x=-10,y=1},
      {x=0,y=1}
}
print(polyline[2].x) 
print(polyline[3].y)
print(polyline[4].y)
--用表达式来初始化索引值
opnames = {["+"] = "add",["-"] = "sub" 
           ["*"] = "mul",["/"] = "div"}
i = 20; s = "-"
a = {[i+0] = s ,[i+1] = s..s,[i+2] = s..s..s}
print(opnames[s])
print(a[22])

--
-- --局部变量与块block
-- x = 10 --全局
-- local i = 1 --局部作用域只限于block
-- while i <= x do
--    local x = i*2
--    print(x)
--    i = i + 1
-- end 
-- if i > 20 then
--  local  x 
--  x = 20
--  print(x + 2)
-- else
--  print(x)
-- end
 
 --do-end--显式的界定一个block
do
  local a,b,c = 3,6,9 
  local a2 = 2*a
  local d = (b^2 - 4*a*c)^(1/2)
  x1 = (-b + d) /a2
  x2 = (-b - d) /a2
end
local  a,b = 1,10
if a < b then
 print(a)
 local a  --具有隐式nil
 print(a)
end
print(a,b)
foo = 1
local foo = foo 


--语句
if a < b then return a else return b end
if line > MAXLINES then
 showpage()
 line = 0
end
if op == "+" then
 r = a + b
elseif op == "-" then  
 r = a - b
else
 error("invalid operation")
end 
local  i = 1
while a[i] do
 print(a[i])
 i = i + 1
end
------repeat until
--until为真就停止循环
repeat
 line = io.read()
until line ~= ""
 print(line)

----数字型for
for i=1,100 do
    print("输出100次")
end
for i=1,100,2 do --2是自加数,可选,不写则为1
 print("-")
end
for i=1,math.huge do --math.huge没有上限
 print(i)
 if(i = 10)
  break
 end
end  
--泛型for
for i,v in ipairs(a) do
 print(v) 
end 
--ipairs(a) lua基础库里的迭代函数
--i是索引值,v是该索引对应的数组元素


--常见迭代器 
--迭代文件每行(io.lines)
--迭代table元素(pairs)
--迭代数组(ipairs)
--迭代字符串中单词(string.gmatch)
--遍历table t中所有key
for k in pairs(t) do
 print(k)
end 

for k in pairs(t) do
 print(k)
end 
--逆向table
days = {"sunday","Monday","Friday"}
revDays = {}
for k,v in pairs(days) do
 revDays[v] = k
end
x = "sunday"
print(revDays[x]) 

---- --function
print "hello world"
dofile 'a.lua'
print[[ a multi-line message]]
function add(a) 
 local  sum = 0
    for i,v in ipairs(a) do
     sum = sum + v
    end
    return sum 
end
--function可以返回多个值--求最大值与其下标
function maximum(a)
 local mi = 1
 local m = a[mi] 
 for i,val in ipairs(a) do
   if val > m then
  mi = i;m = val
   end
 end    
 return m,mi
end
print(maximum({8,10,34,23,5}))
print(unpack{10,20,30})--接收一组数组作为参数,并返回所有

--变长参数
function add( ... )  --...表示可以接受不同数量的实参
 local s = 0
 for i,v in ipairs{...}do
  s = s + v
 end
 return s 
end
print("总和为:",add(3,4,10,25,12))
-----
function foo( a,b,c )
end
--等价
function foo( ... )
 local  a,b,c = ...
end
----格式化文件并输出文本----
function fwrite( fmt,... )
 return io.wirte(string.format(fmt,...))
end
---select-----select('#',...)变长参数的总数
for i = 1,select('#',...) do
 local arg = select(i,...) --得到第i个参数
end 
-------
Lua | 果冻想
-------http://www.jellythink.com/archives/category/language/lua 闭包函数参考
-------http://www.jellythink.com/archives/506 自定义迭代器,泛型for参考

你可能感兴趣的:(表达式,关系,table构造式,各种运算符(算术,逻辑)优先级,坑爹function)