リファレンス memberOf/contains/soundslike
確定申告 is over!!わあい\(^▽^\)(/^▽^)/わあいっ.やっと奥さんのピリピリがとれてホッと一息。というわけで小物を確認していく。まずは日本人としては使いどころがわからない、soundslike!です。英語でよく聞く言葉なんだけど、Soundexにもとづく条件チェックをしてくれます。詳しくはhttp://en.wikipedia.org/wiki/Soundex.いろいろあるものです。初めて知りました。このwikipediaによると"b"と"v"が同じポイントになっていたのでPersonオブジェクトのfirstNameに"victory"をセットして以下のルールを試すと確かにコンソール出力されたザマス。
rule "you must be victory!!" when $p : Person(firstName soundslike 'bictory') then System.out.println("ま、いっしょだろ!"); end
で、次はcontainsとmemberOf.だいたい直感でもわかるとおりListや配列の中にこれを含めていますか?といった時に使います。containsのほうがより値を特定してルールを記述することを目的にしているそうな。でも、だいたいの使い方では振る舞いとしては一緒のような気がする。実際の例はこんな感じ。
javaで
Person person = new Person(); List hobbies = new ArrayList(); hobbies.add("backetball"); hobbies.add("programming"); hobbies.add("movie"); person.setHobbies(hobbies); ksession.insert(person);
と書いて、drlのほうは
rule "backetball" when $p : Person(hobbies contains "backetball") then System.out.println("あきらめたらそこで試合終了ですよ"); end
と書きます。
で、memberOfは、
rule "we are developping!" when $p : Person(action memberOf list) then System.out.println("開発中"); end
という感じですね。PersonオブジェクトのactionというStringのフィールドがあるとして、それがlist(ここではStringのリストを想定)に含まれているかマッチングしてくれます。