スクリプト変数が関数に渡されていない場合、関数はどのようにしてスクリプト変数にアクセスできるのでしょうか?スクリプト変数を使用する、入力パラメーターのない関数があります。
他のプログラミング言語に関する私の理解によれば、関数は関数に渡された変数、または関数内で定義された変数にのみアクセスできるべきです。
以下のスクリプトを実行すると、14 が返されます。 なぜこれが機能するのでしょうか? 関数で使用される変数をより排他的にする方法はありますか?
scriptVar = 14;
myFunction = function({},{default local},
functionVar = scriptVar;
return(functionVar);
);
returnVar = myFunction();ご協力いただきありがとうございます。
高度な統計モデリング自動化とスクリプト作成データアクセス実験計画法品質およびプロセスエンジニアリングRe: スクリプト変数が関数に渡されていない場合、関数はどのようにしてスクリプト変数にアクセスできますか?ああ、それはもう明らかです。それは私がどれくらいの頻度で行っているかを示していると思いますしないでください名前のデフォルトは here(1) を使用します...
Re: スクリプト変数が関数に渡されていない場合、関数はどのようにしてスクリプト変数にアクセスできますか?私の間違いを見つけてくれてありがとう。 それを言おうと思ったのですが変数はデフォルトでグローバルです。
Here 名前空間を呼び出したときに、状況が変わりました。 実際のグローバル名前空間を示すためにスクリプトを変更しました。
// Names Default To Here( 1 );
Delete Symbols();
fn1 = Function( {x},
fn2 = Function( {x},
2*x;
);
5*fn2(x);
);
Show Symbols();
y = fn1(10);
Show( y );
Show Symbols();
ログには次のことが表示されます。
// Global
fn1 = Function( {x},
fn2 = Function( {x}, 2 * x );
5 * fn2( x );
);
// 1 Global
y = 100;
// Global
fn1 = Function( {x},
fn2 = Function( {x}, 2 * x );
5 * fn2( x );
);
fn2 = Function( {x}, 2 * x );
y = 100;
// 3 Global
したがって、デフォルトでは fn2 もグローバル変数になります。 必要に応じて、例外であるローカル変数を優先することを示す必要があります。
Re: スクリプト変数が関数に渡されていない場合、関数はどのようにしてスクリプト変数にアクセスできますか?関数内の変数のスコープを制御するには、{default local} 宣言を使用します。ただし、関数の外にある変数にはグローバル スコープがあります。これが、関数から「scriptvar」が認識された理由です。この動作を防ぐために、「names default to here(1)」という宣言を使用します。
Re: スクリプト変数が関数に渡されていない場合、関数はどのようにしてスクリプト変数にアクセスできますか?Kelly の質問が理解できれば、目的は、グローバル変数を不用意に使用することを避けることであり、それが望ましい動作であるということではありません。
関数がデフォルトでグローバルであるとはどういう意味ですか?私の理解では、関数はそれを含む名前空間が存在する限り存続するため、以下の例では、fn1 は here 名前空間 (または、名前がない場合はデフォルトで here(1) にグローバル) に格納されますが、fn2 は fn1 が終了するとすぐに消えてしまいます。実行中であるため、fn1 が実行されるたびに再作成されます。
names default to here(1);
delete symbols();
fn1 = function({},
fn2 = function({},
1
);
);
show symbols();
/*
Returns:
// Here
fn1 = Function( {},
fn2 = Function( {}, 1 )
);
// 1 Here<BR />*/
Re: スクリプト変数が関数に渡されていない場合、関数はどのようにしてスクリプト変数にアクセスできますか?ありがとう!
代替として使用できる説明と例に感謝します。Re: スクリプト変数が関数に渡されていない場合、関数はどのようにしてスクリプト変数にアクセスできますか?変数はデフォルトではグローバルであり、スクリプトの実行後も保持されます。
関数定義の式でグローバル変数を使用するのはなぜですか? 値が必要な場合は、関数パラメーターを使用し、関数を呼び出すときに引数を渡します。
Re: スクリプト変数が関数に渡されていない場合、関数はどのようにしてスクリプト変数にアクセスできますか?この関数は、まず独自の名前空間を調べてシンボル/変数を解決します。次に、変数が見つからない場合は、親の名前空間を徐々に調べて値を見つけてから、欠損値を返します。変数が関数内で作成された場合、コードの残りの部分ではアクセスできないことに注意してください。これがエラーの一般的な原因であることに同意します。
local 関数を使用すると、ローカル変数を確実に操作できます。これは、ネストされた for ループで誤って使用される可能性がある「i」などの一般的な反復変数に役立つことがよくあります。 以下に例を示します。
scriptVar = 14;
myFunction = function({},{default local},
local({scriptVar},
functionVar = scriptVar;
return(functionVar);
);
);
returnVar = myFunction(); //Returns empty関数内でローカル変数を宣言するのは一般的な使用例であるため、この動作は「function」関数に埋め込まれています。
scriptVar = 14;
myFunction = function({}, {scriptVar = .},
functionVar = scriptVar;
return(functionVar);
);
returnVar = myFunction();