gpt4 book ai didi

rebol3 - 是否可以在 Rebol 中通过引用传递参数?

转载 作者:行者123 更新时间:2023-12-02 07:29:10 24 4
gpt4 key购买 nike

在这里,我试图从函数内部设置一个全局变量的值,但该值没有改变:

setGlobalScope: func [theVar1] [
theVar1: 10
]

theVar: 1

setGlobalScope theVar

print theVar
"This prints 1 instead of 10. The value of theVar has not changed."

是否可以从函数本身内部修改函数参数的值,以便在全局范围内而不是函数范围内修改该值?

最佳答案

您传递了一个整数值,而不是一个单词。在该函数中,单词 theVar1 被赋予了该整数的值。重新分配它不会改变它,因为整数、日期和小数等值在幕后并不是“指针”。

因此,来自@sqlab 的答案您可以通过各种方式获取单词本身来解决这个问题。 function ['x] [code]function [:x] [code] 之间的区别可能会让您感兴趣...

Why doesn't Rebol 3 honor quoted function parameters that are parenthesized?

但请注意,Rebol 中的系列值确实具有影响目标的修改函数,而不是仅仅重新分配单词指向的位置。考虑:

setGlobalScope: func [theVar1 [string!]] [
clear theVar1
insert theVar1 "Modification"
]

theVar: "Original"

setGlobalScope theVar

print theVar

打印Modification

如果需要通过引用传递非系列值,则需要将它们放在一个系列中,并使用系列修改操作而不是赋值。因为赋值只会覆盖你必须指向 block 或其他任何东西的“指针”。最坏的情况是您可以将单个值包装在一个 block 中——如果必须的话。但是 Rebol 有很多“等等,换个角度看它……”,方言可以帮助创建比您试图从另一种不太酷的语言克隆的界面更好的界面。 :-)

减轻通过引用传递的复杂性是 Rebol 在处理多个返回结果时的简单性:

foo: function [value1 value2] [
return reduce [
value1 + 7
value2 + 16
]
]

set [a b] foo 03 04

print a
print b

输出 1020

关于rebol3 - 是否可以在 Rebol 中通过引用传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24045229/

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