说我有一些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中有这样的设施吗?
答案 0 :(得分:5)
简短回答:不。
更长的答案:这种语法将超越CoffeeScript的意图,即使用JavaScript作为一个简单的语言,约为1:1。但是,您可以在CoffeeScript之上使用另一种模板语言。实际上,使用Rails 3.1,拥有.coffee.erb文件非常简单,其中Ruby代码可用于生成CoffeeScript代码,就像您的假设示例一样。
答案 1 :(得分:1)
补充Trevor的答案:代码生成(a'la Lisp)确实很强大,但你也可以使用一些基本的抽象来构建结构。对于您的示例(它使用了此underscore mixin中的一些函数):
data = _(
hello: 'haha'
).merge(_([0..2]).mash (x) -> ["key-" + x, x])
答案 2 :(得分:0)
简短回答:是的,等等。
稍微简短的回答: 由于coffeescript是用coffeescript编写的(用coffeescript编写的),你可以用精美的风格做OP所追求的东西。像ERB模板一样,如果你的用例很简单,可能是一个更好的选择,但没有什么比编程操作AST结构更真实强大的&amp;可重复使用的代码生成。
在这方面,Coffeescript显示出几乎有点像http://en.wikipedia.org/wiki/Homoiconicity(lisps的喜悦)的中途,但不是真的。
这是一个例子: http://blog.davidpadbury.com/2010/12/09/making-macros-in-coffeescript/
怀旧的沉思
“javascript”的灵感来自于http://en.wikipedia.org/wiki/Scheme_(programming_language) ...之前它被称为javascript ...所以coffeescript有点将JS带回其根源,消除了其语法中的营销乱码,因为Sun&amp; amp; amp; amp; amp; amp; amp; amp; amp; Netscape高管。