programming.nbk: Home | Index | Next Page: Ruby: case | Previous Page: Ruby: Arrays
A block is a chunk of code that gets passed to a method, which then executes the block's code with the yield keyword.
The block definition is started on the same line as the method call. If block fits on a single line, it is contained in curly braces {}. If the block extends over multiple lines it startes with do and ends with end.
A block may only appear in the source code after a method call, starting on the same line as the method call.
Example:
def threeTimes
yield
yield
yield
end
threeTimes { puts "Hello" }
The block can have arguments. They appear in the block definition between pipe characters:
def fibUpTo(max)
i1, i2 = 1, 1 # parallel assignment
while i1 <= max
yield i1
i1, i2 = i2, i1+i2
end
end
fibUpTo(1000) { |f| print f, " " }
The block can return a value. This is returned to the method as the value of the yield:
class Array
def find
for i in 0...size
value = self[i]
return value if yield(value)
end
return nil
end
end
[1, 3, 5, 7, 9].find {|v| v*v > 30 } >> 7
Blocks are not methods themselves, but can be converted into methods with the lambda of the Kernel module:
toast = lambda do
puts 'Cheers'
end
toast.call
programming.nbk: Home | Index | Next Page: Ruby: case | Previous Page: Ruby: Arrays
Notebook exported on Monday, 7 July 2008, 18:56:06 PM Eastern Daylight Time