Как я могу найти массив объектов Ruby Maglev? - PullRequest
0 голосов
/ 16 февраля 2010

Как я могу найти массив объектов maglev? Маглев великолепен, но у него, похоже, нет никаких возможностей для запросов. Для этого есть внешние библиотеки?

Ответы [ 3 ]

2 голосов
/ 18 февраля 2010

Базовая версия MagLev VM уже давно поддерживает индекс. Есть пример индексации и запроса коллекции в http://github.com/MagLev/maglev/tree/master/examples/persistence/indexing/

Нам пришлось отключить индексацию на некоторое время, но мы включим ее с обновленным примером в следующем выпуске (возможно, через несколько дней).

1 голос
/ 19 ноября 2012

Я понимаю, что уже немного поздно, но ...

Во-первых, нет такой вещи, как "массив MagLev", это просто массив Ruby. Поскольку это просто массив Ruby, вы можете использовать Array#select и Array#detect. Как сказал Питер, есть встроенная индексация (которая была снова включена), но индексация доступна только для неупорядоченных коллекций.

1 голос
/ 05 февраля 2012

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

Это кажется понятным с точки зрения Smalltalk, когда классы имеют версии и остаются статичными, однако это не совсем соответствует ситуации Маглева с одним «текущим» определением класса, которое развивается со временем.

Если ваша задача на самом деле просто запросить массив, вы всегда можете прибегнуть к методу выбора Ruby, который реализован для большинства структур данных, но обычно он работает, просто обходя все объекты и не используя индексы.

...