Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com

Página Inicial

 
4D v19.8
collection.copy( )

collection.copy( ) 


 

collection.copy ({ resolvePtrs {; groupWith}} ) -> Resultado 
Parâmetro Tipo   Descrição
resolvePtrs  Inteiro longo in True = resolve ponteiros, False ou omitido = não resolve os ponteiros
groupWith  Collection, Objeto in Coleção ou objeto partilhado para ser agrupado com a coleção resultante
Resultado  Collection in Deep copy da coleção original

A função collection.copy( ) devolve uma cópia completa (deep copy) da instância de recompilação. Cópia completa significa que os objetos ou coleções dentro da coleção original estão duplicados e não compartem nenhuma referência com a coleção devolvida.

Notas: Este método não modifica a coleção original.

Se passado, o parâmetro opção pode conter uma das constantes abaixo (ou ambos):

opçãoDescrição
ck resolve pointersse a coleção original conter valores tipo ponteiros, como padrão a cópia também contém os ponteiros. Entretanto, pode resolver os ponteiros quando copiar ao passar o ck resolve pointers. Nesse caso cada ponteiro presente na coleção é avaliado quando copiar e seu valor sem referência for usado.
ck sharedComo padrão, copy( ) retorna uma coleção regular (não partilhada) , mesmo se o comando for aplicado para uma coleção partilhada. Passe a constante ck shared para criar uma coleção partilhada. nesse caso, pode usar o parâmetro groupWith para associar a coleção partilhada com outra coleção ou objeto (ver abaixo).

 

O parâmetro groupWith permite que determine uma coleção ou um objeto com o qual a coleção resultante deve ser associada

 

Para copiar a coleção (não partilhada) regular $lastnames no objeto partilhado $sharedObject, precisa criar uma cópia partilhada da coleção ($sharedLastnames).

 C_OBJECT($sharedObject)
 C_COLLECTION($lastnames;$sharedLastnames)
 C_TEXT($text)
 
 $sharedObject:=New shared object
 
 $text:=Document to text(Get 4D folder(Current resources folder)+"lastnames.txt")
 $lastnames:=JSON Parse($text//$lastnames é uma coleção normal
 
 $sharedLastnames:=$lastnames.copy(ck shared) //$sharedLastnames é uma coleção partilhada
 
  //Agora podemos copiar $sharedLastnames em $sharedObject
 Use($sharedObject)
    $sharedObject.lastnames:=$sharedLastnames
 End use

Pode combinar $sharedColl1 e $sharedColl2, mas como pertencem a grupos partilhados diferentes, uma combinação direta vai resultar em um erro. Precisa fazer uma cópia partilhada de $sharedColl1 e designar $sharedColl2 como grupo partilhado para a cópia. 

 C_COLLECTION($sharedColl1;$sharedColl2;$copyColl)
 
 $sharedColl1:=New shared collection(New shared object("lastname";"Smith"))
 $sharedColl2:=New shared collection(New shared object("lastname";"Brown"))
 
  //$copyColl pertence ao mesmo grupo partilhado como $sharedColl2
 $copyColl:=$sharedColl1.copy(ck shared;$sharedColl2)
 Use($sharedColl2)
    $sharedColl2.combine($copyColl)
 End use

Se tiver uma coleção normal ($lastnames) e quiser colocá-la em Storage da aplicação. Para fazer isso, precisa antes criar uma cópia partilhada ($sharedLastnames).

 C_COLLECTION($lastnames;$sharedLastnames)
 C_TEXT($text)
 
 $text:=Document to text(Get 4D folder(Current resources folder)+"lastnames.txt")
 $lastnames:=JSON Parse($text//$lastnames ´´e uma coleção normal
 
 $sharedLastnames:=$lastnames.copy(ck shared) // cópia partilhada
 
 Use(Storage)
    Storage.lastnames:=$sharedLastnames
 End use

Este exemplo illustra o uso da opção ck resolve pointers:

 C_COLLECTION($col)
 C_POINTER($p)
 $p:=->$what
 
 $col:=New collection
 $col.push(New object("alpha";"Hello";"num";1))
 $col.push(New object("beta";"You";"what";$p))
 
 $col2:=$col.copy()
 $col2[1].beta:="World!"
 ALERT($col[0].alpha+" "+$col2[1].beta) //exibe a mensagem "Hello World!"
 
 $what:="You!"
 $col3:=$col2.copy(ck resolve pointers)
 ALERT($col3[0].alpha+" "+$col3[1].what) //exibe "Hello You!"



Ver também 

OB Copy
Objetos compartidos e Coleções compartidas

 
PROPRIEDADES 

Produto: 4D
Tema: Coleções

This command can be run in preemptive processes

 
CONTEÚDO DA PÁGINA 
 
HISTÓRIA 

Criado por: 4D v16 R6
Modificado: 4D v18 R3

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v19)
Manual de linguagem 4D ( 4D v19.1)
Manual de linguagem 4D ( 4D v19.4)
Manual de linguagem 4D ( 4D v19.5)
Manual de linguagem 4D ( 4D v19.6)
Manual de linguagem 4D ( 4D v19.7)
Manual de linguagem 4D ( 4D v19.8)