Tasuku SUENAGA
a****@razil*****
2009年 6月 23日 (火) 15:34:30 JST
すえながです。 > はい、そうです。Hashと同じAPIにしました。 理解しました。 > 実は、今でもGroonga::Hash.findとするとGroonga::Recordオブジェ > クトが返ってきます。 > (中略) > それぞれのAPIはこんなのを考えていました。 > > * 値の設定: Groonga::Record#value= (実装済み) > * 値のインクリメント: Groonga::Record#increment! > * 値の追加: Groonga::Record#append and/or #<< おお、こんな感じであれば気持ちよく使えると思います。 > Ruby的には「+」は非破壊的な操作なので、「+=」というAPIにする > と、「複製を作って代入する」ということになって違和感がありま > す。これについては専用のメソッドを定義するのがよいのではない > かと思います。 破壊的操作に関する視点を持っていませんでした。 専用メソッドがよさそうですね。 > 追加(GRN_OBJ_APPEND)は#<<でよいと思うのですが、 > GRN_OBJ_PREPENDに#>>を使うのは直感的ではない気がします。 > なので、#<<以外に#appendと#prependも用意した方がよいかと思っ > ています。 これについても同意です。 というわけで、現状で僕がやりたいことを実現するには ・Groonga::PatriciaTrie(今回keyの前方一致での統計を取りたいので) で、Groonga::PatriciaTrie.findをしてGroonga::Recordを取るようにする。 ・Groonga::Recordにincrement!を実装する。 の2段階を踏めばよさそうですね。 というわけで、Groonga::Record.increment!を実装したいと思います。 Kouhei Sutou さんは書きました: > 須藤です。 > > In <4A404****@razil*****> > "[groonga-dev,00078] Ruby/groongaを用いて、カウンタを作りたい" on Tue, 23 Jun 2009 12:35:57 +0900, > Tasuku SUENAGA <a****@razil*****> wrote: > >> 現在、RubyのGroonga::Tableにおいて、 >> ・『[]』はテーブルの指定idに対する値の取得 >> ・『[]=』はテーブルの指定idに対して値を設定 >> となっています。 > > はい、そうです。Hashと同じAPIにしました。 > >> groongaのgrn_obj_set_valueは第5引数にオプションを取ることができ、 >> atomicな足し算やデータの連結などを行うことができます。 > >> ・『[]』は、テーブルの指定idに対するオブジェクトを生成する。 > > これと似たような方法を考えていました。ただ、[]ではなく、別の > メソッド名ですが。 > > 最初は[]でそのようなオブジェクト(Groonga::Record)を返して > いたのですが、[]では[]=で設定した値が返ってきた方が自然だと > 思って変えました。(HashっぽいAPI) > > table[key] = value > table[key] # -> value not Groonga::Record > >> ・『[]』は、テーブルの指定idに対するオブジェクトを生成する。 >> そのオブジェクトが、『=』で代入を行えば値の設定、 >> 『+=』で数値を足せばインクリメント、 >> 『<<』でバイト列を付与すれば末尾追加、 >> などの操作ができる。 > > 実は、今でもGroonga::Hash.findとするとGroonga::Recordオブジェ > クトが返ってきます。(groongaに合わせてlookupにしてもよいか > もしれません。今はActiveRecord風な方に倒しています。) > > それぞれのAPIはこんなのを考えていました。 > > * 値の設定: Groonga::Record#value= (実装済み) > * 値のインクリメント: Groonga::Record#increment! > * 値の追加: Groonga::Record#append and/or #<< > * ... > > Ruby的には「+」は非破壊的な操作なので、「+=」というAPIにする > と、「複製を作って代入する」ということになって違和感がありま > す。これについては専用のメソッドを定義するのがよいのではない > かと思います。 > > 追加(GRN_OBJ_APPEND)は#<<でよいと思うのですが、 > GRN_OBJ_PREPENDに#>>を使うのは直感的ではない気がします。 > なので、#<<以外に#appendと#prependも用意した方がよいかと思っ > ています。 > >> というわけで、どの方針でいくかを悩んでいます。 >> 方針さえ決まれば実装はできそうです。 > > こんな風に考えていたのですが、どうでしょう? > -- > 須藤 功平 <kou****@clear*****> > 株式会社クリアコード (http://www.clear-code.com/) --- 末永 匡 <a****@razil*****>