mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Array bang methods should return nil if no change happen
This commit is contained in:
@@ -6,11 +6,17 @@ class Array
|
||||
result << ary.shift
|
||||
ary.delete(result.last)
|
||||
end
|
||||
self.replace(result)
|
||||
if result.size == self.size
|
||||
nil
|
||||
else
|
||||
self.replace(result)
|
||||
end
|
||||
end
|
||||
|
||||
def uniq
|
||||
self.dup.uniq!
|
||||
ary = self.dup
|
||||
ary.uniq!
|
||||
ary
|
||||
end
|
||||
|
||||
def -(elem)
|
||||
@@ -26,7 +32,8 @@ class Array
|
||||
def |(elem)
|
||||
raise TypeError, "can't convert to Array" unless elem.class == Array
|
||||
|
||||
(self + elem).uniq!
|
||||
ary = self + elem
|
||||
ary.uniq! or ary
|
||||
end
|
||||
|
||||
def &(elem)
|
||||
@@ -56,8 +63,22 @@ class Array
|
||||
ar
|
||||
end
|
||||
|
||||
def flatten!
|
||||
self.replace(self.flatten)
|
||||
def flatten!(depth=nil)
|
||||
modified = false
|
||||
ar = []
|
||||
self.each do |e|
|
||||
if e.is_a?(Array) && (depth.nil? || depth > 0)
|
||||
ar += e.flatten(depth.nil? ? nil : depth - 1)
|
||||
modified = true
|
||||
else
|
||||
ar << e
|
||||
end
|
||||
end
|
||||
if modified
|
||||
self.replace(ar)
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
def compact
|
||||
@@ -68,6 +89,10 @@ class Array
|
||||
|
||||
def compact!
|
||||
result = self.select { |e| e != nil }
|
||||
self.replace(result)
|
||||
if result.size == self.size
|
||||
nil
|
||||
else
|
||||
self.replace(result)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user