Copying



 AVISO AOS INICIANTES: Se você está atribuindo o valor de uma palavra (variável) a outra palavra (variável) em Red, use COPY!

>> var1: var2                ;só se você tiver certeza do que está fazendo

>> var1: copy var2        ;pode te poupar horas tentando debugar.


action! copy

Atribui uma cópia do dado a uma nova palavra.

Pode ser usado para copiar séries e objetos.

Não é usado em itens simples como: integer! float! char! etc. Para estes, podemos usar apenas os dois pontos (:).

Primeiro vejamos uma atribuição simples:


>> s: [ "cat" "dog" "fox" "cow" "fly" "ant" "bee" ]
== ["cat" "dog" "fox" "cow" "fly" "ant" "bee"]

>> b: s
== ["cat" "dog" "fox" "cow" "fly" "ant" "bee"]

>> take/part s 4
== ["cat" "dog" "fox" "cow"]

>> b
== ["fly" "ant" "bee"]                ;b changes!!

Agora com copy:

>> s: [ "cat" "dog" "fox" "cow" "fly" "ant" "bee" ]
== ["cat" "dog" "fox" "cow" "fly" "ant" "bee"]

>> b: copy s
== ["cat" "dog" "fox" "cow" "fly" "ant" "bee"]

>> take/part s 4
== ["cat" "dog" "fox" "cow"]

>> b
== ["cat" "dog" "fox" "cow" "fly" "ant" "bee"]

Se você tiver uma série aninhada, por exemplo, um bloco dentro de uma série, copy não altera a referência para esta série aninhada. Se você quiser criar uma cópia independente, você precisa usar o refinamento /deep para criar uma cópia "profunda".


/part

Limita o tamanho do resultado, onde o tamanho é dado por um  number! ou series!


>> a: "my house is a very funny house"
>> b: copy/part a 8
== "my house"

/types

Copia apenas tipos específicos de valores não-escalares.


/deep

Copia valores aninhados, conforme mencionado acima.