Ich möchte einen Block von block: [ a: 1 b: 2 ]
zu [a 1 b 2]
konvertieren. Gibt es einen einfacheren Weg als das?Wie setze ich Satzworte in einem Block in Worte um
map-each word block [ either set-word? word [ to-word word ] [ word ] ]
Ich möchte einen Block von block: [ a: 1 b: 2 ]
zu [a 1 b 2]
konvertieren. Gibt es einen einfacheren Weg als das?Wie setze ich Satzworte in einem Block in Worte um
map-each word block [ either set-word? word [ to-word word ] [ word ] ]
Keeping it simple:
>> block: [a: 1 b: 2]
== [a: 1 b: 2]
>> forskip block 2 [block/1: to word! block/1]
== b
>> block
== [a 1 b 2]
Antwort von Graham Chiu:
In R2 können Sie dies tun:
>> to block! form [ a: 1 b: 2 c: 3]
== [a 1 b 2 c 3]
ich gleiche Problem hatte, so schrieb ich diese Funktion. Vielleicht gibt es eine einfachere Lösung, von der ich nichts weiß.
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
]
Diese erstellen neue Blöcke, sind aber ziemlich knapp. Für bekannte set-word/value
Paare:
collect [foreach [word val] block [keep to word! word keep val]]
Andernfalls können Sie ‚entweder wie in Ihrem Fall:
collect [foreach val block [keep either set-word? val [to word! val][val]]]
Ich würde vorschlagen, dass Ihr map-each
selbst auch ziemlich prägnant.
Diese 'collect keep' Ansätze sind sehr elegant – johnk
I DocKimbel Antwort mag, aber im Interesse einer weiteren alternativen ...
for i 1 length? block 2 [poke block i to word! pick block i]
Oder mit PARST:
block: [ a: 1 b: 2 ]
parse block [some [m: set-word! (change m to-word first m) any-type!]]
Oh ich habe nicht gesehen, dass diese Lösung bereits vorgeschlagen wird. Es tut uns leid. – endo64
Ein kluge aber ... hackische Lösung. Zu string und zurück? : -/Ich habe das Gefühl, dass es eine Art von [essentieller Komplexität] (http://en.wikipedia.org/wiki/Essential_complexity) für das Problem gibt, wie Sie es gesagt haben, und die Lösung von Ihrer Frage entspricht der in der Tue Dialekt. Es ist nur ein Problem von vor Ort und nicht am Platz, etc. Kannst du mehr Kontext darüber geben, was du tust? – HostileFork
Der Kontext versucht rgchris Twitter Client in R3 umzuwandeln - http://reb4.me/r/twitter - in der 'sign' Funktion gibt es einen Unterschied im Verhalten hier zwischen r2 und r3 ' params: make oauth any [ params []] params: sortiere/überspringe dritte params 2' (auch nachdem ich die 'dritte' durch' body-of' ersetzt habe): -/ – johnk