Lua – Lua をインストールしました。 Lua – lua を使用したロボット用の Lua プログラムのインストール
シリーズ全体がどのシステムによっても順序付けされることはありません。 レッスンでは多数の言語構造を順次紹介していくので、3 回目または 4 回目のレッスンではすでに独自のプログラムを作成できるようになります。 私の目的は、言語を最初から最後まで説明するのではなく、自分で言語を学習し、理解を助けることです。言語を完全にマスターしたい場合は、前の記事を読んでください (内容は悪いですが、ロシア語に翻訳されています: http://www.lua.ru/doc/)。 メレザの「ダミー向け」レッスンから教師の教育に移行するのは早ければ早いほど良いでしょう。
わからない場合は、コメントに食べ物を記入してください。私と他の参加者がお手伝いします。
Lua は人気がありますが、習得が難しく、海外向けに解釈され、動的に型付けされた言語プログラミングです。 いいえ、前の命題で言われている言葉の半分も理解する必要はありません。ただ、それが人気があり、ぎこちないものであることを知っておいてください。 要するに、そのシンプルさとディストリビューションのサイズの小ささ (約 150 キロバイト) が人気を博しています。 Lua スクリプトは、ゲームを含む多数のプログラムでサポートされています。 World of Warcraft と S.T.A.L.K.E.R. Lua 言語を活性化します。 私のお気に入りのゲーム エンジンでは、Lua を使用してさまざまなゲームを簡単に作成できます。 ご覧のとおり、Lua は広大な視野を広げてくれます。
まず最初に、プログラミングの中間部分である、Lua で記述したコードを受け入れるプログラムを見つけて作成する、つまりインタープリターを計画する必要があります。 ここには 3 つのオプションがあります。
1. 公式 Lua ディストリビューションを提供しているサイトの 1 つからダウンロードします。
Lua の公式 Web サイトからインタープリターの出力コードをダウンロードできます。 ただし、「バイナリ」セクションの http://lua.org/download.html にアクセスすると、Windows 用のダウンロード ファイルを含むサイト上の投稿を確認できます。 それらの中の一つ: 。 いずれかのアーカイブ (プラットフォームに応じて、Win32 または Win64) を選択し、短いパスを持つディレクトリのどこかに解凍してください: C:\lua。 これからは、Windows を使用していただき、そこにインタプリタが横たわっていることに感謝します。
Linux ベースのオペレーティング システムのユーザーの場合、解決策はより簡単です。パッケージ マネージャーをすぐに使用して、リポジトリから Lua をインストールするだけです。 Debian および Ubuntu の場合は、コマンド apt-get install lua を使用し、Fedora、Red Hat、および同様のディストリビューションの場合は、yum install lua を使用します。 ただし、私を盲目的に信頼せず、オペレーティング システムのソースにアクセスして、それがどのように機能するかを調べてください。
2. オンライン通訳を利用します。
アドレス http://www.lua.org/demo.html を見つけます。 最初からダウンロードすることもできますが、モジュールを触るとオフライン版と戸惑ってしまいます。 オンライン インタープリターの使用は非常に簡単です。テキストの最後にプログラムを入力し、[実行] ボタンをクリックします。 プログラムがログインされ、出力ウィンドウにプログラムのバージョンと、発生したエラーに関する情報が表示されます。
3. Vikorystuvati IDE。
たとえば、ZeroBrane スタジオ: http://studio.zerobrane.com/。 その他 - インターネットで検索してください。
現在、Lua には 5.1 と 5.2 の 2 つの異なるバージョンが使用されています。 私は残りのバージョンであるバージョン 5.2 に焦点を当てていますが、残りのバージョンはまだ拡張されているため、バージョン 5.1 との重要な違いを必ず指摘します。 お話しする前に、ご存知のとおり、Lua 5.1 では作成者によるコードが Lua 5.2 と同じ時点で変更されています。
=== レッスン 1 ===
それでは見てみましょう。 サードパーティのファイルから隔離されたフォルダーに main.lua ファイルを作成し、そこに書き込みます。
200?"200px":""+(this.scrollHeight+5)+"px");">
-- main.lua --
print("ハローワールド!")
その後、コマンド ラインで実行します (追加の CD 用に main.lua のあるディレクトリに移動することを忘れないでください)。
200?"200px":""+(this.scrollHeight+5)+"px");">
> C:\lua\lua.exe main.lua
Lua インタープリターは次のようになります。
200?"200px":""+(this.scrollHeight+5)+"px");">
こんにちは世界!
原則として、誰の痕跡が発見されるべきでしたか。 プログラムは print 関数を呼び出しました。 print 関数は多数のパラメータを受け取り、それらを画面に表示します。 「Hello world!」という列 (シンボルの槍) を渡した相手のお尻。 同じように成功すると、パラメータとして渡すことができます。
200?"200px":""+(this.scrollHeight+5)+"px");">
print(8) - 10 番目の数値
-- ヴィヴェーダ: 8
Print(0xDEADBEEF) - 16 番目の数字
-- ビヴェダ: 3735928559
Print("0xDEADBEEF") - ただし、数値ではなくシーケンスです。 足が痛くなってきていますか?
-- 表示: 0xDEADBEEF
Print(1.35e-4) -- 浮動小数点数 (小数) を含む数値
- ビベデ 0.000135。 1.35e-4 トレースは「1.35 を乗算したもの」とみなされます。
-誰も知らないように、第4段階のマイナス10まで。
印刷((198*99)-3*500 + 14/88) - viraz
-- Vivede ビラスを意味します: 18102.159090909。 厄介な代替品
- 卓上電卓!
Print(198/7, "fertilizer", 2^9) - 十分な量のパラメータの数
- のように。 スキンの意味がサインで区切られて表示されます
- タブ:
-- 28.285714285714 肥料 512
・肥料に足が引っかからないように注意してください!
Print(1.35) - 10 番目の分数 1.35 ではなく、2 つの数値です。
-- カンマはパラメータを区切るために使用されます。
- ビヴェデ:
-- 1 35
「-」記号は、美しさのために挿入された単なるダッシュ記号の模倣ではありません。 Lua の「--」記号はコメントを示します。コメントは、インタプリタによって無視されるプログラマへのヒントであり、コードを理解しやすくすることを目的としています。 プログラムに次のように書いてみることができます。
200?"200px":""+(this.scrollHeight+5)+"px");">
- print("何も")
インタプリタはこれがコメントであると考え、命令を終了しません。
皆さん、注意してください: 1 列だけかぎ針編みしたい場合は、腕を使わずに次のように文字プリントを書くことができます。
200?"200px":""+(this.scrollHeight+5)+"px");">
print "文字列を 1 つだけ"
もちろん、便利さには疑問がありますが、それが可能であることを尊重してください。 同時に、次のようなコメントは受け入れられません。
200?"200px":""+(this.scrollHeight+5)+"px");">
print 2 - 単語なし、2 - 行ではありません。
2*2 + 6 を出力します - もう質問しません
Str = "文字列!!" -- 変更された str 値「string!!」を指定しました。
-- 以下の変更点についてお読みください
print str - 表現する必要すらありません。
次の各エピソードでは、プログラムの使い方が簡単です。 したがって、「括弧なし」の呼び出し元では、関数名の後には一連のリテラル (つまり、一連の文字が脚部に配置されます) だけを続けることができ、他には何も続けることができません。 近い将来、この特殊性についてはもう少し後でお話します。そうでない場合は、すぐに教えてもらいます。
優れたソフトウェアであれば、次のオプションを使用できます: あらゆる種類のデータを保持できる小さなコンテナー。 Lua では、次のように行う必要があります。
200?"200px":""+(this.scrollHeight+5)+"px");">
<имя_переменной> = <выражение>
例えば:
200?"200px":""+(this.scrollHeight+5)+"px");">
star = 8 -- 変更可能な星は数字の 8 を保持します。
wars = "owl" - ヘビ戦争では - "owl" の行
ジェダイ = 42/2 - 蛇紋岩のジェダイの番号は 21
ルーク = スター * ジェダイ -- 蛇紋岩のルークの数字は 168 (つまり、21 掛ける 8)
変更の値とその背後にある式も画面に表示できます。
200?"200px":""+(this.scrollHeight+5)+"px");">
プリント(スター、ウォーズ、ジェダイ、ジェダイスター+ルーク)
- ビヴェデ:
-- 8 フクロウ 21 181
有名なスターや戦争をだまそうとしないでください。「フクロウ」に 8 を加えようとしても、何も良いことはありません。
お気づきかもしれませんが、変更は実際には次のようなものになる可能性があります: 数字から始まるわけではありません。 真剣に言うと、名前の印刷で変更をアナウンスすると、印刷機能が動作を停止するため、印刷は音声による変更に強制的に応答することになります。 変更可能な名前として vikorystovuvat によってブロックされている単語のグループもあります。これらは、私たちがまだ学習していない言語のキーワードですが、同時に驚くべきものです。
200?"200px":""+(this.scrollHeight+5)+"px");">
そしてbreak do else elseif end
関数 goto の場合は false
ローカル nil ではない、または戻り値を繰り返す
その後はしばらくの間は true
これらの名前のいずれかを変更すると、プログラムからの恩赦が与えられ、それに対処する必要はなくなります。 思い出してもらいたいのですが、Lua 5.1 には goto キーワードがありません。そのように呼び出すことも、むしろそのように機能しないこともできます。
また、重要な人物の名前が登録される可能性があることを確認してください。 Tse、Shcho Foo、Foo、Foo I Foo - Chotiri Rizni Zmіnni、Tom Yakshcho Viはマリミ・リットルの蛇であるiziを書き、彼らはyogo greatを書きました、そして、すべてについてSchwidsha、プログラムにはprytsyuvatiorelyがありませんでした。
ここで、重要な点が 1 つあります。耐えられない変化に至るまで、あなたは時々、邪悪なやり方で何をするつもりですか? 他のほとんどの言語では慈悲は必要ありませんが、Lua ではこの状況は許容されます。 未知の変化が実際にどのようなものであるかに関係なく、次のように解釈されますが、意味は同じです なし. なし- この言葉を覚えておいてください! - 「何もない」を意味する特別なタイプの Lua。 これはゼロではなく、空の行でもありません (行は「」のように見えます。画面に表示してみてください)。単に何もありません。 このモデルを考えてみましょう。2 人がいて、1 人は銀行口座を持っていますが、小銭を持っておらず、もう 1 人の銀行口座は空です。 Lua で言えば、1 つは為替レートで 0 ドル、もう 1 つは為替レートで 0 ドルであることが重要になります。 なし。 それはドルではなく、単純に なし。 私があなたを誤解させていないことを願っています。
たとえば、次のようなプログラムを実行してみてください。
200?"200px":""+(this.scrollHeight+5)+"px");">
-- main.lua --
foo = "バー"
print(foo、baz)
- ビヴェデ:
--バーゼロ
したがって、変数baseには値がありませんが、値がnilであることが重要であり、print関数はこれを理解して、行「nil」の形式で画面に表示します。 Lua には、変更の値をチェックする優れた方法があります。変更の値が nil に等しくない場合は、沈黙します。 一方、nil に等しい場合は、違いを明確に表現できます。
200?"200px":""+(this.scrollHeight+5)+"px");">
Cool_var=nil
だから、臆病になることもできるし、一見愚かに思われたいと思っても、それでも臆病になることはできるのです。 今後のレッスンでは、誰が行っているのかを確認し、単独で同じように作業を開始します。 当然、イノディです。
nil には注意してください: nil を上書きすることはできますが、それを使って算術演算を実行することはできません! print(nil) がそれを回避する場合、スクリプト 99+nil の構築は、ご希望どおり、shob 99 の方が優れています。 + nil を追加すると 99。信じてください、私はそれを知ったとき恥ずかしかったです。
まとめ:
1. 印刷機能、その機能、および弓を使わずに正しく入力する方法について学びました。
2. 私たちは、change の発音の仕方、change の名前に含まれる表現 (3 つでも) の数え方を学びました。
3. 私たちは nil について学び、その神秘的な謎を受け入れ、将来それに関係する人々に夢中になりました。
熱心で知識を深めたいと思っている人たちにとって、私は正しいと言えます。自分に能力があると感じている場合に避けられること:
1. 好きな曲の曲を表示するプログラムを作成します。
2. 新しい表現を導入してみます。 アクションが機能する理由と機能しない理由を理解してください。 求めてもいないものを求めて叫ぶ彼らの慈悲に驚嘆してください。
200?"200px":""+(this.scrollHeight+5)+"px");">
2 + "文字列";
6 + "14";
「ボックス」 - 「ボックス」;
1 *「11b」
"148" * "1e6";
3. 2 つの値を交換するプログラムを作成します。 トブト:
200?"200px":""+(this.scrollHeight+5)+"px");">
a = 6502
b = 8086
a が 8086、b が 6502 になるように計算します。これを行うには、3 番目の変更を作成し、いくつかの簡単な再配置を行います。 交換前に print(a,b) をクリックし、交換後に print(a,b) をクリックして、コマンドが正しいことを確認します。
Lua for Windows (LfW) - リオデジャネイロ カトリック大学の Tecgraf 開発者によって開発された、インタープリタ型言語プログラム。 詳細な通訳は、私の Sy の公開テキストでどこでも見ることができます。
機能、イデオロギー、実装が JavaScript に近いため、Lua protea はより高密度で柔軟性に富んだ構造を特徴としています。 Lua は、明示的な方法でオブジェクトのクラスの概念を損なうことを望んでいませんが、乗算を含むオブジェクト指向プログラミングのメカニズムは、演算の反転もサポートするメタテーブルを使用して簡単に実装できます。 オブジェクト指向プログラミング モデルが実装されています (JavaScript のプロトタイプ)。
この言語は、Adobe Photoshop Lightroom パッケージの新しいグラフィカル インターフェイスなどで複製されるソフトウェアの作成に広く使用されています。 また、世界のプログラミングは、学習の容易さ、コードの記述速度、学習の容易さによって人気を博し、多くのゲーム (たとえば、World of Warcraft) で拡張されました。
Lua はマルチパラダイム言語と呼ぶにふさわしい言語です。 これは、単一のパラダイムのプログラミングを確実にする複雑で厳格な仕様のセットではなく、さまざまなタスクに対応するために拡張できる基本メカニズムの小さなセットを提供します。
そのため、Lua ではフォールバックが明確にサポートされており、追加のメタテーブルを使用して保護を簡単に実装できます。
頻繁に飲みきる必要があるので、これは食べ物です。 まあ、インストールは本当にシンプルで簡単なので、素晴らしいです。 そこでは取り組むべきことは何もないとも言えます。 エール、まだ食糧が足りないので、設置について少しお話しましょう。
ルアをインストールしました。 ザヴァンタジュエモ
インストール前に最初に行う必要があるのは、公式 Web サイトから出力レコードをキャプチャすることです。 もちろん、インストールするには最新バージョン (現時点では lua 5.1.4) が必要です。 ダウンロード後、lua ソース ファイルを別のフォルダーに解凍する必要があります。
ルアをインストールしました。 編集。
2 つのコンパイル オプションがありますが、原則としてまったく違いはありません))) 1 つ目は、Visual Studio コマンド プロンプトを使用したコンパイルです。
- Visual Studioの起動
- Vikonuemo ツール -> Visual Studio コマンド プロンプト
- Lua フォルダー、etc ディレクトリに移動します。 軸は次のようになります: cd D:/mylibs/lua-5.1.4
- Lua コンパイル スクリプトを起動します: etc/luavs.bat
- 必要なファイルを持ち去りました lua.exeі ルアック.exe
Visual Studio を起動しない別の方法:
- file-mendezhi (特に私が使用しているファイル) がある場合は、de_lois/etc/ フォルダーに移動します。
- ファイルは編集可能です。最初の行を次のように入力します。「path_to_visualstudio/VC/bin/vcvars32.bat」を呼び出します。
- 別の行「cd..」を追加し、ファイルを保存します。
- ブラウザの起動とアンインストール
ルアをインストールしました。 アクセス
事前に lua スターを起動できるように、%PATH% にそれらを追加する (そこに移動する) 必要があります。 あなた自身が奇跡的にお金を稼ぐ方法を知っていると思います。 いずれにしても、これらのファイルは必要ありません。なぜなら... 私たちはプログラム内で vikorista lua を実行する予定であり、プログラムを閉じるのは好きではありません。 後は自分自身を尊重してください Luaのインストール完了すると、Visual Studio の liba にパスを登録できなくなります。
ルアをインストールしました。 静的リンク。
Vikorist Lua などのスキン プロジェクトで lua.dll を扱わなければならない人を除外することが特に重要です。プログラムはそれなしでは動作しないからです。 そして、悪臭を持続させるためには、ブロワが私たちのプログラムに静的にリンクする必要があるでしょう。 価格を把握するのは非常に簡単です。
- Visual Studio には、「LuaLib」という新しいプロジェクト Win32Project があります。
- プロジェクト タイプは「静的ライブラリ」に設定され、「プリコンパイル済みヘッダー」チェックボックスが有効になり、「終了」をクリックします。
- lua.c と luac.c を含むすべてのファイルを project.h i.c に追加できます。
- コンパイラーが警告を表示しないようにするために、_CRT_SECURE_NO_WARNINGS をプロジェクト設定 (Protec/Propreties/Preprocessor) に追加します (これをリリース バージョンとデバッグ バージョンの両方で作成することを忘れないでください!!!)
- 設定されたリンク (Project/Properties/Librarian/General/OutputFile) で、任意のライブラリ名を指定できます。 リリースには lua.lib を、デバッグには lua-debug.lib を指定しました。
- デバッグ バージョンとリリース バージョンをコンパイルします。 私たちは私たちのニーズを奪います
- Visual Studio にそれらへのルートを登録します。
ルアをインストールしました。 再検証。
すべてが動作していることを確認してみましょう。 新しいプロジェクトを作成しています (Win32 コンソール プロジェクトを作成しました)。 Lua インクルードを追加しましょう。
そして main() 自体が展開されます。
int _tmain(int argc, _TCHAR* argv ) ( lua_State * L; L = lua_open() ; // スタックの作成 luaL_openlibs(L) ; //標準ライブラリを接続する int status = luaL_loadfile(L, "test.lua"); // ファイルを所有する /* スタンス: [-1]メイン<--top of the stack */ if (ステータス) ((void) fprintf (stderr, "ファイルが見つかりません \n"); 1 を返します。 ) int 結果 = lua_pcall(L, 0, LUA_MULTRET, 0); _getch(); 0を返します。 ) |
リンカー (プロジェクト/プロパティ/リンカー/入力/追加の依存関係) を設定するときは、ライブラリ (リリース用の lua.lib とデバッグ用の lua-debug.lib) を忘れずに追加してください。 コンパイル可能。 Lua スクリプトを使用してテスト ファイルを作成しています。
Lua のスクリプトを作成する
Lua で書かれたこのスクリプトには、勝利から始まる特別な機能はありません。 スクリプトは、最初の命令で始まる一連のコマンド (命令) として単純に見ることができます。
スクリプトは、1 つのコマンドだけで構成される単純なものもあれば、数十、数百、数千の命令に対応できる複雑なものもあります。 ステップバイステップの指示はドット (;) で区切ることができます。 ただし、これは必須ではないため、以下のコードはすべて構文的には正しいです。
Lua での変更の操作
スクリプト プロセスの値を保存するために変更が行われます。
Luaのミニオンの名前
Lua 変数の名前 (識別子) には、数字で始まらない文字、数字、椅子の記号を任意に組み合わせて使用できます。
敬意を取り戻す
Lua 言語では文字のレジスタが分離されているため、abc、abc、および ABC は異なる名前になります。
表の一番下には、私の Lua によって予約されており、名前に置き換えることができない単語があります。
そして、break do else elseif
関数 if の場合は false を終了します
ローカル nil ではない、または
return、次に true を繰り返す
さらに、付加記号で始まり、その後に大文字が続く名前 (_VERSION など) もすべて予約されています。
Lua にはどのような変更がありますか?
Lua の変更はグローバルまたはローカルのいずれかになります。 その変更がローカルなものとして認識されないという理由だけで、それはグローバルに尊重されます。
Lua における世界的な変化
グローバルな変更は、最初の値を割り当てた時点で表示されます。 最初の値が与えられるまで、グローバル変更に対する変更は nil を返します。
MsgBox(tostring(g)) --> nil
MsgBox(tostring(g)) --> 1
グローバルな変更は、スクリプトの中間がアクティブになるまでアクティブであり、その中間に組み込まれているすべての Lua コードで使用できます。
必要に応じて、値を nil に設定するだけで、グローバル値を明示的に削除できます。
g = 1 - 1 の値に基づいて g のグローバル変更を作成します
g = nil - グローバル値 g が表示されます
MsgBox(tostring(g)) --> nil
すべてのグローバル変更は、グローバル テーブルと呼ばれる元のテーブルのフィールドです。 このテーブルは、グローバル変更 _G を通じて利用できます。 グローバルシャープニングのフィールドにはすべてのグローバル変更 (_G を含む) が含まれるため、_G._G == _G.
ローカル Lua の変更
ローカルの変更がキーワード「ローカル」の検索の原因であるかどうか。 スクリプトを使用してローカルの変更を音声で伝えることができます。 この特典には、交換可能な cob 価値の割り当てが含まれる場合があります。 意味が与えられない場合は、nil を変更します。
ローカル a - 音声ローカル変更 a
ローカル b = 1 - ローカル変更 b がアナウンスされ、値 1 が割り当てられます。
ローカル c、d = 2、3 - ローカル変更 c と d、値 2 と 3 を与えます
局所的な変化の可視領域は衝撃後に始まり、ブロックの残りの部分をカバーします。
注記
変更の可視領域は、その変更に保存されている値にアクセスできるプログラム コードのセクションです。
ブロックの下では次のことを意味します。
構成の本体 (if-then、else、for、while、repeat);
関数の本体。
キーワード do...end を含むコード断片。
ローカル変更がいずれかのブロックの位置に割り当てられている場合、スクリプトの残りの部分の可視領域が拡張されます。
local i = 1 – スクリプト内で i をローカルに変更します
私がいる間<= a do - цикл от 1 до 5
local a = i^2 - while ループの途中の変数およびローカル
MsgBox(a) --> 1、4、9、16、25
メッセージボックス(a) -->
私が 5 より大きい場合
local a - 変更し、途中で local を変更します。
メッセージボックス(a) --> 10
MsgBox(a) --> 5 (ここではグローバル a にスケーリングします)
local a = 20 - 変更可能、途中でローカル do-end
メッセージボックス(a) --> 20
MsgBox(a) --> 5 (ここではグローバル a にスケーリングします)
敬意を取り戻す
可能であれば、グローバル変更ではなくローカル変更を使用することをお勧めします。 グローバル名前空間の消滅を許可すると、生産性が向上します (Lua のローカル変数へのアクセスはますますグローバル変数に制限されています)。
ティピ・データ・ルア
Lua 言語はどのような種類のデータをサポートしますか?
Lua は次のデータ型をサポートします。
1. なし(何もない)。 変更可能な値の存在を示します。 単一値のこのタイプの表現は nil です。
2. ブール値 (論理値)。 このタイプには、false (ナンセンス) と true (真実) の値が含まれます。
すべての論理演算において、値 nil は false として扱われます。 数値 0 や空の行を含む他のすべての値は true として扱われます。
3. 番号。 数値の表現として機能します。
数値定数では、拘束のない小数部と、記号「e」または「E」で指定される拘束のない 10 次を指定できます。 整数値定数は、接頭辞 0x を使用して 16 進数で指定できます。
有効な数値定数を入力してください: 3、3.0、3.1415926、314.16e-2、0xff。
4. 文字列(行)。 列をファイリングするのに役立ちます。
文字列値は、シングルレッグまたはダブルレッグに配置された文字のシーケンスを確認することで指定されます。
a = 「シーケンス」
b = 「これは別の行です」
折りたたみ脚に配置された行は、記号「\」(バックスラッシュ) で始まる、制御する C のようなシーケンス (エスケープ シーケンス) として解釈できます。
\b (スペース)、
\n (行シフト)、
\r (キャリッジの回転);
\t (水平集計)、
(可逆スラッシュ);
"" (足);
(片足)。
敬意を取り戻す
追加のエスケープ シーケンスを使用して、行内の文字を独自のコードで表すこともできます。
de ddd - シーケンスは 3 桁以下です。
指定された列の足には、吊り下げ式の四角いアームを取り付けることもできます。
追加の四角いアームの後ろに指定された行を使用すると、すべてのエスケープ シーケンスを無視できるため、説明どおりに行が作成されます。
local a = [] (Lua では)]=]
「Lua の行 [] の値」という用語があります。
5. 機能。 Lua 関数は、変更を記述したり、パラメータとして他の関数に渡したり、新しく追加された関数の結果として返すことができます。
6.テーブル(テーブル)。 テーブルは「キー」と「値」のペアのセットであり、フィールドまたはテーブル要素と呼ばれます。 テーブルフィールドのキーと値は、nil 以外の任意の型にすることができます。 テーブルには固定サイズがありません。いつでも十分な数の要素をテーブルに追加できます。
レポート - 記事「Lua でのテーブルの作成」
7. ユーザーデータ (Koristuvatsk データ)。 Є 特殊なタイプのデータ。 Lua スクリプトで値を直接作成または変更することはできません。
ユーザーデータは、使用するプログラム、または S によって作成されたライブラリで作成された新しい型を表すために使用されます。たとえば、CronosPRO の Lua 拡張ライブラリは、この型を使用して次のようなオブジェクトを表すために使用されます。
貢ぎ物銀行 (銀行クラス);
基本データ (Base クラス);
次に、レコード (クラス Record) を使用します。
8. スレッド。 ヴィコナニヤはその流れに従う。 これらのスレッドはオペレーティング システムとは一切関係がなく、Lua 自体の機能によって包括的にサポートされます。
Lua で変更タイプを設定するにはどうすればよいですか?
Lua は明示的なデータを変更タイプに渡しません。 変更タイプは、変更値の割り当て時に設定されます。 変更はすべて、任意の型に値を割り当てることができます (以前にどの型の値が割り当てられていたかに関係なく)。
a = 123 – a をタイプ番号に変更します
a = "123" - 型が文字列に変更されました
a = true – 現在のタイプはブール値です
a = () - これで型テーブルが変更されました
敬意を取り戻す
テーブル、関数、スレッド、およびユーザーデータ型を変更すると、データ自体は保存されませんが、メッセージは他のオブジェクトに保存されます。 オブジェクトが与えられ、引数として関数に渡され、オブジェクトのコピーの結果として関数から返された場合、オブジェクトはコピーされず、オブジェクトに送信されたメッセージのみがコピーされます。
a = () – テーブルを作成します。 テーブルを変更します
b = a - a と同じテーブルを使用するように b を変更します。
a = 10 - インデックス 1 のテーブル要素には値 10 が割り当てられます。
メッセージボックス(b) --> "10"
MsgBox(a) --> "20"
他のデータには中央値以外の値があります。
MsgBox(a) --> "20"
メッセージボックス(b) --> "10"
Lua で変更タイプを判断するにはどうすればよいでしょうか?
変更によって保存される値の種類は、追加の標準関数の種類を使用して指定できます。 この関数は、型の名前 (「nil」、「number」、「string」、「boolean」、「table」、「function」、「thread」、「userdata」) と一致するように行を回転します。
t = タイプ (「文字列」) - t і 「文字列」
t = タイプ (123) - t 古い「数値」
t = type (タイプ) - t 古い「関数」
t = type (true) - t は古い「ブール値」です
t = タイプ (nil) - t は古い "nil"
t = タイプ (CroApp.GetBank()) - t 古い「ユーザーデータ」
Lua で変更タイプを変更するにはどうすればよいですか?
Lua は、必要に応じて数値を行やパターンに自動的に変換します。 たとえば、系列値が算術演算のオペランドである場合、数値に変換されます。 そこに落ち着いた同じ数値が、最終的に行になったところで行に変換されます。
a = "10" + 2 - a は 12 に等しい
a = "10" + 2 - a は "10 + 2" と同様です
a = "-5.3e-10"*"2" - a は古い -1.06e-09
a = 「行」 + 2 – ポミルカ! 「行」を数値に変更することはできません
標準の tostring 関数を使用すると、任意の型の値を行に明確に変換できます。
a = tostring(10) - a は古い「10」です
a = tostring (true) - a は古代の「true」です
a = tostring (nil) - a は単なる「nil」です
a = tostring (( = "このフィールド 1")) - a は "テーブル: 06DB1058" より古いです
正面から見ると、テーブルではなく文字列への関数が再作成されていないことがわかります。 これは、追加のレンダリング関数を使用して再作成できます。
a = レンダリング (10) - a は「10」と同じです
a = render (true) - a は古い「true」です
a = レンダリング (nil) - a は単なる「nil」です
a = render (( = "このフィールド 1")) - a one "( = "このフィールド 1")"
数値の値を明示的に変更するには、標準の tonumber 関数を使用できます。 値が数値 (または数値) に変換できる行内にある場合、関数は変換結果を回転し、それ以外の場合は nil を回転します。
a = tonumber (「10」) - a は古い「10」です
a = tonumber("10"..".5") - a は 10.5 より古い
a = tonumber (true) - a は古い「nil」です
a = tonumber (nil) - a は古い "nil"
Lua でコメントを投稿する
Lua コメントは 2 つのマイナス記号 (--) で始まり、行の終わりまで続きます。
ローカル a = 1 - 単一行のコメント
記号「--」の直後に 2 つの開いた四角腕 ([[) があるため、コメントは複数の順序で 2 つの閉じた四角腕 (]]) まで続きます。
ローカル a = 1 - [[ リッチオーダー
コメント ]]
コメントのヒンジアームは凹んでいてもよい。 混同しないように、腕の間に等号 (=) を挿入します。
ローカル a = [[クロノス社]] - [=[
local a = [[クロノス社]]
「=」記号の数はネストを意味します。
local a = [=[Lua 言語の行 [] の値]=] --[==[
local a = [=[Lua 言語の行 [] の値]=]
Lua で一般的な操作
Lua で作成されたウイルスは、次の種類の操作を実行できます。
1. 算術演算。
Lua は次の算術演算をサポートしています。
+ (アダバンニャ);
- (vіdnіmannya);
* (乗算);
/ (ポディル);
^ (階段にいるズヴェデンヤ);
%(部門ごとの剰余金)。
敬意を取り戻す
算術演算は数値までと級数まで定数であり、常に数値に変換されます。
2. レベリング作業。
Lua では、値を等化する次の操作が許可されています。
== (リブノ);
~= (比較しないでください);
< (меньше);
> (詳細);
<= (меньше или равно);
>= (複数)。
敬意を取り戻す
等化操作では、最初に true と false の論理値がローテーションされます。
行内の数値を並べ替える規則 (同様に) は調整時には適用されないため、式「0」 == 0 の結果は false になります。
3. 論理演算。
論理演算の前には次のようなものがあります。
そして(より論理的には私は)。
and 演算は、値 false と nil を持つため、最初のオペランドをローテーションします。 もう 1 つのケースでは、操作により別のオペランドがローテーションされます (このオペランドは同じタイプである可能性があります)。
a = (nil および 5) - a は古い nil です
a == (偽および 5) - a は偽です
a == (4 および 5) - a は 5 より大きい
または (ABO よりも論理的)。
or 演算は、最初のオペランドが false または nil でない場合はそれを回転し、それ以外の場合は他のオペランドを回転します。
a == (4 または 5) - a は 4 より大きい
a == (false または 5) - a は 5 より大きい
敬意を取り戻す
論理演算と および は、任意の型の値を回転できます。
論理演算 and および or は、回転方法に応じて別のオペランドの値を計算します。 これが必要ない場合、他のオペランドは評価されません。 例えば:
a == (4 または f()) - 関数 f() は呼び出されません
そうではありません(より論理的にはそうではありません)。
操作が true または false になることはありません。
4. 連結操作。
行を連結(統合)するには、演算(2点)を使用します。
a = "Kronos."-".."Inform" - a を変更すると、"Kronos-Inform" の値が削除されます。
敬意を取り戻す
1 つまたは 2 つのオペランドが数値の場合、それらは行に変換されます。
a = 0..1 – a を変更して値「01」を減算します。
5. 2倍の演算。
Lua には dovzhin 操作 # があるため、これを使用して dovzhin 行を削除できます。
a = 「行」
len = #a - len が 6 を超える
len = #「その他の行」 - len 10
敬意を取り戻す
追加の演算 # を使用して、配列の最大インデックス (またはサイズ) を決定できます。 このレポートは記事「Working with Arrays in Lua」からのものです。
Luaでの操作優先度
Lua 言語では、各操作は現在の優先度に従って (変更順に) 実行されます。
2. # - ではありません (単項)
6. < > <= >= ~= ==
フォームからスクリプトをクリックします
各フォーム (フォーム挿入を含む) には相互に関連付けられたスクリプトがあり、このスクリプトには、このフォームとその要素を処理する関数が含まれることを目的としています。
フォームが起動されると、そのスクリプトがライトからダウンロードされます。 要素の形式ごとに、システムは対応するハンドラー関数を呼び出します。
フォーム スクリプトは、モジュール関数の呼び出しを妨げたくありませんが、実際にはモジュールです。 これは、local キーワードのないスクリプト フォームに欠落している変更はグローバル定義の影響を受けず、スクリプトの途中でのみ使用できることを意味します。 他の形式のスクリプトから値にアクセスできるようにする必要がある場合、このトレースはグローバル テーブル _G に明確に表示されます。
ローカル a = _G.var
演算子 (命令) のブロック
主な Lua 演算子は次のとおりです。
見栄っ張り。
精神オペレーター。
サイクルを組織するオペレーター。
演算子のグループを 1 つのブロック (倉庫演算子) に結合して、追加の設計終了を実現できます。
do - コブブロック
<оператор1>- ボディブロック
<оператор2>
<операторN>
end - ブロックの終わり
このブロックにより、ローカルな変更を行うことができる新しい可視領域が開きます。
a = 5 - グローバル値 a
local a = 20 - do-end の途中でローカル値が示されます。
メッセージボックス(a) --> 20
MsgBox(a) --> 5 (ここではグローバル a にスケールアップされています)
Luaの代入演算子
これにより、変数またはテーブルのフィールドの値が変更されます。 最も単純に言うと、注意は次のようになります。
a = 1 - 変数 a には値 1 が与えられます
a = b + c - 変数 a は変数 b と変数 c の合計値に代入されます。
a = f(x) - 変数 a には、関数 f(x) によって回転された値が割り当てられます。
Lua は、代入演算子の下に多数の変更が存在する限り、複数の代入を許可し、代入演算子の下に記述された式の数の値を削除できます。
a、b = 1.5 * c - a は 1 より大きい。 b より高価な 5*c
変化の値が下限値よりも大きい場合、変化には nil が与えられます。
a、b、c = 1、2 - a は 1 より大きい。 b より高価な 2; c 1 ゼロ
意味が大きく、変更可能性が低い場合、「zaiv」の意味は無視されます。
a、b = 1、2、3 - a は 1 より大きいです。 b より高価な 2; 値 3 はビコリスタンではありません
複数の代入を使用して変数間で値を交換できます。
a = 10; b = 20 - a は 10 より大きく、b は 20 より大きい
a、b = b、a - ここで、a は 20 より大きく、b は 10 より大きくなります。
ルアの精神オペレーター(if)
if ステートメントは、与えられた心の真実性を検証します。 実際には、コードの then キーワードに続く部分 (then セクション) が終了します。 それ以外の場合は、else キーワードに続くコードが追加されます (else セクション)。
a > b の場合
return a – a が b より大きい場合、a を回転します
b を返す - それ以外の場合 - b を回転する
elseセクションは不要です。
もし< 0 then
a = 0 - a が 0 未満の場合、値 0 を割り当てます。
ネストされた if ステートメントを elseif 構造に置き換えることができます。 たとえば、ターゲティング コードは次のとおりです。
以下に置き換えると分かりやすいでしょう。
「Ivan」を返す - a が 1 に関連しているように
elseif a == 2 then
「ペトロ」を返す - jakscho a Dorіvnuє 2
elseif a == 3 then
「Sergiy」を返す - 古代の 3 のように
return 「そんな墓石はありません」 - yakscho a - たいていの場合
Luaのwhileループ
while 演算子は、切り替えを伴うループを編成するために使用され、次の形式を取ります。
その間
… - サイクルの本体
肌の反復サイクルの前に心をチェック
その結果、ループが終了し、シーケンスが while 演算子の後の最初の演算子に渡されます。
心が真実であると、体はサイクルを終了し、その後すべての行動が繰り返されます。
while i > 0 do - 10 から 1 まで循環します
t[i] = "フィールド" ..i
a = (3、5、8、-6、5)
while i > 0 do - 配列には負の値があります
もし a[i]< 0 then break end - если найдено, прерываем цикл
i = i - 1 - それ以外の場合は、次の要素に進みます。
私が 0 より大きい場合
MsgBox("負の値のインデックス: "..i)
MsgBox (「配列は負の値を削除しません」)
注記
Lua の postumova によるループ (繰り返し)
ポストオーダー関数を使用してループを編成するための繰り返し演算子は次のようになります。
… - サイクルの本体
それまで
サイクルの本体はドティ、つまり心のドキで終わります
配列 a の値が仮定され、合計を重み付けしすぎることはできません 10
a = (3、2、5、7、9)
合計 = 合計 + a[i]
合計が 10 を超えるまで
MsgBox ("積み重ねられた"..i.." 要素。合計は "..sum")
完了前にループを終了するには、break ステートメントを使用します。
注記
ブレーク演算子の特殊性については、「ブレーク演算子とリターン演算子」の記事で報告します。
Lua の for 演算子を使用したループ
for 演算子はループを編成するために使用され、次の 2 つの形式の表記が可能になります。
シンプル (数値);
拡張(ユニバーサル)。
for ステートメントの単純な形式
演算子の単純な形式は次のようになります。
var = exp1、exp2、exp3 の場合は実行します
… - サイクルの本体
サイクル全体は、exp1 から exp2、続いて exp3 の間隔で変更サイクル (薬) var のスキン値として計算されます。
注記
クロックは気にすることはできません。 そして、ここでは vin は 1 に等しいとみなされます。
for i = 1, 10 do - サイクル 1 で 1 から 10 までサイクルします
MsgBox("私は"..i)
for i = 10, 1, -1 do - サイクル -1 で 10 から 1 までサイクルします
MsgBox("私は"..i)
敬意を取り戻す
式 exp1、exp2、および exp3 は、サイクルの開始前に 1 回だけ計算されます。 したがって、以下のアプリケーションでは、ループの上限を計算するために関数 f(x) が 1 回だけ呼び出されます。
for i = 1, f(x) do - 1 から関数 f() によって回転された値まで循環します
MsgBox("私は"..i)
ループへの変更はループ演算子に対してローカルであり、完了後に割り当てられることはありません。
for i = 1, 10 do - 1 から f() 関数によって回転された値まで循環します
MsgBox("私は"..i)
MsgBox (「ループ i を抜けたら、一つだけ。」.i) - 不正解です。 私はゼロです
敬意を取り戻す
サイクル変更値はサイクルの途中で変更することはできません。そのような変更の効果は転送されません。
完了前にループを終了するには、break ステートメントを使用します。
a = (3、5、8、-6、5)
for i = 1,#a do - 配列内の負の値を検索します
もし a[i]< 0 then - если найдено...
Index = i - 見つかった値のインデックスが保存されます。
ブレーク - そしてサイクルが中断されます
MsgBox("負の値のインデックス: "..index)
注記
ブレーク演算子の特殊性については、「ブレーク演算子とリターン演算子」の記事で報告します)
Lua は、C++ でコンパイルされたアプリケーションのスクリプト作成に使用できるツールとして定評があります。 同時に、Lua は完全に独立した言語であり、独自のインタプリタ、モジュールを作成する機能、多数のライブラリを備えており、そのため言語のサイズが類似言語の中で最小になっています。 簡単に言うと、Perl、Python、その他の高度なプログラミングと同じプログラムを作成するためのすべてが揃っています。
Lua に関する基本的な議論をいくつか挙げます。
- - プログラムは Windows と Linux の間で簡単に移植できます (コードが変更なしで実行されるという事実はありませんが、プラットフォーム固有のライブラリがなかったため、移植は実際には問題なく行われます)
- - 実行中のプログラムのオーバーヘッドが低い
- - 高速な作業と付属品の入手可能性
- - C ライブラリであっても、プログラムにすばやく「接着」する機能 - ライブラリにとってこれ以上優れた「接着」は見つかりません。
- - 許容可能な最小限の言語構文。現在の新しいプログラミング パラダイムでの実装の可能性あり
- - Lua のプログラムは習得が非常に簡単です
- - 記憶喪失が少ない
Lua の能力を実証するために、Lua を使用してポイントバイポイントのグラフを生成し、画像ファイルのビューでグラフィックスを保存できる小さなプログラムを作成する方法を説明します。
グラフィカル ツールキットとして、Lua の Vikorist バージョンで最初から構築されたクロスプラットフォーム ライブラリである iup を使用します。
Lua SDKのインストール
Lua を独立した言語として開発するというアイデアの一環として、日常の作業に必要で、指定された OS でプログラムするとクラッシュするライブラリ (データベース ロボット、GUI、XML) を含む Windows 用 Lua のコンパイルが作成されました。解析など コレクション内の Lua のバージョンが 5.2 ではなく 5.1 であることを責めないでください。私たちのバージョンでは、それらの間に特に違いはありません。必ず折りたたみ式を取り付けてください。
iupのコンセプトの簡単な説明
私は、iup デバイスを使用せずにプログラムを作成するプロセスをどのように記述するかを長い間考えました。 その主な待ち伏せ攻撃について簡単に説明したいと思います。- - iup.dialog はプログラム インターフェイスのルート要素です - すべての要素が配置されるコンテナー
- - コンテナ内の要素の配置は、追加のレイアウト、つまりコンテナ内に要素を配置するためのルールの設定に依存します。 Iup 自体では、ルールに従って要素を表示できます。 主なコンテナはフレーム、垂直サイザー、水平サイザーです。
- - ウィジェットに付属する機能の種類に応じて説明が指定されます
- - ダイアログを開いた後、処理サイクルが開始されます
プログラムコード
ライブラリ接続 iup require("iuplua") require("iupluacontrols") require("iuplua_pplot") - Canvas と連携してグラフィックスをファイルに保存するためのライブラリ require("cdlua") require("iupluacd") require("string " ) -- ウィジェットのグローバルな変更とプログラムのカスタマイズ -- グラフの最大数 Lots_number = 5 -- スキン グラフのデータ入力ウィジェットを収容するタブ ウィジェット tabs = () -- グラフを選択したウィジェットのコンテナチェックボックス = ( ) -- ここでは、ポイントに関するデータ テキストを含むウィジェットを保存します。 coords = () -- Lua のスキン グラフのキャプション ウィジェットには、標準関数がありません。split 関数 string:split(sep) local sep、fields = sep または ":", () local pattern = string.format("([^%s]+)", sep) self:gsub (pattern, function(c) field[#fields+1] = c end) returnフィールド終了 -- この関数は、ポイントを示すグラフをプロッターに描画します。 functiondraw_plot(pwidget, pnum, data) x = data.value:split(", ") y = data.value:split(",") if checkboxes .value == "OFF" then return end if not (#x == #y) or #x == 0 then iup.Message("Ошибка", "Задано неверное число точек для графика " .. pnum) return end iup.PPlotBegin(pwidget, 0) iup.PPlotAdd(pwidget, 0, 0) for i = 1,#x do iup.PPlotAdd(pwidget, x[i], y[i]) end iup.PPlotEnd(pwidget) end -- виджет отвечающий за кнопку построения графика plot_btn = iup.button{ title = "滞在する"} -- колбэк для кнопки "построить график" function plot_btn:action() -- создать виджет графопостроителя plot = iup.pplot { expand="YES", TITLE = "シンプルライン", MARGINBOTTOM="65", MARGINLEFT="65", AXS_XLABEL = global_legend.value, AXS_YLABEL = global_legend.value, LEGENDSHOW="YES", LEGENDPOS="TOPLEFT", size = "400x300" } -- этот блок для обхода бага - без него подпись к первому графику отображаться не будет iup.PPlotBegin(plot, 0) iup.PPlotAdd(plot,0,0) plot.DS_LEGEND = "" iup.PPlotEnd(plot) -- обходим виджеты с данными for i = 1, plots_number do -- чтобы свеженарисованный графи отобразился с правильной подписью print(legends[i].value) plot.DS_LEGEND = legends[i].value -- рисуем график draw_plot(plot, i, coords[i]) end -- кнопка сохранения графика в картинку на диске save_btn = iup.button{ title = "保存" } -- теперь создаем само окно, где будет отображаться график plot_dg = iup.dialog { iup.vbox -- это вертикальный сайзер, помести в него графопостроитель и кнопку { plot, save_btn }, } -- обработчик кнопки сохранения графика function save_btn:action() -- создаем диалог выбора имени файла ля сохранения -- в связи с ограничениями библиотеки сохранять можно только в EMF fs_dlg = iup.filedlg{DIALOGTYPE = "SAVE", FILTER = "*.emf" } iup.Popup(fs_dlg) -- если файл выбран if tonumber(fs_dlg.STATUS) >= 0 then -- дописать при необходимости нужное расширение pic = fs_dlg.value if not (string.sub(pic, string.len(pic)-3) == ".emf") then pic = pic .. ".emf" end -- создаем псевдо-холст, ассоциированный с файлом tmp_cv = cd.CreateCanvas(cd.EMF, pic .. " 400x300") -- выводим график на холст iup.PPlotPaintTo(plot, tmp_cv) -- сохраняем данные в файл cd.KillCanvas(tmp_cv) end end -- отображаем диалог с графиком plot_dg:showxy(iup.CENTER, iup.CENTER) -- запускаем петлю обработки событий для диалога if (iup.MainLoopLevel()==0) then iup.MainLoop() end end -- в цикле создаем вкладки, в которых мы будем размещать виджеты -- для сбора данных for i=1,plots_number do -- создание текстовых виджетов, куда будут вводиться координаты точек coords[i] = {} for j = 1,2 do coords[i][j] = iup.text { expand="HORIZONTAL", multiline = "YES", VISIBLELINES = 5 } end -- виджет для редактирования подписи к графику legends[i] = iup.text{ expand = "HORIZONTAL" } -- создаем контейнер вкладки и заполняем его элементами vboxes[i] = iup.vbox { iup.hbox { iup.label { title = "グラフィックキャプション:" }, legends[i] }, iup.hbox { iup.label { title="バツ:", }, coords[i] }, iup.hbox { iup.label { title="Y:", }, coords[i] }; expand="YES", } -- меняем заголовк вкладки vboxes[i].tabtitle = "スケジュール" .. i -- создаем чекбокс, который будет указывать на то, нужно ли строить -- график по данным из указанной вкладки checkboxes[i] = iup.toggle{ title= "スケジュール" .. i, value = "の上" } end -- теперь из заполненных нами контейнеров создаем вкладки tabs = iup.tabs{unpack(vboxes)} -- создаем текстовые виджеты для редактирования подписей осей global_legend = iup.text{} global_legend = iup.text{} -- создаем фрейм для общих настроек графика frame = iup.frame { iup.vbox { iup.label{ title="ウィコリスタットのデータ:", expand="HORIZONTAL" }, iup.vbox { unpack(checkboxes) }, iup.label{}, -- пустую подпись можно использовать как распорку iup.label{title = "署名"}, iup.hbox { iup.label{ title = "すべてX"}, global_legend }, iup.hbox { iup.label{ title = "全員Y"}, global_legend }, iup.label{}, plot_btn }; expand = "VERTICAL", } -- создаем главное окно программы и наносим на него настройки и табы dg = iup.dialog { iup.hbox { frame, tabs }, title="スケジュールを立てさせていただきます", size = "HALF" } -- показываем главное окно и запускаем обработку событий dg:showxy(iup.CENTER, iup.CENTER) if (iup.MainLoopLevel()==0) then iup.MainLoop() end !}!}
喉について一言
スクリプトは次のコマンドを使用して実行できます。Luaプロッター.exe
このタイプのライブラリの場合は、Lua for Windows がインストールされたディレクトリにある clibs/ サブディレクトリに接続します。 別のマシンに転送できるようにスクリプトとライブラリをできるだけコンパクトにパッケージ化するには、次のファイルを 1 つのフォルダー (Lua インストール ディレクトリの下のエントリで示されます) にコピーするだけです。
Lua.exe lib/lua5.1.dll clibs/cd.dll clibs/cdlua51.dll clibs/iup.dll clibs/iup_pplot.dll clibs/iupcd.dll clibs/iupcontrols.dll clibs/iupgl.dll clibs/iuplua51.dll clibs/iuplua_pplot51.dll clibs/iupluacd51.dll clibs/iupluacontrols51.dll clibs/freetype6.dll
スクリプトとプログラムをこのフォルダーに配置することを忘れないでください。 これで、このフォルダーを別のマシンに転送し、上記のコマンドを使用してプログラムを実行できるようになります。 それ以外の場合は、ライブラリとランタイムをインストールする必要はありません。
残念ながら、このバージョンの Lua for Windows のファイル cd.dll、cdluad51.dll、および iupcd.dll は正しく動作しない可能性があるため、以下で説明するようにアーカイブからファイルを取得することをお勧めします。
パウチ
参照しやすいように、app.bat ランチャーが動作バージョンとともにアーカイブに追加されました。スクリーンショット:
その結果、正直に言うと、彼らは私の「本格的な」プログラムによって書かれたものと同じ機能を持つユーティリティを削除しました。 この場合、スロートのサイズと合計ボリュームは 2 MB 未満です。 メモリストレージは約7MBです。 出力コードは編集可能であり、Lua 自体はインタラクティブに理解できるため、そのようなソフトウェアを現場でさらに編集することが容易になります。
私の意見では、これは学校や教育機関向けの初期ソフトウェアを作成する場合や、企業の内部開発に最適な選択肢です。 SND 全体のこのような場所には依然として弱いマシンが存在するため、特にデスクトップに Linux が徐々に登場して以来、同様の方法で Lua の人気が高まっています。 さらに、電動化された洗練されたソフトウェアを自作することに週末を費やす傾向は、国民の無謀と同一視される可能性があります。
タグ: タグを追加する