オブジェクトのマグレブ配列を検索するにはどうすればよいですか? Maglev は優れていますが、クエリ機能はないようです。このための外部ライブラリはありますか?
3 に答える
基盤となる MagLev VM は、かなり長い間インデックスをサポートしてきました。http://github.com/MagLev/maglev/tree/master/examples/persistence/indexing/にコレクションのインデックス作成とクエリの例があります
しばらくの間、インデックス作成をオフにする必要がありましたが、次のリリース (おそらく数日後) には、更新された例でオンにする予定です。
Maglev 1.0.0 ではIdentitySet
、これは複数の属性検索とインデックス メンテナンスを備えた非常に強力なクエリ メカニズムになる可能性がありますが、現時点では「Ruby に似た」ものではありません。2回目に呼び出されたときに例外をスローする静的メソッドを使用してクラスを最初に定義するときに、インデックスを定義したいすべての属性を定義する必要があります(したがって、防止する別のガードを追加する必要がありますクラスが 2 回目にロードされたときに実行されないようにします)。self.__fixed_instvars :@inst_var1, :@inst_var2, ...
これは、クラスにバージョンがあり、静的なままであるという Smalltalk の観点からは理解できるようですが、時間の経過とともに進化する 1 つの「現在の」クラス定義の Maglev の状況には完全には適合しません。
問題が本当に配列を照会するだけの場合は、ほとんどのデータ構造に実装されている Ruby の select メソッドをいつでも利用できますが、通常はすべてのオブジェクトをトラバースするだけで機能し、インデックスは使用しません。
これは少し遅いことに気づきますが...
まず、「MagLev 配列」などというものはなく、単なる Ruby 配列です。Array#select
ただのRuby配列なので、 andが使えますArray#detect
。Peter が言ったように、インデックス作成が組み込まれていますが (これはオンに戻されました)、インデックス作成は順序付けられていないコレクションでのみ利用できます。