Pregunta

p puede crear como un puntero a f como esto:

f: func[][print 1]
p: :f

Al ejecutar:

>> p
1

Pero si modifico f para

f: func[][print 1 print 2]

p no imprimirá 2.

¿Hay otra manera de conseguir puntos P "dinámica" de f?

¿Fue útil?

Solución

Tenga en cuenta que ha creado una nueva instancia de f allí - no lo modificó. Puede modificar f aunque alterando el contenido de su segundo bloque. es decir ...

>> f: func[][print 1]
>> p: :f
>> p
1
>> append second :f [print 2]
== [print 1 print 2]
>> p
1
2

Espero que ayude.

Otros consejos

Se podría utilizar un alias .

Alias ??en REBOL es un poco limitado, ya que no puede utilizar cualquier palabra preexistente como un alias. Pero esto funciona para mí:

f: does [print 1]    ;; define 'f as you do
alias 'f "px"        ;; create an alias as 'px
px 
== 1                 ;; same result as 'f

f: context [a: 3]    ;; change 'f to something completely different
probe px             ;; 'px is the same as the new 'f
    make object! [
        a: 3
    ]

cuando haces F::. P en realidad se está haciendo F "apunta a" valor (la función) de P

cuando haces P:. Func [] [] una vez más, se está creando una nueva función valor para que sólo P se le asigna el valor

la única manera de tener indirección es a través de un descriptor de acceso, algo así como F: hace [P]

Cuando p cambios valor f sabrá que tiene que llamar a la nueva función ya que la unión de P no ha cambiado, sólo su valor (que es una función nueva).

alias son equivalencias palabra, ni punteros, por lo que también son válidos como palabras en caminos y son bastante desagradable en el uso del mundo real.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top