我正在学习Ruby(具有Java / Groovy背景),似乎在编写方法时,方法签名为
def method_name
# do something
end
由于 Ruby 具有动态特性,我理解为什么不需要显式声明返回类型。但是,假设我有一个名为 get_name
的方法。作为代码的调用者,我可能不确定它返回的是字符串还是自定义名称类型。是否有一种方法可以显式声明返回类型?如果可能的话,在 Ruby 中是否真的会这样做以清楚地表明返回值是什么?
2019年,Stripe发布了适用于Ruby的类型检查器Sorbet。现在可以指定方法签名,例如:
sig {returns(String)}
def name
"Sergio"
end
例如,如果您在类型方面犯了错误,程序将会出现有趣的错误。
代码:
sig {returns(Integer)}
def name
"Sergio"
end
错误信息:
editor.rb:12: Returning value that does not conform to method result type https://srb.help/7005
12 | "Sergio"
^^^^^^^^
Expected Integer
editor.rb:11: Method name has return type Integer
11 | def name
^^^^^^^^
Got String("Sergio") originating from:
editor.rb:12:
12 | "Sergio"
^^^^^^^^
Errors: 1
我发现RubyMine/IntelliJ提供的注释标注对此非常有帮助。例如:
# @param [String] time_zone_offset_string eg. +10:00
# @return [Array] An array containing sign, hours and minutes
def self.parse_timezone_string(time_zone_offset_string)
... parse the timezone string ...
return [sign, hours, minutes]
end