变量类型另外使用nil in ensure子句标记

时间:2017-10-11 22:11:16

标签: crystal-lang

我想知道为什么变量的类型是L == U而不只是(String | Nil)?有没有办法让它只是String

String

https://carc.in/#/r/2w3a

1 个答案:

答案 0 :(得分:2)

无论如何,

ensure在主体之后运行,即使引发了异常。因为这可能发生在任何地方,所以如果第一条指令失败,则必须考虑该方法的主体根本没有被执行。

因此,在ensure块中,所有变量都是已知的,但必须假设它们的值可以是nil

如果您确定始终设置了text,则无需在rescue / ensure子句中保护该分配。

def main
  text = "hello"
  begin
    # here is the code that might fail
  ensure
    puts typeof(text) # => String
  end
end