为什么不用球拍服从字符串替换中的“全部”设置?

时间:2013-02-28 06:39:09

标签: regex scheme racket

我发现字符串替换功能的Racket文档与球拍读取 - 评估 - 打印循环的实际工作方式截然不同。 docs表示您可以在String-replace之后放置一个关键字来指定您只想替换第一个实例,就像这样(但是他们没有这样的示例):

(string-replace "My Dog is a Dog" "Dog" "Cat" #:all #f)

所以,根据文档,这应该输出:“我的猫是狗”(我知道它没有意义,但这只是一个例子)。

相反,我的不同球拍安装以不同的方式抱怨,例如“程序不期望使用给定关键字的参数”或者使用关键字作为过程。

我想我仍然可以用string->列表做我想做的事,但我的抱怨是这违反了机器人第二定律!如果某些东西是有效的命令(直接来自文档),那就去做吧,然后停止抱怨!

编辑:如果我将#:all更改为#:all ?,那么它会抱怨参数的数量应为3,并带有可选关键字,但是会给出5个(换句话说,它会看到#:all?# f作为两个单独的参数,而不是关键字组。)

EDIT2:顺便说一下,我在Linux上使用drracket。如果我只在终端上使用“racket”命令,则更正的语法可以正常工作。

1 个答案:

答案 0 :(得分:2)

是的,这是一个错误 - 关键字名称应该是#:all?,而不是#:all

-> (string-replace "My Dog is a Dog" "Dog" "Cat" #:all? #f)
"My Cat is a Dog"

源中现在是fixed