2011-10-07 02:24:01 +00:00
|
|
|
require 'pp'
|
|
|
|
|
2011-10-07 02:13:36 +00:00
|
|
|
def call_twice
|
2011-10-07 02:17:11 +00:00
|
|
|
puts "Calling your block."
|
|
|
|
ret1 = yield("very first")
|
|
|
|
puts "The value of your block: #{ret1}"
|
2011-10-07 02:13:36 +00:00
|
|
|
|
2011-10-07 02:17:11 +00:00
|
|
|
puts "Calling your block again."
|
|
|
|
ret2 = yield("second")
|
|
|
|
puts "The value of your block: #{ret2}"
|
2011-10-07 02:13:36 +00:00
|
|
|
end
|
|
|
|
|
2011-10-07 02:17:11 +00:00
|
|
|
call_twice do |which_time|
|
|
|
|
puts "I'm a code block, called for the #{which_time} time."
|
|
|
|
which_time == "very first" ? 1 : 2
|
|
|
|
end
|
2011-10-07 02:24:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
class Hash
|
|
|
|
def find_all
|
|
|
|
new_hash = Hash.new
|
|
|
|
each { |k,v| new_hash[k] = v if yield(k, v) }
|
|
|
|
new_hash
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
squares = {0=>0, 1=>1, 2=>4, 3=>9}
|
|
|
|
print "squares = "
|
|
|
|
pp squares
|
|
|
|
(squares.find_all { |key, value| key > 1 }).each { |k,v| puts "#{k}: #{v}" }
|