15分钟lua 练习
2015-10-08 11:24
537 查看
原文: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()
--[[--变量 & 控制流
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()
相关文章推荐
- Lua学习之Mac下封装C模块
- lua中string.find()函数作用于汉字字符串
- VS2012编译luabind-0.9.1
- Lua5.3 与C交互学习
- lua类
- Lua学习之Lua的函数解析(待补充)
- coroutine in lua
- Lua学习之xcode下简单调用C语言函数(待补充)
- Lua入门基础
- LintCode "Expression Evaluation"
- lua快速入门[转]
- Lua: Good, bad, and ugly parts
- UVALive 6697 Homework Evaluation
- Java Evaluate Reverse Polish Notation(逆波兰式)
- 为什么要用Lua脚本呢?(一)
- 150. Evaluate Reverse Polish Notation (Stack)
- lua脚本的基本语法(二)
- ubuntu15.04编译lua源码
- lua.c:80:31: fatal error: readline/readline.h: No such file or directory
- Lua错误:nesting of [[...]] is deprecated near '['