2012-06-11 27 views
6

mở lên irbWindows lựa chọn 'rối tung lên Ruby được' phương pháp

  1. loại gets. Nó sẽ hoạt động tốt.
  2. Sau đó thử system("choice /c YN") Nó sẽ hoạt động như mong đợi.
  3. Bây giờ hãy thử lại gets, nó hoạt động kỳ quặc.

Ai đó có thể cho tôi biết tại sao điều này là?

EDIT: Đối với một số làm rõ về hành vi "lẻ", nó cho phép tôi nhập gets, nhưng không hiển thị cho tôi các ký tự và tôi phải bấm phím enter hai lần.

+0

Bạn nên rõ ràng hơn về bản chất của hành vi kỳ quặc. Tôi đã thử nó, và nhận thấy rằng nó không chấp nhận dữ liệu trừ khi tôi nhấn phím enter hai lần, sau khi chạy lệnh 'system (" choice/c YN ")'. Một bức thư thêm đôi khi cũng lẻn vào trong đó. Đó có phải là những gì xảy ra với bạn không? – KChaloux

+0

@KChaloux Đó chính là điều xảy ra, vâng. Tôi sẽ chỉnh sửa bài đăng của mình để bao gồm các chi tiết đó. – itdoesntwork

+8

Điều đó thật kỳ lạ, Windows hầu như không bao giờ làm rối tung mọi thứ. –

Trả lời

1

Xử lý đầu ra-đầu ra của thiết bị đầu cuối là nghệ thuật tối và bí ẩn. Bất cứ ai cố gắng để làm cho sản lượng colorized của bash làm việc trong các cửa sổ PowerShell qua ssh biết điều đó. (Và nhiều thói quen rút ngắn khác nhau như Ctrl + Backspace chỉ khiến mọi việc trở nên tồi tệ hơn.)

Một trong những lý do có thể khiến sự cố của bạn là xử lý ký tự đặc biệt. Mỗi thiết bị đầu cuối có thể nhập các ký tự trong số các chế độ khác nhau và nó phân tích đầu ra của riêng nó trong tìm kiếm các chuỗi ký tự nhất định để chuyển đổi trạng thái.

F.e. here người ta có thể tìm thấy chuỗi mã ANSI thoát, một trong những tiêu chuẩn có thể được hỗ trợ giữa các loại thiết bị đầu cuối khác nhau.

Xem ở đó Esc[5;45m? Điều đó sẽ làm cho tất cả các đầu ra sau đây nhấp nháy trên nền màu đỏ tươi. Và có nhiều thứ như thế ngoài kia.

Vì vậy, câu trả lời cho câu hỏi của bạn được thực hiện là - lệnh choice của bạn gây rối điều gì đó với chế độ đầu ra bằng cách sử dụng chuỗi thoát đặc biệt và ruby ​​bị ngắt ở chế độ đặc biệt của hoạt động đầu cuối.

Nhưng hữu ích hơn sẽ là liên kết đến HighLine gem documentation. Tại sao người ta có thể muốn thực hiện hành vi nền tảng cụ thể và gây khó chịu khi có thể thực hiện cùng với about 12 LOC? Tất cả sự tôn trọng đối với Gist đều được chuyển đến botimer, tôi chỉ tìm hiểu mã của anh ấy bằng cách tìm kiếm.

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