Коко в LiveScript миграции
Я перевожу небольшой скрипт из Coco в LiveScript:
D = (obj, l = 20) ->
if (l > 0)
new
@[k] = (try D(v, l - 1) catch (e) e) for k, v in obj
else
obj
Этот код, который действителен в coco, не компилируется в LiveScript:
Ошибка разбора в строке 4: неожиданное 'FOR'
Я пытался изменить этот код следующим образом (для LiveScript):
D = (obj, l = 20) ->
if (l > 0)
new
for k, v of obj
@[k] = (try D(v, l - 1) catch (e) e)
else
obj
Но все равно он не компилируется:
неверное назначение в строке 5
Как переписать этот кокос сценарий в LiveScript? (Не простым JavaScript-способом - без использования временной переменной.)
1 ответ
Решение
Просто к вашему сведению, LiveScript имеет понимание объекта
D = (obj, l = 20) ->
if l > 0
{[k, try D(v, l - 1) catch => e] for k, v of obj}
else
obj
так что ответ таков catch (e) e
недопустимо в LS, потому что LS допускает выражения как катчи для деструктуризации (catch {msg}
) что означает, что вы должны передать его блок catch => e
(e
неявный, но вы можете сделать это явным: catch e => e
).