Commit 162b3625 authored by Daniel Bovensiepen's avatar Daniel Bovensiepen

Only open struct class if there is actually already a class

parent a686ad66
...@@ -2,45 +2,49 @@ ...@@ -2,45 +2,49 @@
# Struct # Struct
# #
# ISO 15.2.18 # ISO 15.2.18
class Struct
## if Object.const_defined?(:Struct)
# Calls the given block for each element of +self+ class Struct
# and pass the respective element.
#
# ISO 15.2.18.4.4
def each(&block)
self.class.members.each{|field|
block.call(self[field])
}
self
end
## ##
# Calls the given block for each element of +self+ # Calls the given block for each element of +self+
# and pass the name and value of the respectiev # and pass the respective element.
# element. #
# # ISO 15.2.18.4.4
# ISO 15.2.18.4.5 def each(&block)
def each_pair(&block) self.class.members.each{|field|
self.class.members.each{|field| block.call(self[field])
block.call(field.to_sym, self[field]) }
} self
self end
end
## ##
# Calls the given block for each element of +self+ # Calls the given block for each element of +self+
# and returns an array with all elements of which # and pass the name and value of the respectiev
# block is not false. # element.
# #
# ISO 15.2.18.4.7 # ISO 15.2.18.4.5
def select(&block) def each_pair(&block)
ary = [] self.class.members.each{|field|
self.class.members.each{|field| block.call(field.to_sym, self[field])
val = self[field] }
ary.push(val) if block.call(val) self
} end
ary
##
# Calls the given block for each element of +self+
# and returns an array with all elements of which
# block is not false.
#
# ISO 15.2.18.4.7
def select(&block)
ary = []
self.class.members.each{|field|
val = self[field]
ary.push(val) if block.call(val)
}
ary
end
end end
end end
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