-
Notifications
You must be signed in to change notification settings - Fork 224
Description
I propose simplifying the RBS syntax for initialize methods by removing the required -> void
return type annotation.
Current Syntax:
#: (a: String) -> void
def initialize(a:)
@a = a
end
Proposed Syntax:
#: (a: String?)
def initialize(a:)
@a = a
end
Why?
-
Redundant - I was moving from Sorbet sigs to RBS style sigs and noticed that I was adding the
-> void
to every initialize method. Even though it makes sense from a completeness perspective, it seemed redundant to me and does not add any new information. -
Initialize is special - The initialize method is already special in Ruby - it's the only method that is called indirectly through
new
, cannot meaningfully return a value to its caller, has a fixed, unchangeable return behavior. Making its type signature special in RBS would accurately reflect its special status in the language. -
Comparison with other languages:
Language Example Requires Return Type? Python (with types) def __init__(self, a: str):
Optional TypeScript constructor(a: string) { }
No Java public MyClass(String a) { }
No C# public MyClass(string a) { }
No Go N/A - uses factory functions instead N/A Ruby (current RBS) #: (a: String) -> void
Yes