Welcome to MSDN Blogs Sign in | Join | Help
[DLR]DLRを使ったホスティング2(変数)

前回は、ScriptEngineクラスかScriptクラスを使ったスクリプトの実行方法を説明しました。今回は、変数を外部からどのように引き渡すかを説明します。最初にEngineクラスを使った方法を以下にしめします。

ScriptEngine eng = ScriptDomainManager.CurrentManager.GetEngine("py");
sc = ScriptDomainManager.CurrentManager.CreateModule("__main__");
eng.SetVariable(sc, "a", 10);
SourceUnit su = eng.CreateScriptSourceFromString("スクリプトコード");
eng.Execute(su, sc);
object ret = eng.GetVariable(sc, "a);

SetVariableメソッドで変数aの値を10設定してから、Executeメソッドでスクリプトを実行してから、GetVariableメソッドで変数の値を取得しています。この時に重要なのが、スクリプトスコープを合わせるということです。前回、説明したようにスクリプトスコープの単位で変数やオブジェクトへの参照が管理されるからです。前回に使用したExecuteProgramメソッドでは、スクリプトスコープを指定していませんでした。これはスクリプトエンジンが、一時的なスクリプトスコープを決めるからです。この時に使用されたスクリプトスコープを取得するには、スクリプトエンジンのGetScope(su)メソッドを使用します。
 次にScriptクラスを使った変数の設定方法を以下に示します。
Script.SetVariable("a", 10);
Script.Execute("スクリプトコード", "py");
object ret = GetVariable("a");


ScriptEngineクラスを使用するよりも短いコードになっています。この理由は、スクリプトスコープが決め打ちで利用されるためです。このためスクリプトスコープを使った、スコープの分離を行うことができないのがScriptクラスの特徴になります。結果を返すスクリプトを実行する場合は、ExecuteメソッドではなくEvaluateメソッドを使用してください。

 もしスクリプトスコープを使用するのであれば、スクリプトスコープのSetVariableメソッドとLookupVariableメソッドを使った方が良いかも知れません。

Posted: Friday, January 11, 2008 6:21 PM by shozoa
Filed under: , , ,

Comments

荒井省三のBlog said:

前回はIronPython 2.0 A8に含まれるDLRを使って、独自言語をホスティングするコンソールのみを作成しました。これから独自言語を定義していくのですが、その前にA6以前とA7以降のホスティングの変更点を説明します。

# February 2, 2008 8:15 PM

Noticias externas said:

前回はIronPython 2.0 A8に含まれるDLRを使って、独自言語をホスティングするコンソールのみを作成しました。これから独自言語を定義していくのですが、その前にA6以前とA7以降のホスティングの変更点を説明します

# February 2, 2008 8:48 PM
Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker