如何在 Boo 中创建嵌套宏

发布于 2024-08-20 02:37:54 字数 254 浏览 4 评论 0原文

我正在 Boo 中创建嵌套宏,我编写了这个程序:

macro text:
  macro subMacro:
    text["Text"] = "Hello World"

  return [|
    block:  
      System.Console.WriteLine( "Hello World" );
  |]

但是我在代码的第三行中收到错误“未知标识符:'文本'”。

I am creating nested macros in Boo, I wrote this program:

macro text:
  macro subMacro:
    text["Text"] = "Hello World"

  return [|
    block:  
      System.Console.WriteLine( "Hello World" );
  |]

But I am getting the error "Unknown Identifer: 'text'" in the 3rd line of the code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烟雨凡馨 2024-08-27 02:37:54

您收到的错误可能与调用宏的代码中缺少导入有关。

例如,如果您的宏位于名为 foo 的命名空间中,则需要添加

import foo

At 调用代码的顶部。

修复此编译器问题后,您可能遇到的第二个问题是错误

“未知标识符'块'(BCE0005)

要解决此问题,请在准引用部分后添加 .Body,如下所示:

import Boo.Lang.Compiler.Ast

macro text:
    macro subMacro:
        text["Text"] = "Hello world"

    return [|
        block:
            System.Console.WriteLine("Hello World");
    |].Body

编辑- 恕我直言,宏有点黑暗艺术要获得更多帮助,您应该尝试 boo 邮件列表,或者优秀的 BOO 中的 DSL

The error you are getting is likely to do with a missing import in the code where the macro is being called from.

If your macro is in a namespace named foo for example, you will need to add

import foo

At the top of the calling code.

A second issue you may run into once you fix this compiler issue is the error

"Unknown identifier 'block' (BCE0005)

To fix this, add a .Body after the quasi-quotation section like this:

import Boo.Lang.Compiler.Ast

macro text:
    macro subMacro:
        text["Text"] = "Hello world"

    return [|
        block:
            System.Console.WriteLine("Hello World");
    |].Body

EDIT - IMHO macros are a bit of a dark art. For more help, you should try the boo mailing list, or the excellent DSLs in BOO

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文