- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
希望你今天过得愉快。
过去几天我一直在用 Lua 编写一个 IRC 聊天机器人,最后我想开始在其中实现多服务器支持。
到目前为止,我已经创建了 irc“对象”来管理每个服务器,以及所有令人愉快的东西 - 现在,我遇到了线程问题。
您可能知道,Lua 没有内置线程支持。就库而言,LuaLanes 和 LuaThreads 似乎最接近我想要使用的东西。让我选择 LuaLanes 的原因是因为 LuaThreads 需要修改 lua 核心。加上 LuaLanes 的“lindas”特性引起了我的注意(供以后在插件中使用)
无论如何,我遇到的问题是当您使用函数middleman
(例如)生成一条车道,然后调用另一个函数sqr
(例如) .如果您生成像 lanes.gen({globals = _G}, middleman)
这样的函数,中间人将可以访问您当前全局范围内的所有内容,这正是我想要的。问题是,如果 middleman
调用 sqr
,而 sqr
使用全局范围内的东西,它会抛出一个错误,几乎就像 _G
突然变空了。
这是我使用上面的示例设法组合在一起的一些示例代码:
require 'lanes'
function sqr()
print(5*5)
end
function middleman()
sqr()
end
gen = lanes.gen({globals = _G}, middleman)
print(gen()[1])
产生一个错误说:
tc@box:~$ lua lanestrouble.lua
lua: lanestrouble.lua:4: attempt to call global 'print' (a nil value)
stack traceback:
[C]: in function 'error'
./lanes.lua:190: in function <./lanes.lua:136>
lanestrouble.lua:13: in main chunk
[C]: ?
threading.c 399: pthread_cond_destroy(ref) failed, 16 EBUSY
Aborted
tc@box:~$
(顺便说一句,我用的是linux)
但是,如果将第 11 行从 gen = lanes.gen({globals = _G}, middleman)
更改为 gen = lanes.gen({globals = _G}, sqr)
,它工作正常。
我已经检查过,如果您传递“*”(或“libs_str”参数的任何其他选项)来加载默认库,也会发生同样的事情。
我真的希望有类似 Java 的 Lua 线程库之类的东西,这就是我最初学习使用线程的方式。 (我知道,这不是我想的最理想的环境)
谢谢,我非常感谢帮助。特别是因为这已经完全停止了我的 IRC 机器人开发! :(
最佳答案
将 sqr
设为本地就可以了。由于它成为中间人的上值,因此被复制到新的车道。
require 'lanes'
local function sqr()
print(5*5)
end
function middleman()
sqr()
end
gen = lanes.gen({globals = _G}, middleman)
print(gen()[1])
但肯定发生了一些奇怪的事情。我的意思是,即使将“sqr”和“print”明确传递到新 channel ,它也不会看到“print”(当被“sqr”调用时)。在我看来,在 channel 之间序列化函数时有些东西不正常。你应该联系它的maintainer .
关于multithreading - LuaLanes 无法在函数之间传递全局变量(在单 channel 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6179936/
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to nest OR statements in JavaScript? 有没有办法做到这一点:
在 JavaScript 中有没有办法让一个变量总是等于一个变量?喜欢var1 = var2但是当var2更新,也是var1 . 例子 var var1 = document.getElementBy
我正在努力理解这代表什么 var1 = var2 == var3 我的猜测是这等同于: if (var2 == var3): var1 = var2 最佳答案 赋值 var1 = var2
这个问题已经有答案了: What does the PHP error message "Notice: Use of undefined constant" mean? (2 个回答) 已关闭 8
我在临时表中有几条记录,我想从每条记录中获取一个值并将其添加到一个变量中,例如 color | caption -------------------------------- re
如何将字符串转为变量(字符串变量--> $variable)? 或者用逗号分隔的变量列表然后转换为实际变量。 我有 2 个文件: 列名文件 行文件 我需要根据字符串匹配行文件中的整行,并根据列名文件命
我有一个我无法解决的基本 php 问题,我也想了解为什么! $upperValueCB = 10; $passNodeMatrixSource = 'CB'; $topValue= '$uppe
这可能吗? php $variable = $variable1 || $variable2? 如果 $variable1 为空则使用 $variable2 是否存在类似的东西? 最佳答案 PHP 5
在 Perl 5.20 中,for 循环似乎能够修改模块作用域的变量,但不能修改父作用域中的词法变量。 #!/usr/bin/env perl use strict; use warnings; ou
为什么这不起作用: var variable; variable = variable.concat(variable2); $('#lunk').append(variable) 我无法弄清楚这一点
根据我的理解,在32位机器上,指针的sizeof是32位(4字节),而在64位机器上,它是8字节。无论它们指向什么数据类型,它们都有固定的大小。我的计算机在 64 位上运行,但是当我打印包含 * 的大
例如: int a = 10; a += 1.5; 这运行得很完美,但是 a = a+1.5; 此作业表示类型不匹配:无法从 double 转换为 int。所以我的问题是:+= 运算符 和= 运算符
您好,我写了这个 MySQL 存储过程,但我一直收到这个语法错误 #1064 - You have an error in your SQL syntax; check the manual that
我试图在我的场景中显示特定的奖牌,这取决于你的高分是基于关卡的目标。 // Get Medal Colour if levelHighscore goalScore { sc
我必须维护相当古老的 Visual C++ 源代码的大型代码库。我发现代码如下: bIsOk = !!m_ptr->isOpen(some Parameters) bIsOk的数据类型是bool,is
我有一个从 MySQL 数据库中提取的动态产品列表。在 list 上有一个立即联系 按钮,我正在使用一个 jquery Modal 脚本,它会弹出一个表单。 我的问题是尝试将产品信息变量传递给该弹出窗
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
jQuery Core Style Guidelines建议两种不同的方法来检查变量是否已定义。 全局变量:typeof variable === "undefined" 局部变量:variable
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: “Variable” Variables in Javascript? 我想肯定有一种方法可以在 JavaScrip
在语句中使用多重赋值有什么优点或缺点吗?在简单的例子中 var1 = var2 = true; 赋值是从右到左的(我相信 C# 中的所有赋值都是如此,而且可能是 Java,尽管我没有检查后者)。但是,
我是一名优秀的程序员,十分优秀!