summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ruby.html.markdown24
1 files changed, 18 insertions, 6 deletions
diff --git a/ruby.html.markdown b/ruby.html.markdown
index 861a94ad..52321ff6 100644
--- a/ruby.html.markdown
+++ b/ruby.html.markdown
@@ -5,6 +5,7 @@ contributors:
- ["David Underwood", "http://theflyingdeveloper.com"]
- ["Joel Walden", "http://joelwalden.net"]
- ["Luke Holder", "http://twitter.com/lukeholder"]
+ - ["Tristan Hume", "http://thume.ca/"]
---
```ruby
@@ -158,11 +159,6 @@ hash['number'] #=> 5
# Asking a hash for a key that doesn't exist returns nil:
hash['nothing here'] #=> nil
-# Iterate over hashes with the #each method:
-hash.each do |k, v|
- puts "#{k} is #{v}"
-end
-
# Since Ruby 1.9, there's a special syntax when using symbols as keys:
new_hash = { defcon: 3, action: true}
@@ -193,7 +189,12 @@ end
# HOWEVER
# No-one uses for loops
-# Use `each` instead, like this:
+# Under the hood for loops use the each method which takes a "block".
+# A block is a bunch of code that you can pass to a method like each.
+# It is analogous to lambdas, anonymous functions or closures in other programming languages.
+
+# The each method runs the block multiple times passing a counter.
+# You can iterate over a range like this:
(1..5).each do |counter|
puts "iteration #{counter}"
@@ -204,6 +205,17 @@ end
#=> iteration 4
#=> iteration 5
+# You can also surround blocks in curly brackets:
+(1..5).each {|counter| puts "iteration #{counter}"}
+
+# You can also iterate over the contents of data structures using each.
+array.each do |element|
+ puts "#{element} is part of the array"
+end
+hash.each do |key, value|
+ puts "#{key} is #{value}"
+end
+
counter = 1
while counter <= 5 do
puts "iteration #{counter}"