6

block: [ a: 1 b: 2 ]ブロックを からに変換したい[a 1 b 2]。これより簡単な方法はありますか?

map-each word block [ either set-word? word [ to-word word ] [ word ] ]

4

6 に答える 6

4

シンプルに保つ:

>> block: [a: 1 b: 2]
== [a: 1 b: 2]
>> forskip block 2 [block/1: to word! block/1]
== b
>> block
== [a 1 b 2]
于 2013-05-10T11:40:44.637 に答える
3

私は同じ問題を抱えていたので、この関数を書きました。私が知らないもっと簡単な解決策があるかもしれません。

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 
]
于 2013-05-10T07:08:52.413 に答える
2

これらは新しいブロックを作成しますが、かなり簡潔です。既知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自身もかなり簡潔であることをお勧めします。

于 2013-05-10T07:22:05.313 に答える
0

Graham Chiu からの回答:

R2 では、これを行うことができます。

>> to block! form [ a: 1 b: 2 c: 3]
== [a 1 b 2 c 3]
于 2013-05-10T05:34:23.587 に答える