代码之家  ›  专栏  ›  技术社区  ›  user310291

红色:使用do向块添加动态关键点的任何替代方法

  •  1
  • user310291  · 技术社区  · 6 年前

    是否有其他语法:

    a: [
    b: [
        1 2
    ]
    ]
    
    append (do "a/b") 3   
    
    == [
        b: [
            1 2
        ]
    ] 
    

    我觉得使用do不是很优雅(它在javascript中包含了太多的eval)。

    我试图走这条路,但没有成功。

    6 回复  |  直到 6 年前
        1
  •  2
  •   HotelFoxtrot    6 年前

    请重新注释您希望在变量中使用a/b:

    a: [b: [1 2 3]]
    var: a/b
    append var 4
    probe a
    == [b: [1 2 3 4]]
    
        2
  •  3
  •   Peter W A Wood    6 年前

    最简单的方法是使用路径表示法直接“寻址”内部块:

    >> a: [ b: [ 1 2 ] ]
    == [b: [1 2]]
    >> append a/b 3
    == [1 2 3]
    
        3
  •  1
  •   Peter Lewerin    6 年前

    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] .)

        4
  •  1
  •   SammyWise    6 年前

    但为什么不起作用: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]]
    
        5
  •  1
  •   sqlab    6 年前

    因为路径符号只是 选择 可以使用“选择”绕过路径

    红色

    >> 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]
    
        6
  •  0
  •   spork    6 年前
    a: [b: [ 1 2 3]] 
    append a/b 4
    
    probe a
    == [b: [1 2 3 4]]