当前位置: 首页 > news >正文

知名室内设计网站做网站怎么购买主机

知名室内设计网站,做网站怎么购买主机,如何免费注册一个网站,unity网站后台怎么做第六日笔记1. 基础概念程序块定义在 lua 中任何一个源代码文件或在交互模式中输入的一行代码程序块可以是任意大小的程序块可以是一连串语句或一条命令也可由函数定义构成#xff0c;一般将函数定义写在文件中#xff0c;然后用解释器执行这个文件换行在代码中不起任何作用一般将函数定义写在文件中然后用解释器执行这个文件换行在代码中不起任何作用只是为了提升可读性分隔符 ; 起分隔作用a a * 2 b a * b​a a * 2;b a * b​a a * b; b a * ba a * b b a * b交互模式在交互模式中输入的一行内容会被解释器当作一个完整的程序块如果这一行的内容不足以构成一个完整的程序块就会等待输入退出交互模式Ctrl Z 是 end-of-file 控制字符在 dos 中是这个快捷键os.exit() 标准库中的退出函数区域设置lua 中识别什么是字母是通过区域设置来判别的如设置希腊就可以识别希腊字母作为变量但在不支持该区域的系统上无法执行执行函数文件lua 函数文件路径dofile(文件路径 / 需要转义) 加载函数库-- 阶乘函数function fact(n)    if n 0 then        return 1 --0 的阶乘是 1    else        return n * fact(n - 1) -- 3 的阶乘 3 * 2 * 1    endendprint(Enter a number:)a io.read(*number)  -- 读取用户输入且需为数字类型的print(fact(a)) --调用阶乘函数并传入实参 a ​-- lib1 函数库function norm(x, y)    return (x ^ 2 y ^ 2) ^ 0.5  -- 两个数的平方和再开平方根endfunction twice(x)    return 2 * x -- 一个数的两倍end标识符定义由任意数字、字母、下划线构成的字符串叫做标识符标识符不能由数字开头标识符不能以下划线开头后跟多个大写字母如: _PROMPT, _VERSIONlua 将它们保留用作特殊用途被称为哑变量_PROMPT lua  -- 修改交互模式中的提示符默认为 保留字流程控制ifthenelseifendfordoinwhilerepeatuntilif 条件表达式 then elseif 条件表达式 thenendfor 控制变量, 终止变量, 步长 do enda {}for i,v in ipairs(a) do   endwhile i 10 do    i i 1    print(i)endrepeat    i 0    i i 1until i 10条件控制truefalse逻辑控制andornot类型functionlocalnil需要注意的点nil nil 是相等的and 和 And 不同lua 区分大小写lua 中条件值不仅仅只有 true 和 false在 lua 中任何值除了 false 和 nil 都可以用作表示「真」包括空字符串 和数字 0注释单行注释 --多行注释 --[[]]使多行注释中的代码生效 ---[[ --]]多行注释中包含多行注释 --[[ ]]全局变量全局变量不需要声明只需要将一个值赋给它即可lua 中可以访问一个未初始化的变量且不会发生错误但这个未初始化的变量的值为 nil删除全局变量赋值 nil 即可lua 将全局变量存储在一个普通的 table 中解释器参数-i 先执行程序块后进入交互模式-e 直接执行代码块-l 加载库文件解释器执行参数前会先寻找一个叫做 LUA_INIT 的环境变量找到了且内容为 文件名 的话就执行这个文件没找到就假设内容为 lua 代码 并执行解释器运行脚本前lua 将脚本前的参数存储到 arg 这个 table 中用作启动参数脚本名在这个 table 中的索引为 0其后参数依此类推脚本名前的参数为负数索引lua -i -e hello script a b arg[0] scriptarg[1] aarg[-1] helloarg[-2] -earg[-3] -i在 lua 中也可以通过变长参数语法来检索脚本参数变长参数为 ... 三个点作为函数参数传递时表示传递所有参数2. 类型与值lua 是动态类型语言每个值都携带有它的类型信息获取值的类型type() 可以返回一个值的类型名称type()的返回结果永远是 string 类型的print(type(3)) -- numberprint(type(a)) -- stringprint(type({a, b, c})) -- tableprint(type(io.read)) -- functionprint(type(true)) -- booleannumber实数即双精度浮点数可使用科学计数法如 2e2 表示 200可重新编译 lua使用其他类型的值来表示数字类型如 longtonumber() 用于将一个字符串显式的转换为数字类型boolean在 lua 中有两个布尔值一个是 true 表示为「真」一个是 false 表示为「假」但这两个值不是用来表示条件的唯一值在 lua 中 除 nil 和 false 外的任何值都可以用来表示「真」 包括空字符串 和数字 0nil只有一个值nil仅用来表示为空表示未初始化的变量或 table 元素也可用来删除变量或 table 元素string是对象由自动内存回收器进行分配和释放是字符序列是8位编码可以包含数值编码如二进制lua 中的字符串是唯一不可变的值.. 字符串连接符用于连接两个字符串但数字类型使用时需要用空格隔开# 长度操作符后跟字符串可以获取字符串长度[[]] 在期内的特殊字符不需要转义[[ ]] 可以正确打印多行注释的内容3 4 这样的值会是 number 类型发生了运行时隐式转换print(97 a) -- 在 ASCII 编码表中97 表示为 aprint(type(3 .. )) -- stringprint(3..4) --报错print(3 .. 4) -- 34print(#hello) -- 5​-- 获取子串证明字符串是不可变的值a hellob a .. ,worldprint(a) -- helloprint(b) -- hello, worlda [[ 芜湖 ]]a [[ --[[ print(多行注释) print(多行注释) ]]]]print(type(3 4)) -- number显式转换为字符串tostring().. 任意数字连接一个空字符串即可转换为字符串table是对象由自动内存回收器进行分配和释放table 没有固定大小可以动态添加元素{} 是 table 构造式用来创建一个 table# 长度操作符可以获取 table 的大小table 中的元素在未被初始化前都是 nil可以将 table 中的元素赋值 nil 来进行删除如果 table 中间部分的元素值为 nil 就说明这是一个有「空隙」的 table有「空隙」的 table 要使用 table.maxn() 来返回这个函数的最大正索引数table 可以用来表示模块、包、对象table 中的索引可以是任何值除了 niltable 是匿名的程序仅保留了对 table 的一个引用一个仅有 table 的变量和 table 自身并没有关系a.x 等价于 a[x] 是以字符串为索引的a[x] 是以变量 x 为索引的a {}for i 1, 10 do    a[i] i    print(a[i])endfor i 1, #a do    print(a[i])endprint(a[10]) -- 10print(#a) -- 10a[10] nilprint(#a) -- 9a[10000] 666print(#a) -- 9print(table.maxn(a)) -- 10000a {}b {}c a print(type(a b)) -- falseprint(type(a c)) -- truex ya[x] 666a[y] 777print(a.x) --666print(a[x]) -- 777function第一类值可以存储在变量中可以作为函数的返回值或参数lua 可以调用自身编写的函数也可以调用 C 语言编写的函数lua 标准库中的函数都是用 C 语言编写的userdata由应用程序或 C 语言编写创建的新类型没有太多的预定义操作仅用来做赋值和条件测试3. 表达式定义表达式用于表示值在 lua 中函数调用函数定义数字常量、字面字符串变量一元和二元操作符table 构造式都是表达式算数操作符一元操作符- 负号二元操作符- 减号*/%^-- % 的技巧-- x % 1print(3.13 % 1) -- 得到小数部分-- x - x % 1print(3.14 - 3.14 % 1) -- 得到整数部分-- x - x % 0.1print(3.14 - 3.14 % 0.1) -- 得到整数部分 一位小数部分-- x - x % 0.01 以此类推是整数部分 两位小数部分关系操作符 相等性判断~ 不等性判断逻辑操作符and 第一个操作数为假返回第一个否则返回第二个or 第一个操作数为真返回第一个否则返回第二个not 只会返回 true 或 false-- 短路操作的使用技巧print(x x or v) -- 初始化一个值如果 x 为 nil 没有被初始化过就赋值 v -- 等价于if not x then    x vend-- 实现 C 语言中的三元操作符, a ? b : cprint((a and b) or c) -- b 必须为真才可以这样操作-- 等价于if a true then    return belseif a false then    return cend-- 实现返回两个数中的较大值max (x y) and x or y -- 因为 lua 将数字视为「真」-- 等价于if x y then    return xelse    return yend字符串连接.. 字符串连接优先级1级优先^2级优先- 负号not#3级优先*/%4级优先- 减号5级优先.. 字符串连接6级优先~7级优先and8级优先ortable 构造式lua 标准库中的函数对 table 的索引都是从 1 开始处理的记录风格的 tablea {x 10, y 20} -- 等价于 a.x 10, a.y 20混合使用的 table这种方式的 table 不能以负数和操作符作为索引a {    color {red, green, blue}    width 200,    height 300}链表由一系列节点组成节点就是元素节点可以再运行时动态生成每个节点包括两部分存储数据的数据域存储下一个地址节点的指针域list nilfor line in io.lines() do    list {next list, value line}endlocal l listwhile l do    print(l.value)    l l.nextend指定索引的 tableoptions {[] add, [-] sub,   [*] mul, [/] div}print(options[]) -- add4. 语句在 lua 中包括赋值程序结构和过程调用还有多重赋值和局部变量声明赋值lua 支持多重赋值即 a, b 1, 2会先计算等号右边所有元素的值然后再赋值如果右边的值少于左边变量未被初始化的变量就置为 nil如果左边变量少于右边的值多余的值会被「抛弃」可用来收集函数的多个返回值初始化变量就是为每一个变量赋一个初始值a, b 1, 2x, y y, x -- 交换变量a, b 1 -- a 1, b nila, b 1, 2, 3 -- a 1, b 2, 3 被抛弃a, b f() -- a 接收函数 f 的第一个返回值b 接收第二个a, b, c 0, 0, 0 -- 初始化赋值局部变量与块块一个块就是程序结构的执行体或函数的执行体在块内声明的变量仅在块内生效即作用域为声明它们的块可显式声明一个块使用 do end 将要执行的内容包裹在一个块内局部变量local 用来声明一个局部变量局部变量仅在声明它的块内生效在块的外部无效如在循环内部声明在的变量在循环外部则无法使用a 3b 0if a then    local a 5    b a -- 将 then 块内的局部变量 a 保存到全局变量 b 中    print(a)endprint(a) -- 3print(b) -- 5do    -- code blockend尽量使用局部变量使用局部变量要比全局变量要快避免污染全局环境局部变量仅在声明它的块中有效即在块外这个变量就被释放掉了lua 将局部变量声明当作语句处理即可以在任何支持书写语句的地方书写局部变量声明声明可以包含初始化赋值程序结构程序结构中的条件表达式可以是任何值条件结构ifelseifelseif 条件表达式 then -- 符合条件表达式执行endif 条件表达式1 then   -- 符合条件表达式 1 执行    elseif 条件表达式2 then   -- 符合条件表达式 2 执行endif 条件表达式 then    -- 条件表达式为真时执行else    -- 条件表达式为假是执行end循环结构forwhile 条件表达式为假时退出repeat ... until 条件表达式为真时推出条件测试是在循环体之后做的因此循环体至少会执行一次在循环体内声明的局部变量的作用域包含了条件测试循环的三个表达式是在循环开始前一次性求值的控制变量会被自动声明为 for 块中的局部变量即作用域为 for 块在循环结束后不可见不要在循环过程中修改控制变量的值可以使用 break 或 return 在循环正常结束前提前结束它for exp1, exp2, exp3 do   endwhile 条件表达式 do   endrepeat   until 条件表达式a 20repeat    local a 0    print(a)until a 0 -- 可访问在 repeat 块内声明的 a, 而不是全局变量 a 数值型 forfor i 10, 0, -1 do    print(i)end泛型 foripairs() 用来遍历数组i 每次循环时都会赋予一个新的索引值v 则是索引值所对应的元素a {1, 2, 3, 4, 5, 6}for i,v in ipairs(a) do    print(i)    print(v)endfor i,v in pairs(a) do    print(i)    print(v)end两种 for 的共同点循环变量都是循环体的局部变量不应该对循环遍历进行赋值days {第一天, 第二天, 第三天}revdays {}for i, v in ipairs(days) do    revdays[v] i -- 逆向数组将数组索引和数组元素调换可获取数组元素的位置endprint(revdays[第二天]) -- 获取第二天所在位置​break 和 returnbreak 用于结束一个循环跳出内层循环后在外层循环中继续执行return 用于返回函数结果或简单的结束函数的执行任何函数的结尾处实际都有一句隐式的 return如果函数无返回值就无需在结尾处加 return两者的共同点都是用作跳出当前块都需要放在一个块的结尾处即一个块的最后一条语句因为 return 或 break 后的语句将无法执行到可以用 do ... end 块包裹 return用与调试即调用函数但不执行函数内容的情况a 1if a then   print(hello)   break   print(world) -- 会报错endfor i 1, 10 do    print(i)    if i 3 then        break -- 只会打印 1 2 3 4 然后就跳出循环了    endend-- 调试function foo(...)    do       return    end    print(执行 foo 函数) -- 不会打印endfoo(1, 2 ,3)5. 函数函数是对语句和表达式进行抽象的主要机制函数的两种用法一是可以完成特定的任务一句函数调用被视为一条语句二是只用来计算并返回特定结果视为一句表达式print(hello) -- 用来完成打印任务视为一条语句a os.date() -- os.date() 用来返回日期视为一句表达式两种用法的共同点都需要将所有参数放到一对圆括号中 ()但当参数为字面字符串或 table 构造式的时候 ()可以省略即使调用函数没有参数也必须要有一对空的圆括号 ()print hello -- helloprint {1, 2, 3} -- 1 2 3print(os.date) -- 当前日期定义function 是创建函数的关键字function add add 是函数的名称function add(n) n 是函数的形式参数简称为形参add(4) 4 是调用 add()函数时的实际参 简称为实参实参多余形参多余的实参被「抛弃」形参多余实参多余的形参被置为nilfunction foo(a, b)    return a or bendfoo(1) -- a 1, b nilfoo(1, 2) -- a 1, b 2foo(1, 2, 31) -- a 1, b 2, 多余的 31 被抛弃-- 面向对象式调用o.foo(o, x)o:foo(x) -- 与上面的效果一样: 冒号操作符隐式的将 o 作为第一个参数多重返回值lua 中的函数允许返回多个结果用逗号分隔所需要返回的所有参数string.find(you are cool, are) -- 5 7 返回找到的字符串的开头位置和结尾位置-- 查找数组中的最大元素并返回这个元素的所在位置function maximum(a)    local val 1    local max a[val]    for i,v in ipairs(a) do        if max a[i] then            max a[i]            val i        end    end    return max, valenda {1, 2, 55, 22, 29, 4}maximum(a)不同情况下的返回值如果将函数作为单独的语句执行lua 会丢弃所有的返回值如果将函数作为表达式的一部分调用只保留函数的第一个返回值只有当函数是一系列表达式中的最后一个元素(或只有一个元素的时候)才会获取所有的返回值一系列表达式的4种情况多重赋值如果一个函数调用是最后(或仅有)的一个表达式lua 会保留尽可能多的返回值用来匹配赋值的变量如果一个函数没有返回值或没有返回足够多的返回值那么 lua 会用 nil 来补充缺失的值如果一个函数调用不是一系列表达式中的最后一个元素就只能返回一个值function foo() endfunction foo1() return a endfunction foo2() return a, b end​-- 第一种情况最后(或仅有)的一个表达式x, y foo1() -- x a, y b-- 第二种情况没有返回值x foo() -- nil-- 第二种情况没有返回足够多的返回值x, y, z foo1() -- x a, y b, z nil-- 第三种情况不是表达式中的最后一个元素x, y foo2(), 10 -- x a, y 10函数调用时传入的实参列表如果一个函数调用作为另一个函数调用的最后一个(或仅有的)实参的时候第一个函数的所有返回值都会作为实参传递给另一个函数function foo() endfunction foo1() return a endfunction foo2() return a, b end-- 第四种情况作为 print 函数中的最后一个(或仅有的)实参print(foo()) -- nilprint(foo1()) -- aprint(foo2()) -- a bprint(foo1() .. test) -- atestprint(foo2() .. test) -- atesttable 构造式table 构造式会完整接收一个函数调用的所有结果即不会由任何数量方面的调整但这种行为只有当一个函数调用作为最后一个元素时才发生其他位置上的函数调用总是只产生一个结果值function foo() endfunction foo1() return a endfunction foo2() return a, b end-- 函数调用是 table 中的最后一个元素a {foo2()} -- a {a, b}a {foo2(), 10} -- a {a, 10}return 语句将函数调用放入一对圆括号 () 中使其只返回一个结果return 语句后面的内容不需要 () 圆括号如果强行加上则会使一个多返回值的函数强制其只返回一个 return(f())function foo0() endfunction foo1() return a endfunction foo2() return a, b endfunction foo(i)    if i 0 then return foo0()        elseif i 1 then return foo1()        elseif i 2 then return foo2() endendprint(foo(1)) -- aprint(foo(2)) -- a, bprint(foo(0)) -- 无返回值在交互模式中会是一个空行​-- () 包裹print((foo(1)) -- aprint((foo(2)) -- aprint((foo(0)) -- nil 应该是强制返回了一个未初始化的值因为 foo0() 没有返回值unpack 函数接收一个数组作为参数并从下标 1 开始返回该数组的所有元素这个预定义函数由 C 语言编写print(unpack{10, 20, 30}) -- 10 20 30a, b unpack{10, 20, 30}  -- a 10, b 20用于泛型调用泛型调用就是可以以任何实参来调用任何函数-- 调用任意函数 f, 而所有的参数都在数组 a 中-- unpack 将返回 a 中的所有值这些值作为 f 的实参f(unpack(a)) f string.finda {hello, ll}f(unpack(a)) -- 3 4 等效于 string.find(hello, ll)用 lua 递归实现 unpackfunction unpack(t, i)    i i or 1    if t[i] then        return t[i], unpack(t, i 1)    endend变长参数lua 中的函数可以接收不同数量的实参当这个函数被调用时它的所有参数都会被收集到一起这部分收集起来的实参称为这个函数的「变长参数」... 三个点表示该函数接收不同数量的实参一个函数要访问它的变长参数时需要用 ... 三个点此时 ... 三个点是作为一个表达式使用的表达式 ... 三个点的行为类似一个具有多重返回值的函数它返回的是当前函数的所有变长参数具有变长参数的函数也可以拥有任意数量的固定参数但固定参数一定要在变长参数之前当变长参数中包含 nil 则需要用 select 访问变长参数调用 select 时必须传入一个固定参数 selector (选择开关) 和一系列变长参数如果 selector 为数字 n 那么 select 返回它的第 n 个可变实参否则select 只能为字符串 # 这样 select 会返回变长参数的总数包括 nil-- 返回所有参数的和function add(...) local s 0    for i, v in ipairs{...} do -- 表达式{...}表示一个由变长参数构成的数组       s s v    end    return sendprint(add(3, 4, 5, 100)) -- 115​-- 调试技巧 ,类似与直接调用函数 foo 但在调用 foo 前先调用 print 打印其所有的实参function foo1(...)    print(calling foo:, ...)    return foo(...)end​​-- 获取函数的实参列表function foo(a, b, c) endfunction foo(...)        local a, b, c ...end-- 格式化文本 string.format 输出文本 io.write-- 固定参数一定要在变长参数之前function fwrite(fmt, ...)    return io.write(string.format(fmt, ...))endfwrite() -- fmt nilfwrite(a) -- fmt a fwrite(%d%d, 4, 5) -- fmt %d%d , 变长参数 4, 5​for i 1, select(#, ...) do    local arg select(#, ...)   end具名参数lua 中的参数传递机制是具有 「位置性」的就是说在调用一个函数时实参是通过它在参数表中的位置与形参匹配起来的第一个实参的值与第一个形参相匹配依此类推定义通过名称来指定实参可将所有的实参组织到一个 table 中并将这个 table 作为唯一的实参传给函数lua 中特殊的函数调用语法当实参只有一个 table 构造式时函数调用中的圆括号 () 是可有可无的os.rename  -- 文件改名,希望达到的效果 os.rename(old temp.lua, new temp1.lua)-- lua 不支持注释的写法rename {old temp.lua, new temp1.lua}function rename (arg)    return os.rename(arg.old, arg.new)end​x Window{x 0, y 0, width 300, height 200, title Lua, background blue, border true}​-- Window 函数根据要求检查必填参数或为某些函数添加默认值-- 假设 _Window 是真正用于创建新窗口的函数要求所有参数以正确次序传入function Window(options) if type(options.title) ~ string then        error(no title)    elseif type(options.width) ~ number then        error(no width)    elseif type(options.height) ~ height then        error(no height) end    _Window(options.title,   options.x or 0 -- 默认值        options.y or 0 -- 默认值        options.width, options.height,        options.background or white -- 默认值        options.border -- 默认值为 false(nil)   )end    因为目前只学到第五章函数篇所以只有前五章的复习汇总很基础也很重要并且我也把出现关键字和字母的地方加上了 code 块方便大家阅读在此祝愿大家可以做什么事都能够踏踏实实地打好地基。
http://www.huolong8.cn/news/43569/

相关文章:

  • 深圳涂料网站建设外贸数据分析网站
  • 前端做微网站做外贸的数据网站
  • 阿里网站搭建给网站做伪静态
  • 网站关键词方案网站建设难度大吗
  • 导购类网站怎么做的wordpress模板仿新版虎嗅huxiu-new主题
  • 网站建设外包合同7k7k网页游戏官网
  • 备案需要写网站建设方案书室内设计师网上培训班
  • c 做网站教程做票据业务的p2p网站
  • 网站建设有什么优势低代码开发软件
  • 建立网站需要多少钱八寇湖南岚鸿团队广告设计与制作合同范本
  • 大型网站制作公司飞数长沙网络营销网站建设
  • 万寿路网站建设加强网络舆情监测
  • 莱西大型网站建设wordpress 最好的编辑器
  • 建设银行手机登陆网站越南外贸平台
  • diy建站系统wordpress 默认编辑器
  • 网站如何做反爬wordpress网站设置关键词设置
  • 网站备案信息查询wordpress 看不到主题
  • 嘉兴网站建设搭建网站建设项目实训报告书
  • 漳州台商投资区建设局网站大连建站免费模板
  • 眉山网站建设哪家好wordpress rss 抓取
  • wordpress 企业网站没备案的网站收录
  • 网站程序开发成都公司建站模板
  • 杭州的电商网站建设网站建设合作协议文本
  • 培训加盟网站建设自适应网站做1920的
  • 免费做微网站做卡贴的网站
  • 如何做一个导航网站动态门户网站建设价格
  • 企业对做营销型网站有什么优势模拟建设官方网站
  • 公司用dw做网站吗wordpress关闭缩略图
  • 网站维护要学多久优秀免费h5页面制作
  • 国家建设执业注册中心网站如皋网站定制