50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

Mozilla Sweet.js:用宏扩展 JavaScript

  • 2012-10-23
  • 本文字数:821 字

    阅读完需:约 3 分钟

Mozilla Sweet.js 使开发人员能够通过使用宏在语言中添加新的语法以丰富 JavaScript。这有助于开发者们为自己的风格定制 JavaScript 语法,或是为他们的空白领域,创建基于 JavaScript 的领域专用语言来扩展 JavaScript。

受到 Scheme 和 Rust 的启发,Sweet.js 使我们可以使用 macro 关键字定义卫生宏。这个例子用更简短的 def 替换了 function 关键字:

复制代码
macro def {
case $name:ident $params $body => {
function $name $params $body
}
}

现在,能够用 def 来定义函数了:

复制代码
def add (a, b) {
return a + b;
}

另一个更为有趣的示例介绍了 class 关键字:

复制代码
macro class {
case $className:ident {
constructor $constParam $constBody
$($methodName:ident $methodParam $methodBody) ... } => {
function $className $constParam $constBody
$($className.prototype.$methodName
= function $methodName $methodParam $methodBody; ) ...
}
}

class 使用示例:

复制代码
class Person {
constructor(name) {
this.name = name;
}
say(msg) {
console.log(this.name + " says: " + msg);
}
}
var bob = new Person("Bob");
bob.say("Macros are sweet!");

更多宏相关示例可在GitHub 上Mozilla/Sweet.js 项目的wiki 中找到,那里还能下到基于BSD 许可证的源代码

包含宏的Sweet.js 文件将通过 sjs 编译成纯 JavaScript 文件,无需使用任何额外的语法。 require-sweet 提供了 AMD 加载器 SweetJS gem 用于从 Ruby 编译 Sweet.js 文件。

Sweet.js 目前支持声明式的宏定义,然而据 Mozilla 研究所的 Tim Disney 所说,计划将要支持命令式的定义。这意味着宏可以包含编译时运行的任意 JavaScript 代码。

查看英文原文 Mozilla Sweet.js: Extending JavaScript with Macros


感谢崔康对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-10-23 07:172947
用户头像

发布了 27 篇内容, 共 90235 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

网页版思维导图哪个好用?这8款导图软件一定要知道!

彭宏豪95

思维导图 头脑风暴 在线白板 办公软件 思维导图软件

淘宝商品详情API接口:实时更新商品信息与数据

技术冰糖葫芦

API 编排 API 文档 API】 API 策略 pinduoduo API

【GaussDB(for MySQL)】 Big IN查询优化

华为云开发者联盟

数据库 华为云 华为云开发者联盟 华为云GaussDB(for MySQL) 企业号2024年5月PK榜

全面的Partisia Blockchain 生态 4 月市场进展解读

BlockChain先知

鸿蒙HarmonyOS实战-ArkUI组件(Shape)

蜀道山

鸿蒙 架构 HarmonyOS 鸿蒙开发 鸿蒙5.0

# OpenIM引入rag-gpt加速开发者支持

Geek_1ef48b

产品人生(1):从“MVP最小可行产品”看如何“走出拖延”

糖小妹来了

MVP 最小可行产品 走出拖延 拖延

Partisia Blockchain 生态4月盘点,更高效的数字经济解决方案

股市老人

Hologres RoaringBitmap在Lazada选品平台的最佳实践

阿里云大数据AI技术

大数据 阿里云 hologres

11个维度帮你有效评估产品可行性

糖小妹来了

产品分析 产品规划 产品可行性

关于Java Chassis 3的契约优先(API First)开发

华为云开发者联盟

华为云 华为云开发者联盟 企业号2024年5月PK榜 Java Chassis 3

Go-Zero自定义goctl实战:定制化模板,加速你的微服务开发效率(四)

王中阳Go

Go golang 微服务 Go进阶 gozero

一文盘点 Partisia Blockchain 生态 4 月市场进展

石头财经

RAG技术全解析:打造下一代智能问答系统

Geek_1ef48b

鸿蒙HarmonyOS实战-ArkUI组件(Image)

蜀道山

鸿蒙 架构 HarmonyOS 鸿蒙开发 鸿蒙5.0

垃圾收集分析的意义

FunTester

《编译原理》阅读笔记:p1-p3

codists

编译原理

Mozilla Sweet.js:用宏扩展JavaScript_JavaScript_Abel Avram_InfoQ精选文章