Коко в 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).

Другие вопросы по тегам