我试图让一个对象跨越多行,就像在JavaScript中一样,但Coffeescript拒绝它。
c_mat = new THREE.MeshPhongMaterial( { ambient: 0x030303, color: 0xdddddd,
specular: 0x009900, shininess: 300, shading: THREE.SmoothShading } )
我被迫在行尾添加\
:
c_mat = new THREE.MeshPhongMaterial( { ambient: 0x030303, color: 0xdddddd, \
specular: 0x009900, shininess: 300, shading: THREE.SmoothShading } )
我还可以将所有名字放在不同的行上,但在某些情况下,我更喜欢将它们打包在一起。
\
行延续和多行是否是我在CoffeeScript中的唯一选择?
答案 0 :(得分:3)
如果您使用CoffeeScript,请不要只编写JavaScript。
c_mat = new THREE.MeshPhongMaterial
ambient: 0x030303
color: 0xdddddd
specular: 0x009900
shininess: 300
shading: THREE.SmoothShading
CoffeeScript documentation on object literals
编辑以使其更清晰:
这确实构建了一个作为参数传递的对象。现在让我们假设您有“位置参数和对象”,您可以编写
c_mat = new THREE.MeshPhongMaterial(
x
y
color: 0xdddddd
specular: 0x009900
shininess: 300
shading: THREE.SmoothShading
)
相当于
c_mat = new THREE.MeshPhongMaterial(x, y, {
color: 0xdddddd,
specular: 0x009900,
shininess: 300,
shading: THREE.SmoothShading
});
答案 1 :(得分:2)
Javascript忽略换行符,完全取决于{}[](),
之类的字符来标记对象,块和数组。 Coffeescript允许那些(在大多数情况下)但也注意换行和缩进。有时,这些方法的组合会混淆编译器。如果我不确定它将如何编译,我会比较一些简单的情况。
在Try Coffeescrpt标签的coffeescript.org上,尝试以下这些行:
obj =
1:1
2:2
obj = {
1:1
2:2
}
obj = { 1:1, 2:2}
obj = { 1:1,\
2:2}
obj = { 1:1,
2:2
}
所有这些工作,产生相同的Javascript,除了最后一个。最后一个给出了“遗漏}”错误。
将\
视为转义换行符可能会有所帮助。所以第二个到最后一个变得与它上面的oneliner相同。
2个对象参数的一些工作示例:
foo
1:1
2:2
,
3:3
4:4
foo({1:1, 2:2}
{3:3, 4:4}
)
foo({1:1, \
2:2}
{
3:3
4:4}
)
foo x,
1:1, 2:2
,
3:3
4:4
答案 2 :(得分:1)
你应该使用Coffeescript的原生语法:
c_mat = new THREE.MeshPhongMaterial
ambient: 0x030303
color: 0xdddddd,
specular: 0x009900
shininess: 300
shading: THREE.SmoothShading