Voglio convertire un blocco da block: [ a: 1 b: 2 ]
a [a 1 b 2]
. C'è un modo più semplice di questo?Come convertire parole impostate in un blocco in parole
map-each word block [ either set-word? word [ to-word word ] [ word ] ]
Voglio convertire un blocco da block: [ a: 1 b: 2 ]
a [a 1 b 2]
. C'è un modo più semplice di questo?Come convertire parole impostate in un blocco in parole
map-each word block [ either set-word? word [ to-word word ] [ word ] ]
Mantenerlo semplice:
>> block: [a: 1 b: 2]
== [a: 1 b: 2]
>> forskip block 2 [block/1: to word! block/1]
== b
>> block
== [a 1 b 2]
risposta da Graham Chiu:
In R2 si può fare questo:
>> to block! form [ a: 1 b: 2 c: 3]
== [a 1 b 2 c 3]
Ho avuto lo stesso problema così ho scritto questa funzione. Forse c'è una soluzione più semplice che non conosco.
flat-body-of: function [
"Change all set-words to words"
object [object! map!]
][
parse body: body-of object [
any [
change [set key set-word! (key: to word! key)] key
| skip
]
]
body
]
Questi creano nuovi blocchi, ma sono abbastanza concisi. Per conosciute set-word/value
coppie:
collect [foreach [word val] block [keep to word! word keep val]]
In caso contrario, si può usare 'sia come nel tuo caso:
collect [foreach val block [keep either set-word? val [to word! val][val]]]
Io suggerirei che il vostro map-each
è di per sé abbastanza conciso anche.
Questi approcci 'collect keep' sono molto eleganti – johnk
mi piace la risposta di DocKimbel, ma per il bene di un'altra alternativa ...
for i 1 length? block 2 [poke block i to word! pick block i]
o utilizzando PARSE:
block: [ a: 1 b: 2 ]
parse block [some [m: set-word! (change m to-word first m) any-type!]]
Oh non ho visto che questa soluzione è già suggerita. Scusate. – endo64
un intelligente ma ... soluzione hackish. Per stringere e tornare? : -/Mi sembra che ci sia una sorta di [complessità essenziale] (http://en.wikipedia.org/wiki/Essential_complexity) al problema, come hai affermato tu, e la soluzione dal tuo tipo di domanda corrisponde a quella del DO dialetto. È solo un problema di posto contro fuori luogo, ecc. Puoi dare più contesto su quello che stai facendo? – HostileFork
Il contesto sta cercando di convertire il client Twitter di rgchris in R3 - http://reb4.me/r/twitter - nella funzione 'sign' c'è una differenza di comportamento tra r2 e r3 ' params: make oauth any [ params []] param: sort/skip third params 2' (anche dopo che ho sostituito il 'terzo' con' body-of'): -/ – johnk