2012-03-16 37 views
16

thể trùng lặp:
Ruby $stdout vs. STDOUT

STDERR thường ưa thích hơn sử dụng $stderr, hoặc ngược lại?

Còn khoảng STDOUT$stdout thì sao?

+4

Tôi nghĩ câu hỏi của bạn đã được trả lời ở nơi khác: http://stackoverflow.com/questions/6671716/ruby-stdout-vs-stdout –

Trả lời

19

Ngược lại, việc sử dụng $stderr là thích hợp hơn.

Lý do cho điều đó là $stderr dưới dạng biến toàn cầu có thể được gán lại, trong khi STDERR làm hằng số không nên được gán lại (nó làm tăng cảnh báo).

Thông thường cả hai đều trỏ đến cùng một tệp lỗi chuẩn, nhưng trong một số trường hợp, bạn có thể tạm thời chuyển hướng tất cả đầu ra của bạn ở nơi khác (ví dụ: tới tệp nhật ký hoặc vào bộ đệm chuỗi). chỉ cần gán lại $stderr và tất cả mã của bạn sẽ tôn trọng điều đó (nếu bạn đủ thông minh để sử dụng $stderr thay vì STDERR ở nơi đầu tiên).

+0

Mặc dù tôi không biết liệu các hàm bên trong có sử dụng 'STDERR' hoặc' $ stderr hay không '. Bạn có thể phải thực hiện tất cả các bài viết và đọc một cách rõ ràng, tại thời điểm đó bạn nên sử dụng một biến số chuyên dụng khác. – Linuxios

+0

@Linux: "Chức năng nội bộ" nào sẽ ghi vào stderr? Điều duy nhất nảy ra trong tâm trí tôi là những cảnh báo mà bạn có thể tiêu diệt bằng cách sửa chữa chúng. –

+0

Xin lỗi. Tôi có nghĩa là 'STDOUT' và' $ stdout' liên quan đến 'puts' và' gets'. Rất tiếc. – Linuxios

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