summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDaniel Bovensiepen <[email protected]>2012-06-21 15:01:13 +0800
committerDaniel Bovensiepen <[email protected]>2012-06-21 15:01:13 +0800
commit162b3625d0f7ab3cba2163544bf0a2d1256d3000 (patch)
treeeb23481a818d22622f72122ef08f9b3b51fb4ce9
parenta686ad66ddda77c399fc611f578bcfb586c8fe36 (diff)
downloadmruby-162b3625d0f7ab3cba2163544bf0a2d1256d3000.tar.gz
mruby-162b3625d0f7ab3cba2163544bf0a2d1256d3000.zip
Only open struct class if there is actually already a class
-rw-r--r--mrblib/struct.rb78
1 files changed, 41 insertions, 37 deletions
diff --git a/mrblib/struct.rb b/mrblib/struct.rb
index 4b6d767a9..5d0ede90f 100644
--- a/mrblib/struct.rb
+++ b/mrblib/struct.rb
@@ -2,45 +2,49 @@
# Struct
#
# ISO 15.2.18
-class Struct
- ##
- # Calls the given block for each element of +self+
- # 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
+if Object.const_defined?(:Struct)
+ class Struct
- ##
- # Calls the given block for each element of +self+
- # and pass the name and value of the respectiev
- # element.
- #
- # ISO 15.2.18.4.5
- def each_pair(&block)
- self.class.members.each{|field|
- block.call(field.to_sym, self[field])
- }
- self
- end
+ ##
+ # Calls the given block for each element of +self+
+ # 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+
- # 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
+ ##
+ # Calls the given block for each element of +self+
+ # and pass the name and value of the respectiev
+ # element.
+ #
+ # ISO 15.2.18.4.5
+ def each_pair(&block)
+ self.class.members.each{|field|
+ block.call(field.to_sym, self[field])
+ }
+ self
+ end
+
+ ##
+ # 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
+