Class: Rigor::Type::Nominal
- Inherits:
-
Object
- Object
- Rigor::Type::Nominal
- Includes:
- AcceptanceRouter, PlainLattice, ValueSemantics
- Defined in:
- lib/rigor/type/nominal.rb
Overview
An instance type for a Ruby class or module. The class is identified by its fully-qualified Ruby name; the registry attached to the environment owns the class lookup.
Slice 4 phase 2d adds ‘type_args`: an ordered, frozen array of `Rigor::Type` values that carry the receiver’s generic instantiation. The empty array is the canonical “raw” form (‘Nominal`); a non-empty array represents an applied generic (`Nominal[Array, [Integer]]`). Two Nominals are structurally equal only when their `class_name` AND `type_args` match, so the raw form and any applied form are intentionally distinct values. Acceptance routes treat the raw form leniently for backward compatibility with phase 2b call sites that have not yet learned to carry generics.
Type arguments MUST be ‘Rigor::Type` instances. The constructor freezes the array; callers MUST NOT mutate it after construction.
See docs/type-specification/rbs-compatible-types.md.
Instance Attribute Summary collapse
-
#class_name ⇒ Object
readonly
Returns the value of attribute class_name.
-
#type_args ⇒ Object
readonly
Returns the value of attribute type_args.
Instance Method Summary collapse
- #describe(verbosity = :short) ⇒ Object
- #erase_to_rbs ⇒ Object
-
#initialize(class_name, type_args = []) ⇒ Nominal
constructor
A new instance of Nominal.
- #inspect ⇒ Object
Methods included from ValueSemantics
Methods included from AcceptanceRouter
Methods included from PlainLattice
Constructor Details
#initialize(class_name, type_args = []) ⇒ Nominal
Returns a new instance of Nominal.
32 33 34 35 36 37 38 39 40 |
# File 'lib/rigor/type/nominal.rb', line 32 def initialize(class_name, type_args = []) raise ArgumentError, "class_name must be a String, got #{class_name.class}" unless class_name.is_a?(String) raise ArgumentError, "class_name must not be empty" if class_name.empty? raise ArgumentError, "type_args must be an Array, got #{type_args.class}" unless type_args.is_a?(Array) @class_name = class_name.freeze @type_args = type_args.dup.freeze freeze end |
Instance Attribute Details
#class_name ⇒ Object (readonly)
Returns the value of attribute class_name.
30 31 32 |
# File 'lib/rigor/type/nominal.rb', line 30 def class_name @class_name end |
#type_args ⇒ Object (readonly)
Returns the value of attribute type_args.
30 31 32 |
# File 'lib/rigor/type/nominal.rb', line 30 def type_args @type_args end |
Instance Method Details
#describe(verbosity = :short) ⇒ Object
42 43 44 45 46 47 |
# File 'lib/rigor/type/nominal.rb', line 42 def describe(verbosity = :short) return class_name if type_args.empty? rendered = type_args.map { |t| t.describe(verbosity) }.join(", ") "#{class_name}[#{rendered}]" end |
#erase_to_rbs ⇒ Object
49 50 51 52 53 54 |
# File 'lib/rigor/type/nominal.rb', line 49 def erase_to_rbs return class_name if type_args.empty? rendered = type_args.map(&:erase_to_rbs).join(", ") "#{class_name}[#{rendered}]" end |
#inspect ⇒ Object
64 65 66 |
# File 'lib/rigor/type/nominal.rb', line 64 def inspect "#<Rigor::Type::Nominal #{describe(:short)}>" end |