Domanda

Posso creare p come puntatore a f in questo modo:

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

Durante l'esecuzione:

>> p
1

Ma se modifico f to

f: func[][print 1 print 2]

p non stamperà 2.

Esiste un altro modo per ottenere punti p "dinamicamente" su f ?

È stato utile?

Soluzione

Si noti che hai creato una nuova istanza di f lì - non modificati esso. È possibile modificare f se alterando il contenuto del suo secondo blocco. cioè ...

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

La speranza che aiuta.

Altri suggerimenti

Potresti usare un alias.

L'alias in REBOL è un po' limitato in quanto non è possibile utilizzare alcuna parola preesistente come alias.Ma questo funziona per me:

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
    ]

quando si esegue F::. P si sta effettivamente facendo F "punti" di P Valore (la funzione)

quando si esegue P:. Func [] [] ancora una volta, si sta creando una nuova funzione di Valore per cui solo P viene assegnato il valore

l'unico modo per avere indirezione è tramite una funzione di accesso, qualcosa come F: fa [P]

quando cambia p valore f saprà chiamare la nuova funzione poiché il legame della P non è cambiato, solo il suo valore (che è una nuova funzione).

alias sono equivalenze parola, non puntatori, in modo che siano validi anche come parole su sentieri e sono abbastanza brutto in uso mondo reale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top