# File mrbgems/mruby-struct/mrblib/struct.rb, line 49
def _inspect(recur_list)
return "#<struct #{self.class}:...>" if recur_list[self.object_id]
recur_list[self.object_id] = true
name = self.class.to_s
if name[0] == "#"
str = "#<struct "
else
str = "#<struct #{name} "
end
buf = []
self.each_pair do |k,v|
buf.push [k.to_s + "=" + v._inspect(recur_list)]
end
str + buf.join(", ") + ">"
end
Extracts the nested value specified by the sequence of key objects
by calling dig at each step, returning nil if any
intermediate step is nil.
# File mrbgems/mruby-struct/mrblib/struct.rb, line 91
def dig(idx,*args)
n = self[idx]
if args.size > 0
n&.dig(*args)
else
n
end
end
Calls the given block for each element of self and pass the
respective element.
ISO 15.2.18.4.4
# File mrbgems/mruby-struct/mrblib/struct.rb, line 14
def each(&block)
self.class.members.each{|field|
block.call(self[field])
}
self
end
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
# File mrbgems/mruby-struct/mrblib/struct.rb, line 27
def each_pair(&block)
self.class.members.each{|field|
block.call(field.to_sym, self[field])
}
self
end
Describe the contents of this struct in a string.
15.2.18.4.10(x)
# File mrbgems/mruby-struct/mrblib/struct.rb, line 74
def inspect
self._inspect({})
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
# File mrbgems/mruby-struct/mrblib/struct.rb, line 40
def select(&block)
ary = []
self.class.members.each{|field|
val = self[field]
ary.push(val) if block.call(val)
}
ary
end