• [解決済み] Luaテーブルのエントリ数を取得する方法は?

    質問 しかし、なぜか答えが見つからない。Luaの # 演算子は整数のキーを持つエントリのみをカウントし、同様に table.getn : tbl = {} tbl["test"] = 47 tbl[1] = 48 print(#tbl, table.getn(tbl)) -- prints "1 1" count = 0 for _ in pairs(tbl) do c

    2022-04-23 04:55:43
  • Luaでよくある問題の解決法

    require "uiDefine&quot。 エラーメッセージ: モジュール 'uiDefine' が見つかりませんでした。 fieldpackage.preload['uiDefine'] がない。 そのようなビルトイン lib'uiDefine' はありません。 回避策 require "ui.uiDefine&quot で

    2022-02-24 17:05:45
  • Lua: メソッド 'xxxx' (nil値) を呼び出そうとしました。

    Luaは初めてなので、盲点でした。 背景 cocos2d-xエンジンを使い、c++からluaリソースを呼び出すという、他の人がやったことの9割をやり続けていたプロジェクトを引き継ぎました。 クラスメソッドを呼び出すと、このようなエラーが発生しました。  メソッド 'xxxx' (a nil value) を呼び出そうとしました。 フォーマットは正常で、クラスオブジェクトもn

    2022-02-20 18:12:15
  • Luaチュートリアル(10)。グローバル変数と非グローバル環境

    Luaは、すべてのグローバル変数を"environment"と呼ばれる通常のテーブルで管理しています。これは、グローバル変数_Gに格納されています。 1. グローバル変数の宣言。 Luaのグローバル変数は、宣言しなくても使用することができます。便利ではありますが、ペンシルエラーが発生した場合、発見しにくいエラーの原因となります。Gテーブルにメタテーブルを追加することで、グローバル

    2022-02-13 21:44:56
  • Luaチュートリアル(7)。データ構造の説明

    Luaのテーブルは単純なデータ構造ではなく、他のデータ構造の基礎として使用することができます。配列、レコード、線形テーブル、キュー、コレクションは全てLuaのテーブルで表現することができます。        1. 配列 Luaでは、テーブルのインデックスに整数を使用することで配列を実装することができます。そのた

    2022-02-13 21:37:52
  • Rubyメタプログラミング技術 (Ruby Metaprogramming techniques)

    最近、メタプログラミングについて考えることが多く、このテクニックの例や解説をもっと見たいと思います。良くも悪くも、メタプログラミングはRubyのコミュニティに浸透し、様々なタスクを達成し、コードを簡素化するための標準的な方法となっています。そのようなリソースが見つからないので、一般的なRubyのテクニックに関する記事をいくつか紹介します。これらは、他の言語からRubyに移ってきたプログラマや、R

    2022-02-13 21:16:44
  • Luaでsleep関数を実装する4つの方法

    残念ながら、Luaには組み込みのsleep関数がないので、DIYする必要があります。sleep関数を実装する方法は、以下の4つです。 方法1 コピーコード コードは以下の通りです。 --sets an exit condition in a dead loop, but this takes up a lot of CPU resources and is

    2022-02-13 19:48:42
  • Luaチュートリアル(V)。イテレータとジェネリック・フォー

    1. イテレータとクロージャ。     Luaでは、イテレータは通常、関数であり、関数を呼び出すたびにコレクション内の"next"要素を返します。各イテレータは、呼び出しが成功するまでの間に何らかの状態を保持する必要があり、自分がどこにいて、次に走査されたときにどこにいるかが分かるようになっています。この観点から、Luaのクロージャ・メカニズムは、次の例に

    2022-02-13 16:22:08
  • Rubyのクラスインスタンス変数、クラスインスタンスメソッドとクラス変数、クラスメソッドの違いについて

    Rubyにおけるクラスインスタンス変数、クラスインスタンス・メソッド、クラス変数・メソッドの違いは微妙で、使い方もかなり異なります。この記事では、それらの定義と基本的な使用シナリオを調査し、光を当てる... I. クラスインスタンス変数とクラス変数 クラス変数は誰もが知っている、クラス定義にある@@で始まる変数のことです。クラス変数は、クラスのグローバルな情報を格納するために使用され、

    2022-02-13 16:12:58
  • Luaチュートリアル(XV)。入出力ライブラリ (I/O ライブラリ)

    I/Oライブラリでは、ファイル操作のモデルとして、シンプルモデルとフルモデルの2種類を用意しています。シンプルモデルは、現在の入力ファイルと現在の出力ファイルを想定しており、彼のI/O操作はすべてこれらのファイルに対して行われます。フルモデルでは、明示的なファイルハンドルを使用し、すべての操作をファイルハンドルのメソッドとして定義します。     1. シンプル

    2022-02-13 15:42:57
  • Luaチュートリアル(I)。導入、利点と応用シナリオ

    I. はじめに   軽量な組み込み用スクリプト言語として最もポピュラーでフリーなLuaは、Adobe社のPhotoshopなど多くの産業用アプリケーションや、Interstellarなどの有名なゲームプログラムでも広く使われています。それだけでなく、Luaはシンプルな構文(プロシージャベース)、効率的で安定した(バイトコードベース)、複雑なデータ構造を扱う能力、動的型付け、自動メモリ管

    2022-02-13 15:25:17
  • Luaチュートリアル(XVI)。システムライブラリ (os ライブラリ)

    Luaは高い移植性を確保するために設計されているため、標準ライブラリでは、特にOSに関連する機能はごくわずかしか提供されていません。しかし、LuaはPosixライブラリのような拡張機能も提供しています。ファイル操作については、os.rename関数とos.remove関数のみが提供されています。 1. 日付と時刻。 Luaでは、timeとdateという関数がすべての日付と時刻の関数を

    2022-02-13 11:40:33
  • Luaチュートリアル(6):コンパイルと実行でエラーが発生した場合

    1. コンパイルする     Luaにはdofileという関数が用意されており、Luaのコードブロックを実行するための組み込み操作となります。しかし、実際にはdofileは単なるヘルパー関数であり、loadfileが本当のコア関数です。dofileとは対照的に、loadfileは指定されたファイルからLuaブロックをロードし、ブロックをコンパイルして、コンパ

    2022-02-13 11:36:33
  • Luaチュートリアル(VIII)。データの永続化

    1. データファイル     Luaのテーブル構成要素を利用して、以下のようなLuaプログラムにとって非常に便利で分かりやすい方法で、ファイル内のデータをテーブルが構成し初期化するコードとするファイル形式を定義することができます。 コピーコード コードは以下の通りです。     Entry { "S

    2022-02-13 09:42:35
  • Luaでシステムコマンドを実行する方法

    Luaでは、os.executeでDosコマンドを実行できますが、デフォルトで出力されるシステムステータスコードを返します。 io.popen() も dos コマンドを実行しますが、ファイルを返します。 コピーコード コードは以下の通りです。 local t = io.popen('svn help') local a = t:read("*all") --

    2022-02-13 08:46:45
  • Luaによる分割関数の実装

    function split(s, delim) if type(delim) ~= "string" or string.len(delim) <= 0 then return end local start = 1 local t = {} while true do local pos = string.find (s, delim, start,

    2022-02-13 07:39:32
  • Luaチュートリアル(XIII)。テーブルを弱く参照する

    Luaはガベージコレクションによるメモリ管理機構を採用しているので、プログラマにとってはメモリ問題が気にならない場合が多いでしょう。しかし、どんなガベージコレクタも万全ではなく、特殊なケースでは、ガベージコレクタが現在のオブジェクトをクリーンアップすべきかどうかを正確に判断できないことがあります。そのため、多くのガベージオブジェクトが解放されないという結果になる可能性が高い。この問題を解決するた

    2022-02-13 06:33:15
  • C言語によるlua関数の呼び出しを考慮する必要がある

    検討すべき問題 1. lua_pcallは、まずlua関数をスタックに置き、次に引数をスタックに置くことで、lua_pcall(luaState, 引数の数, 戻り値の数, 0)を使ってlua関数を呼び出すことができる。 イベントが発生した際にLua関数をコールバックするためには、Lua関数を保存する必要があります。luaL_ref(luaState, LUA_REGISTRYI

    2022-02-13 06:12:24
  • Luaチュートリアル(IV)。関数の詳細

    I. 機能     Luaの関数は、print("Hello World")やa = add(x, y)など、基本的にC言語と同じように呼び出されます。ただ、print "Hello World"とf {x = 20, y = 20}のように、関数の引数が1つだけで、引数の型が文字列定数やテーブルのコンストラクタの場合はカッコを省略することができる点が異な

    2022-02-13 04:05:04
  • Luaチュートリアル(20)。LuaがCの関数を呼び出す

    LuaがC言語の関数を呼び出せるようになると、Luaのスケーラビリティや使い勝手が大きく向上します。OSに関連する一部の機能や、高い効率が求められるモジュールについては、C関数で実装し、Luaから指定されたC関数を呼び出すことが可能です。Luaから呼び出せるC関数については、Luaが要求する形式、すなわちtypedef int (*lua_CFunction)(lua_State* L)に沿った

    2022-02-12 23:38:45