- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在学习如何使用 Lua C API,虽然我已经成功在 C/C++ 和 Lua 之间绑定(bind)函数,但我有几个问题:
将多个脚本加载到单个 lua_State
中是个好主意吗?有没有办法关闭特定的 block ?如果脚本不再使用,如何从 lua_State
中清除它,同时保留其他所有内容?
使用可能对函数/全局变量使用相同名称的脚本的最佳方法是什么?如果我加载所有这些,新的定义将覆盖旧的定义。
在线阅读后我认为我需要分离每个加载的 block 进入不同的环境。我设想的工作方式是加载 block 时,我为其分配一个唯一的环境名称,当我需要使用它我只是使用该名称来获取来自 LUA_REGISTRYINDEX
的环境并执行操作。所以到目前为止我还没弄清楚如何做到这一点。网上有例子但他们使用 Lua 5.1。
最佳答案
Is it a good idea to load multiple scripts into a single lua_State?
是的,当然。除非这些脚本不相关并且应该在多个并行线程中运行。
Is there a way to close specific chunks?
Chunk 只是一个“函数”类型的值。当您没有将该值存储在任何地方时 - block 将被垃圾收集。
生成的任何 block - 全局变量或在外部某处有引用的局部变量 - 这些都将继续存在。
how to clear it from the lua_State while retaining everything else?
这取决于您如何看待该 block 。它只是一组函数,还是代表具有自己状态的某个实体。如果您不创建全局函数和变量,则单独脚本文件中定义的所有内容都将是 block 的本地内容,并且当没有对 block 的引用时将被删除。
What is the best way use scripts that may use the same name for functions/global variables?
考虑重写您的代码。不要创建任何全局变量,除非明确要求与程序的其他部分建立通信。将变量设置为本地变量(由 chunk 拥有),或者将其存储在将由 chunk 作为新对象返回的表/闭包中 - chunk 可能是生成新对象的工厂,而不仅仅是脚本。
此外,Lua 使用局部变量运行得更快。
The way I envision this working is each time a chunk is loaded I assign it a unique environment name
如果脚本来自外部(由用户编写或从其他外部来源接收),您应该这样做。沙盒很酷,但如果 block 是您的内部内容,则不需要沙盒。考虑重写没有全局变量的代码。如果您的 block 生成其他对象,则返回某个对象(api 表或闭包) - 您可以多次调用该 block 而无需重新加载它。或者保存一个全局模块接口(interface),如果 chunk 代表类似 Lua 的模块。如果你没有很好地组织你的代码,那么你将被迫使用单独的环境,并且你必须为每个脚本准备新的环境,复制基本的东西,如打印/配对/字符串/等。您将在运行时经历多次中断,直到您弄清楚新环境中还缺少什么,等等。
关于c++11 - 单个 Lua 状态下的多个脚本并使用 _ENV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36356498/
Lua 从 setfenv() 切换有什么大不了的至 _ENV ? 在各种“新消息”来源中,这一举措被认为是 Lua 5.1 和 5.2 版本之间最重要的变化之一。 但是,PIL 和其他地方给出的示例
我正在运行Apache/2.2.11 (Win32) PHP/5.3.0我在 .htaccess 文件中执行了以下操作: SetEnv FOO bar 如果我打印出$_ENV PHP 文件中的变量,我
注意:我使用的是 Lua 5.3 版。 这个问题是由 Programming in Lua(第 4 版)的练习 25.1(第 264 页)提出的。该练习内容如下: Exercise 25.1: Ada
我正在运行 Apache/2.2.11 (Win32) PHP/5.3.0,我在 .htaccess 文件中执行了以下操作: SetEnv FOO bar 如果我在 PHP 文件中打印出 $_ENV
在我的项目中,我正在执行 XML 文件中包含的一些 lua 函数。我从 C++ 读取 XML,解析代码字符串,执行它们并获得结果。我发现的所有相关问题要么使用专用的 .lua 文件,要么直接在 Lua
我对超全局数组 $_ENV 和 $_SERVER 的理解是否正确? $_ENV: Contains information about environment variables $_SERVER:
通过 $_ENV 变量在您自己的代码中使用 .env 文件中的参数是否正常?当然是在使用 Symfony 4 的项目上下文中。 我有这样的代码: //WebhookUrlBuilder.php cla
我目前正在学习如何使用 Lua C API,虽然我已经成功在 C/C++ 和 Lua 之间绑定(bind)函数,但我有几个问题: 将多个脚本加载到单个 lua_State 中是个好主意吗?有没有办法关
我正在用 Ruby 编写一个小的 CGI 脚本,用于记录访问者的数据。我想记录所有 CGI 环境变量,如 REMOTE_ADDR、USER_AGENT、HTTP_REFERER 等。在 PHP 中遍历
在我的 PHP 代码中,我试图访问我在/etc/profile 中导出的 linux 系统环境变量。 当我在终端中键入“printenv”时,我可以看到设置了变量(称为 MEMCACHED_1)。 但
大多数情况下,我使用过$_SESSION,但是在阅读有关 Session 的内容时,我得到的术语很少 $_ENV & $_COOKIE。 我不清楚什么时候使用哪个,我对我可以使用它们的情况感到困惑。那
getenv() 和 $_ENV 有什么区别? 使用两者之间有什么权衡吗? 我注意到有时 getenv() 可以满足我的需要,而 $_ENV 却不能(例如 HOME)。 最佳答案 根据the php
在使用 GitHub 操作时,我在 $_ENV('ENV') 中遇到 undefined index 错误,但是当我使用 getenv('ENV') 时,我实际上得到了变量我在找。我该如何解决? 最佳
我想为我的数据库凭证使用 Laravel 环境,我这样做了: 在 bootstrap\start.php 中: $env = $app->detectEnvironment(array( 'local
我正在从 CLI 界面运行 PHP 脚本。 我怎样才能像在 Apache 中一样获取运行用户名 ($_ENV['APACHE_RUN_USER'])?现在我正在使用 exec('whoami'),但不
我正在使用 Laravel 5.3 测试我的系统: 在过去的几周里,我的系统运行良好。自上周末以来,我遇到了如下相同的错误 TWICE:- Notice: Undefined variable: _E
当 print(_ENV) 在 windows 上的 zerobrane studio 中使用时,结果为 nil。我们可以将 _ENV 变量设置为预期用途吗?作为代码示例, a = 15
在 apache 环境中 setenv 相当于什么?例如,使用 apache,我可以设置环境“SOMEENV”并通过 $_ENV['SOMEENV'] 在 php 中访问它 - 但我不知道如何
我在 Joomla 中遇到这个错误: Illegal variable `_files` or `_env` or `_get` or `_post` or `_cookie` or `_server
我是一名优秀的程序员,十分优秀!