2009-07-10 5 views
19

私はフリップフロップがチュートリアルのおかげでどのように動作するのか理解していると思うが、教授のために考案された例がある。あなたは実際にフリップフロップをどのように使用したのか、またはフリップフロップを使用する方法の例を誰でも得ることができますか?Rubyのフリップフロップはいつ有用でしょうか?

私は実際のアプリケーションを探していますが、別のデモだけではありません。このツールはどのような問題を解決できますか?

リンクはhttp://vision-media.ca/resources/ruby/ruby-flip-flop-or-range-operatorsでしたが、最近はスパムと思われます。ここで

答えて

20

は、ファイルからのみ、特定の行をプリントアウト(rubycentral.com articleから取られた)例を示します

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

これは、あなたが次の内容のファイルがあることを前提としています

first 
second 
third 
fourth 
fifth 
sixth 

プログラムは次のもののみを出力します:

third 
fourth 
fifth 

アイデアはそれです左のイベントが発生するまで値はtrueになり、次に右のイベントが発生するまでtrueのままです。これが適切に使用されれば、これは構文上の砂糖の素晴らしい部分ですが、物を読みやすくするためには注意が必要です。

+2

-1:未テストコード。これは何だと思いますか? '$ _ =〜〜/ third /)..($ _ =〜/ five /)'(あなたのコードではないことは分かっていますが、廃止された機能を使用するコードを拡散し続ける必要はありません)。 – rampion

+0

これは実際にどのように使用されますか?ファイルから3行目から5行目までを印刷する必要がありますか(コーディングに値する十分な時間)? – kajaco

+4

約3と5を忘れてしまいます。開始タグと終了タグで区切られたファイルのセクションを抽出することです。なぜそれが現実の世界の例であるのが良いかを知りたがっていれば幸いです。今度は、同等の非フリップフロップバージョンには、状態の変数を追加するif文が必要になります。 – inger

4

多くの行を含むHTMLテーブルの奇数/偶数行のハイライトは、有効なユースケースのようです。

過去にRailsでテーブルをレンダリングするときに、これまで数回以上エレガントではないものを書きました。

8

私はJamesの答えにいくつかの具体的な例を加えたいと思います。私は正規表現に基づいてテキストのセクションを引き出すためにこの演算子を使用しました。

Net :: SSHを使用してリモートサーバー上でコマンドを実行するツールを作成しました。この特定のサーバーは、セッションがログインセッションであったかどうかに関係なく、MOTDを印刷する厄介な習慣を持っていました。これにより、コマンドを実行して出力を取得したときに、多くのゴミが戻ってきました。私はサーバー設定で多くの揺れがなかったので、区切り文字を印刷してプログラムを実行し、別の区切り文字を印刷した小さなスクリプトを作成しました。出力は次のようになりました。

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 
<<<<<<<<<<<<<<<<<<<<<<<<< 

フリップフロップ演算子は、必要な出力を持つコードのセクションだけを抜き出すための便利なショートカットでした。私はマッチを開始するために25以上の ">"と一致する正規表現を使用し、一致を終了するためには25未満の "<"を使用しました。私が見てきた

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

出力

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

ほとんどの例では、正規表現に基づいてファイルや配列のうち、データの塊を引っ張っ関与しています。 gitのマージの競合、従来のフラットファイルシステム(ファイルに書き込まれた構造体など)からの特定のレコード、ログファイルを引き出すことがいくつかの例です。

基本的には、個々の行の内容ではなく、開始と終了のデータに基づいてセクションを取り出す必要があるときはいつでも。単純な正規表現だけではなく、パーザを書くより複雑ではありません。

関連する問題