Во-первых, я бы сказал, что два массива в строке не очень понятный шаблон.Итак, давайте немного разберемся с этим.
cross = (A, B) ->
for a in A
for b in B
a+b
alert JSON.stringify(cross [1,2], [3,4])
Здесь происходит то, что внутреннее создает замыкание, которое имеет свой собственный коллектор понимания.Таким образом, он запускает все b, а затем возвращает результаты в виде массива, который помещается в родительский сборщик результатов понимания.Вы как бы ожидаете возвращаемое значение из внутреннего цикла, что немного странно.
Вместо этого я просто собрал бы результаты сам.
cross = (A, B) ->
results = []
for a in A
for b in B
results.push a + b
results
alert JSON.stringify(cross [1,2], [3,4])
Или, если вы все еще хотите это сделатьнекоторые сумасшедшие понимание магии:
cross = (A, B) ->
results = []
results = results.concat a+b for b in B for a in A
results
alert JSON.stringify(cross [1,2], [3,4])
является ли это ошибка в CS или нет, это немного спорно, я полагаю.Но я бы сказал, что при работе с вложенными итераторами рекомендуется выполнять более явную обработку результатов понимания.