是否有替代语法:
a: [
b: [
1 2
]
]
append (do "a/b") 3
== [
b: [
1 2
]
]
我觉得使用do并不是很优雅(它在javascript中评估过多)。
我尝试不成功。
答案 0 :(得分:3)
最简单的方法是使用路径符号直接“寻址”内部块:
>> a: [ b: [ 1 2 ] ]
== [b: [1 2]]
>> append a/b 3
== [1 2 3]
答案 1 :(得分:2)
重新注释您要在变量中使用a / b:
a: [b: [1 2 3]]
var: a/b
append var 4
probe a
== [b: [1 2 3 4]]
答案 2 :(得分:1)
给出您的初始任务
a: [b: [1 2]]
== [b: [1 2]]
您要将3附加到内部块。您可以通过
do "a/b"
== [1 2]
但是您也可以通过
来获得它 probe a/b
== [1 2]
可让您改为像这样添加:
append a/b 3
== [1 2 3]
probe a
== [b: [1 2 3]]
在Algol风格的语言中,这类似于a.b = append(a.b, 3)
:a/b
是可分配的对内部块的取消引用。
ETA:
如果您想取消引用,则do "a/b"
的替代方法可能是创建一个函数:
ab: function [][a/b]
== func [][a/b]
append ab 7
== [1 2 7]
(或者,ab: does [a/b]
。)
答案 3 :(得分:1)
为什么这不起作用:a:[b:[1 2 3]] var:路径“ a / b”追加var 4
这样做(注意GET)
a: [b: [1 2 3]]
var: load "a/b"
append get var 4
probe a
== [b: [1 2 3 4]]
答案 4 :(得分:1)
由于路径符号只是 select 的快捷方式,因此您可以使用select来绕过路径
红色
>> a: [ b: [ 1 2 ] ]
== [b: [1 2]]
>> append select a 'b 3
== [1 2 3]
>> a
== [b: [1 2 3]]
在Rebol中您必须要做的
>> append select a to-set-word 'b 3
== [1 2 3]
顺便说一句,为什么不使用a: [ b [ 1 2 ] ]
或要将内部块分配给全局变量b
呢?然后简单的执行就可以了,您可以使用
>> do a
== [1 2]
>> append b 3
== [1 2 3]
答案 5 :(得分:0)
a: [b: [ 1 2 3]]
append a/b 4
probe a
== [b: [1 2 3 4]]