class RBS::Substitution
Attributes
instance_type[RW]
mapping[R]
Public Class Methods
build(variables, types, instance_type: nil) { |t| ... }
click to toggle source
# File rbs-1.4.0/lib/rbs/substitution.rb, line 18 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
new()
click to toggle source
# File rbs-1.4.0/lib/rbs/substitution.rb, line 10 def initialize() @mapping = {} end
Public Instance Methods
add(from:, to:)
click to toggle source
# File rbs-1.4.0/lib/rbs/substitution.rb, line 14 def add(from:, to:) mapping[from] = to end
apply(ty)
click to toggle source
# File rbs-1.4.0/lib/rbs/substitution.rb, line 35 def apply(ty) case ty when Types::Variable # @type var ty: Types::Variable mapping[ty.name] || ty when Types::Bases::Instance if t = instance_type t else ty end else ty end end
empty?()
click to toggle source
# File rbs-1.4.0/lib/rbs/substitution.rb, line 6 def empty? mapping.empty? && instance_type.nil? end
without(*vars)
click to toggle source
# File rbs-1.4.0/lib/rbs/substitution.rb, line 51 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