4

文字列のブロックをブロックに変換する方法は?

これを変更するには:

keep rejoin['circle " " coord " " 5 " "]]]

["circle 10x10 5 " "circle 20x20 5 " "circle 30x30 5 "]

これに:

[circle 10x10 5 circle 20x20 5 circle 30x30 5]

VIDで使えるように変更したい。

view [
      size 800x600
      base 780x580
      draw drawblock
     ]

ありがとう!

4

2 に答える 2

2

load rejoinに変換するため["set " "of " "spaced " "strings"] に使用することもできます

red>> load rejoin ["circle 10x10 5 " "circle 20x20 5 " "circle 30x30 5 "]
== [circle 10x10 5 circle 20x20 5 circle 30x30 5]

最善の方法は、そもそも文字列のブロックを持たず、可能な限りリテラルとコードを使用することです。

編集:

あなたの特定のユースケースでは、これはうまくいきます:

drawblock: collect [
    foreach arg [10 20 30] [
        keep compose [circle (as-pair arg arg) 5]
    ]
]

psビューで遊んでいる場合、この要点が役立ちます

于 2016-09-29T12:51:21.957 に答える
2

Red コードに変換するstring!には、ロードする必要があります。 red>> load "circle 10x10 5 " == [circle 10x10 5]

したがって、string!s のブロックについては、ループでロードするだけです。 collect [ foreach arg ["circle 10x10 5 " "circle 20x20 5 " "circle 30x30 5 "] [ keep load arg ] ] == [circle 10x10 5 circle 20x20 5 circle 30x30 5]

ただし、コード生成の場合は、文字列から開始するのではなく、Red 型を直接使用することをお勧めします。

于 2016-09-29T12:40:56.773 に答える