15分钟lua 练习

原文:http://blog.jobbole.com/70480/

--[[--变量 & 控制流

local num = 1
while num < 5 do
num = num + 1
print (num)
end
function show()
if num < 5 then
print (num)
elseif num == 5 then
io.write('num is 5\n')
else
local  line = io.read()
print('how to be a great people?  ' .. line)
end
end
show()


foo = anUnknownVariable
if foo == nil then
io.write('foo is nil\n')
end


aBoolValue = false
if 0 then print('false\n')end
ans = aBoolValue and 'yes' or 'no'
print(ans)


karlSum = 0
for i= 1,5 do
karlSum = karlSum + 1
print(karlSum)
end


for j=10,1,-2 do print(j) end


num = 3
repeat
print('凡人必有一死')
num = num -1
until num == 0


--]]


--[[--函数
function fib(n)
if n < 2 then return 1 end
return fib(n - 2) + fib(n-1)
end
fib3 = fib(3)
print(fib3)


function adder(x)
    -- 返回一个函数
    -- 闭包内封存 x 值
    return function (y) return x + y end
end
a1 = adder(9)
a2 = adder(36)
print(a1(16))  --> 25
print(a2(64))  --> 100


x, y, z = 1, 2, 3, 4 --4将被忽略
function  bar(a, b, c)
print(a, b, c)
return 4, 8, 15, 16, 23, 42
end
x, y = bar('zaphod')
print(x) print(y)


--function f(x) return x * x end


f = function (x) return x * x end
print(f(5))
print 'Hello World!'
--]]


--[[Metatables & metamethods
--表
t = {key1 = 'value1', key2 = false}
-- 像 Javascript 一样以 . 取值
print(t.key1)
t.key3 = {}
t.key2 = nil
print(t.key2)
print(t.key3)


u = {['@!#'] = 'qbert', [{}] = 1729, [6.28] = 'tau'}
print(u[6.28])
a = u['@!#'] print (a)
b = u[{}] print(b)


function  h( x )
print(x.key1)
end
c = h{key1 = 'sonmi'}




for key, val in pairs(u) do  -- 像 Python  一样的键值迭代
    print(key, val)
end
 
print(_G['_G'] == _G)


v = {'value1', 'value2', 1.21, 'gigawatts'}
for i = 1, #v do --像Base一样,#v 表示列表长度
print(v[i])
end




f1 = {a = 1, b = 2}
f2 = {a = 2, b = 3}
mm = {}


function  mm.__add( x,y )


sum = {}
sum.a = x.a + y.a print(sum.a)
sum.b = x.b + y.b print(sum.b)
return sum
end


setmetatable(f1, mm)
setmetatable(f2, mm)
s = f1 + f2


-- __index 元方法重载表中 key 的提取符号 `.`
defaultFavs = {animal = 'gru', food = 'donuts'}
--myFavs = {food = 'pizza'}
myFavs={}
setmetatable(myFavs, {__index = defaultFavs})
food = myFavs.food
print(food)


  
-- 像 Javascript 一样并没有内置 Class
-- 但可以通过 Table `{}` 实现
 
Dog = {}                                -- 1.
function Dog:new()                      -- 2.
    newObj = {sound = 'woof'}           -- 3.
    self.__index = self                 -- 4.
    return setmetatable(newObj, self)   -- 5.
end
function Dog:makeSound()                -- 6.
    print('I say ' .. self.sound)
end
 
mrDog = Dog:new()                       -- 7.
mrDog:makeSound() --> "I say woof"
 
-- 1. Dog 像类但实际是 Table
-- 2. Dog:new(...) := Dog.new(self, ...)
-- 3. newObj 作 Dog 的实例
-- 4. self 是 Lua 中默认的参数,在这里 self = Dog
--    继承的时候可以改变
--    self.__index 与 self 的元方法 __index 不是一回事
--    self = {__index = self, metatable = {__index = ...}}
-- 5. setmetatable(newObj, self) 相当于 setmetatable(newObj, {__index = self})
--    赋予实例所有类方法
-- 6. 同 2.
-- 7. mrDog = Dog.new(Dog)
 
-- 继承
LoudDog = Dog:new()
function LoudDog:makeSound()
    s = self.sound .. ' '
    print(s .. s .. s)
end
seymour = LoudDog:new()
LoudDog:makeSound() --> "woof woof woof"
--]]


--[[
local mod1 = require('mod')
local mod = (function()
local M = {}
 
local function sayMyName()
    print('Hrunkner')
end
 
function M.sayHello()
    print('Why hello there')
    sayMyName()
end
return M
end)()


mod.sayHello() --> "Why hello there"
--local a = require("mod2") --> "mod2"
--local b = require("mod2") -- 不输出, 实际为 b = a
--dofile("C:/Users/Administrator/Documents/Visual Studio 2015/Projects/lua/Debug/mod2.lua") --> "mod2"
--dofile("C:/Users/Administrator/Documents/Visual Studio 2015/Projects/lua/Debug/mod2.lua") --> "mod2"
f = loadfile("C:/Users/Administrator/Documents/Visual Studio 2015/Projects/lua/Debug/mod2.lua")
f() --> "mod2"
]]


f = load("print('test')")();
f()  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值