Flip Flop Operator in Ruby[Rubyでのトリガ操作]

1935 ワード

翻訳はFlip Flop Operator in Ruby redditで見たもので、これまで見たことがないので、一緒に勉強します~E文がよくないのでご指導ください
トリガオペレータは奇妙なruby特性であり、多くの人がその存在を意識していない.この特性はperlスタイルから受け継がれているが、ほとんど使われていない.この文章では、トリガオペレータ[flip-flop operators]とは何かを見て、彼がどのように使用しているかを学びます.
フリップフロップオペレータ[flip-flop operators]とは?
トリガオペレータとrangeオペレータ(.)同様に、条件はオペレータの両方に宣言されます.次のようになります.
(1..20).each do |x|
  puts x if x == 5 .. x == 10
end
#=>
5
6
7
8
9
10
  • 最初の式がtrueになるまで、式全体の結果はfalseであった.
  • 以上の条件が成立すると、2番目の式がtrueになる前に、式の結果はtrueとなる.

  • 上記の例では、x=5以降x=10の前に式が成立するので、5から10という数字が出力されます.
    その他の例
    もう1つの例を挙げて、オペレータのより多くの動作を見てみましょう.インデントマークと逆インデントマークのあるファイルを解析すると想像してみてください.インデント記号に触れるたびにインデントが開き、インデント記号に触れるとインデントがオフになります.
    この例では、テキストを処理してみましょう.
    zero indentation
    indent
    inside block
    dedent
    after the block
    indent
    another block
    dedent
    end of file
    

    出力後、次のように見えます.
    zero indentation
      indent
      inside block
      dedent
    after the block
      indent
      another block
      dedent
    end of file
    

    この例では、インデントの状態を追跡する必要があります.トリガオペレータの処理により、目の前が明るくなります.
    lines = File.readlines('somefile')
    
    lines.each do |line|
      if line =~ /^indent/ .. line =~ /^dedent/
        puts " " + line
      else
        puts line
      end
    end
    

    このオペレータは少し役に立ちました.「indent」が含まれている場所から、「dedent」に出会った場所まで、各行の開始に2つのスペースを追加することができます.
    このプロパティはrubyから削除されますか?
    この特性を除去するissueが提案されている.ruby 2.0がリリースされる前に、Matzはこの特性を削除するにはruby 3まで待つべきだと言った.0.
    Under the current plan, I am not going to remove flip-flop from 2.0, since we are not going to made incompatible changes anytime soon. We have to wait until 3.0. (–Matz)
    私はこのような文法の強い依存者ではなく、私のコードではほとんど使いません.この特性が将来除去されると、あまりエラーは発生しません.
    ここ数年、この問題ではあまり活動していないため、ある日この特性が除去されるとは確信できません.しかし、この文法を理解することで、このコードを見たとき、不思議ではありません.
    外部リンク
    Feature #5400 - Remove flip-flops in 2.0 - the discussion on the Ruby issue tracker