2009-07-10 19 views
19

Tôi nghĩ rằng tôi hiểu làm thế nào một flip-flop hoạt động nhờ vào một hướng dẫn, nhưng ví dụ đó là contrived chỉ cho giảng dạy. Bất cứ ai có thể đưa ra một ví dụ về cách bạn đã thực sự sử dụng hoặc sẽ sử dụng một flip-flop?Khi nào thì một flip-flop của Ruby sẽ hữu ích?

Tôi đang tìm một ứng dụng trong thế giới thực, không chỉ là một cuộc biểu tình khác. Công cụ này có thể giải quyết vấn đề gì?

Liên kết được sử dụng là http://vision-media.ca/resources/ruby/ruby-flip-flop-or-range-operators, nhưng dường như là spam vào ngày này.

Trả lời

20

Dưới đây là một ví dụ (lấy từ một rubycentral.com article), nơi bạn in ra dòng nhất định từ một tập tin:

file = File.open("ordinal") 
while file.gets 
    print if ($_ =~ /third/) .. ($_ =~ /fifth/) 
end 

này giả định rằng bạn có một tập tin với các nội dung sau:

first 
second 
third 
fourth 
fifth 
sixth 

Chương trình sẽ chỉ in ra:

third 
fourth 
fifth 

Ý tưởng là nó giá trị là đúng cho đến khi sự kiện bên tay trái xảy ra, và sau đó vẫn đúng cho đến khi sự kiện bên tay phải xảy ra. Nếu được sử dụng đúng cách, đây có thể là một đoạn đường cú pháp đẹp, nhưng bạn cần phải cẩn thận để làm cho mọi thứ có thể đọc được.

+2

-1: mã chưa được kiểm tra. Bạn nghĩ điều này là gì, perl? bạn cần 'print if ($ _ = ~/third /) .. ($ _ = ~/fifth /)' (Tôi biết nó không phải là mã của bạn, nhưng không cần phải tiếp tục phát tán mã sử dụng các tính năng không dùng nữa). – rampion

+0

Việc sử dụng thực tế cho điều này là gì? Khi nào tôi có thể cần in các dòng từ 3 đến 5 từ một tệp (đủ thời gian để làm cho nó đáng giá)? – kajaco

+4

Quên khoảng 3 và 5. Đó là về việc trích xuất một phần của tệp được giới hạn bởi thẻ bắt đầu và thẻ kết thúc. Tôi hy vọng bạn thấy tốt hơn lý do tại sao đó là một ví dụ thế giới thực .. Bây giờ phiên bản không flip-flop tương đương sẽ liên quan đến việc thêm biến cho nhà nước, nhiều hơn nếu báo cáo: chỉ là mã phức tạp hơn. – inger

4

Làm nổi bật dòng/chẵn lẻ trong các bảng HTML có nhiều hàng có vẻ là trường hợp sử dụng hợp lệ.

Tôi đã viết một cái gì đó không thanh lịch như trên một vài lần trong quá khứ khi hiển thị bảng trong Rails.

8

Tôi muốn thêm vào câu trả lời của James với một số ví dụ cụ thể. Tôi đã sử dụng toán tử này để lấy ra các phần văn bản dựa trên các biểu thức chính quy.

Tôi đã viết một công cụ liên quan đến việc chạy các lệnh trên máy chủ từ xa thông qua Net :: SSH. Máy chủ cụ thể này có thói quen gây phiền nhiễu khi in MOTD bất kể phiên có phải là phiên đăng nhập hay không. Điều này dẫn đến việc nhận được rất nhiều rác khi tôi chạy một lệnh và lấy ra đầu ra. Vì tôi không có nhiều ảnh hưởng trong cài đặt máy chủ, tôi đã tạo một tập lệnh nhỏ để in ra dấu phân cách, chạy chương trình và sau đó in dấu phân cách khác. Đầu ra trông như thế này.

Welcome to Server X! 

+----------------------------------------------------------------------+ 
| Use of this server is restricted to authorized users only. User  | 
| activity may be monitored and disclosed to law enforcement personnel | 
| if any possible criminal activity is detected.      | 
+----------------------------------------------------------------------+ 

---------------------------------------------- 
    Setting up environment for user Adam. 
---------------------------------------------- 

>>>>>>>>>>>>>>>>>>>>>>>>> 
Program Output 
<<<<<<<<<<<<<<<<<<<<<<<<< 

Toán tử flip-flop là một phím tắt hữu ích để chỉ lấy phần mã với đầu ra tôi cần. Tôi đã sử dụng một regex mà phù hợp với 25 lớn hơn thans ">" để bắt đầu trận đấu, và 25 ít-thans "<" để kết thúc trận đấu.

output.each { |line| puts line if line[/^>{25}/] .. line[/^<{25}/] } 

Output

>>>>>>>>>>>>>>>>>>>>>>>>> 
Program Output 
<<<<<<<<<<<<<<<<<<<<<<<<< 

Hầu hết các ví dụ tôi đã nhìn thấy đã liên quan đến việc kéo khối dữ liệu ra khỏi một tập tin hoặc mảng dựa trên biểu thức thông thường. Một số ví dụ khác đến với tâm trí là kéo ra các xung đột hợp nhất git, một số bản ghi từ các hệ thống tệp phẳng kế thừa (như các cấu trúc được viết thành tệp) và các tệp nhật ký.

Về cơ bản, bất kỳ lúc nào bạn cần phải rút ra các phần dựa trên dữ liệu bắt đầu và kết thúc thay vì chỉ nội dung của một dòng riêng lẻ. Nó phức tạp hơn một chút so với chỉ một regex đơn giản, nhưng ít phức tạp hơn việc viết một trình phân tích cú pháp.

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