冰糕无法解析常量,即使它已定义
Sorbet cannot resolve constant even though it is defined
鉴于:
# typed: true
module X
class Y
end
end
module X
class X
def y
X::Y
end
end
end
冰糕给出错误:
editor.rb:6: Unable to resolve constant Y https://srb.help/5002
6 | X::Y
即使定义了 X::Y,为什么 sorbet 仍给出错误?
因为这就是常量查找在 ruby 中的工作方式。粗略地说,它会尝试从最内层的嵌套开始解析名称。因此,在您的 X::Y
中,它将 X
解析为 class X
,它没有 Y
.
改为使用 ::X::Y
,强制从顶层查找。
鉴于:
# typed: true
module X
class Y
end
end
module X
class X
def y
X::Y
end
end
end
冰糕给出错误:
editor.rb:6: Unable to resolve constant Y https://srb.help/5002
6 | X::Y
即使定义了 X::Y,为什么 sorbet 仍给出错误?
因为这就是常量查找在 ruby 中的工作方式。粗略地说,它会尝试从最内层的嵌套开始解析名称。因此,在您的 X::Y
中,它将 X
解析为 class X
,它没有 Y
.
改为使用 ::X::Y
,强制从顶层查找。