Lua中字符串的串联

2024-03-18

在许多语言中,您可以在变量赋值时连接字符串。我有一个使用 Lua 编程语言的场景,我需要将命令的输出附加到现有变量。 Lua 中是否有与以下示例等效的功能?

其他语言的例子:

===== PERL =====
$filename = "checkbook";
$filename .= ".tmp";
================

===== C# =====
string filename = "checkbook";
filename += ".tmp";
===============

正如其他答案所说,Lua中的字符串连接运算符是两个点。

你的简单例子应该这样写:

filename = "checkbook"
filename = filename .. ".tmp"

然而,有一个警告需要注意。由于 Lua 中的字符串是不可变的,因此每次串联都会创建一个新的字符串对象,并将源字符串中的数据复制到其中。这使得连续连接到单个字符串的性能非常差。

这种情况下的 Lua 习惯用法是这样的:

function listvalues(s)
    local t = { }
    for k,v in ipairs(s) do
        t[#t+1] = tostring(v)
    end
    return table.concat(t,"\n")
end

通过收集要连接在数组中的字符串t,标准库例程table.concat可用于将它们全部连接起来(以及每对之间的分隔符字符串),而无需进行不必要的字符串复制。

Update:我刚刚注意到我最初使用上面的代码片段编写了pairs()代替ipairs().

正如最初所写,该函数listvalues()确实会从传入的表中生成每个值,但不是以稳定或可预测的顺序。另一方面,它将包含其键在范围内不是正整数的值1 to #s。就是这样pairs()作用:它生成存储在表中的每个(键,值)对。

在大多数情况下,您会使用类似的东西listvaluas()您可能有兴趣保留他们的订单。所以一个调用写成listvalues{13, 42, 17, 4}将生成一个包含按顺序包含这些值的字符串。然而,pairs()不会这样做,它会按照某种顺序逐项列出它们,具体取决于表数据结构的底层实现。众所周知,顺序不仅取决于钥匙,还取决于插入钥匙和移除其他钥匙的顺序。

当然ipairs()也不是一个完美的答案。它仅枚举表中形成“序列”的那些值。也就是说,这些值的键形成从 1 到某个上限的不间断块,这(通常)也是由#操作员。 (在很多情况下,函数ipairs()本身最好用更简单的替换for循环只从1 to #s。这是 Lua 5.2 和 LuaJIT 中推荐的做法,其中更简单for循环可以比循环更有效地实现ipairs()迭代器。)

If pairs()确实是正确的方法,那么通常的情况是您想要同时打印键和值。通过使数据具有自描述性,减少了对顺序的担忧。当然,因为任何 Lua 类型(除了nil和浮点数NaN)可以用作密钥(并且NaN也可以存储为值)找到字符串表示形式作为学生的练习。并且不要忘记树和更复杂的表结构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lua中字符串的串联 的相关文章

  • LuaJit FFI 从 C 函数返回字符串到 Lua?

    假设我有这个 C 函数 declspec dllexport const char GetStr static char buff 32 Fill the buffer with some string here return buff 这
  • “变量”变量名c++

    问题 我在这里搜索了一段时间 寻找一种循环遍历名为有点像的变量的方法variable 1 variable 2 variable n 基本上 我问是否有一种方法可以使用循环来实现variable i或者 更具体地说 就我而言 functio
  • Corona/Box2D 检测与非移动静态物体的碰撞

    出于发帖原因 这是我正在尝试做的事情的简单版本 在屏幕上我有一个简单的圆形对象 它是静态的并且不会移动 然后用户可以拖放一条直线 如果该线穿过该圆圈 我希望触发碰撞事件 看来除非其中一个物体正在移动 否则永远不会检测到碰撞 绘制线条时能否检
  • 了解静态链接嵌入式lua环境中lua扩展dll的构建/加载

    我有一个相对复杂的 lua 环境 我试图了解以下内容如何工作 起始设置包括以下两个模块 主要应用 无lua环境 DLL 静态链接到lua lib 包括解释器 该 dll 被加载到主应用程序中 并运行 lua 控制台解释器和可从控制台访问的
  • 我应该用 C++ 封装 Lua 代码的哪些代码?

    我终于将 LuaBind 配置为与我的 C 项目一起使用 我最近发现 Tiled 地图编辑器可以选择将文件导出为 lua 所以我想尝试一下 我将使用什么代码来封装下面粘贴的代码以使其与我的 C RPG 项目一起使用 return versi
  • MS Access 2003 - 连接表单上相同 ID 的字段类型

    好吧 工作中的一个人有一个小的访问数据库 他用它来跟踪事情 他使用的表单已经查询了他需要的内容并在表单上生成了结果 这确实是他所需要的 有一件事是 他对每条记录都有重复项 这些记录以不同的 类型 作为字段 标识符 我称之为 这是一个例子 I
  • Redis 排序集和解决关系

    我正在使用 Redis 排序集来存储我正在处理的项目的排名 我们没有预料到 我们想要如何处理关系 Redis 按字典顺序对具有相同分数的条目进行排序 但我们想要做的是对具有相同分数的所有条目给予相同的排名 例如在以下情况 redis 127
  • 用于嵌入式服务器的 Web 技术

    我最近开始了一个针对嵌入式设备的新 Web 开发项目 并希望征求一些有关使用技术的建议 该设备将提供 HTML 页面 其中包括用于从 JSON 服务器检索数据的 AJAX 代码 我们暂时使用 Cherokee 作为 Web 服务器 但我们并
  • Redis INCRBY 有限制

    我想知道是否有一种方法可以通过我的应用程序的单次往返在 Redis 中执行此操作 对于给定的键K 其可能值V是范围内的任意整数 A B 基本上 它有上限和下限 When an INCRBY or DECRBY发出命令 例如INCRBY ke
  • lua http套接字超时

    LuaSocket HTTP 模块文档说可以在 HTTP 连接上设置超时 可以设置以下常量来控制 HTTP 模块的默认行为 PORT 用于连接的默认端口 PROXY 用于连接的默认代理 TIMEOUT 设置所有I O操作的超时时间 USER
  • Lua-迭代嵌套表

    我已经学习 Lua 几个星期了 这一次又一次成为我的症结所在 我尝试阅读有关该主题的帖子和书籍 我使用 Lua 查询软件监控系统 Nimsoft 我的数据以表格形式返回给我 我不会发布整个输出 但这里有一个我认为可以描述结构的片段 表参考是
  • 在 Scala 中有效地重复字符/字符串 n 次

    我想更有效地执行以下操作 def repeatChar char Char n Int List fill n char mkString def repeatString char String n Int List fill n cha
  • 如何在 R 中连接数字列?

    我在 R 的数据框中有三列 x y 和 z 坐标 我想将其连接成一个 xyz 值 如下所示 我尝试过使用 collapse 和 sep 粘贴 但遇到了麻烦 我认为这与文本与数字变量有关 I have x y z 1 2 3 2 3 2 3
  • 在Lua中获取前一天的日期

    谁能告诉我如何使用 Lua 获取 YYYY MM DD 格式的前一天日期 即 一个片段 它将返回运行当天的前一天的日期 Try print os date Y m d os time 24 60 60 严格来说 这只能保证在 POSIX 系
  • 如何在Python中连接两个整数?

    如何在Python中连接两个整数 例如 给定10 and 20 我想要一个返回值1020 将两者都转换为字符串 连接字符串 然后将结果转换回整数 z int str x str y
  • Lua 将字符串转换为数字 - 取决于语言环境

    刚刚注意到字符串 and tonumber 在 Lua 中是依赖于语言环境的 知道如何在不使用的情况下将字符串转换为数字tonumber 谢谢 例如将字符串 58 5 转换为 58 5 另外 当我尝试将带点的数字传递给函数时 该函数会转换
  • 如何使用 srlua 制作可执行的 Lua 脚本?

    我的主要目标是使我的 lua 文件成为可执行文件或使其成为咬代码 最好是两者皆有 我正在尝试 srlua 但在自述文件中它告诉我要做的事情 对于Windows 您需要首先创建srlua exe和glue exe 然后为每个 你想把Lua程序
  • 使用 Windows 命令行连接文本文件,删除前导行

    我需要连接一些相对较大的文本文件 并且更喜欢通过命令行来完成此操作 不幸的是我只有Windows 无法安装新软件 type file1 txt file2 txt gt out txt 允许我几乎得到我想要的 但我不希望 file2 txt
  • 如何通过 C API 在自己的环境中执行不受信任的 Lua 文件

    我想通过调用在其自己的环境中执行不受信任的 lua 文件lua setfenv http pgl yoyo org luai i lua setfenv这样它就不会影响我的任何代码 该函数的文档仅解释了如何调用函数 而不解释如何执行文件 目
  • Lua C API:初始化结构体 C 中的变量矩阵

    我正在尝试使用 Lua C API 创建一个用户数据 并在其中关联一个元表 我将在其中收集矩阵 我无法得到的是如何将初始化矩阵的每个分量设置为零 我按照我的描述编译我的 Lua 模块 C 代码here https stackoverflow

随机推荐

  • 这个 FIRST_VALUE 查询有什么问题?

    查询如下 with t as select 450 id null txt 3488 id usr from dual union all select 449 null 3488 from dual union all select 79
  • PyDev 不执行将当前行发送到控制台的快捷方式

    According to this question https stackoverflow com questions 24380281 liclipse and execute codes in console shortcuts an
  • 是否可以生成动态sql来返回雪花中具有各种列的行

    我们将各种数据作为值 对存储在 JSON 列中 所有行的对名称都不相同 并且取决于某些元数据 有没有办法编写一个 SQL 语句来根据某些元数据检索其中一些值对 类似动态生成的东西 SELECT MyJson FruitShape MyJso
  • nextjs 预渲染所有页面还是仅预渲染第一页?

    我正在学习 nextjs 并在某些地方读到 nextjs 仅预渲染第一页 而在其他一些地方他们说 nextjs 默认情况下预渲染所有页面 所以我无法理解哪一个是正确的 有不同的渲染策略 您可以通过在页面文件中添加方法来选择 Next Js
  • 如何确定 SSIS 数据集中的行数

    我经常在 SSIS 包中遇到这样的情况 运行 SQL 命令从 ADO 连接返回一组行 在某些情况下 我想根据返回的行数进行分支 ado 结果集存储在 SSIS 对象 数据类型中 SSIS 表达式或脚本组件中有没有办法获取行数 不要使用执行
  • Playframework 进化文件与 postgres 和 h2 兼容

    我一直在使用 H2 作为后端 使用 Play 框架 scala 开发一个网站 测试集成得很好 尤其是能够针对内存中的 H2 数据库运行测试 现在 出于各种方便的原因 我想将我的数据存储转移到 Postgres 这给我留下了一个问题 如何继续
  • 如何从命令行调用带参数的 mysql 存储过程?

    如何从命令行调用存储过程 我有一个程序 CREATE DEFINER root localhost PROCEDURE insertEvent IN dateTimeIN DATETIME NO SQL BEGIN SET eventIDO
  • 为什么我在使用 Ionic Framework 插件 healthkit 时收到错误plugin_not_installed?

    我已经使用 Ionic Framework 一段时间了 但最近遇到了这个错误plugin not installed对于 Health Kit 插件 我知道我有基于我的ionic cordova plugin list output ion
  • 批量插入时如何自动截断字符串?

    我想将许多行 从实体框架对象构造 插入到 SQL Server 问题是 某些字符串属性的长度超过了数据库中列的长度 这会导致异常 然后所有行将无法插入到数据库中 所以我想知道是否有办法告诉 SqlBulkCopy 自动截断任何超长的行 当然
  • 使用加法、减法和减半计算三角根

    特定游戏的规则是角色的力量与角色的力量成正比 三角根 https math stackexchange com q 698961 93170角色的经历 例如 15 20经验获得5力量 21 27经验获得6力量 28 35经验获得7力量等等
  • UIWebView 以更有效的方式减少加载时间

    我正在下载多个 html 并将它们作为字符串保存在本地NSArray 然后我用3UIWebViews加载内容 用户总是看到一个UIWebView还有 2 个UIWebViews使用以下方式在后台加载 firstWebView loadHTM
  • 将属性添加到 php 中对象顶部的 stdClass

    当创建一个对象时php用于返回 JSON 是否可以添加一个属性并强制它位于顶部 我想要这个 因为该对象是通过 API 公开的 并且最好在顶部有 id 例如 obj new stdClass obj gt name John obj gt a
  • 如何在 C++ 中限制生成的程序可以使用的内存量

    在我的 C 程序中 我将启动其他程序 如果这些程序使用超过一定量的内存 我希望我的程序杀死它们的进程 那怎么办呢 我可能会使用 execv 来启动程序 假设您使用的是 POSIX 系统 您可以通过调用来限制这一点setrlimit 2 af
  • Linux 上的 .NET core X509Store

    使用 NET Core 2时 Linux中的证书文件位于哪里X509Store 在 Windows 上 可以从管理控制台访问证书certlm msc或与New SelfSignedCertificate在 powershell 中 使用 N
  • 为什么 Xcode 6 将动态链接编辑器库中的自动完成功能保持为 TRUE?

    我仍在学习 Swift 和 iOS 开发 但我一直遇到这个问题 尽管我尝试深入了解一下 但我仍然有点困惑 当我开始打字时trueXcode 6 建议自动完成TRUE 不是世界末日 然而 有一次我决定看看如果我使用会发生什么TRUE结果给了我
  • Spring尤里卡中的instanceid是什么?

    我读到 Eureka 客户端的实例 ID 必须是唯一的 当我们希望运行同一 Eureka 客户端的多个实例时 我们添加此属性 eureka instance instance id spring cloud client hostname
  • 如何依次请求多个权限?

    我的应用程序需要访问CAMERA and 写外部存储权限 一旦我的应用程序加载 我想要求用户依次允许这两个权限 我有这个代码 if ContextCompat checkSelfPermission this Manifest permis
  • 如何仅提取 .tar.gz 成员的文件?

    我的目标是打开包装 tar gz文件 而不是指向该文件的子目录 我的代码基于此question https stackoverflow com questions 4917284 extract files from zip without
  • 图论。如何处理此类问题?我想知道解决这个问题时的逻辑和思考方式。

    求笛卡尔平面上从 0 0 到 n n 的路径数 该路径永远不会高于 y x 线 可以沿着路径进行三种类型的移动 move up i e from i j to i j 1 move to the right i e from i j to
  • Lua中字符串的串联

    在许多语言中 您可以在变量赋值时连接字符串 我有一个使用 Lua 编程语言的场景 我需要将命令的输出附加到现有变量 Lua 中是否有与以下示例等效的功能 其他语言的例子 PERL filename checkbook filename tm