如何在 Perl 6 中将子项放入正则表达式中?

2023-12-12

这就是我正在努力做的事情。

>  my sub nplus1($n) {$n +1}
> my regex nnplus1 { ^ (\d+) &nplus1($0) $ }
> "123" ~~ &nnplus1
P6opaque: no such attribute '$!pos' in type Match...

请记住,正则表达式是子表达式。所以不要称你的匹配者为sub——更具体一点,称之为regex。是的,您可以将参数传递给regex/token/rule。当您匹配在解析时改变其状态的语言时,执行此操作非常重要。例如,在 YAML 中,您可以解析“data[0]: 17”。之后,下一行可以以“data[1]”开头,但不能以“data[2]”开头。因此将额外信息作为参数传递是有用的。

另请注意,当您将其转换为正则表达式时,有些事情会发生变化。$n+1将具有新的含义(这是错误的)。但是,简单变量仍然会被插值,因此如果您在正则表达式主体中将其声明为新变量:my $npp = ...。但即便如此,你也会发现它仍然不起作用。当您添加类似的辅助语句时{say "n is $n"},您会发现您没有传递有效的参数。这是因为在没有大括号的类似代码的上下文中(当您使用表达式作为另一个匹配器的参数时),rakudo 不会更新匹配变量。添加大括号时,将重新计算或重新缓存当前匹配变量。这个 hack 看起来像是一个拼写错误,所以我建议您添加一条注释来解释空大括号。最终代码是这样的:

my regex nplus1($n) {
 :my $npp=$n+1;
 $npp
}
my regex nnplus1 { (\d+) {} <nplus1($0)> }
say "123124" ~~ &nnplus1;

在这种情况下(基本上是递归),我喜欢通过更改参数中的数据而不是更改函数体中的数据来使事情变得更整洁:<nplus1($0+1)>而不是定义:my $npp = $n+1;.

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

如何在 Perl 6 中将子项放入正则表达式中? 的相关文章

随机推荐

  • Python 方法解析顺序

    有人可以解释给定代码的输出以及 python MRO 在这种情况下如何工作吗 class A object def go self print go A go class B A def go self super B self go pr
  • 解组切片中的 2 个不同结构

    我的输入 json 数据是这样的 无法更改 来自外部资源 Url test url Name testname FormName Test 2018 FormNumber 43 FormSlug test 2018 我有两个始终与数组中的数
  • 在 @ManytoMany 关系和具有额外列的查找表的情况下,无法检索 Spring HATEOAS 嵌入资源对象

    我无法检索嵌入的 我正在使用 Spring boot spring data rest 和 spring JPA 我的数据库中有3张表 user 能力 user competency 带有额外列的连接 复合表 User Entity Tab
  • DataView.Sort - 不仅仅是 asc/desc (需要自定义排序)

    我有一个根据数据集构建的报告 数据集使用 Sort 属性对数据进行排序 我知道我可以创建这样的排序表达式 字段降序 字段2升序 但我现在需要的是一种进行自定义排序的方法 在 SQL 中 我可以通过执行以下操作来执行自定义排序 order b
  • 循环遍历 IContextMenu

    如何循环遍历 IContextMenu 的所有项目和子项目并列出所有可用动词 到目前为止 我已经从 JCL 中提取了以下工作代码 function DisplayContextMenuPidl const Handle THandle co
  • 如何使用 EPplus 在 Excel 中获得部分单元格样式?

    我的单元格中有一些斜体文本和一些非斜体文本 如何保留格式 我查看了 OfficeOpenXml Style ExcelStyle 并看到悬空的粗体 斜体等选项 但这些选项适用于整个单元格 有没有办法使用 eppplus 来判断哪些文本以某种
  • 点击加载更多 WordPress 帖子 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在使用 WordPress 开发一个网站 几乎每天都会发布帖子 现在的问题是帖子列表变得有点长 我想要以下内容 在每 xx 数量 张贴之后出现按钮 可以加载下一个 xx 数量 帖
  • UITableView 更改“无结果”消息

    给定一个带有 UISearchBar 的 UITableViewController how是否将表视图中显示的 无结果 文本 输入任何字符后 更改为 按名称搜索 之类的内容 原因是相关搜索是远程执行的 并且大约有第二个延迟 因此我只能在用
  • IDE 中缺少“项目页面选项”,该怎么办?

    当我使用D2007时我已经习惯了Project gt Project Page Options保留和查看一些自由格式的项目注释 外部参考的功能 这些几乎无法在内置 HTML 中轻松查看 designer 等 现在我有 Delphi XE 和
  • 带有 Node.js 的 jQuery 插件

    我在我的 node js 应用程序中使用 jQuery 和 jsdom 此外 我想使用 jQuery 插件 例如 jQuery diff 但我找不到如何做到这一点 还有出路吗 在文档中创建脚本标记以将脚本加载到其中 例子 createWin
  • 将 JPA 和 JDBC 操作组合到一个事务中

    因此 我有一个应用程序 其中包含一些遗留的 JDBC 调用 我需要使用一些额外的 JPA 操作来更新它们 我需要能够将 JDBC 调用和 JPA 调用作为同一数据库事务的一部分进行 如果重要的话 我正在使用 OpenJPA 2 1 1 和
  • 如何让4个元素绕一圈旋转?

    首先我想说我是jquery的初学者 我想让这些 div 沿顺时针方向绕一圈移动 直径为 500px 我该怎么做呢 div class textBox div div class textBox div div class textBox d
  • 如何将sqlite数据库直接存储在sd卡上

    我想在 sdcard 中创建我的 sqlite 数据库而不是默认路径 我也想从 sdcard 访问我的所有数据 我已经使用过这段代码 private static class OpenHelper extends SQLiteOpenHel
  • redirect_stderr 不起作用(Python 3.5)

    python3 from contextlib import redirect stderr import io f io StringIO with redirect stderr f simulates an error erd 如上所
  • Angular.bootstrap 抛出错误

    我正在尝试将我的网站迁移到 Angular 但速度很慢 当前情况是我有一个纯 HTML 登录页面 其中有一个用于打开忘记密码弹出窗口的链接 我已将 忘记密码 页面迁移到 Angular 所以我正在做的是 当用户单击链接时 我通过 getsc
  • 为什么C程序第一次运行时速度慢10倍

    我使用排序的 C 程序第一次运行速度比其他时候慢 10 倍 它使用整数文件进行排序 即使我更改数字 程序仍然运行得更快 当我重新启动电脑时 第一次程序运行速度慢了 10 倍 我用time来计算时间 即使不再需要 操作系统也会将数据保存在 R
  • 自定义表情符号和动画表情符号不起作用 [discord.py-rewrite]

    我最近构建了一个简单的命令来测试自定义表情符号和动画表情符号的格式 这是命令的内容 bot command async def say ctx text await ctx send lt ono 521148278079881219 gt
  • 在 Sublime Text 中设置我自己的语法

    有时我使用 Sublime Text 来编写提醒 我总是使用相同的布局来完成此任务 如下所示 gt Title gt gt Subtitle gt gt gt Comment gt Title gt gt Where a gt 代表制表符
  • Google Apps 脚本 - 在独立脚本上使用 Google 的文件选择器

    我正在创建一个应用程序 要求用户从其云端硬盘中选择一个文件夹 我正在努力设置 Picker API 遵循本文档我使用他们的 Hello World 脚本设置了我的项目 但在更改 devlopedKey 和 clientID 后 我测试代码以
  • 如何在 Perl 6 中将子项放入正则表达式中?

    这就是我正在努力做的事情 gt my sub nplus1 n n 1 gt my regex nnplus1 d nplus1 0 gt 123 nnplus1 P6opaque no such attribute pos in type