如何表达空哈希

时间:2019-07-19 14:11:26

标签: ruby sorbet

有什么方法可以在冰糕中表达空哈希?

我具有定义良好的形状或设置为{}的属性。显然T.type_alias({})不起作用,因为{}充当Hash并被翻译为T::Hash[T.untyped, T.untyped]。最简单的解决方案是使用类似T.nil的东西,然后将其用作T::Hash[String, T.nil](获取不存在的键的值将始终返回nil的值),但是没有这样的构造。

解决方法是更改​​代码以不接受此处的空哈希,并以不同的方式处理它。然后,可能会有T.nilable(SomeType)。但是,我想保留现在的代码,只添加适当的类型签名。

1 个答案:

答案 0 :(得分:1)

我认为您可以使用T::Hash[String, T.nilable(String)]?但是,当我尝试使用sorbet.run时,似乎表明它不会正确地对该方法的参数进行类型检查。

  

我具有形状明确的属性

您可能要使用T::Struct来表示这一点。 Sorbet还没有对shape的大力支持。

  

T.nil

您可以使用NilClass。它实际上是一个Ruby类。