红色:使用 do 将动态键添加到块的任何替代方法
Red: any alternative to using do for adding dynamic keys to a block
是否有替代语法:
a: [
b: [
1 2
]
]
append (do "a/b") 3
== [
b: [
1 2
]
]
我觉得使用 do 不是很优雅(它与 javascript 中太多的 eval 相似)。
我尝试了路径但没有成功。
a: [b: [ 1 2 3]]
append a/b 4
probe a
== [b: [1 2 3 4]]
鉴于您的初始分配
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
是对内部块的可分配取消引用。
预计到达时间:
如果您想关闭取消引用,do "a/b"
的替代方法可能是创建一个函数:
ab: function [][a/b]
== func [][a/b]
append ab 7
== [1 2 7]
(或者,ab: does [a/b]
。)
重新评论你想要a/b在一个变量中:
a: [b: [1 2 3]]
var: a/b
append var 4
probe a
== [b: [1 2 3 4]]
Why this doesn't work though: a: [b: [1 2 3]] var: to-path "a/b" append var 4
这样做(注意 GET)
a: [b: [1 2 3]]
var: load "a/b"
append get var 4
probe a
== [b: [1 2 3 4]]
最简单的方法是直接对"address"内部块使用路径表示法:
>> a: [ b: [ 1 2 ] ]
== [b: [1 2]]
>> append a/b 3
== [1 2 3]
由于路径符号只是 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 就可以做到,你可以使用
>> do a
== [1 2]
>> append b 3
== [1 2 3]
是否有替代语法:
a: [
b: [
1 2
]
]
append (do "a/b") 3
== [
b: [
1 2
]
]
我觉得使用 do 不是很优雅(它与 javascript 中太多的 eval 相似)。
我尝试了路径但没有成功。
a: [b: [ 1 2 3]]
append a/b 4
probe a
== [b: [1 2 3 4]]
鉴于您的初始分配
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
是对内部块的可分配取消引用。
预计到达时间:
如果您想关闭取消引用,do "a/b"
的替代方法可能是创建一个函数:
ab: function [][a/b]
== func [][a/b]
append ab 7
== [1 2 7]
(或者,ab: does [a/b]
。)
重新评论你想要a/b在一个变量中:
a: [b: [1 2 3]]
var: a/b
append var 4
probe a
== [b: [1 2 3 4]]
Why this doesn't work though: a: [b: [1 2 3]] var: to-path "a/b" append var 4
这样做(注意 GET)
a: [b: [1 2 3]]
var: load "a/b"
append get var 4
probe a
== [b: [1 2 3 4]]
最简单的方法是直接对"address"内部块使用路径表示法:
>> a: [ b: [ 1 2 ] ]
== [b: [1 2]]
>> append a/b 3
== [1 2 3]
由于路径符号只是 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 就可以做到,你可以使用
>> do a
== [1 2]
>> append b 3
== [1 2 3]