Можно ли сделать генерацию кода в Coffeescript? - PullRequest
0 голосов
/ 19 ноября 2011

Скажем, у меня есть немного Coffeescript (с Underscore.js ), как это:

someData =
  hello: 'haha'
_(3).times (index) ->
  someData["key-#{index}"] = index

Значение someData будет тогда:

hello: 'haha'
key-0: 0
key-1: 1
key-2: 2

Было бы неплохо, если бы у Coffeescript был какой-то синтаксический сахар, позволяющий мне написать что-то вроде этого:

    someData =
      hello: 'haha'
<%
    _(3).times (index) ->
%>
      key-#{index}: index

, что приведет к someData, значение которого будет идентично оригиналу.

Есть ли такая возможность в Coffeescript?

Ответы [ 3 ]

5 голосов
/ 19 ноября 2011

Короткий ответ: Нет.

Более длинный ответ: Этот тип синтаксиса выходит за рамки намерений CoffeeScript быть простым языком, который ~ 1: 1 с JavaScript.Тем не менее, вы можете использовать другой язык шаблонов поверх CoffeeScript.На самом деле, в Rails 3.1 довольно просто получить файл .coffee.erb, в котором код Ruby можно использовать для генерации кода CoffeeScript, как и в вашем гипотетическом примере.

1 голос
/ 19 ноября 2011

В дополнение к ответу Тревора: генерация кода (a'la Lisp) действительно мощная, но вы также можете создавать структуры с некоторыми базовыми абстракциями. Для вашего примера (используется пара функций из этого mixin ):

data = _(
  hello: 'haha'
).merge(_([0..2]).mash (x) -> ["key-" + x, x])
0 голосов
/ 01 ноября 2013

Короткий ответ: Да, вроде.

Чуть менее короткий ответ: Вы можете делать то, что нужно после ОП, в хорошем стиле, поскольку coffeescript написан на coffeescript (который написан на coffeescript;).Sth, как ERB-шаблоны, вероятно, лучший выбор, если ваш сценарий использования очень прост, но нет ничего лучше, чем программно манипулировать структурами AST для действительно мощного и многоразового генерирования кода.

В этом отношении Coffeescript показывает что-то вроде-сорта на полпути, как http://en.wikipedia.org/wiki/Homoiconicity (радость шуток), но не совсем.

Вот пример: http://blog.davidpadbury.com/2010/12/09/making-macros-in-coffeescript/

ностальгические размышления следуют за

"javascript"был вдохновлен http://en.wikipedia.org/wiki/Scheme_(programming_language) ... до того, как он был назван javascript ... и поэтому coffeescript как бы возвращает JS к своим корням, исключая маркетинговый трепет в его синтаксисе, который был заложен из-за непродуманногоМикроуправление со стороны руководителей Sun & Netscape.

...