ここは旧式の4DドキュメントWebサイトです。最新のアップデートされたドキュメントを読むには新サイトをご利用下さい→ developer.4d.com

ホーム

 
4D v19.8
collection.copy( )

collection.copy( ) 


 

collection.copy ({ option {; groupWith}} ) -> 戻り値 
引数   説明
option  倍長整数 in ck resolve pointers: コピー前にポインターを解決する
ck shared: 共有コレクションを返す
groupWith  コレクション, オブジェクト in 返されるコレクションが所属することになる共有コレクションまたは共有オブジェクト
戻り値  コレクション in 元のコレクションのディープ・コピー

説明   

collection.copy( ) ファンクションは、コレクションインスタンスのディープ・コピーを返します。. ディープ・コピーとは、元のコレクション内のオブジェクトあるいはコレクションの複製であるということを意味し、返されたコレクションと元のコレクションは参照を共有しないということを意味します。

注: このファンクションは元のコレクションは変更しません。

指定時、option 引数には以下のどちらか一方(あるいは両方)の定数を渡すことができます:

オプション詳細
ck resolve pointersオリジナルのコレクションがポインター型の値を格納している場合、デフォルトではコピー先のオブジェクトもポインターを格納します。しかしながら、ck resolve pointers 定数を渡すことで、コピー時にポインターを解決することごとができます。この場合、コレクション内のそれぞれのポインターはコピー時に解決され、解決済みの値が使用されます。
ck sharedデフォルトでは、たとえ共有コレクションに対して適用された場合でも、copy( ) は通常の(共有でない)コレクションを返します。共有コレクションを返すためには、ck shared 定数を渡してください。この場合、groupWith 引数を使用して他の共有オブジェクト/共有コレクションに割り当てることもできます(以下参照)

groupWith 引数を使用すると、返されるコレクションを関連づけたいコレクションまたはオブジェクトを指定することができます。

通常の(非共有の)$lastnames コレクションを、$sharedObject 共有オブジェクトの中にコピーしたい場合を考えます。これのためには、まず($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 は通常のコレクション
 
 $sharedLastnames:=$lastnames.copy(ck shared) //$sharedLastnames は共有コレクション
 
  // 共有コレクションになったので$sharedLastnames を$sharedObject に入れることが可能
 Use($sharedObject)
    $sharedObject.lastnames:=$sharedLastnames
 End use

どちらも共有コレクションである$sharedColl1$sharedColl2 を結合したい場合を考えます。これらは異なる共有グループに所属しているため、直接連結した場合にはエラーが生成されます。そこで$sharedColl1 のコピーを作成し、$sharedColl2 をそのコピーの共有グループ先であると指定する必要があります。

 C_COLLECTION($sharedColl1;$sharedColl2;$copyColl)
 
 $sharedColl1:=New shared collection(New shared object("lastname";"Smith"))
 $sharedColl2:=New shared collection(New shared object("lastname";"Brown"))
 
  //$copyColl は$sharedColl2 と同じ共有グループに所属している
 $copyColl:=$sharedColl1.copy(ck shared;$sharedColl2)
 Use($sharedColl2)
    $sharedColl2.combine($copyColl)
 End use

通常のコレクション($lastnames) があり、それをアプリケーションのStorage に入れたい場合を考えます。このためには、先に共有コレクション($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 は通常の(非共有)コレクション
 
 $sharedLastnames:=$lastnames.copy(ck shared) // 共有コピーを作成
 
 Use(Storage)
    Storage.lastnames:=$sharedLastnames
 End use

ここでは、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) // "Hello World!" を表示する
 
 $what:="You!"
 $col3:=$col2.copy(ck resolve pointers)
 ALERT($col3[0].alpha+" "+$col3[1].what) // "Hello You!" を表示する



参照 

OB Copy
共有オブジェクトと共有コレクション

 
プロパティ 

プロダクト: 4D
テーマ: コレクション

This command can be run in preemptive processes

 
ページの目次 
 
履歴 

初出: 4D v16 R6
変更: 4D v18 R3

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v19)
ランゲージリファレンス ( 4D v19.1)
ランゲージリファレンス ( 4D v19.4)
ランゲージリファレンス ( 4D v19.5)
ランゲージリファレンス ( 4D v19.6)
ランゲージリファレンス ( 4D v19.7)
ランゲージリファレンス ( 4D v19.8)