1

我有一个文件my_class.rb

# typed: true
class MyClass
  attr_accessor :a, :b

  def initialize(a: 1, b: 2)
    @a = a
    @b = b
  end

  def do_stuff
    puts "#{self.class}: #@a #@b"

    a * b + a - b
  end
end

安装和初始化 Sorbet后,我​​决定为这个文件写一个 RBI 签名sorbet/rbi/my_class.rbi

# typed: strict

class MyClass
  sig { params(a: Numeric, b: Numeric).void }
  def initialize(a:, b:); end

  sig { returns(Numeric) }
  def a; end

  sig { returns(Numeric) }
  def b; end

  sig { returns(Numeric) }
  def do_stuff; end

  sig { params(x: Numeric).void }
  def adjust(x); end;
end

我特意为一种adjust方法添加了一个签名,以查看 Sorbet 是否会报告它。但是 Sorbet 没有报告任何错误。

我在这里配置冰糕级别是错误的,还是做错了什么?

谢谢你。

4

1 回答 1

2

我是 Sorbet 的新手,但我认为这是因为 RBI 签名不充当传统意义上的“接口”,因此可能会描述实现中不存在的方法。

https://sorbet.org/docs/abstract讨论接口并用 标记模块interface!,我认为这可能会满足您的需求。

于 2020-01-19T23:13:03.017 回答