1. いくつかの追加と三項演算子を修正
私は、このフォームは存在しませんLUAの下にあるように思わ:?のB b>ダウンロードの前に慎重に見ていません。。。私は人生を求めました
通常使います a and b or c 的形式 但是这种形式存在一些问题
https://blog.csdn.net/albertsh/article/details/76248913 詳細三項演算子の最終的な形LUAの下で、なぜ書きました
全三項演算子(a and {b} or {c})[1]
123
2 关于lua的两种调用类方法的区别
a==>类名
a:test() a.test()==》类名a下的类方法test()
テスト():機能
プリント(self.name .. "テスト")
の端を
如果在类方法中的test()如果使用了当前类 比如self 那么在外面调用 这个类方法的时候
a:test()
a.test(a)--这种形式需要传递进当前的类名 不然会出错
3 Lua的面向对象编程相关
http://wiki.jikexueyuan.com/project/lua/object-oriented.html
4 LUAファイルの読み取りおよび書き込み操作を、操作処理
一般的に使用される機能の導入IOのLUAライブラリ(ファイル読み書き動作) https://blog.csdn.net/xufeng0991/article/details/38453499
- ファイルの内容を指定したパスの全体の内容を読み取るには、成功したリターンはnilを返すために失敗読ん 機能のReadFile(パス) ローカルファイル= io.openを(パスは、「rは」)- 見つけることができないと、自動的に作成されない のIFファイルその後、 ローカルコンテンツ= ファイル:リード(「* A 」) io.close (ファイル) を返すコンテンツ 終了 のリターンを nilを 終了 - ラインカバレッジをファイルテーブル要素に書き込まれたファイルとして 機能writetabletofile(パス、TempTableの) のTempTable =((タイプ(TempTableの)== "テーブル「)と {TempTableの} または {{}})[ 1 ] - 場合、私は、第二パラメータに書き込まれていないか、または第2のパラメータは、空のリストテーブルが与えるではない 局所 = tempStrを」 " ローカルファイル - 1.構築とは、ケース内の文字列に強制的にテーブル要素の種類の違いを避けるために書き込まれる ため、K V に ペア(TempTableのを)やる tempStr = tempStr ... のtoString(K).. 「\ N- 」 終了 - 指定したファイルに書き込まれる2 のIF のtoString(tempStr)〜= "" その後、 ファイル = io.open(パス、"W ")- ワットモードでファイルが作成されます自動的に存在しない場合 のIFファイル、次に ファイル:書き込み(tempStr)が io.close (ファイル)を 返し 、他の リターン はnil エンドに 他の リターン はnil エンド エンド - 指定したパスにファイルの内容全体を読み取るためにテーブルのテーブルしかしゼロ値テーブルだけ通過リターンを返し、正常に返さ障害が注意されるべきである読み取る 機能readfiletotable(パス) - TempTableの=((タイプ(TempTableの)==「テーブル」)とのTempTable}または{{{}}) [1] -ケースの書き込みに私は、第二のパラメータではないか、または第2のパラメータは、空のリストテーブルが得ない ローカル TempTableのを= {} ローカル I = 1つの 印刷(パス) ローカル=ファイルio.open(パス、「Rを」)- 見つけることができないと、自動的に作成されない のIFファイル、その後 のためのラインで ファイル:行()ん - :ラインでファイルの行を読み取るためのライン()関数ファイルを使用して [TEMPTABLE I] = ライン 私は = I +は1。 エンド io.close (ファイル) を返すTempTableの 他の リターン はnil エンド エンド - ゼロリターンを失敗したファイルの内容を上書きする 関数のWriteFile(パス、STR) STR = のtoString(STR)または ""- 関数のパラメータを避けるために、所与の文字列または初期値としてゼロでない ローカルファイル= io.open(パス、「W 」)- Wモードを自動的に作成する場合、ファイルが存在しない IFファイル次に ファイル:ライト(STRを) io.close )(ファイルを 返す 他の リターン はnil エンド エンド - 追記ファイル内容 機能appendfileは(パスを、STR) STR = のtoString(STR)または 「」- 関数のパラメータを避けるためには、文字列に与えられたかnilでされていません初期値は ローカルファイル= io.open(パス、「A 」)- モデルの下でファイルが自動的に存在しない場合は作成し たIFファイルは、その後 ファイル:書き込み(文字列) io.close (ファイル)を 返す 他の リターン はnil 終了 終了
- ファイルがTrueFalse返すために存在しているかどうかを決定する 機能fileExist(パス):zjllib ローカルファイル= io.open(パス、「R&LT 」) IFファイル次いで io.close (ファイル) リターン 真の エンド 復帰 falseに 終了
LFS Luaのライブラリファイル操作(ファイルのコピーを作成し、名前の変更を削除するなどの操作をカット) https://blog.csdn.net/v_xchen_v/article/details/78321911
lfs.attributes(ファイルパス[、ANAME])は、パス指定したプロパティの取得
現在の作業ディレクトリを変更するlfs.chdir(パス)、成功した場合はtrueを返し、そうでない場合はnilを加えたエラーメッセージを返す
失敗に成功したリターンパス、現在の作業ディレクトリを取得するためにlfs.currentdirをゼロプラスエラーメッセージ
lfs.dir(パス)反復子(機能)とディレクトリ(ユーザデータ)を返し、ファイルがディレクトリでなくなるまで、各反復子パスに戻り、反復子はゼロリターン
lfs.lockを(FILEHANDLE 、MODE [スタート[、長さ]])
lfs.mkdir(dirnameには)新しいディレクトリを作成し
、既存のディレクトリを削除するlfs.rmdir(dirnameのを)、成功した場合は、trueを返しますそれ以外の場合はnilをプラスのエラーメッセージを返しますが、コードにはつながりません崩壊は単に成功で別のは間違っているコンテンツである2つの値を返します。
5 Luaの例外処理
実際には、全体のコードを避けるために、コードのエラーがクラッシュの原因であるの崩壊を避けるために、これらのエラーコードを処理するための3つの機能に
アサート()
PCALL()
xpcall()
実質的なライブxpcallのPCALL又は含むことができる機能によって与えられる 偽第二の戻り値またはエラーメッセージを含む、単にエラーPCALL又は正常機能が真である最初の二つの実験のxpcall値を返す際に特定のコンテンツを
デバッグライブラリ6lua
https://www.jb51.net/article/66960.htm Luaはビルトインのデバッガの詳細な使用しています
https://blog.csdn.net/mr_oldcold/article/details/85220153 Luaのデバッガ:GETINFOコメント
7 os.time()問題
https://www.cnblogs.com/chevin/p/7011224.html os.time()的问题和解决办法
1.os.clock函数的实现是调用了c语言的函数函数库,实现代码如下:
static int os_clock (lua_State *L) {
lua_pushnumber(L, ((lua_Number)clock())/(lua_Number)CLOCKS_PER_SEC);
return 1;
}
其中有个CLOCKS_PER_SEC
值,在不同平台有着不同的定义,所以一定要注意函数的溢出问题,程序运行时间太长的话,使用clock
有可能会返回负数。
ANSI clock有三个问题:
1)如果超过一个小时,将要导致溢出.
2)函数clock没有考虑CPU被子进程使用的情况.
3)也不能区分用户空间和内核空间.
果然是老语言 很多东西都不够完善
所以clock函数在linux系统上变得没有意义.
2.使用socket.gettime()函数代替os.clock()
--require "socket" –不太清楚这个方法调用有点问题 只能换个方式
socket = require("socket")
for i=1,10 do
print(socket.gettime())--简单说下这个函数 返回的是以秒为单位的时间戳 但是,默认它有4位小数位,
--就是说可以轻松转化为13位的毫秒时间戳 但是注意这个返回值X1000后整体是14位 获取我们需要的13位时间戳
--floor(socket.gettime()*1000) 这样就可以了
print(math.floor(socket.gettime()*1000))--注意获取得是当前系统得时间戳 而不是网络时间戳测试过了
end
8 lua下导入其他文件的2个常见办法
导入模块 require 注意模块的写法有一定要求 就是lua面向对象编程
导入其他lua的代码 dofile 注意dofile “test.lua” 相当于再dofile得位置 执行了一遍test.lua得所有代码
这个办法h很好用 一些常用得自定义函数 或者代码常见的声明区 或者最常见的一些代码初始化区域 都可以单独的放到一个独立lua文件 在别的lua源码中开头直接dofile 当前代码就不用重复的代码初始化之类的重复操作 相当于按键下的import
123