Chcę przekonwertować blok z block: [ a: 1 b: 2 ]
na [a 1 b 2]
. Czy jest łatwiejszy sposób niż to?Jak przekonwertować zestaw słów w bloku na słowa
map-each word block [ either set-word? word [ to-word word ] [ word ] ]
Chcę przekonwertować blok z block: [ a: 1 b: 2 ]
na [a 1 b 2]
. Czy jest łatwiejszy sposób niż to?Jak przekonwertować zestaw słów w bloku na słowa
map-each word block [ either set-word? word [ to-word word ] [ word ] ]
ich prostota:
>> block: [a: 1 b: 2]
== [a: 1 b: 2]
>> forskip block 2 [block/1: to word! block/1]
== b
>> block
== [a 1 b 2]
odpowiedzi od Graham Chiu:
W R2 można to zrobić:
>> to block! form [ a: 1 b: 2 c: 3]
== [a 1 b 2 c 3]
miałem ten sam problem więc napisałem tę funkcję. Może jest jakieś prostsze rozwiązanie, którego nie znam.
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
]
Stworzyły nowe bloki, ale są dość zwięzłe. Do znanych set-word/value
parach:
collect [foreach [word val] block [keep to word! word keep val]]
W przeciwnym razie, można użyć „albo jak w przypadku:
collect [foreach val block [keep either set-word? val [to word! val][val]]]
sugeruję, że map-each
sam jest dość zwięzły również.
Te podejścia "zbieraj dalej" są bardzo eleganckie. – johnk
Lubię odpowiedź DocKimbel, ale przez wzgląd na innej alternatywy ...
for i 1 length? block 2 [poke block i to word! pick block i]
lub używając PARSE:
block: [ a: 1 b: 2 ]
parse block [some [m: set-word! (change m to-word first m) any-type!]]
Och, nie widziałem, że to rozwiązanie jest już sugerowane. Przepraszam. – endo64
Sprytny ale ... hackish rozwiązanie. Ciągać i powracać? : -/Czuję, że jest jakaś [zasadnicza złożoność] (http://en.wikipedia.org/wiki/Essential_complexity) problemu, jak to określiłeś, a rozwiązanie z twojego rodzaju pytania odpowiada temu w Zrób dialekt. To tylko kwestia miejsca na miejscu a nie na miejscu, itd. Czy możesz podać więcej kontekstu na temat tego, co robisz? – HostileFork
Kontekst próbuje przekonwertować klienta Twittera rgchrisa na R3 - http://reb4.me/r/twitter - w funkcji 'sign' istnieje różnica w zachowaniu pomiędzy parametrami r2 i r3 ' params: make oauth any [ params []] params: sort/skip third params 2' (nawet po tym, jak zastąpiłem 'third' z' body-of'): -/ – johnk