class Foo
def initialize(@foo : String | Nil)
end
def foo
@foo
end
end
a = Foo.new "213"
if !a.foo.nil?
puts a.foo, typeof(a.foo)
end
获取
的输出213
(String | Nil)
但是,不应该将A.FOO类型缩小到字符串吗?这是另一个设计限制吗?
编译器不知道@foo
不会更改。假设您的class Foo
有一个用于@foo
的设置器。如果某些同时运行的代码使用该设置器将@foo
设置为nil
,则即使在过去之前的支票也可能返回Foo#foo
的第二个调用CC_6。
您可以通过引入局部变量来进行补救,该变量可以:
:if foo = a.foo
puts foo, typeof(foo)
end