0

JSONコンテンツをファイルからグローバル変数にロードしていた古いLUAメソッドを「クラス」に移動しようとしています。しかし、常に次のエラーが発生します。

attempt to call field 'decode' (a nil value)
attempt to index global 'cjson' (a nil value)

lua はよくわかりませんが、ほとんどすべての組み合わせを試しても結果が得られなかったので、このエラーが発生する理由を説明していただけますか?

モジュールの現在の実装は次のようになります。

Config = {}
Config.__index = Config

function Config.create(config_filename)
   local cjson = require("cjson") 
   local config = {}               
   setmetatable(config,Config)  

   local f = io.open(config_filename, "r")
   local content = f:read("*a")
   f:close()
   config = cjson.decode(content)

   return config
end

return Config

最終結果として、他のファイルから次のようなものを実行したいと思います:

local config_class = require("config")
local config = config_class.create("/path/to/file.json")

ngx.say(config:some_configuration_data())
4

1 に答える 1

1

エラーメッセージが示すように、 cjson と decode は nil 値であり、インデックスを作成したり呼び出したりすることはできません。

requireいくつかのファイルをロードし、含まれているコードを実行して、戻り値を渡します。Lua スクリプトを実行するとnil、デフォルトで返される関数のように動作します。したがって、スクリプトが返すものを指定しない限り、requireが返されnilます。

必要な cjson ファイルの内容はわかりませんが、必要な json 実装は明らかに返されませんが、nil.

したがって、cjson のコードは、キー「decode」の下に関数が格納された Lua テーブルを返す必要があります。

于 2016-06-23T15:59:55.823 に答える