Сорбет не сообщает о недостающей реализации метода (по сравнению с сигнатурой RBI), я что-то здесь не так делаю? - PullRequest
1 голос
/ 19 января 2020

У меня есть файл 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 или что-то не так?

Спасибо.

1 Ответ

2 голосов
/ 20 января 2020

Я новичок в Sorbet, но думаю, это потому, что сигнатуры RBI не действуют как «интерфейс» в традиционном смысле, поэтому могут описывать методы, которых нет в реализации.

https://sorbet.org/docs/abstract обсуждает интерфейсы и помечает модуль с помощью interface!, я думаю, что это может дать то, что вы ищете.

...