2013-05-10 6 views

Antwort

4

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] 
0

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] 
+0

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

+0

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

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 
] 
+0

Du solltest ANY anstelle von SOME verwenden, auch solltest du verwenden das Schlüsselwort SKIP anstelle von ANY-TYPE! – Ladislav

+0

Danke für Verbesserungen! – rebolek

2

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.

+1

Diese 'collect keep' Ansätze sind sehr elegant – johnk

1

I DocKimbel Antwort mag, aber im Interesse einer weiteren alternativen ...

for i 1 length? block 2 [poke block i to word! pick block i] 
0

Oder mit PARST:

block: [ a: 1 b: 2 ] 
parse block [some [m: set-word! (change m to-word first m) any-type!]] 
+0

Oh ich habe nicht gesehen, dass diese Lösung bereits vorgeschlagen wird. Es tut uns leid. – endo64

Verwandte Themen