1

次のコードは、object.lua という名前のファイルにあります。

function object:new()
  local instance = {}
  setmetatable(instance, self)
  self.__index = self
  return instance
end

私が持っているメインファイルには:

local object = require("object")
local obj = object:new()

報告されたエラーは次のとおりです: lua ./object.lua:1: グローバル 'オブジェクト' のインデックスを作成しようとしました (nil 値)

行 #1 は、「function object:new()」を含む最初の行です。

主にそれは最初の行です(requireあり)。

コードの作成元: http://www.lua.org/pil/16.1.html

編集:

このページをご覧ください: http://www.coronalabs.com/blog/2011/09/29/tutorial-modular-classes-in-corona/

次に「james」を検索すると、最初のコメント投稿になり、私が何をしようとしているのかがわかります。

4

2 に答える 2

1

ここでの問題は、object.lua のコードが実行され、object:new 関数を作成しようとすると、作成するオブジェクト テーブルがないことです。

Dogbert のソリューションは、object.lua がオブジェクト テーブルを使用する前に作成するという点でうまく機能します。ただし、グローバルを明示的に作成し、呼び出し元が最善の解決策ではないことを発見したことを期待することで、これを行います。Nicol Bolas によって提供された修正された解決策... object.lua でローカル オブジェクトを作成し、それを返すことは、この種のタスクのより一般的に合意されたパターンです。

于 2013-11-04T13:58:56.687 に答える
1

これは私のために働く:

main.lua

require("object")
local obj = object:new()

object.lua

object = {}

function object:new()
    local instance = {}
    setmetatable(instance, self)
    self.__index = self
    return instance
end

object.lua でグローバルな「オブジェクト」を宣言していて、それを返していないため、実行する必要があります。require("object")

于 2012-08-28T14:21:25.453 に答える