summaryrefslogtreecommitdiff
path: root/doc/syntax
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-01-16 22:50:54 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-01-16 22:50:54 +0000
commit038c535e18549740c34d63efc3326c8e12379317 (patch)
tree65afd631646fa493322a1270499664098f097b44 /doc/syntax
parent9ceb50972fb43acd0f714243fda3761dc2f6ab6e (diff)
* 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
Diffstat (limited to 'doc/syntax')
-rw-r--r--doc/syntax/control_expressions.rdoc59
1 files changed, 59 insertions, 0 deletions
diff --git a/doc/syntax/control_expressions.rdoc b/doc/syntax/control_expressions.rdoc
index 18dd40b..e3fc19d 100644
--- a/doc/syntax/control_expressions.rdoc
+++ b/doc/syntax/control_expressions.rdoc
@@ -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.
+