Kouhei Sutou
kou****@clear*****
2011年 3月 31日 (木) 10:49:31 JST
須藤です。 In <e5d5b243-5474-3b63-af6f-79997a1a0c8b @ api103> "[groonga-dev,00472] Re: referenceでの検索" on Thu, 31 Mar 2011 09:47:37 +0900, "Endo Akira" <endo4****@goo*****> wrote: >> result = items.select{|r| >> r.pisrefs.jan =~ "123" >> } > ああ、これでよかったのですか。そうかなと思わないでもなかったのですが、 > ちょっと気持ち悪くて書けませんでした。こう書けるのなら、普通に(?!) > referenceのvectorが使えます。belongs_to、has_manyよりも直感的で使いやすいと > 思います。 うぅ。いきなり見ると気持ち悪いですかぁ。 vectorになるとわからなくもないかも。。。 > grn式なるものが分からないので、ついruby式思考法になってしまいます。 (強引ですが)grn式はSQLのように「What」(どんな条件で絞り込 みたいか)を書いて、Rubyの式は「How」(どうやって絞り込みた いか)を書く感じかもしれないです。 (メタプログラミング好き(?)の人っぽくいうと、「selectの中 はgrn式の内部DSL」という感じになります。) >> * 条件式を連結する >> >> 例: >> # 東京に住んでいる太郎さんを検索 >> (record.name == "太郎") & (record.address =~ "東京") >> # 東京か大阪に住んでい人を検索 >> (record.address =~ "東京") | (record.address =~ "大阪") > &&で連結していて、最後の条件式しか評価されず、しょうがないので、 > andの方はselectの結果を用いてさらにselectしていました。orの方は > もっと苦労していました。ははは。これを今日質問するつもりでした。 > &はbit積という印象が強くて、改めてTrueClassほかを眺めたら、&などが > 定義されていたのですね。 たしかに、ふだんは&ではなく&&を使うのですが、Rubyでは&&を再定 義できないので、&を使っています。。。 (&&は右側の式が評価されないこともあるけど、&は常に評価される とか違いはあるのですが、grn式を作る部分は必ず評価しなければい けないので&でいいかなぁというのもあったりします。) > もう一つの"1"から"4"までの値しかとらない項目で、indexを作った方が > 遅くなる、という問題は、あとでもう一度試してからご報告します。 はい! > どうもありがとうございました。だんだんすっきりしていきます。 よかったです! -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) プログラミングが好きなソフトウェア開発者を募集中: http://www.clear-code.com/recruitment/