class Spruz::Bijection
Attributes
inverted[R]
Public Class Methods
[](*pairs)
click to toggle source
# File lib/spruz/bijection.rb, line 3 def self.[](*pairs) pairs.size % 2 == 0 or raise ArgumentError, "odd number of arguments for #{self}" new.fill do |obj| (pairs.size / 2).times do |i| j = 2 * i key = pairs[j] value = pairs[j + 1] obj.key?(key) and raise ArgumentError, "duplicate key #{key.inspect} for #{self}" obj.inverted.key?(value) and raise ArgumentError, "duplicate value #{value.inspect} for #{self}" obj[pairs[j]] = pairs[j + 1] end end end
new(inverted = Bijection.new(self))
click to toggle source
# File lib/spruz/bijection.rb, line 18 def initialize(inverted = Bijection.new(self)) @inverted = inverted end
Public Instance Methods
[]=(key, value)
click to toggle source
Calls superclass method
# File lib/spruz/bijection.rb, line 38 def []=(key, value) key?(key) and return super @inverted[value] = key end
fill() { |self| ... }
click to toggle source
# File lib/spruz/bijection.rb, line 22 def fill if empty? yield self freeze end self end
freeze()
click to toggle source
Calls superclass method
# File lib/spruz/bijection.rb, line 30 def freeze r = super unless @inverted.frozen? @inverted.freeze end r end