【发布时间】:2014-03-10 05:00:21
【问题描述】:
我试图声明一个不带 local 关键字的函数,然后从另一个脚本调用该函数,但是当我运行命令时它给了我一个错误。
test = function ()
return 'test'
end
# from some other script
test()
编辑:
我不敢相信我仍然没有答案。我将包括我的设置的更多细节。
我正在使用带有 redis-scripto 包的 node 将脚本加载到 redis 中。这是一个例子。
var Scripto = require('redis-scripto');
var scriptManager = new Scripto(redis);
scriptManager.loadFromDir('./lua_scripts');
var keys = [key1, key2];
var values = [val];
scriptManager.run('run_function', keys, values, function(err, result) {
console.log(err, result)
})
还有 lua 脚本。
-- ./lua_scripts/dict_2_bulk.lua
-- turns a dictionary table into a bulk reply table
dict2bulk = function (dict)
local result = {}
for k, v in pairs(dict) do
table.insert(result, k)
table.insert(result, v)
end
return result
end
-- run_function.lua
return dict2bulk({ test=1 })
引发以下错误。
[Error: ERR Error running script (call to f_d06f7fd783cc537d535ec59228a18f70fccde663): @enable_strict_lua:14: user_script:1: Script attempted to access unexisting global variable 'dict2bulk' ] undefined
【问题讨论】:
-
我会问一个显而易见的问题:在第二个脚本中,您(或其他任何地方)是否“需要”指定函数的脚本?也就是说,这段代码真的可以运行吗?
-
脚本通过 script load 命令加载到 redis 中。脚本本身没有任何要求。我需要它们吗?
-
如果我使用 require,它会给我一个错误。脚本试图访问不存在的全局变量“require”。我不确定 require 是否可以在 Redis 中工作。
-
另外,脚本运行。我可以运行正常执行的 redis 命令,但它对我在其他脚本中声明的函数一无所知。
-
@Nathan,你能告诉我在没有文件系统的情况下我应该如何在 Redis 中使用 require 吗?