写点什么

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:172703
用户头像

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

关注

评论

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

法线贴图可以实现什么样的3D效果

3D建模设计

3D渲染 材质纹理贴图 3D材质编辑

低代码搭建工程项目管理方案:实现高效智能的数字化管理

天津汇柏科技有限公司

低代码

源码补丁神器—patch-package

京东科技开发者

java进行数据库操作的并发控制的2种方法

华为云开发者联盟

Java 数据库 后端 华为云 华为云开发者联盟

【鸿蒙千帆起】《钢岚》成为首款基于HarmonyOS NEXT开发的战棋新游

HarmonyOS开发者

HarmonyOS

【堡垒机小问答】堡垒机最早起源于哪里?是国外吗?

行云管家

云计算 网络安全 堡垒机 云堡垒机

华为云开发者日,让开发者成为产业发展的决定性力量

华为云开发者联盟

开发者 华为云 华为云开发者联盟 华为云开发者日

PBR纹理贴图类型详解

3D建模设计

3D渲染 材质纹理贴图 3D材质编辑

位移贴图、凹凸贴图和法线贴图之间的差异

3D建模设计

3D渲染 材质纹理贴图 3D材质编辑

3D游戏角色建模纹理贴图处理

3D建模设计

3D渲染 材质纹理贴图 3D材质编辑

不可避免,制造企业要在供应链“韧性”上下苦功

用友BIP

数智采购

Curve 如何演进 (1):从 EuroSys'23 CFS 论文看文件系统

OpenCurve

分布式 云原生 文件存储 分布式文件存储 分布式文件系统

某乳品龙头企业,以精细化费用管理降低企业费效比

用友BIP

降本增效

跨境通讯

cts喜友科技

通信 通讯

强大的音频格式转换工具:dBpoweramp Music Converter 激活最新

胖墩儿不胖y

Mac软件 音频格式转换器 音频格式管理

S3 调用次数减少 98% | 探索 OpenDAL RangeReader 的奥秘

Greptime 格睿科技

数据库 时序数据 OpenDAL

“踩坑”经验分享:Swift语言落地实践

百度Geek说

ios swift 开发语言 企业号12月PK榜

测试开发 | 人工智能时代的挑战与机遇:数据隐私保护探析

测吧(北京)科技有限公司

测试

低代码技术特点揭秘:构建灵活安全的多租户数据生态

天津汇柏科技有限公司

低代码

TF-IDF算法是什么呢?

小齐写代码

泛互联网行业A/B测试全解析:产品优化的创新之道

字节跳动数据平台

大数据 ab测试 企业号12月PK榜 对比试验 数字化增长

3D 建模中的法线贴图解释

3D建模设计

3D渲染 材质纹理贴图 3D材质编辑

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