宏不允许定义词法变量

2023-11-23

此代码使用(实验性)宏:

use experimental :macros; 
macro new-var() { 
  quasi { 
    my $a = 42
  }
};
new-var; 
say $a

失败与Variable '$a' is not declared,尽管宏通过时没有错误。如果这是一个正确的宏声明,它会做什么?如果不是,有没有办法在宏中定义新变量?


moritz 关于宏状态的答案是正确的,尽管根据我对 007 中所做工作的了解,我认为即使使用 Perl 6 宏的有效实现,编写的程序也不会是正确的。

Perl 6 宏本质上不是文本的(C 宏是文本宏的一个示例)。 Aquasi是一个引号构造,很像我们对字符串和正则表达式的引号,除了它引用 Perl 6 代码,将其表示为 AST-ish 的东西。 (我曾经说过它会产生 AST,但人们已经意识到,如果要在准内部插入中缀,那么它就会具有优先级和结合性,而我们实际上无法为表达式直到插值之后。)

有一个“卫生”的宏观概念,默认情况下,在宏主体中声明的符号不应泄漏到应用宏的位置,因为它们很可能只是实现细节。人们必须明确要求将一个符号放入应用宏的编译上下文中。所以我希望该程序必须如下所示:

macro new-var() { 
    quasi { 
        my COMPILING::<$a> = 42
    }
};
new-var; 
say $a

请注意,这在今天的 Rakudo 中不起作用,尽管您可能会发现类似的东西可以在 007 中起作用。

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

宏不允许定义词法变量 的相关文章

  • 用宏包装函数(无需重命名)C

    我有兴趣通过包装现有函数调用来添加一些额外的逻辑without重命名它们 仅供测试 我发现的现有解决方案依赖于将函数包装在不同名称的宏中 这可能意味着更改大量代码 有什么建议么 请注意 我知道LD PRELOAD 但我有兴趣使用宏来检查传递
  • 在采用 ARM 处理器架构的 Android 上安装 Rakudo

    我正在尝试使用 Termux 在采用 armv7l 处理器架构的 Android 上安装 Rakudo 我尝试从源代码编译 但没有成功 然后有人指出了Termux用户没有用 https github com its pointless 和他
  • F# 类型提供程序与 Lisp 宏

    我一直在阅读有关 F 3 0 类型提供程序的内容 例如here http msdn microsoft com en us library hh156509 aspx 并且它们似乎基于一种编译时代码生成 在这方面我想知道它们与 Lisp 宏
  • 使用另一个宏(c 预处理器)生成宏的名称[重复]

    这个问题在这里已经有答案了 我可以使用宏生成函数的名称 该宏取自生成函数名称的 C 预处理器定义 https stackoverflow com questions 1253934 c pre processor defining for
  • 如何在 VS Code 宏中将焦点返回到编辑器,将 Python 文本发送到调试控制台?

    我尝试按键绑定宏以将 python 文本发送到调试控制台并将焦点返回到 Visual Studio Code 中的编辑器 这是我尝试过的 安装了vscode python https marketplace visualstudio com
  • raku 可以避免这个 Malformed UTF-8 错误吗?

    当我运行这个 raku 脚本时 my proc run tree du out proc out slurp close say 我在 MacOS 上遇到此错误 Malformed UTF 8 near bytes ef b9 5c 而不是
  • 是否可以从外部文件运行 openoffice 宏?

    我想从外部文件运行 OpenOffice 宏 喜欢 vlad leo soffice macro home vlad q vbs 并不是真正的答案 只是一个评论 以便提出这个问题 并希望得到答案 这可能与必须显式设置宏的权限有关 例如 编辑
  • 在 scala 宏中使用 LabelDef (2.10)

    我正在尝试 scala 2 10 宏功能 我使用时遇到问题LabelDef但在某些情况下 在某种程度上 我偷看了编译器的代码 阅读了摘录米格尔 加西亚的论文 http lampwww epfl ch magarcia但我还是卡住了 如果我的
  • 如何使用可变参数宏调用嵌套构造函数?

    我正在尝试在 Rust 中创建一个宏 让我可以编写 make list 1 2 3 代替 Node new 1 Node new 2 Node new 3 None 它应该适用于任意数量的 参数 包括零 这是我到目前为止所拥有的 macro
  • 可扩展的宏定义

    灵感来自于评论区 https stackoverflow com questions 23879410 is it possible to extend a function lambda macro in scheme 23879575
  • 对c中宏SQR的平方感到困惑[重复]

    这个问题在这里已经有答案了 这个问题是在模拟面试中问我的 真的很惊讶地发现尴尬的答案 考虑一个宏 define SQR x x x 示例1 SQR 2 prints 4 示例2 如果给出 SQR 1 1 则它不会求和 1 1 to 2反而
  • Julia 中基准和时间宏的区别

    我最近发现两个宏之间存在巨大差异 benchmark 和 time 在内存分配信息和时间方面 例如 benchmark quadgk x gt x 0 1 BenchmarkTools Trial memory estimate 560 b
  • 如何在“THEN”中打印“IF”条件的源代码

    我想在 THEN 部分打印 IF 条件的 Scala 源代码 例子 IF 2 2 lt 5 THEN println I am in THEN because sourceCodeOfCondition 现在我们跳过THEN部分 问题是 如
  • 如果未定义则跳过函数调用

    我有一个由不同模块组成的程序 模块通过函数调用互连 例如 State Init 调用各个模块的 init 函数 应可以禁用模块 从编译中排除 最简单的方法是使用预处理器定义 但这会生成大量代码 IF MODULE XXX COMPILE r
  • 另一个宏中的 Q_PROPERTY 宏

    如何放置Q PROPERTY另一个宏里面 辅助宏 define SimpleAllinOne member type public void Set member type arg member m member arg member ty
  • laravel 5 中 HTML 宏应该放在哪里?

    在 laravel 4 中 我曾经在多个视图中使用 HTML 宏 例如 HTML macro minipics function pic 为此我有一个macros php文件在 app文件夹 我找不到在 laravel 5 中放置宏的位置
  • 对C宏扩展和整数运算感到困惑[重复]

    这个问题在这里已经有答案了 可能的重复 一个谜语 C https stackoverflow com questions 5611724 a riddle in c 我对以下代码片段有几个问题 include
  • 在 Perl 6 中将正则表达式作为参数传递

    的延续这个问题 https stackoverflow com q 47218587 7730888 而且可能是一个更奇怪的 我可以例如连接两个regexes用一个sub 当然 我明白 如何用regex 下面的代码是完全错误的 但我希望它能
  • Rust 中声明变量的宏?

    在 C 中 可以编写声明变量的宏 如下所示 define VARS a b c int a b c 当然 这不是您通常想要做的事情 在实际的例子中 我希望开始工作 但它并不那么简单 define VARS data stride a b c
  • 如何在 Access 2010 中创建自定义 ID

    这个问题的标题可能不准确 因为我不确定如何提出这个问题 有没有办法让 AC 2010 中的 ID 字段具有常量部分 然后是用户将输入的 ID 的一部分 示例 EMP9066 我希望 ID 的 EMP 部分始终保持不变 用户不应更改它 并且

随机推荐

  • 将 GVim 配色方案更改为类似于命令行 Vim

    是否可以使 GVim 的配色方案与命令行版本 Vim 中的配色方案完全匹配 与白色背景的 GVim 相比 我更喜欢 Vim 的颜色 但我仍然想使用 GVim 因为 Shift 键在命令行版本上映射得不太好 是的 可以使 gvim 与终端 V
  • 感人片段

    任何人都可以建议我为此的算法 您将获得 x 轴上 N 个线段的起点和终点 这些片段中有多少可以被恰好两条垂直于它们的线接触到 即使是在它们的边缘 输入示例 3 5 2 3 1 3 1 5 3 4 4 5 5 1 2 1 3 2 3 1 4
  • 我可以指定 WPF DataGrid 中哪些列是可编辑的吗?

    我有一个带有自动生成列的 WPF 4 0 DataGrid 我只想允许用户编辑第一列 有一个简单的方法可以做到这一点吗 我试图添加 DataGridCell 样式并根据 ColumnName 第一列始终具有相同的名称 或 ColumnInd
  • 强制 IE7 进入标准渲染模式(不是怪癖)

    由于 IE7 在怪异模式下渲染 我在 IE7 中遇到显示问题 我通过显示 document compatMode 并返回 BackCompat 而不是 CSS1Compat 来确认这一点 使用 IE8 并恢复到 IE7 是可行的 因为这样可
  • 如何在 Springfox 中更改 Swagger UI index.html 徽标和标题内容?

    我正在记录使用 Spring Boot 2 4 3 创建的 APIspringfox swagger3 0 0 所以我现在有以下页面 我的客户想要将 Swagger UI 徽标更改为他们自己的 我做不到 我搜索并找到了一些解决方案 但它不起
  • 仅当应用程序未运行时显示推送通知 android

    在我的应用程序中 我集成了推送通知GCM 每当通知出现时它就工作正常 但即使用户位于应用程序内部 也会出现推送通知 我希望仅当用户位于应用程序外部时才显示通知 这是我的推送通知代码 Gcm广播接收器 public class GcmBroa
  • 初学者选择 DirectX 9 还是 DirectX 10?

    我想做一些项目 让我的简历对游戏公司更有吸引力 所以我要开始买书了 但我不知道应该从阅读 DirectX 9 或 10 api 书籍开始 DirectX10 很棒 但业界似乎正在 缓慢向 10 迈进 那么我应该使用 9 还是使用 10 我建
  • 为应用程序选择多个 Internet 连接之一

    我有一台具有几种不同互联网连接的计算机 LAN WLAN WiFi 或 3G 所有这些都是活动的 机器可以使用其中任何一个 现在我想告诉我的应用程序使用可用的连接之一 例如 我想告诉我的应用程序仅使用 WiFi 而其他软件可能使用其他功能
  • Android - 自定义语音操作的意图

    当我使用谷歌语音搜索时 我可以说 发送文本 谷歌将启动我的短信程序 我可以说 听 谷歌将启动我的默认音乐应用程序 我的应用程序是否可以注册它自己的 特殊短语 例如 MyApp DoSomething 然后让 Google 启动 MyApp
  • 更优雅的多行 JavaScript 字符串方法

    我知道如何在不使用 的情况下打印大字符串的唯一方法是使用 反斜杠 丑陋的 div div 有没有办法在 longString 不受污染的情况下做到这一点 php 有 foo 长多行字符串
  • Android Actionbar 设置选项卡宽度

    目前我正忙于为我的公司开发 WHMCS 应用程序 作为导航 我想使用操作栏中的选项卡功能 但是 如何编辑选项卡的宽度 我需要在一个屏幕上同时显示 5 个内容 而无需滚动 我已经尝试过一些这样的样式
  • 如何在样式表中的 URL 中换行

    我有一个包含很长行 数据网址 的样式表 无论如何 我可以将这些行分成更小的行吗 长线示例 background image url data image png base64 really long string 您可以通过将 URI 用引
  • 圆与圆段碰撞

    我正在努力寻找一个可靠的解决方案来检测圆和圆段之间的碰撞 想象一下游戏敌人的视场锥体 其中圆圈代表感兴趣的物体 底部的图表是我为了尝试解决一些可能的情况而绘制的 但我确信还有更多 我了解如何快速排除极端情况 我丢弃任何不与整个圆碰撞的目标
  • 如果 WebAppContext 启动失败,如何取消启动或关闭 jetty

    我正在使用 Maven Jetty 插件 如果任何 bean 失败 有没有办法阻止服务器启动或关闭 例如使用 maven jetty plugin 这是一个例子 2013 04 22 11 43 59 327 WARN oejw WebAp
  • Python中通过套接字发送和接收对象

    我在互联网上搜索了很多 但我还没有找到通过套接字发送对象并按原样接收它的解决方案 我知道它需要酸洗 我已经完成了 另一方面 它将其转换为字节并被接收 但是如何将这些字节转换为该类型的对象呢 process time data current
  • Homebrew 升级后 Jupyter Notebook 模块出现错误

    我已经使用 Jupyter 一段时间了 它运行得很好 我通过 Homebrew 安装了 Jupyter 和 Python 我在 MacOS 上运行 昨天 我运行了命令brew upgrade现在我的 Jupyter 笔记本无法找到任何已安装
  • JavaFX - SplitPane、调整大小和比例

    如何实现整个 SplitPane 的按比例调整大小 public class JfxSplitPaneTest extends Application Override public void start Stage stage throw
  • Ubuntu 14.04 - pm2 启动后重新启动后未启动

    我正在使用 pm2 启动 node js 进程 我希望在系统 Intel Atom 处理器上的 Ubuntu 14 04 启动时自动启动该进程 我已按照以下说明进行操作pm2 网站但没有成功 我的 dump pm2 似乎是正确的 但 pm2
  • 如何获取.Net Core中进程的CPU使用率和虚拟内存?

    在 NET Core中 如何获取给定进程的CPU使用率和虚拟内存 Google 搜索结果显示 PerformanceCounter 和 DriverInfo 类可以完成这项工作 但是 PerformanceCounter 和 DriverI
  • 宏不允许定义词法变量

    此代码使用 实验性 宏 use experimental macros macro new var quasi my a 42 new var say a 失败与Variable a is not declared 尽管宏通过时没有错误 如