Commit 050cb3d7 authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #92 from bovi/master

Add documentation
parents 1032e9ee 04f74c9c
#
##
# Enumerable
#
# ISO 15.3.2
module Enumerable
# 15.3.2.2.1
##
# Call the given block for each element
# which is yield by +each+. Return false
# if one block value is false. Otherwise
# return true. If no block is given and
# +self+ is false return false.
#
# ISO 15.3.2.2.1
def all?(&block)
st = true
if block
......@@ -23,7 +32,14 @@ module Enumerable
st
end
# 15.3.2.2.2
##
# Call the given block for each element
# which is yield by +each+. Return true
# if one block value is true. Otherwise
# return false. If no block is given and
# +self+ is true object return true.
#
# ISO 15.3.2.2.2
def any?(&block)
st = false
if block
......@@ -44,7 +60,13 @@ module Enumerable
st
end
# 15.3.2.2.3
##
# Call the given block for each element
# which is yield by +each+. Append all
# values of each block together and
# return this value.
#
# ISO 15.3.2.2.3
def collect(&block)
ary = []
self.each{|val|
......@@ -53,7 +75,14 @@ module Enumerable
ary
end
# 15.3.2.2.4
##
# Call the given block for each element
# which is yield by +each+. Return
# +ifnone+ if no block value was true.
# Otherwise return the first block value
# which had was true.
#
# ISO 15.3.2.2.4
def detect(ifnone=nil, &block)
ret = ifnone
self.each{|val|
......@@ -65,7 +94,13 @@ module Enumerable
ret
end
# 15.3.2.2.5
##
# Call the given block for each element
# which is yield by +each+. Pass an
# index to the block which starts at 0
# and increase by 1 for each element.
#
# ISO 15.3.2.2.5
def each_with_index(&block)
i = 0
self.each{|val|
......@@ -75,7 +110,11 @@ module Enumerable
self
end
# 15.3.2.2.6
##
# Return an array of all elements which
# are yield by +each+.
#
# ISO 15.3.2.2.6
def entries
ary = []
self.each{|val|
......@@ -84,11 +123,19 @@ module Enumerable
ary
end
# 15.3.2.2.7
# find(ifnone=nil, &block)
##
# Alias for find
#
# ISO 15.3.2.2.7
alias find detect
# 15.3.2.2.8
##
# Call the given block for each element
# which is yield by +each+. Return an array
# which contains all elements whose block
# value was true.
#
# ISO 15.3.2.2.8
def find_all(&block)
ary = []
self.each{|val|
......@@ -97,7 +144,14 @@ module Enumerable
ary
end
# 15.3.2.2.9
##
# Call the given block for each element
# which is yield by +each+ and which return
# value was true when invoking === with
# +pattern+. Return an array with all
# elements or the respective block values.
#
# ISO 15.3.2.2.9
def grep(pattern, &block)
ary = []
self.each{|val|
......@@ -108,7 +162,13 @@ module Enumerable
ary
end
# 15.3.2.2.10
##
# Return true if at least one element which
# is yield by +each+ returns a true value
# by invoking == with +obj+. Otherwise return
# false.
#
# ISO 15.3.2.2.10
def include?(obj)
st = false
self.each{|val|
......@@ -120,7 +180,14 @@ module Enumerable
st
end
# 15.3.2.2.11
##
# Call the given block for each element
# which is yield by +each+. Return value
# is the sum of all block values. Pass
# to each block the current sum and the
# current element.
#
# ISO 15.3.2.2.11
def inject(*args, &block)
raise ArgumentError, "too many arguments" if args.size > 2
flag = true # 1st element?
......@@ -137,11 +204,19 @@ module Enumerable
result
end
# 15.3.2.2.12
# map(&block)
##
# Alias for collect
#
# ISO 15.3.2.2.12
alias map collect
# 15.3.2.2.13
##
# Return the maximum value of all elements
# yield by +each+. If no block is given <=>
# will be invoked to define this value. If
# a block is given it will be used instead.
#
# ISO 15.3.2.2.13
def max(&block)
flag = true # 1st element?
result = nil
......@@ -161,7 +236,13 @@ module Enumerable
result
end
# 15.3.2.2.14
##
# Return the minimum value of all elements
# yield by +each+. If no block is given <=>
# will be invoked to define this value. If
# a block is given it will be used instead.
#
# ISO 15.3.2.2.14
def min(&block)
flag = true # 1st element?
result = nil
......@@ -181,11 +262,22 @@ module Enumerable
result
end
# 15.3.2.2.15
# member?(obj)
##
# Alias for include?
#
# ISO 15.3.2.2.15
alias member? include?
# 15.3.2.2.16
##
# Call the given block for each element
# which is yield by +each+. Return an
# array which contains two arrays. The
# first array contains all elements
# whose block value was true. The second
# array contains all elements whose
# block value was false.
#
# ISO 15.3.2.2.16
def partition(&block)
ary_T = []
ary_F = []
......@@ -199,7 +291,13 @@ module Enumerable
[ary_T, ary_F]
end
# 15.3.2.2.17
##
# Call the given block for each element
# which is yield by +each+. Return an
# array which contains only the elements
# whose block value was false.
#
# ISO 15.3.2.2.17
def reject(&block)
ary = []
self.each{|val|
......@@ -208,11 +306,14 @@ module Enumerable
ary
end
# 15.3.2.2.18
# select(&block)
##
# Alias for find_all.
#
# ISO 15.3.2.2.18
alias select find_all
##
# TODO
# Does this OK? Please test it.
def __sort_sub__(sorted, work, src_ary, head, tail, &block)
if head == tail
......@@ -250,7 +351,15 @@ module Enumerable
end
# private :__sort_sub__
# 15.3.2.2.19
##
# Return a sorted array of all elements
# which are yield by +each+. If no block
# is given <=> will be invoked on each
# element to define the order. Otherwise
# the given block will be used for
# sorting.
#
# ISO 15.3.2.2.19
def sort(&block)
ary = []
self.each{|val| ary.push(val)}
......@@ -260,7 +369,9 @@ module Enumerable
ary
end
# 15.3.2.2.20
# to_a
##
# Alias for entries.
#
# ISO 15.3.2.2.20
alias to_a entries
end
#
##
# Exception
#
# ISO 15.2.22
class Exception
# 15.2.22.4.1
##
# Raise an exception.
#
# ISO 15.2.22.4.1
def self.exception(*args, &block)
self.new(*args, &block)
end
......
#
##
# String
#
# ISO 15.2.10
class String
# 15.2.10.5.15
##
# Calls the given block for each line
# and pass the respective line.
#
# ISO 15.2.10.5.15
def each_line(&block)
# expect that str.index accepts an Integer for 1st argument as a byte data
offset = 0
......@@ -14,7 +20,13 @@ class String
self
end
# 15.2.10.5.18
##
# Replace all matches of +pattern+ with +replacement+.
# Call block (if given) for each match and replace
# +pattern+ with the value of the block. Return the
# final value.
#
# ISO 15.2.10.5.18
def gsub(*args, &block)
unless (args.size == 1 && block) || args.size == 2
raise ArgumentError, "wrong number of arguments"
......@@ -23,7 +35,13 @@ class String
### *** TODO *** ###
end
# 15.2.10.5.19
##
# Replace all matches of +pattern+ with +replacement+.
# Call block (if given) for each match and replace
# +pattern+ with the value of the block. Modify
# +self+ with the final value.
#
# ISO 15.2.10.5.19
def gsub!(*args, &block)
str = self.gsub(*args, &block)
if str != self
......@@ -34,12 +52,23 @@ class String
end
end
# 15.2.10.5.32
##
# Calls the given block for each match of +pattern+
# If no block is given return an array with all
# matches of +pattern+.
#
# ISO 15.2.10.5.32
def scan(reg, &block)
### *** TODO *** ###
end
# 15.2.10.5.36
##
# Replace only the first match of +pattern+ with
# +replacement+. Call block (if given) for each
# match and replace +pattern+ with the value of the
# block. Return the final value.
#
# ISO 15.2.10.5.36
def sub(*args, &block)
unless (args.size == 1 && block) || args.size == 2
raise ArgumentError, "wrong number of arguments"
......@@ -48,7 +77,13 @@ class String
### *** TODO *** ###
end
# 15.2.10.5.37
##
# Replace only the first match of +pattern+ with
# +replacement+. Call block (if given) for each
# match and replace +pattern+ with the value of the
# block. Modify +self+ with the final value.
#
# ISO 15.2.10.5.37
def sub!(*args, &block)
str = self.sub(*args, &block)
if str != self
......@@ -59,6 +94,9 @@ class String
end
end
##
# Call the given block for each character of
# +self+.
def each_char(&block)
pos = 0
while(pos < self.size)
......@@ -68,6 +106,8 @@ class String
self
end
##
# Call the given block for each byte of +self+.
def each_byte(&block)
bytes = self.unpack("C*")
pos = 0
......@@ -78,6 +118,9 @@ class String
self
end
##
# Modify +self+ by replacing the content of +self+
# at the position +pos+ with +value+.
def []=(pos, value)
b = self[0, pos]
a = self[pos+1..-1]
......@@ -86,7 +129,10 @@ class String
end
end
# include modules
##
# String is comparable
#
# ISO 15.2.10.3
module Comparable; end
class String
include Comparable
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment