何回か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
めでたしめでたし。