gpt4 book ai didi

redis - "glob"样式模式是否应保留为字符串!还是有更聪明的方法?

转载 作者:可可西里 更新时间:2023-11-01 11:22:43 24 4
gpt4 key购买 nike

我正在修补 Redis pub/sub 的接口(interface)可以做这样的模式:

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

尽管没有分隔符,Redis 还是接受这些作为字符串(由空格隐含)。当然,在 Rebol 中,这些就是 WORD!代币。

在映射想法时首先想到的是使用 PATH 会很酷!因为它们具有结构并且可以通过编程方式构建和自省(introspection)(计算路径中有多少元素,去掉最后一个元素等)而无需搜索点。它也没有更多的字符:

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

不过,最后一个是诀窍。尽管您可以构建单元素 PATH!以编程方式(例如,从 BLOCK!像 to-path [n*]),默认分词器会将最后一个分词器分类为 WORD!直接输入的时候。所以你必须让 PSUBSCRIBE 接受 [word!路径!]

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!作为一个警察?调用必须涉及两种字符串定界符中的任何一种:

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

话又说回来,有 block !

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

这提供了一个结构层,因此它被分解成多个部分,而不必解析出点。然而,星星似乎可以出现在任何地方,而不仅仅是在等级制度中的某个位置。

也许我正在尝试将结构放在实际上只是一个字符串并且不能合理地建模为其他任何东西的东西上。是这样吗?如果是这样,我将在源代码中链接到这个问题作为决定的理由。 :)

最佳答案

您可以通过文字参数传递引用:

mypattern: 'news/*
PSUBSCRIBE :mypattern

关于建模问题,您的标记是否始终与 REBOL 的词组规则兼容?此外,如果不形成这个词,就无法检查星号是否存在,所以也许它首先应该是字符串。当与 find/any 一起使用时,星号在字符串中确实有意义。

关于redis - "glob"样式模式是否应保留为字符串!还是有更聪明的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12984480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com