ここは旧式の4DドキュメントWebサイトです。最新のアップデートされたドキュメントを読むには新サイトをご利用下さい→ developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v19.8
collection.copy( )
|
collection.copy ({ option {; groupWith}} ) -> 戻り値 | ||||||||
引数 | 型 | 説明 | ||||||
option | 倍長整数 |
![]() |
ck resolve pointers: コピー前にポインターを解決する ck shared: 共有コレクションを返す |
|||||
groupWith | コレクション, オブジェクト |
![]() |
返されるコレクションが所属することになる共有コレクションまたは共有オブジェクト | |||||
戻り値 | コレクション |
![]() |
元のコレクションのディープ・コピー | |||||
collection.copy( ) ファンクションは、コレクションインスタンスのディープ・コピーを返します。. ディープ・コピーとは、元のコレクション内のオブジェクトあるいはコレクションの複製であるということを意味し、返されたコレクションと元のコレクションは参照を共有しないということを意味します。
注: このファンクションは元のコレクションは変更しません。
指定時、option 引数には以下のどちらか一方(あるいは両方)の定数を渡すことができます:
オプション | 詳細 |
ck resolve pointers | オリジナルのコレクションがポインター型の値を格納している場合、デフォルトではコピー先のオブジェクトもポインターを格納します。しかしながら、ck resolve pointers 定数を渡すことで、コピー時にポインターを解決することごとができます。この場合、コレクション内のそれぞれのポインターはコピー時に解決され、解決済みの値が使用されます。 |
ck shared | デフォルトでは、たとえ共有コレクションに対して適用された場合でも、copy( ) は通常の(共有でない)コレクションを返します。共有コレクションを返すためには、ck shared 定数を渡してください。この場合、groupWith 引数を使用して他の共有オブジェクト/共有コレクションに割り当てることもできます(以下参照) |
groupWith 引数を使用すると、返されるコレクションを関連づけたいコレクションまたはオブジェクトを指定することができます。
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!" を表示する
プロダクト: 4D
テーマ: コレクション
初出: 4D v16 R6
変更: 4D v18 R3
ランゲージリファレンス ( 4D v19)
ランゲージリファレンス ( 4D v19.1)
ランゲージリファレンス ( 4D v19.4)
ランゲージリファレンス ( 4D v19.5)
ランゲージリファレンス ( 4D v19.6)
ランゲージリファレンス ( 4D v19.7)
ランゲージリファレンス ( 4D v19.8)