ACI
[1, 2, 3]
のコンマが無駄なので
[1 2 3]
と省略できるようになった。
0.2.2 では文法をこねくりまわして実現したが、パーサの負担が大きいのでそれは諦め、より単純に字句解析時にトークンを補うことにした。例えば
.. NUMBER NUMBER ..
を見つけたら
.. NUMBER , NUMBER ..
にする。
Automatic Semicolon Insertion ならぬ Automatic Comma Insertion。
ckup
https://github.com/mauricemach/coffeekup の劣化コピー。
これで JS に続き HTML も書かずに済む。次は CSS かな。
Coco 0.2.0
https://github.com/satyr/coco/tree/0.2.0
CoffeeScript 1.0.0 のリリースに合わせてこちらもバージョンを繰り上げた。
以下は 0.1 → 0.2 で可能になった書き方の一部。
a[0]['@'] |
a.0.\@ |
[arguments[1], arguments[2]] |
@@[1, 2] |
[o['+'], o['-']] |
o<[+ -]> |
[x[0], x[1]] = y |
x[0, 1] = y |
{a: x.a, b: x.b} = y |
x{a, b} = y |
@x += z[0]; @y += z[1] |
[@x, @y] += z |
tmp if tmp = f() |
that if f() |
try catch _e then 1 |
try catch 1 |
(new class extends C) import k:v |
C::{k:v} |
rest = a.slice(i, ?)
配列 a の i 番目以降をコピーしたいとき、
a.slice(i)
と通常は第二引数を省略するが、状況に応じて切り替えたい場合は
a.slice(i, excludeLast ? -1 : x)
のように何か値を渡すことになる。この x を何にすべきか((無論 a.length
とはしたくない))。splice
で痛い目にあっているので調べざるを得ない。
http://jsdo.it/satyr/slice_rest
void 0 |
1/0 |
9e9 |
|
---|---|---|---|
IE8/Fx3 | ng | ok | ok |
Sf5/GC8 | ok | ok | ok |
案の定 JScript と SpiderMonkey が非ES的挙動を示す。
7. If end is undefined, let relativeEnd be len; else let relativeEnd be ToInteger(end).
http://sideshowbarker.github.com/es5-spec/#x15.4.4.10
9e9
安定である。
rest = a.splice(i, ?)
配列 a の i 番目以降を抜き出したいとき、
a.splice(i, a.length)
だと冗長なので単に省略して
a.splice(i)
と書いていたが、少し前に JScript で失敗することを知って
a.splice(i, 1/0)
((1/0 === Infinity
))と書くようになり、でつい今日、今度は JSC が受け付けないことを知った。
http://jsdo.it/satyr/splice_rest
omit | 1/0 |
9e9 |
|
---|---|---|---|
IE8 | ng | ok | ok |
Sf5 | ok | ng | ok |
Fx3/GC8 | ok | ok | ok |
ES 的には splice(1)
は splice(1, 0)
相当らしくカオス。
仕方ないのでこれからは 9e9
((.length
の上限 -1>>>0
より大きければなんでもいい)) を使うことにする。