2012-02-12 12 views
9

Quiero convertirdos argumentos de objeto en CoffeeScript

console.log({ 
    a: 'a' 
}, { 
    b: 'b' 
}); 

en CoffeeScript. La única forma que he encontrado es

console.log 
    a: 'a', 
    b: 'b' 

Parece extraño que a: 'a' y b: 'b' no están sangrados lo mismo cuando son esencialmente simétrico en esta situación.

+0

El hecho de que pueda dejar de usar llaves/paréntesis en coffeescript, no significa que deba hacerlo. Este es probablemente uno de los casos "no debe". –

Respuesta

11

O usted podría utilizar llaves, que hacen el trabajo en el CS:

console.log {a:'a'}, {b:'b'} 
+2

Derecha, llaves y paréntesis son (por lo general) opcionales pero no hay razón para contorsiones para evitarlos. –

1

Bueno, si se piensa en las reglas de análisis,

a: 'a', 
b: 'b' 

significa en realidad

{ a: 'a', b: 'b' } 

Dado que este no es el comportamiento que desea, es necesario comunicar al analizador que la línea con b: es otro objeto. La sangría lo hará por usted. Ahora bien, esto no era realmente una pregunta, pero espero que te ayude a entender por qué hacerlo de la manera que describes. Es la manera correcta.

1
$ coffee -bce 'console.log(a: "a"; b: "b")' 
// Generated by CoffeeScript 1.2.1-pre 

console.log({ 
    a: "a" 
}, { 
    b: "b" 
}); 
+0

lo siento, ¿cuál es su punto aquí? – Randomblue

+0

Simplemente mostrando otra forma de representar su JS. – matyr

28

Deja un coma en una línea separada, nivel de una muesca menos de el hash/objeto, por lo que es tratado como parte de la invocación de la función.

console.log 
    a: 'a' 
, # indentation level matters! 
    b: 'b' 

esto no funcionará porque el nivel de sangrado es el mismo que el hachís, por lo que se considera parte del hash.

console.log 
    a: 'a' 
    , 
    b: 'b' 
Cuestiones relacionadas