Да, единственный вариант - разделить объявления атрибутов, как если бы вы определяли для них отдельные методы получения / установки, если только все ваши атрибуты не относятся к одному типу.
Причина этого заключается в том, что Sorbet на этапе DSL своей работы фактически использует sig
в объявлении attr_reader
/ attr_writer
/ attr_accessor
, чтобы определить sig
в синтетических методах, которые производятся этими декларациями. Таким образом, один геттер для attr_reader
, один сеттер для attr_writer
и пара геттер / сеттер для attr_accessor
генерируются синтетически, и к ним применяются sig
s.
В результате этого это будет действительным :
sig { returns(String) }
attr_reader :some_string_attr, :other_string_attr
но это не будет:
sig { returns(String, User) }
attr_reader :some_string_attr, :some_user_attr