mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* doc/syntax/control_expressions.rdoc (Flip-Flop): Added a section on
the flip-flop. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38852 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
9ceb50972f
commit
038c535e18
2 changed files with 64 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
Thu Jan 17 07:50:26 2013 Eric Hodel <drbrain@segment7.net>
|
||||
|
||||
* doc/syntax/control_expressions.rdoc (Flip-Flop): Added a section on
|
||||
the flip-flop.
|
||||
|
||||
Thu Jan 17 06:59:51 2013 Eric Hodel <drbrain@segment7.net>
|
||||
|
||||
* doc/syntax/control_expressions.rdoc (if Expressions): Fixed markup
|
||||
|
|
|
@ -418,3 +418,62 @@ longer true, now you will receive a SyntaxError when you use +retry+ outside
|
|||
of a +rescue+ block. See {Exceptions}[rdoc-ref:syntax/exceptions.rdoc]
|
||||
for proper usage of +retry+.
|
||||
|
||||
== Flip-Flop
|
||||
|
||||
The flip-flop is rarely seen conditional expression. It's primary use is
|
||||
for processing text from ruby one-line programs used with <code>ruby -n</code>
|
||||
or <code>ruby -p</code>.
|
||||
|
||||
The form of the flip-flop is an expression that indicates when the
|
||||
flip-flop turns on, <code>..</code> (or <code>...</code>), then an expression
|
||||
that indicates when the flip-flop will turn off. While the flip-flop is on it
|
||||
will continue to evaluate to +true+, and +false+ when off.
|
||||
|
||||
Here is an example:
|
||||
|
||||
|
||||
selected = []
|
||||
|
||||
0.upto 10 do |value|
|
||||
selected << value if value==2..value==8
|
||||
end
|
||||
|
||||
p selected # prints [2, 3, 4, 5, 6, 7, 8]
|
||||
|
||||
In the above example the on condition is <code>n==2</code>. The flip-flop
|
||||
is initially off (false) for 0 and 1, but becomes on (true) for 2 and remains
|
||||
on through 8. After 8 it turns off and remains off for 9 and 10.
|
||||
|
||||
The flip-flop must be used inside a conditional such as +if+, +while+,
|
||||
+unless+, +until+ etc. including the modifier forms.
|
||||
|
||||
When you use an inclusive range (<code>..</code>) the off condition is
|
||||
evaluated when the on condition changes:
|
||||
|
||||
selected = []
|
||||
|
||||
0.upto 5 do |value|
|
||||
selected << value if value==2..value==2
|
||||
end
|
||||
|
||||
p selected # prints [2]
|
||||
|
||||
Here both sides of the flip-flop are evaluated so the flip-flop turns on and
|
||||
off only when +value+ equals 2. Since the flip-flop turned on in the
|
||||
iteration it returns true.
|
||||
|
||||
When you use an exclusive range (<code>...</code>) the off condition is
|
||||
evaluated on the following iteration:
|
||||
|
||||
selected = []
|
||||
|
||||
0.upto 5 do |value|
|
||||
selected << value if value==2...value==2
|
||||
end
|
||||
|
||||
p selected # prints [2, 3, 4, 5]
|
||||
|
||||
Here the flip-flop turns on when +value+ equals 2 but doesn't turn off on the
|
||||
same iteration. The off condition isn't evaluated until the following
|
||||
iteration and +value+ will never be two again.
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue