Sorbet 不报告缺少方法实现(与 RBI 签名相比),我在这里做错了吗?
Sorbet doesn't report a missing method implementation (compared to an RBI signature), am I doing something wrong here?
我有一个文件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
在installing and initializing Sorbet之后,我决定在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 没有报告任何错误。
我是不是在这里配置了冰糕级别错误,还是做错了什么?
谢谢。
我是 Sorbet 的新手,但我认为这是因为 RBI 签名不充当传统意义上的 'interface',因此可能描述了实现中不存在的方法。
https://sorbet.org/docs/abstract 讨论接口并使用 interface!
标记模块,我认为这可能会提供您正在寻找的内容。
我有一个文件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
在installing and initializing Sorbet之后,我决定在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 没有报告任何错误。
我是不是在这里配置了冰糕级别错误,还是做错了什么?
谢谢。
我是 Sorbet 的新手,但我认为这是因为 RBI 签名不充当传统意义上的 'interface',因此可能描述了实现中不存在的方法。
https://sorbet.org/docs/abstract 讨论接口并使用 interface!
标记模块,我认为这可能会提供您正在寻找的内容。