扩展 Play Framework 2.4.x 背后的方法

Posted

技术标签:

【中文标题】扩展 Play Framework 2.4.x 背后的方法【英文标题】:Extending Methodology Behind Play Framework 2.4.x 【发布时间】:2016-01-29 11:47:56 【问题描述】:

我有语言设计背景,想开始将一个功能移植到 Play 框架(Scala 版本)中。但是,我很难找到糖化或扩展框架核心背后的方法。所以关于Play的扩展,我有以下几点要问:

    AST 更新:我应该将 Play 视为古典意义上的语言吗?在这种情况下需要更新 AST 和代码生成模块吗?通常对于语言扩展,我会扩展 AST,然后更新代码生成函数,以便新的 AST 生成现有的 AST(不要再发明***了)。

    存储库和相关文档:如果第 1 点成立,我查看 repository 并没有得到任何扩展解析器/代码生成管道的文档。唯一可用的资源是代码本身和它们的 cmets?

注意:我看到 Play encourages 为贡献编写模块,但是我想移植的功能迫切需要在编译时的不同阶段使用 AST;我认为使用这些模块是不可能的。

【问题讨论】:

我认为这是您正在寻找的存储库:github.com/playframework/twirl Twirl 是 Payframework 的诱人语言。解析器/编译器都是独立的模块,我很确定。模板语法基于 scala,所以我猜你可以说是的,它是它自己的语言。 【参考方案1】:

Play 是一个 Web 框架而不是一种语言,twirl 只是用于操作输出的模板引擎,而 Scala 是您想要扩展的语言。 Scala 支持宏 http://docs.scala-lang.org/overviews/macros/usecases,这将使您能够访问 AST 来创造您的魔法。

祝你好运,新功能让我们大吃一惊。

【讨论】:

以上是关于扩展 Play Framework 2.4.x 背后的方法的主要内容,如果未能解决你的问题,请参考以下文章

Play Framework 2.4.x - 覆盖默认的 Actor 系统创建

Play Framework 2.4.x 自定义部署脚本

迁移到 2.4.x (Java) 后在 Play Framework 中运行测试时出错

Play Framework [2.4.x] - 模块路由特定名称因“资产不是包的成员”而失败

模板的 Play Framework 自定义 java 扩展

Play 2.4.x - 资产复制