ToffeeScript – 支持异步语法的CoffeeScript

ToffeeScript是CoffeeScript衍生,在完全兼容CoffeeScript的语法下提供了一些新的特性。

一、 特性一览

  1. 异步语法支持
  2. Ruby Symbol语法的字串
  3. 正则运算符 =~
  4. 正则Magic标识符 \& \~ \1..9

1. 异步语法支持

语法: 在调用的函数尾加上!(感叹号)
输入:

    do ->
      # ! always is a function
      foo_0_0!
      @va = obj.foo_2_1! 'pa', 'pb'
      # @ is inherited
      [va, @vb] = obj::foo_2_2! 'pa', 'pb'

    # another async block
    do ->
      @va = @foo! 'pa'

    # if, while and so on has block too
    if true
      va = foo!
    else
      vb = foo!

输出:

    var _this = this;

    (function() {
      var _this = this;
      return foo_0_0(function() {
        return obj.foo_2_1('pa', 'pb', function(va) {
          _this.va = va;
          return obj.prototype.foo_2_2('pa', 'pb', function(va, vb) {
            _this.vb = vb;
          });
        });
      });
    })();

    (function() {
      var _this = this;
      return this.foo('pa', function(va) {
        _this.va = va;
      });
    })();

    if (true) {
      foo(function(va) {});
    } else {
      foo(function(vb) {});
    }
a. 原理

ToffeeScript 会把

    [any expression] = foo!(params)
    other expression

转换为

    foo params, (any expression) =>
      other expression

因此

    [a = '3', @b = '4'] = foo!
    @a = foo!
    ...
    等等

都是有效的异步语法

2. Symbol语法的字串

ToffeeScript引用了Ruby Symbol的语法,但本质仍是字串,可以看成一种字串的便捷写法。
语法: 以:开头的字串 /^\:((?:\\.|\w|-)+)/
备注: – 是有效的字串部份,
输入:

    :hello_world
    :hello-world

输出:

    'hello_world'
    'hello-world'

3. 正则运算符 =~

语法: 字串 =~ 正则表达式
输入:

    "hello" =~ /\w+/

输出:

    var __matches = null;
    __matches = "hello".match(/\w+/);

4. 正则Magic标识符 \& \~ \1..9

Magic标识符:

    \~: the match
    \&: match[0]
    \1: match[1]
    \2: match[2]
    ...
    \9: match[9]

输入:

    if :hello =~ /^\w+$/
      console.info :matched

    if :333-444 =~ /^(\d+)-(\d+)$/
      console.info \1, \2

输出:

    (function() {
      var __matches = null;
      if (__matches = 'hello'.match(/^\w+$/)) console.info('matched');
      if (__matches = '333-444'.match(/^(\d+)-(\d+)$/)) {
        console.info(__matches[1], __matches[2]);
      }
    }).call(this);

二、 安装

npm install -g toffee-script

ToffeeScript有两个可执行文件 toffee and tcons 相对于CoffeeScript的 coffee 与 cake

三、 相关链接

ToffeeScript Github
CoffeeScript Github
COffeeScript 语法介绍

共1条Pingback
共3条评论
  1. Neuron Teckid @ 2013-03-05 11:26:40 回复

    似乎下面两段代码

    x = f!
    y = f!
    console.log(x + y)



    console.log(f! + f!)

    在 ToffeeScript 下是不同的, 前者在语义上是正确的. ToffeeScript 现在要求异步调用要处在语句的顶层表达式中么?

    • JiangMiao @ 2013-03-05 12:58:34

      是不支持,ToffeeScript只是单纯的把异步提前,没任何先进的功能。

  2. Neuron Teckid @ 2013-03-23 09:59:48 回复

    我把我之前的一些异步代码同步化的方法做了个简单总结, 放这里了 http://blog.bitfoc.us/?p=506
    不知是否有空赐教?

发表评论

电子邮件地址不会被公开。 必填项已用*标注