冰糕无法解析常量,即使它已定义

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 仍给出错误?

Playground link

因为这就是常量查找在 ruby 中的工作方式。粗略地说,它会尝试从最内层的嵌套开始解析名称。因此,在您的 X::Y 中,它将 X 解析为 class X,它没有 Y.

改为使用 ::X::Y,强制从顶层查找。