0

次のようなパターンを実行できるRedispub/subへのインターフェイスをいじくり回しています。

 PSUBSCRIBE news.jazz.figurative
 PSUBSCRIBE news.*
 PSUBSCRIBE n*

区切り文字がないにもかかわらず、Redisはこれらを文字列として受け入れます(スペースによって暗黙的に)。もちろん、Rebolでは、これらはWORDになります!トークン。

アイデアをマッピングする際に最初に考えたのは、PATHを使用するのがクールだということでした。それらは構造を持っており、ドットを検索せずにプログラムで構築およびイントロスペクトできるため(パス内の要素の数を数えたり、最後の要素を削除したりするなど)。また、これ以上の文字ではありません。

 PSUBSCRIBE news/jazz/figurative
 PSUBSCRIBE news/*
 PSUBSCRIBE n*

最後の1つは、しかし、トリックです。単一要素のPATHを作成できますが!プログラム的な方法で(たとえば、BLOCK!のようにto-path [n*])、デフォルトのトークナイザーは最後のものをWORDに分類します!直接入力した場合。したがって、PSUBSCRIBEにいずれかのパラメーターを受け入れさせる必要があります[word! path!]

PSUBSCRIBE: func ['pattern [word! path!]] [
    pattern: to-path pattern
    print [{The pattern you passed in was} mold pattern]

    insert pattern 'alt
    print [{Inserting at head of path yields} mold pattern]

    print [{The number of path elements is now} length? pattern]
]

ある意味でそれは「機能する」:

>> psubscribe news/*
The pattern you passed in was news/*
Inserting at head of path yields alt/news/*
The number of path elements is now 3

...しかし、パターンを引用符で囲まれたパラメーター()にする必要があることに注意してください['pattern]。変数に格納されているパターンを渡したい場合、引用符は、変数の名前が実際のパターンであると見なすことを意味します。

>> mypattern: 'news.*

>> PSUBSCRIBE mypattern
The pattern you passed in was mypattern
Inserting at head of path yields alt/mypattern
The number of path elements is now 2

基本的に、REDIS方言を作成していれば、私の考えは悪いものではなかったでしょう。私が撃つかもしれない。しかし、現在、私はこれらをDO方言の内部で機能させようとしています。評価者のルールを変更して、パスを引用せずに新しい動作を与えることはできません。

それは私が知っている部分ですが、ただ文書化しています。:)さて、質問:DO方言で立ち往生している場合は、STRINGを使用しますか?警官として?呼び出しには、次の2種類の文字列区切り文字のいずれかを含める必要があります。

 PSUBSCRIBE "news.jazz.figurative"
 PSUBSCRIBE {news.*}
 PSUBSCRIBE "n*"

そしてまた、BLOCKがあります!

 PSUBSCRIBE [news jazz figurative]
 PSUBSCRIBE [news *]
 PSUBSCRIBE [n*]

これにより、構造レイヤーが作成され、パーツに分割され、ドットを解析する必要がなくなります。それでも、星は、階層内のスロットだけでなく、どこでも発生する可能性があるようです。

たぶん私は、実際には単なる文字列であり、他のものとして合理的にモデル化できないものに構造を配置しようとしています。そうですか?もしそうなら、私は決定の正当化としてソースのこの質問にリンクしています。:)

4

1 に答える 1

1

リテラルパラメータを介して参照を渡すことができます。

mypattern: 'news/*
PSUBSCRIBE :mypattern

モデリングの質問では、トークンは常にREBOLの単語構成ルールと互換性がありますか?また、単語を使わずに星が存在するかどうかを確認する方法はないformので、そもそも文字列である必要があります。また、星を。と一緒に使用すると、文字列内で意味がありますfind/any

于 2012-10-22T16:15:31.907 に答える