移動先: 概要 戻り値 MEL の例

概要

source string

source は「元に戻す」が不可能「照会」が不可能「編集」が不可能です。

source ディレクティブを使用すると、ファイルに格納されているスクリプトの内容が MEL によってコンパイルと実行されます。

source ディレクティブに渡す引数は、フル パスでもスクリプトの名前だけでも構いません。スクリプト名だけを指定した場合、MEL は MEL の検索パスでその名前を検索します。名前またはパスに接尾辞が付いていない場合は、検索前に ".mel" が付加されます。フル パスを指定する場合は、パスを引用符で囲む必要があります。

MEL の上級ユーザの場合、"source" は MEL コマンドではないことを理解することが重要です。source は、コンパイルと実行の対象をインタプリタに伝えるディレクティブです。スクリプト内に "source" ディレクティブがある場合、読み込まれたすべてのファイルがスクリプトとして一度にコンパイルされます。これは、ファイル内で source ディレクティブが使用されている位置にかかわらず実行されます。 また、"source" ディレクティブを含むスクリプトが再実行される場合、読み込まれたファイルは再コンパイルされません。この動作は、「eval」ステートメントに source 指示を入れることでオーバーライドすることができます。

MEL スキャナはリエントラントでないことに注意してください。これは、source するスクリプトは、その他のスクリプトを一切 source していてはいけないということです。これを守らないとエラーが発生することがあります。Python スクリプトには、このような制限はありません。

上記のことは、スクリプトのコンパイルにのみ適用されます。読み込まれたスクリプトが実際に実行されるのは、コード内の source ディレクティブの位置です。これがどのように動作するかについては、下記の例を参照してください。

戻り値

なし

MEL の例

// There is a script that is shipped with Maya called "dirname.mel".  You
// do not have to source it to use, as that will be done automatically the
// first time you call it.  But, we will source it as an example of how to
// use the source directive on a script that is in the search path.
//

// You can provide the ".mel" extension if you like
//
source "dirname.mel";

// Or, you can leave it out
//
source "dirname";

dirname( "D:/Work/file.txt" );
// Result: D:/Work //

// Here's a utility proc that we'll use for the next examples
//
global proc writeFile( string $filename, string $contents ) {
    $fileId=`fopen $filename "w"`;
    fprint $fileId ( $contents );
    fclose $fileId;
}

// The following examples require you to have write access to the current
// directory.

// Create a file script file
//
writeFile( "./sourceTest.mel", "print \"sourceTest.mel was executed\\n\";");


// Now we can source the local script by giving a relative or full path.
// This MUST be executed separately from the statement above (we will see
// why a bit later).
//
source "./sourceTest.mel";
// sourceTest.mel was executed

// Or, we can leave off the .mel
//
source "./sourceTest";
// sourceTest.mel was executed


// As was explained above, the source statement is an interpreter directive
// and not a command.  This example should illustrate that.
//
// Execute each block below separately in the script editor!
//

// Block 1.  Create a script to source.
//
writeFile( "./sourceTest.mel", "print \"sourceTest.mel was executed\\n\";");

// Block 2. Demonstrate that the script is only compiled once, but is executed
// every time that the source "directive" is reached.  The script will be
// changed between the source calls, but the changes will not be recognised.
//
print( "Before first source\n" );
source "./sourceTest";
// sourceTest.mel was executed
print( "Between sources\n" );
writeFile( "./sourceTest.mel", "print \"sourceTest.mel has been changed\\n\";");
source "./sourceTest.mel";
// sourceTest.mel was executed
print( "After second source\n" );

// Block 3.  Put the first script back
//
writeFile( "./sourceTest.mel", "print \"sourceTest.mel was executed\\n\";");

// Block 4. Demonstrate how make source recompile each time using an "eval"
// statement
//
print( "Before first source\n" );
eval( "source \"./sourceTest\"" );
// sourceTest.mel was executed
print( "Between sources\n" );
writeFile( "./sourceTest.mel", "print \"sourceTest.mel has been changed\\n\";");
eval( "source \"./sourceTest\"");
// sourceTest.mel has been changed
print( "After second source\n" );