2013-10-01 16 views
193

Tôi đang cố gắng viết một từ điển YAML để quốc tế hóa dự án Rails. Tôi là một chút bối rối mặc dù, như trong một số tập tin tôi thấy chuỗi trong dấu ngoặc kép và trong một số không có. Một vài điểm cần xem xét:Tôi có cần báo giá cho chuỗi trong Yaml không?

  • example 1 - tất cả các chuỗi đều sử dụng dấu ngoặc kép;
  • example 2 - không có chuỗi nào (trừ hai số cuối) sử dụng dấu ngoặc kép;
  • số YAML cookbook nói: Các chuỗi kèm theo trong dấu ngoặc kép cho phép bạn sử dụng các escapings để biểu diễn các ký tự ASCII và Unicode. Điều này có nghĩa là tôi chỉ cần sử dụng dấu ngoặc kép khi tôi muốn thoát khỏi một số ký tự? Nếu có - tại sao họ sử dụng dấu ngoặc kép ở khắp mọi nơi trong ví dụ đầu tiên - chỉ vì lợi ích của lý do thống nhất/phong cách?
  • hai dòng cuối cùng của ví dụ 2 sử dụng ! - thẻ không cụ thể, trong khi hai dòng cuối cùng của ví dụ đầu tiên không - và cả hai đều hoạt động.

Câu hỏi của tôi là - quy tắc sử dụng các loại trích dẫn khác nhau trong YAML là gì. Có thể nói rằng:

  • nói chung, bạn không cần báo giá;
  • nếu bạn muốn thoát khỏi các ký tự, hãy sử dụng dấu ngoặc kép;
  • sử dụng ! với dấu nháy đơn, khi ...?!?

Cảm ơn bạn.

+0

liên kết thứ hai không phải là làm việc nữa, tôi đề nghị đưa các ví dụ của bạn vào câu hỏi. – heroin

Trả lời

283

Sau khi xem xét ngắn gọn về các sách dạy nấu ăn YAML trích dẫn trong câu hỏi và một số thử nghiệm, đây là giải thích của tôi:

  • Nói chung, bạn không cần dấu ngoặc kép.
  • Sử dụng dấu ngoặc kép để buộc chuỗi, ví dụ: nếu khóa hoặc giá trị của bạn là 10 nhưng bạn muốn nó trả về một Chuỗi và không phải là một Bản sửa lỗi, hãy viết '10' hoặc "10".
  • Sử dụng dấu ngoặc kép nếu giá trị của bạn bao gồm ký tự đặc biệt (ví dụ :, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, \).
  • Báo giá đơn cho phép bạn đặt hầu như bất kỳ ký tự nào trong chuỗi của bạn và sẽ không cố gắng phân tích cú pháp mã thoát. '\n' sẽ được trả lại dưới dạng chuỗi \n.
  • Báo giá kép phân tích cú pháp mã thoát. "\n" sẽ được trả lại dưới dạng ký tự cấp dữ liệu dòng.
  • Dấu chấm than giới thiệu một phương pháp, ví dụ: !ruby/sym để trả về một biểu tượng Ruby.

Dường như với tôi cách tiếp cận tốt nhất là không sử dụng dấu ngoặc kép trừ khi bạn phải làm vậy, và sau đó sử dụng dấu nháy đơn trừ khi bạn muốn xử lý mã thoát.

Cập nhật

"Có" và "Không" nên được kèm theo trong dấu ngoặc kép (đơn hoặc kép) hoặc nếu không họ sẽ được hiểu là TrueClass và FalseClass giá trị:

en: 
    yesno: 
    'yes': 'Yes' 
    'no': 'No' 
+7

Đó không phải là bức tranh đầy đủ. Ví dụ, '@' và \ 'có thể được sử dụng ở bất cứ nơi nào trong một chuỗi đơn giản ngoại trừ ngay từ đầu, bởi vì chúng là [các chỉ số dành riêng] (http://yaml.org/spec/1.2/spec.html#id2774228). –

+12

Tôi đã không cố gắng để cung cấp hình ảnh đầy đủ, chỉ cần một số quy tắc của ngón tay cái. Có, có vẻ như đôi khi, một số ký tự đặc biệt (chỉ số dành riêng) có thể được sử dụng mà không có dấu ngoặc kép (miễn là chỉ báo dành riêng không bắt đầu bằng vô hướng), nhưng không sử dụng dấu ngoặc kép bất cứ khi nào bạn thấy ký tự đặc biệt. –

+2

Chỉ cần một số thông tin bổ sung: bạn có thể bắt đầu một vô hướng với '%' nếu tài liệu của bạn bao gồm dòng chỉ thị cuối ('---') trong yaml 1.2 – peterjwest

Các vấn đề liên quan