## Tcl8.6.17/Tk8.6.17 Documentation > Tcl C API > Method

### 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
    Tcl_ClassSetConstructor, Tcl_ClassSetDestructor, Tcl_MethodDeclarerClass, Tcl_MethodDeclarerObject, Tcl_MethodIsPublic, Tcl_MethodIsType, Tcl_MethodName, Tcl_NewInstanceMethod, Tcl_NewMethod, Tcl_ObjectContextInvokeNext, Tcl_ObjectContextIsFiltering, Tcl_ObjectContextMethod, Tcl_ObjectContextObject, Tcl_ObjectContextSkippedArgs — 手段と手段呼出し文脈を操作する　 manipulate methods and method-call contexts
  SYNOPSIS
    #include <tclOO.h>
    Tcl_Method
    Tcl_NewMethod(interp, class, nameObj, isPublic,
    methodTypePtr, clientData)
    Tcl_Method
    Tcl_NewInstanceMethod(interp, object, nameObj, isPublic,
    methodTypePtr, clientData)
    Tcl_ClassSetConstructor(interp, class, method)
    Tcl_ClassSetDestructor(interp, class, method)
    Tcl_Class
    Tcl_MethodDeclarerClass(method)
    Tcl_Object
    Tcl_MethodDeclarerObject(method)
    Tcl_Obj *
    Tcl_MethodName(method)
    int
    Tcl_MethodIsPublic(method)
    int
    Tcl_MethodIsType(method, methodTypePtr, clientDataPtr)
    int
    Tcl_ObjectContextInvokeNext(interp, context, objc, objv, skip)
    int
    Tcl_ObjectContextIsFiltering(context)
    Tcl_Method
    Tcl_ObjectContextMethod(context)
    Tcl_Object
    Tcl_ObjectContextObject(context)
    int
    Tcl_ObjectContextSkippedArgs(context)
  引数 ARGUMENTS
    Tcl_Interp *interp (入出力in/out)
    Tcl_Object object (入力in)
    Tcl_Class class (入力in)
    Tcl_Obj *nameObj (入力in)
    int isPublic (入力in)
    Tcl_MethodType *methodTypePtr (入力in)
    ClientData clientData (入力in)
    ClientData *clientDataPtr (出力out)
    Tcl_Method method (入力in)
    Tcl_ObjectContext context (入力in)
    int objc (入力in)
    Tcl_Obj *const *objv (入力in)
    int skip (入力in)
  説明 DESCRIPTION
  手段創生 METHOD CREATION
  手段呼出し文脈 METHOD CALL CONTEXTS
  手段の型 METHOD TYPES
  TCL_METHODCALLPROC FUNCTION SIGNATURE
  TCL_METHODDELETEPROC FUNCTION SIGNATURE
  TCL_CLONEPROC FUNCTION SIGNATURE
  SEE ALSO
  KEYWORDS

### NAME

Tcl_ClassSetConstructor, Tcl_ClassSetDestructor, Tcl_MethodDeclarerClass, Tcl_MethodDeclarerObject, Tcl_MethodIsPublic, Tcl_MethodIsType, Tcl_MethodName, Tcl_NewInstanceMethod, Tcl_NewMethod, Tcl_ObjectContextInvokeNext, Tcl_ObjectContextIsFiltering, Tcl_ObjectContextMethod, Tcl_ObjectContextObject, Tcl_ObjectContextSkippedArgs — 手段と手段呼出し文脈を操作する　 manipulate methods and method-call contexts

### SYNOPSIS

#include <tclOO.h>
Tcl_Method
Tcl_NewMethod(interp, class, nameObj, isPublic,
`` methodTypePtr, clientData)
Tcl_Method
Tcl_NewInstanceMethod(interp, object, nameObj, isPublic,
`` methodTypePtr, clientData)
Tcl_ClassSetConstructor(interp, class, method)
Tcl_ClassSetDestructor(interp, class, method)
Tcl_Class
Tcl_MethodDeclarerClass(method)
Tcl_Object
Tcl_MethodDeclarerObject(method)
Tcl_Obj *
Tcl_MethodName(method)
int
Tcl_MethodIsPublic(method)
int
Tcl_MethodIsType(method, methodTypePtr, clientDataPtr)
int
Tcl_ObjectContextInvokeNext(interp, context, objc, objv, skip)
int
Tcl_ObjectContextIsFiltering(context)
Tcl_Method
Tcl_ObjectContextMethod(context)
Tcl_Object
Tcl_ObjectContextObject(context)
int
Tcl_ObjectContextSkippedArgs(context)

### 引数 ARGUMENTS

Tcl_Interp *interp (入出力in/out)
  手段を生成したり､更新したりする為の対象を中に保持する解釈実行機能｡　　 The interpreter holding the object or class to create or update a method in.

Tcl_Object object (入力in)
  手段を生成する為の対象｡ The object to create the method in.

Tcl_Class class (入力in)
  手段を生成する為の級｡ The class to create the method in.

Tcl_Obj *nameObj (入力in)
  生成する手段の名前｡構成子か破壊子を生成するまでは NULL であってはならない｡ The name of the method to create. Should not be NULL unless creating constructors or destructors.

int isPublic (入力in)
  手段の視界が何かを述べる旗印｡この旗印に運営されている公開値は､非移送手段に0､移送された手段に1だけである｡ A flag saying what the visibility of the method is. The only supported public values of this flag are 0 for a non-exported method, and 1 for an exported method.

Tcl_MethodType *methodTypePtr (入力in)
  生成する為の手段の型､又は､比較する為の型の記述｡ A description of the type of the method to create, or the type of method to compare against.

ClientData clientData (入力in)
  解釈なしに手段の実装に渡されたデータ片｡ A piece of data that is passed to the implementation of the method without interpretation.

ClientData *clientDataPtr (出力out)
  手段が生成された時供給された clientData 値を書込む変数へのポインター｡もし NULL なら clientData 値は取り出されない｡ A pointer to a variable in which to write the clientData value supplied when the method was created. If NULL, the clientData value will not be retrieved.

Tcl_Method method (入力in)
  問合せる為の手段への参照｡ A reference to a method to query.

Tcl_ObjectContext context (入力in)
  手段呼出し文脈への参照｡註意すべきは､顧客符号は文脈への参照を保持してはならない｡ A reference to a method-call context. Note that client code must not retain a reference to a context.

int objc (入力in)
  手段の実装に渡す引数の数｡ The number of arguments to pass to the method implementation.

Tcl_Obj *const *objv (入力in)
  手段の実装に渡す引数の配列｡ An array of arguments to pass to the method implementation.

int skip (入力in)
  手段の実装に渡す引数であって､実際の引数を代表しない引数の数｡ The number of arguments passed to the method implementation that do not represent "real" arguments.

### 説明 DESCRIPTION

手段は対象上で遂行される操作であり､対象と結合している｡全ての手段はそれぞれの対象か級に接続されていなければならず; 級に接続した手段は､その級の全ての実現値(直接か間接)に結合している｡ 　　　 A method is an operation carried out on an object that is associated with the object. Every method must be attached to either an object or a class; methods attached to a class are associated with all instances (direct and indirect) of that class.

手段が与えられると､それを宣言した実体は､ Tcl_MethodDeclarerClass を使って見つけ出される､それは手段が接続されるべき級を返す(手段がどの級にも接続しない時は NULL )､又､ Tcl_MethodDeclarerObject を使って見つけ出される､それは手段が接続されるべき対象を返す(手段が対象に接続しない時は NULL )｡手段の名前は Tcl_MethodName を使って取出すことができ､ Tcl_MethodIsPublic を使って移送したか否かを取出せる｡手段の型は限界の程度を顧みることができる; 函数 Tcl_MethodIsType は手段が特定の型であるのか､もし型が合致すると(即ち非-NULL)､過手段 clientData を clientDataPtr により指された変数に代入して返す｡ 　　 Given a method, the entity that declared it can be found using Tcl_MethodDeclarerClass which returns the class that the method is attached to (or NULL if the method is not attached to any class) and Tcl_MethodDeclarerObject which returns the object that the method is attached to (or NULL if the method is not attached to an object). The name of the method can be retrieved with Tcl_MethodName and whether the method is exported is retrieved with Tcl_MethodIsPublic. The type of the method can also be introspected upon to a limited degree; the function Tcl_MethodIsType returns whether a method is of a particular type, assigning the per-method clientData to the variable pointed to by clientDataPtr if (that is non-NULL) if the type is matched.

#### 手段創生 METHOD CREATION

手段は Tcl_NewMethod と Tcl_NewInstanceMethod によって作成される､それはそれぞれ級と対象に接続した手段を作成する｡両方の場合､ nameObj 引数は作成する為の手段の名前を与える､ isPublic 引数は手段が最初に移送されるべきかを述べる､ methodTypePtr 引数は手段の実装を記述する(下の METHOD TYPES 節を参照されたい)又､ clientData 引数は何かの実装固有データを与える､それは呼ばれた時に手段の実装に渡される｡ Methods are created by Tcl_NewMethod and Tcl_NewInstanceMethod, which create a method attached to a class or an object respectively. In both cases, the nameObj argument gives the name of the method to create, the isPublic argument states whether the method should be exported initially, the methodTypePtr argument describes the implementation of the method (see the METHOD TYPES section below) and the clientData argument gives some implementation-specific data that is passed on to the implementation of the method when it is called.

Tcl_NewMethod への nameObj 引数が NULL の時､名前のない手段が作成される､それは構成譜と解除譜に使用される｡構成譜は Tcl_ClassSetConstructor 函数を使ってその級を使って実装されるべきもので､解除譜(それはどのような引数も要求されない)は､ Tcl_ClassSetDestructor 函数を使ってその級を使って実装されるべきものである｡名前のない手段は他の目的に使用するべきではなく､又名前の付いた手段は構成譜にも解除譜にも使うべきではない｡又註意すべきは､ NULL methodTypePtr は内部信号を提供する為に使われる又､依頼側の符号命令に使われるべきではない｡ 　　　　 When the nameObj argument to Tcl_NewMethod is NULL, an unnamed method is created, which is used for constructors and destructors. Constructors should be installed into their class using the Tcl_ClassSetConstructor function, and destructors (which must not require any arguments) should be installed into their class using the Tcl_ClassSetDestructor function. Unnamed methods should not be used for any other purpose, and named methods should not be used as either constructors or destructors. Also note that a NULL methodTypePtr is used to provide internal signaling, and should not be used in client code.

#### 手段呼出し文脈 METHOD CALL CONTEXTS

手段が呼出された時､手段呼出し文脈参照は実装函数の引数の一つとして渡される｡この文脈は呼出し側に関する情報を提供する為に調査できるが､手段が終了を呼んだ瞬間の後は保持できない｡ 　　 When a method is called, a method-call context reference is passed in as one of the arguments to the implementation function. This context can be inspected to provide information about the caller, but should not be retained beyond the moment when the method call terminates.

文脈から呼ばれている手段は Tcl_ObjectContextMethod を使って取出せる､又起動されるべき手段を惹き起こす対象は Tcl_ObjectContextObject により取出せる｡飛越されるべき引数の数は(譬えば､通常の手段呼出し中の､対象の名前と手段の名前) Tcl_ObjectContextSkippedArgs を使って読め､文脈は､ Tcl_ObjectContextIsFiltering を通して他の手段の為に篩として働いているかを報告できる｡ 　　　 The method that is being called can be retrieved from the context by using Tcl_ObjectContextMethod, and the object that caused the method to be invoked can be retrieved with Tcl_ObjectContextObject. The number of arguments that are to be skipped (e.g. the object name and method name in a normal method call) is read with Tcl_ObjectContextSkippedArgs, and the context can also report whether it is working as a filter for another method through Tcl_ObjectContextIsFiltering.

手段を実行中､手段実装は手段呼出し連鎖の段階の起動を選択するかもしれない､それは現在の手段実装の後に続く｡これ( next 命令の中核)は､ Tcl_ObjectContextInvokeNext を使って遂行される｡註意すべきは､この函数は next 命令とは異なり､呼出し枠棚を操作しない; もし手段実装が一つ或はそれ以上の余分の枠を棚の上に実装の一部として押込むと､ Tcl_ObjectContextInvokeNext 函数が実行されている間､棚からそのような枠を臨時に出現させることは責務である｡註意すべきは手段呼出し文脈はこの函数を実行中は削除さることはない｡ During the execution of a method, the method implementation may choose to invoke the stages of the method call chain that come after the current method implementation. This (the core of the next command) is done using Tcl_ObjectContextInvokeNext. Note that this function does not manipulate the call-frame stack, unlike the next command; if the method implementation has pushed one or more extra frames on the stack as part of its implementation, it is also responsible for temporarily popping those frames from the stack while the Tcl_ObjectContextInvokeNext function is executing. Note also that the method-call context is never deleted during the execution of this function.

### 手段の型 METHOD TYPES

手段の型は Tcl_MethodType 構造へのポインターによって記述される､それはこの様に定義される: 　　　　 The types of methods are described by a pointer to a Tcl_MethodType structure, which is defined as:

    typedef struct {
        int version;
        const char *name;
        Tcl_MethodCallProc *callProc;
        Tcl_MethodDeleteProc *deleteProc;
        Tcl_CloneProc *cloneProc;
    } Tcl_MethodType;

version 欄は構造の将来の拡張を許容し､常に TCL_OO_METHOD_VERSION_CURRENT に等価であると宣言されるべきである｡ name 欄は型に関して可読性を提供し､不都合修正の為に予約されている｡ 　　　 The version field allows for future expansion of the structure, and should always be declared equal to TCL_OO_METHOD_VERSION_CURRENT. The name field provides a human-readable name for the type, and is the value that is exposed via the info class methodtype and info object methodtype Tcl commands.

callProc 欄は手段が起動された時に呼ばれる函数を与える; 決して NULL であってはならない｡ The callProc field gives a function that is called when the method is invoked; it must never be NULL.

deleteProc 欄は特定の手段を削除する為に使われ､手段が置換え又は取去られる時に呼出される; もし欄が NULL, の場合手段の clientData は削除する為に特別に活動する必要はないことが仮定される｡ The deleteProc field gives a function that is used to delete a particular method, and is called when the method is replaced or removed; if the field is NULL, it is assumed that the method's clientData needs no special action to delete.

cloneProc 欄は手段の clientData の複写に使う函数(Tcl_CopyObjectInstance の一部として)か､ clientData は直接複写可能を指し示す NULL のどちらかである｡ 　　　 The cloneProc field is either a function that is used to copy a method's clientData (as part of Tcl_CopyObjectInstance) or NULL to indicate that the clientData can just be copied directly.

#### TCL_METHODCALLPROC FUNCTION SIGNATURE

手段が起動された時､この定義に合致する函数が呼出される｡ Functions matching this signature are called when the method is invoked.

    typedef int Tcl_MethodCallProc(
            ClientData clientData,
            Tcl_Interp *interp,
            Tcl_ObjectContext objectContext,
            int objc,
            Tcl_Obj *const *objv);

Tcl_MethodCallProc への clientData 引数は､手段が作成された時に与えられた値であり､ interp は､記述譜を実行し､手段の結果を置く場所と同じように､変数を利用する場所である､又 objc と objv 欄の手段に假引数の対象を与える｡手段の呼出し文脈は objectContext 引数を通して見付るかもしれず､ Tcl_MethodCallProc からの返り値はどれかの Tcl 返り値である(譬えば､ TCL_OK や TCL_ERROR)｡ The clientData argument to a Tcl_MethodCallProc is the value that was given when the method was created, the interp is a place in which to execute scripts and access variables as well as being where to put the result of the method, and the objc and objv fields give the parameter objects to the method. The calling context of the method can be discovered through the objectContext argument, and the return value from a Tcl_MethodCallProc is any Tcl return code (e.g. TCL_OK, TCL_ERROR).

#### TCL_METHODDELETEPROC FUNCTION SIGNATURE

この定義に合致する函数は手段が削除された時に､新しく作成されている手段経由で使用される､さもないと対象か級が除去される｡ Functions matching this signature are used when a method is deleted, whether through a new method being created or because the object or class is deleted.

    typedef void Tcl_MethodDeleteProc(
            ClientData clientData);

Tcl_MethodDeleteProc への clientData 引数は手段が作成された時に Tcl_NewMethod か Tcl_NewInstanceMethod への clientData 引数に渡された値に等しい｡ 　　　　 The clientData argument to a Tcl_MethodDeleteProc will be the same as the value passed to the clientData argument to Tcl_NewMethod or Tcl_NewInstanceMethod when the method was created.

#### TCL_CLONEPROC FUNCTION SIGNATURE

この定義に合致する函数は手段か級が Tcl_CopyObjectInstance (又は oo::copy)を使って複写された時に手段を複写するために使われる｡ Functions matching this signature are used to copy a method when the object or class is copied using Tcl_CopyObjectInstance (or oo::copy).

    typedef int Tcl_CloneProc(
            Tcl_Interp *interp,
            ClientData oldClientData,
            ClientData *newClientDataPtr);

interp 引数は､対象を複製する試みが失敗し､その複製手続函数も TCL_ERROR を返す必要がある場合に､不都合伝言文を書く為の場所を与える; それ以外の場合は TCL_OK を返すことになる｡ Tcl_CloneProc への oldClientData 欄はそこから複写された手段から値が与えられる､又 newClientDataPtr 欄は複写される手段に関する値を書込む変数を指す事になる｡ The interp argument gives a place to write an error message when the attempt to clone the object is to fail, in which case the clone procedure must also return TCL_ERROR; it should return TCL_OK otherwise. The oldClientData field to a Tcl_CloneProc gives the value from the method being copied from, and the newClientDataPtr field will point to a variable in which to write the value for the method being copied to.

### SEE ALSO

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

### KEYWORDS

constructor, method, object
Copyright © 2007 Donal K. Fellows