Class: RBS::Substitution
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/rbs/substitution.rb |
Class Method Summary
Instance Attribute Summary
- #empty? ⇒ Boolean readonly
- #instance_type rw
- #mapping readonly
Instance Method Summary
- #+(other)
-
#[](ty)
Alias for #apply.
- #add(from:, to:)
- #apply(ty) (also: #[])
- #without(*vars)
Constructor Details
.new ⇒ Substitution
# File 'lib/rbs/substitution.rb', line 12
def initialize() @mapping = {} end
Class Method Details
.build(variables, types, instance_type: nil, &block)
[ GitHub ]# File 'lib/rbs/substitution.rb', line 20
def self.build(variables, types, instance_type: nil, &block) unless variables.size == types.size raise "Broken substitution: variables=#{variables}, types=#{types}" end mapping = variables.zip(types).to_h self.new.tap do |subst| mapping.each do |v, t| type = block_given? ? yield(t) : t subst.add(from: v, to: type) end subst.instance_type = instance_type end end
Instance Attribute Details
#empty? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/rbs/substitution.rb', line 8
def empty? mapping.empty? && instance_type.nil? end
#instance_type (rw)
[ GitHub ]# File 'lib/rbs/substitution.rb', line 6
attr_accessor :instance_type
#mapping (readonly)
[ GitHub ]# File 'lib/rbs/substitution.rb', line 5
attr_reader :mapping
Instance Method Details
#+(other)
[ GitHub ]# File 'lib/rbs/substitution.rb', line 66
def +(other) return self if other.empty? return other if self.empty? Substitution.new.tap do |subst| subst.mapping.merge!(mapping) other.mapping.each do |var, type| if mapping.key?(var) subst.add(from: var, to: self[type]) else subst.add(from: var, to: type) end end end end
#[](ty)
Alias for #apply.
# File 'lib/rbs/substitution.rb', line 53
alias [] apply
#add(from:, to:)
[ GitHub ]# File 'lib/rbs/substitution.rb', line 16
def add(from:, to:) mapping[from] = to end
#apply(ty) Also known as: #[]
[ GitHub ]#without(*vars)
[ GitHub ]# File 'lib/rbs/substitution.rb', line 55
def without(*vars) Substitution.new.tap do |subst| subst.mapping.merge!(mapping) vars.each do |var| subst.mapping.delete(var) end subst.instance_type = self.instance_type end end