3

私は現在 Ruby を学んでいますが、何をするかを理解できないようですif /start/../end... 助けてください。

while gets
  print if /start/../end/
end
4

2 に答える 2

5

あなたは Ruby を初めて使用すると言ったので、最初に、この例で正規表現 (regex) を扱っていることに注意してください。これは、2 つのスラッシュで区切られたものすべてです。

/start/   # a regular expression literal

正規表現は、より大きな文字列から特定の文字の組み合わせを照合する強力な方法です。

"To start means to begin." =~ /start/  #=> true, because 'start' is in the string. 

二重ドット表記はフリップフロップ演算子であり、おそらく Perl から継承された物議を醸す構造であり、混乱を招く可能性があるため、通常は使用をお勧めしません。

これは次のことを意味します: 左側のオペランドが true になるまで、まとめて false に評価されます。その時点で、集合的に true と評価されます。ただし、右側のオペランドが true と評価されるまでのみ true のままになります。その時点で、集合的に再び false と評価されます。

したがって、上記の例を使用すると:

while gets
 print if /start/../end/
end
  1. 'start' が入力されるまで、式全体が false であり、何も出力されません。
  2. 'start' が入力されると、式全体が true になるため、この時点以降のすべての入力も出力されます。(「開始」ではないにもかかわらず)
  3. 「end」が入力されるとすぐに、式全体が false と評価され、その時点から何も出力されません。
于 2012-12-17T13:51:46.897 に答える
3

これはフリップフロップ演算子と呼ばれます。詳しくは「Ruby フリップフロップ演算子」を参照してください。

于 2012-12-17T11:33:53.507 に答える