2012-02-12 44 views
9

Tôi muốn chuyển đổiHai đối số đối tượng trong coffeescript

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

vào CoffeeScript. Cách duy nhất tôi thấy là

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

Có vẻ như kỳ lạ rằng a: 'a'b: 'b' không thụt vào cùng khi họ về cơ bản symetric trong tình huống này.

+0

Chỉ vì bạn có thể bỏ dấu ngoặc đơn/parens trong coffeescript, điều đó không có nghĩa là bạn nên làm. Đây có lẽ là một trong những trường hợp "không nên". –

Trả lời

11

Hoặc bạn có thể sử dụng niềng răng, mà làm việc trong CS:

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

Phải, niềng răng và dấu ngoặc đơn (thường là) tùy chọn nhưng không có lý do gì để tránh các mâu thuẫn. –

1

Vâng, nếu bạn suy nghĩ về các quy tắc phân tích,

a: 'a', 
b: 'b' 

thực sự có nghĩa là

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

Vì đây không phải là hành vi mà bạn muốn, bạn cần phải biết phân tích cú pháp là phù hợp với b: là một đối tượng khác. Thụt lề sẽ làm điều đó cho bạn. Bây giờ đây không thực sự là một câu hỏi, nhưng tôi hy vọng nó sẽ giúp bạn hiểu lý do tại sao để làm điều đó theo cách bạn mô tả. Đó là cách đúng đắn.

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

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

Tôi xin lỗi, điểm của bạn ở đây là gì – Randomblue

+0

Chỉ hiển thị một cách khác để thể hiện JS của bạn. – matyr

28

Đặt một dấu phẩy trong một dòng tách ra, một thụt đầu dòng mức thấp hơn băm/đối tượng, vì vậy nó được xử lý như là một phần của lời gọi hàm.

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

điều này sẽ không hoạt động vì mức thụt đầu dòng giống như băm, vì vậy nó được coi là một phần của hàm băm.

console.log 
    a: 'a' 
    , 
    b: 'b' 
Các vấn đề liên quan