何回かSobetの『You called sig twice without declaring a method in between』というエラーに出会したものの毎回このエラーの直し方を忘れてしまうのでメモ。
Sorbetの『You called sig twice without declaring a method in between』の直し方

You called sig twice without declaring a method in between
ざっくり訳すと、「1つのメソッドに対して2回sigが呼ばれているよ」という意味である。
今回このエラーにハマった状況としては以下のようなコードだったのだけど、arrt_readerのlast_nameの後に『 , 』が入っており、『 , 』の後にsigがまた宣言されていると判定されてしまったらしい。
class User
extend T::Sig
sig{ returns(Integer) }
attr_reader :id
sig{ returns(String) }
attr_reader :first_name, :last_name,
sig { params(id: Integer, first_name: String, last_name: String).void }
def initialize(id:, first_name, last_name:)
@id = id
@first_name = first_name
@last_name = last_name
end
なので、以下のように修正したら無事に直った。
<before> attr_reader :first_name, :last_name,
<after> attr_reader :first_name, :last_name
めでたしめでたし。


