使用 Scala 生成代码

2024-02-05

在 Scala 中使用 SBT 工具链时,是否可以编写一个任务来读取项目源代码的特殊部分以在编译时生成 scala 代码。

有什么想法甚至文章/教程吗?我正在寻找与 Template Haskell 非常相似的东西。


环树者.scala http://eed3si9n.com/treehugger/是一个专为代码生成而设计的库。

import treehugger.forest._
import definitions._
import treehuggerDSL._

val tree: Tree = Predef_println APPLY LIT("Hello, world!")

println(tree)
println(treeToString(tree))

上面的代码打印两行:

Apply(Ident(println),List(Literal(Constant(Hello, world!))))
println("Hello, world!")

treehugger 确实生成了 AST,但不符合 scalac 的 AST。

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

使用 Scala 生成代码 的相关文章

随机推荐

  • XSRF - 如何设置跨域 cookie

    我开发了 REST API 和两个 JavaScript 客户端 单页应用程序和本机应用程序 基于电子 在这两个客户端中 我的用户都通过 OAuth2 流程进行身份验证 将用户密码发送到服务器 获取访问令牌 以纯文本形式 和刷新令牌 以 h
  • 仅将边框添加到换行文本的底部

    我试图在一些换行文本上实现下划线 该下划线适合底行文本的宽度 同时仅出现在该底线下方 图1说明了期望的效果 Figure 1 使用这个 HTML h2 span class inline block optatur volendit inu
  • 加载TextureAtlas的状态

    我在基于 LibGdx 的游戏中使用TextureAtlas 随着图集大小的增加 加载时间也会增加 因此显示我在游戏中设置的动画会出现延迟 因此我希望获得纹理图集加载过程的状态 1 无论如何要获得状态吗 2 有听众吗 您可以以已使用此方法加
  • 如何在 swift ios 中刷新选项卡栏项目

    我做的应用程序就像Instagram与选项卡栏项目 在应用程序中我有simple user and company user 我有主视图控制器 MainTabBarController UITabBarController 有 5 个选项卡
  • 当从 super() 运行方法时,为什么字段不初始化为非默认值?

    我一定花了一个多小时试图找出一些意外行为的原因 我最终意识到字段没有按我的预期设置 在耸耸肩并继续之前 我想了解为什么会这样 在运行下面的示例时 我希望输出为 true 但它是 false 其他测试表明我总是得到该类型的默认值 public
  • 获取 OAuth 会话的过期时间

    为了授予或撤销对我的 webapi 的访问权限 我使用 OAuth 密码和令牌刷新工作流程 如果我理解正确的话 工作流程应该是这样的 使用用户名 密码 客户端 ID 进行身份验证 检索 accesstoken refreshtoken 和到
  • Swift:如何请求带有自签名证书的 URL?

    我正在打开 SSL 连接以在 Swift 中检索 JSON 但正在使用自签名证书对我自己的服务器进行测试 以下是 URL 请求的片段 var urlPath https myhost com get json var url NSURL N
  • 将 NSMutableArray 保存到 NSUserDefaults 的最佳方法是什么?

    我有一个名为 Occasion 的自定义对象 定义如下 import
  • 在 Highcharts 中动态附加加载或重绘事件函数

    我需要在 Highcharts 中动态附加 onload 或 redraw 事件函数 我知道在配置步骤中进行此操作 例如 container highcharts chart events load function event funct
  • 优化期间 Java 会内联方法吗?

    我想知道 JVM javac 是否足够聪明来转动 This line string a foo string foo return bar string bar return some complicated string computat
  • 使用 if(1 || !Foo()) 有什么理由吗?

    我读了一些遗留代码 if 1 Foo 是否有任何不写的理由 if Foo 两者是not相同 第一个永远不会评价Foo 因为1短路 为什么这样做 可能有人想强行进入then出于调试目的分支并将其留在那里 也可能是这是在源代码控制之前编写的 因
  • 如何指定编辑器打开crontab文件? “export EDITOR=vi”不起作用

    我使用的是 Red Hat Enterprise Linux 5 我想设置 vim 编辑器来编辑 crontab 文件 如果我跑echo EDITOR 我得到了活力 但当我跑步时crontab e 我得到了不同的编辑器 很可能你的VISUA
  • 使用 data.table 包进行条件二进制连接和引用更新

    这是我现实生活中的问题 我觉得可以很容易地解决 但我在这里遗漏了一些明显的东西 我有两个大数据集TK and DFT library data table set seed 123 TK lt data table venue id rep
  • 如何使用 Python 获取触发我的 Azure 函数的 inputBlob 的名称

    我有一个天蓝色的函数 它是由放入 blob 存储的文件触发的 我想知道如何 如果可能 获取触发该函数的 blob 文件 的名称 我尝试这样做 fileObject os environ inputBlob message Python sc
  • 尝试启动 Atom/Nuclide 时未找到流

    我正在研究react native我正在使用的应用程序AtomIDE 我在打开时遇到错误Atom 我安装了babel cli and babel preset flow使用 npm 命令 npm install save dev babel
  • 将 MS Access 表单和类/模块递归导出到文本文件?

    我在一个古老的留言板上发现了一些代码 它很好地从类 模块和表单中导出了所有 VBA 代码 见下文 Option Explicit Option Compare Database Function SaveToFile Save the co
  • Java 8 流式添加两个或多个列表中的值

    我试图进入 Java 8 并了解流和 lambda 来解决各种问题 但陷入了这个特定的问题 我通常使用 forEach 并将值存储在 Map 中来解决 您将如何编写代码来使用 Java 8 中的新功能获取预期列表 List
  • 具有选择条件的 pandas 数据框中的高效最大选择

    我有一个带有列的 pandas 数据框 除其他外 user id and start time 我想高效且易读地找到与每个用户的最大值关联的所有行start time 例如 如果这是我的数据 user id start time A B C
  • 批量传输和 Android USB API

    我有一个程序 我尝试通过 USB 将我的 Android 设备连接到网络摄像头 我在一些事情上遇到了麻烦 即正确传输数据 我尝试过使用bulkTransfer 但似乎无法识别它的使用情况 我一直在尝试寻找可能对我有帮助的例子 例如here
  • 使用 Scala 生成代码

    在 Scala 中使用 SBT 工具链时 是否可以编写一个任务来读取项目源代码的特殊部分以在编译时生成 scala 代码 有什么想法甚至文章 教程吗 我正在寻找与 Template Haskell 非常相似的东西 环树者 scala htt