我有一个C#程序来执行IronRuby脚本。但是在此之前,我想先编译文件,看看是否有任何错误。但是似乎ErrorListener不能很好地工作。我的代码有什么问题吗?
class Program
{
static void Main(string[] args)
{
try
{
ScriptEngine engine = null;
engine = Ruby.CreateEngine();
ScriptSource sc = engine.CreateScriptSourceFromFile("MainForm.rb");
ErrorListener errLis = new MyErrorListener();
sc.Compile(errLis);
}
}
class MyErrorListener : ErrorListener
{
public override void ErrorReported(ScriptSource source, string message, Microsoft.Scripting.SourceSpan span, int errorCode, Microsoft.Scripting.Severity severity)
{
Console.WriteLine(message);
}
}
Ruby文件:
require "mscorlib"
require "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
require "System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
include System::Windows::Forms
dfasdf error here
class MainForm < Form
def initialize()
self.InitializeComponent()
end
def InitializeComponent()
#
# MainForm
#
self.Name = "MainForm"
self.Text = "HelloRubyWin"
end
end
最佳答案
您尝试做的事情似乎实际上没有用。不过,不确定是否是错误。
要解决此问题,只需在try / catch块中执行代码,然后寻找MissingMethodExecption。请注意,如果语法错误在方法内部,这也将无济于事,因为IronRuby(或任何其他动态语言)在“嵌套”代码真正执行之前不会对其执行任何操作。
因此,总的来说,我认为您不会从尝试中获得很多价值。
尝试/捕获代码示例:
ScriptEngine engine = null;
engine = Ruby.CreateEngine(x => { x.ExceptionDetail = true; });
ScriptSource sc = engine.CreateScriptSourceFromFile("MainForm.rb");
ErrorListener errLis = new MyErrorListener();
sc.Compile(errLis);
try
{
dynamic d = sc.Execute();
}
catch (MissingMethodException e)
{
Console.WriteLine("Syntax error!");
}
关于c# - 如何为IronRuby使用ErrorListener,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9324536/