## Tcl8.6.17/Tk8.6.17 Documentation > Tcl Commands > copy

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

### NAME

oo::copy — 対象と級の複写を作成する create copies of objects and classes

### SYNOPSIS

package require TclOO
oo::copy sourceObject ?targetObject? ?targetNamespace?

### 説明 DESCRIPTION

この oo::copy 命令は対象や級の複写を作成する｡ それは複写すべき対象や級の名前を sourceObject として取り､指示されれば､作成すべき対象や級の名前 targetObject も採る､後者は絶対法で修飾されない場合は､現在の名前空間に相対的に定められる､又､targetNamespace は対象の内部状態(my 命令 等)を保持することになる名前空間の名称である; 既存の名前空間を参照してはならない｡ targetObject か targetNamespace のどちらかが省略されるか､空文字列として与えられた場合､新しい名前が選ばれる｡ 名前は､指定されない限り､ oo::class の手段 new に使われたものと同じ算法によって選ばれる｡複写された対象は元の対象と同じ級になり､複写されたすべての per-object methods を有する｡もし､それが級の場合､複写された級内の全ての級の手段を有することになるが､複写された即値のどれをも有さない｡　　 　 The oo::copy command creates a copy of an object or class. It takes the name of the object or class to be copied, sourceObject, and optionally the name of the object or class to create, targetObject, which will be resolved relative to the current namespace if not an absolute qualified name and targetNamespace which is the name of the namespace that will hold the internal state of the object (my command, etc.); it must not refer to an existing namespace. If either targetObject or targetNamespace is omitted or is given as the empty string, a new name is chosen. Names, unless specified, are chosen with the same algorithm used by the new method of oo::class. The copied object will be of the same class as the source object, and will have all its per-object methods copied. If it is a class, it will also have all the class methods in the class copied, but it will not have any of its instances copied.

targetObject が作成され､その複写された構成設定の全ての定義(譬えば､手段､櫛､基礎級)が複写された後､関連変数の追跡の実装の様な作成された対象の誂えを許容するために targetObject の<複製された> 手段が起動される｡与えられた引数は sourceObject のみである｡この手段の省略時設定の実装は(oo::object 内の)､単に sourceObject 内の名前空間内の手続函数と変数を targetObject の名前空間に複写するだけである｡もしこの手段の呼出が成功裡に結果を返さない場合(即ち､不都合か何かの例外)､ targetObject は削除され不都合が返される｡ 　　　 After the targetObject has been created and all definitions of its configuration (e.g., methods, filters, mixins) copied, the <cloned> method of targetObject will be invoked, to allow for customization of the created object such as installing related variable traces. The only argument given will be sourceObject. The default implementation of this method (in oo::object) just copies the procedures and variables in the namespace of sourceObject to the namespace of targetObject. If this method call does not return a result that is successful (i.e., an error or other kind of exception) then the targetObject will be deleted and an error returned.

oo::copy 命令の結果は完全に修飾された名前の新しい対象か級になる｡　　　　　 The result of the oo::copy command will be the fully-qualified name of the new object or class.

### 用例 EXAMPLES

この用例は対象を作成し､それを複写し､元の対象を修正し､複写された対象がやはり複写である事を実証する｡ This example creates an object, copies it, modifies the source object, and then demonstrates that the copied object is indeed a copy.

    oo::object create src
    oo::objdefine src method msg {} {puts foo}
    oo::copy src dst
    oo::objdefine src method msg {} {puts bar}
    src msg              → prints "bar"
    dst msg              → prints "foo"

### SEE ALSO

oo::class, oo::define, oo::object

### KEYWORDS

clone, copy, duplication, object
Copyright © 2007 Donal K. Fellows