2013-07-25 21 views
9

Tâm là động cơ yaml mặc định kể từ ruby ​​1.9.3tại sao trình thông dịch viên psych yaml thêm ngắt dòng khoảng 80 ký tự?

Tại sao, oh tại sao tâm lý thêm ngắt dòng trong đầu ra của nó? Kiểm tra ví dụ bên dưới.

ruby -v # => ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-linux] 
require 'yaml' 

"this absolutely normal sentence is more than eighty characters long because it IS".to_yaml 
# => "--- this absolutely normal sentence is more than eighty characters long because it\n IS\n...\n" 

YAML::ENGINE.yamler = 'syck' 

"this absolutely normal sentence is more than eighty characters long because it IS".to_yaml 
# => "--- this absolutely normal sentence is more than eighty characters long because it IS\n" 
+1

Đây là phần trùng lặp của "[Tài liệu về tùy chọn Psych to_yaml?] (Http://stackoverflow.com/questions/9759302/documentation-for-psych-to-yaml-options/9759344)" –

Trả lời

9

Bạn sẽ phải định cấu hình tùy chọn #to_yaml của tâm hồn. Bạn rất có thể sẽ tìm thấy nó ở đây:

ruby-1.9.3-p125/ext/psych/emitter.c 

Và sau đó bạn có thể làm một cái gì đó như thế này:

yaml.to_yaml(options = {:line_width => -1}) 
+0

Cảm ơn bạn :) Điều này đã làm các trick. Bây giờ tôi có thể tiếp tục sự vui vẻ của tôi. – mla

-1

Tại sao việc YAML kết thúc dòng hay không khi nó nối tiếp dữ liệu?

Câu hỏi đặt ra là sau khi gói nó, YAML có thể xây dựng lại dòng đúng sau khi tải lại tệp không? Và, câu trả lời là, vâng, nó có thể:

require 'yaml' 
puts '"' + YAML.load("this absolutely normal sentence is more than eighty characters long because it IS".to_yaml) + '"' 

Những kết quả đầu ra:

"this absolutely normal sentence is more than eighty characters long because it IS" 

Dữ liệu đã được xuất bản, là trong một định dạng mà YAML hiểu. Đó là một khái niệm quan trọng, vì dữ liệu là của YAML vào thời điểm đó. Chúng ta có thể gây rối với nó trong một trình soạn thảo, và cộng/trừ/chỉnh sửa, nhưng dữ liệu vẫn là của YAML, bởi vì nó phải tải lại và thay đổi dữ liệu để các ứng dụng của chúng ta sử dụng nó. Vì vậy, sau khi dữ liệu thực hiện một chuyến đi khứ hồi thông qua YAML-land, nếu dữ liệu trả về trong cùng một hình thức khi nó rời đi, thì mọi thứ đều ổn.

Chúng tôi sẽ gặp sự cố nếu nó được tuần tự hóa và sau đó bị hỏng trong giai đoạn phân tích cú pháp, nhưng điều đó không xảy ra.

Bạn có thể sửa đổi một số hành vi của trình điều khiển Tâm lý của YAML khi nó đang tuần tự hóa dữ liệu. Xem câu trả lời cho "Documentation for Psych to_yaml options?" để biết thêm thông tin.

+4

Mục đích sử dụng YAML là con người có thể chỉnh sửa nó. Nếu không, không có nhiều điểm trong việc sử dụng nó; một số định dạng nhị phân sẽ tốt hơn. Và vì con người có thể chỉnh sửa các tập tin, nó làm cho (một số) cảm giác quan tâm đến sự xuất hiện trong định dạng YAML. – sawa

+0

Không đảm bảo rằng dữ liệu sẽ được lưu trữ dưới dạng chính xác. Tôi biết không có serializer nào đó. YAML lưu trữ nó dưới dạng có thể chỉnh sửa/đọc được hợp lý, dễ đọc hơn so với marshalling hoặc JSON. –

3
yaml.to_yaml(options = {:line_width => -1}) 

là ok để giải quyết vấn đề.

nhưng RuboCop nói

phân công ích để biến - tùy chọn.

nên

yaml.to_yaml(line_width: -1) 

là tốt hơn.