block: [ a: 1 b: 2 ]
ブロックを からに変換したい[a 1 b 2]
。これより簡単な方法はありますか?
map-each word block [ either set-word? word [ to-word word ] [ word ] ]
シンプルに保つ:
>> block: [a: 1 b: 2]
== [a: 1 b: 2]
>> forskip block 2 [block/1: to word! block/1]
== b
>> block
== [a 1 b 2]
私は同じ問題を抱えていたので、この関数を書きました。私が知らないもっと簡単な解決策があるかもしれません。
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
]
これらは新しいブロックを作成しますが、かなり簡潔です。既知set-word/value
のペアの場合:
collect [foreach [word val] block [keep to word! word keep val]]
それ以外の場合は、あなたの場合のように「いずれか」を使用できます。
collect [foreach val block [keep either set-word? val [to word! val][val]]]
あなたmap-each
自身もかなり簡潔であることをお勧めします。
Graham Chiu からの回答:
R2 では、これを行うことができます。
>> to block! form [ a: 1 b: 2 c: 3]
== [a 1 b 2 c 3]