2011-12-18 6 views
0

Я пытаюсь использовать CoffeeScript в приложении Rails 3.1. Тем не менее, я не могу , чтобы понять, как разбить длинные строки в CoffeeScript без получения выше ошибкиCoffeeScript: неожиданная ошибка INDENT

Например, как/где бы вы ломаете следующую строку кода

alert x for x in [1,2,3,4,5] when x > 2 

, если вы хотел что-то вроде

alert x for 
    x in [1,2,3,4,5] 
    when x > 2 

В моем vimrc, я поставил

ts=2, sw=2 and I expand tabs. 

И все же я не могу получить что-то такое же простое, как линия выше, чтобы нормально работать.

Мой Gemfile.lock показывает кофе-скрипт-2.2.0 с кофе-скрипт-источник 1.1.3

ответ

6

Если у вас есть понимание, что это слишком долго, вы можете разбить его с \, как @brandizzi упоминает, но я думаю, что вы, возможно, лучше удач просто используя постижения, где они имеют смысл и расширение для «регулярной» коды, где они не делают:

alert x for x in [1,2,3,4,5] when x > 2 

... можно переписать в виде ...

for x in [1,2,3,4,5] 
    alert x if x > 2 

... или даже ...

for x in [1,2,3,4,5] 
    if x > 2 
    alert x 

Другими словами, понимание является синтаксическим сахаром для кратких, сжатых фрагментов - вам не нужно использовать их для всего.

+0

Точно. CoffeeScript 'for' /' while'/'до', например' if'/'except', может использоваться как постфикс, так и префикс. Если префикс, вам нужно использовать либо отступы, либо 'then'. –

1

Я не понимаю, внутренние детали синтаксиса CoffeeScript, поэтому я не могу сказать, что происходит не так подробно , Однако ошибка немного ясна: вы не можете установить новую строку между for и ее переменной итератора. Кроме того, вы не получили эту ошибку еще, но вы не можете поместить новую строку между итерированным объектом и предложением when. Однако, если вы действительно хотите это сделать, это легко: поместите обратную косую черту в конце первой и второй строк.

console.log x for \ 
    x in [1,2,3,4,5] \ 
    when x > 2 
4

Вы пытаетесь распространить понимание на несколько строк, что не допускается. Это либо должно быть на одной линии, либо быть правильной петлей. Ваша одна линия версия работает, как ожидалось, так что я буду показывать версию цикла:

for x in [1..5] when x > 2 
    alert x 

Вы можете найти полезным, чтобы бросить мелкие вещи, как это в компилятор CoffeeScript в http://jashkenas.github.com/coffee-script/, чтобы увидеть, если они собираете к тому, что вы ожидаете.

Смежные вопросы