gpt4 book ai didi

rebol - 不使用 "copy"处理字符串时到底发生了什么?

转载 作者:行者123 更新时间:2023-12-04 04:05:46 27 4
gpt4 key购买 nike

下面这个函数的目的是返回一个在两个星号之间插入参数值的字符串。

star-name: func [name /local stars] [
stars: "**"
insert next stars name
stars
]
print star-name "test" ;*test*
print star-name "this" ;*thistest*, but what I really want is *this*

第二次调用该函数时,第一次调用的参数仍保持插入状态。我知道答案是使用 copy "**"
我的问题是,不是在每次调用该函数时将 stars变量重新分配给 "**"吗?

最佳答案

对于该函数,只有一个“**”字符串定义。该定义仅由Rebol load函数使用一次,因为load仅运行一次以将代码转换为Rebol内部形式-一个块。的确,如果两次调用该函数,赋值就会发生两次,但是赋值不会创建任何东西,只会使变量再次引用相同的字符串。

在注释中,您应该注意到实际上有两个“**”字符串定义,导致load创建了两个字符串。如果您使用

code: [stars: "**" insert next stars something]
something: "this"
do code
something: "that"
do code

您会注意到只有一个字符串定义,并且当您没有任何函数时,其行为与使用函数时的行为相同。

关于rebol - 不使用 "copy"处理字符串时到底发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18141674/

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