Class: Rigor::Type::BoundMethod
- Inherits:
-
Object
- Object
- Rigor::Type::BoundMethod
- Includes:
- AcceptanceRouter, ValueSemantics
- Defined in:
- lib/rigor/type/bound_method.rb
Overview
A ‘Method` carrier that tracks the bound `(receiver, name)` pair.
Ruby’s ‘Object#method(name)` returns a `Method` instance whose later `.call` / `.()` / `[]` dispatches `name` on the original receiver. The plain RBS `Method` nominal cannot carry that binding, so call sites on the resulting `Method` collapse to `untyped` — losing the per-method precision the original receiver supports.
‘BoundMethod` keeps the binding so the dispatcher can substitute the original `(receiver, name)` dispatch at `.call` / `.()` / `[]` time. The carrier erases to `Method` at the RBS boundary so downstream RBS interop (e.g. passing the value into a method whose parameter is typed `::Method`) stays compatible — the binding is only consulted when Rigor itself dispatches.
See ‘lib/rigor/inference/method_dispatcher/method_folding.rb` for the forward (`Object#method(:sym)`) and backward (`BoundMethod#call`) folding tiers that consume / produce this carrier.
Instance Attribute Summary collapse
-
#method_name ⇒ Object
readonly
Returns the value of attribute method_name.
-
#receiver_type ⇒ Object
readonly
Returns the value of attribute receiver_type.
Instance Method Summary collapse
- #bot ⇒ Object
- #describe(verbosity = :short) ⇒ Object
- #dynamic ⇒ Object
- #erase_to_rbs ⇒ Object
-
#initialize(receiver_type:, method_name:) ⇒ BoundMethod
constructor
A new instance of BoundMethod.
- #inspect ⇒ Object
- #top ⇒ Object
Methods included from ValueSemantics
Methods included from AcceptanceRouter
Constructor Details
#initialize(receiver_type:, method_name:) ⇒ BoundMethod
Returns a new instance of BoundMethod.
32 33 34 35 36 37 38 39 |
# File 'lib/rigor/type/bound_method.rb', line 32 def initialize(receiver_type:, method_name:) raise ArgumentError, "receiver_type must not be nil" if receiver_type.nil? raise ArgumentError, "method_name must be a Symbol, got #{method_name.inspect}" unless method_name.is_a?(Symbol) @receiver_type = receiver_type @method_name = method_name freeze end |
Instance Attribute Details
#method_name ⇒ Object (readonly)
Returns the value of attribute method_name.
30 31 32 |
# File 'lib/rigor/type/bound_method.rb', line 30 def method_name @method_name end |
#receiver_type ⇒ Object (readonly)
Returns the value of attribute receiver_type.
30 31 32 |
# File 'lib/rigor/type/bound_method.rb', line 30 def receiver_type @receiver_type end |
Instance Method Details
#describe(verbosity = :short) ⇒ Object
41 42 43 |
# File 'lib/rigor/type/bound_method.rb', line 41 def describe(verbosity = :short) "Method<#{receiver_type.describe(verbosity)}##{method_name}>" end |
#dynamic ⇒ Object
57 58 59 |
# File 'lib/rigor/type/bound_method.rb', line 57 def dynamic Trinary.no end |
#erase_to_rbs ⇒ Object
45 46 47 |
# File 'lib/rigor/type/bound_method.rb', line 45 def erase_to_rbs "Method" end |
#inspect ⇒ Object
67 68 69 |
# File 'lib/rigor/type/bound_method.rb', line 67 def inspect "#<Rigor::Type::BoundMethod #{describe(:short)}>" end |