Maglev 1.0.0 теперь имеет IdentitySet
, это может стать довольно мощным механизмом запросов с много-атрибутным поиском и поддержкой индекса, однако на данный момент он не очень "Ruby-подобный". Вам нужно будет определить все атрибуты, для которых вы когда-либо захотите определить индекс, когда вы сначала определите свой класс, используя статический метод self.__fixed_instvars :@inst_var1, :@inst_var2, ...
, который будет выдает исключение, когда оно вызывается во второй раз (поэтому вам нужно добавить отдельную охрану, которая не позволяет ему работать при повторной загрузке класса).
Это кажется понятным с точки зрения Smalltalk, когда классы имеют версии и остаются статичными, однако это не совсем соответствует ситуации Маглева с одним «текущим» определением класса, которое развивается со временем.
Если ваша задача на самом деле просто запросить массив, вы всегда можете прибегнуть к методу выбора Ruby, который реализован для большинства структур данных, но обычно он работает, просто обходя все объекты и не используя индексы.