Class: Rigor::Type::Nominal
- Inherits:
-
Object
- Object
- Rigor::Type::Nominal
- Includes:
- AcceptanceRouter, 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
- #bot ⇒ Object
- #describe(verbosity = :short) ⇒ Object
- #dynamic ⇒ Object
- #erase_to_rbs ⇒ Object
-
#initialize(class_name, type_args = []) ⇒ Nominal
constructor
A new instance of Nominal.
- #inspect ⇒ Object
- #top ⇒ Object
Methods included from ValueSemantics
Methods included from AcceptanceRouter
Constructor Details
#initialize(class_name, type_args = []) ⇒ Nominal
Returns a new instance of Nominal.
31 32 33 34 35 36 37 38 39 |
# File 'lib/rigor/type/nominal.rb', line 31 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.
29 30 31 |
# File 'lib/rigor/type/nominal.rb', line 29 def class_name @class_name end |
#type_args ⇒ Object (readonly)
Returns the value of attribute type_args.
29 30 31 |
# File 'lib/rigor/type/nominal.rb', line 29 def type_args @type_args end |
Instance Method Details
#describe(verbosity = :short) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/rigor/type/nominal.rb', line 41 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
48 49 50 51 52 53 |
# File 'lib/rigor/type/nominal.rb', line 48 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
73 74 75 |
# File 'lib/rigor/type/nominal.rb', line 73 def inspect "#<Rigor::Type::Nominal #{describe(:short)}>" end |