gpt4 book ai didi

c# - IronRuby,如何将参数变量从 C# 传递到 Ruby?

转载 作者:太空宇宙 更新时间:2023-11-03 16:53:59 24 4
gpt4 key购买 nike

首先,这是我在 SharpDevelop 项目的 bin/debug 文件夹中设置的 ruby​​ 文件的代码:

class Run_Marshal

def initialize(id, name)
@list = []
@list[0] = Employee_Info.new(id, name)

File.open("employee_sheet.es", "wb") {|f| Marshal::dump(@list, f)}
end


end

class Employee_Info

attr_accessor :id
attr_accessor :name

def initialize(id, name)
@id = id
@name = name
end

end

上面的代码允许将 Employee_Info 对象序列化到一个文件中。请注意,我已经安装了 IronRuby。

下面是我用来执行 ruby​​ 代码的 C# 代码。将参数从 C# 传递到我的新 Ruby 对象很重要。

void Btn_exportClick(object sender, EventArgs e)
{
var engine = Ruby.CreateEngine();
engine.ExecuteFile("Ruby_Classes.rb");
dynamic ruby = engine.Runtime.Globals;

int id = 0;
string name = "John Coles";

dynamic foo = ruby.Run_Marshal.@new(id, name);
}

最后,这是在另一个不同的 ruby​​ 环境中设置的另一个 ruby​​ 项目的 ruby​​ 代码。

@my_foo = File.open("Data/employee_sheet.es", "rb") {|f| Marshal.load(f)}
@name = @my_foo[0].name

当然,我还确保在其他环境中提供 Employee_Info 类。

class Employee_Info

attr_accessor :id
attr_accessor :name

def initialize(id, name)
@id = id
@name = name
end

end

代码从我的 SharpDevelop 项目中完美运行,它在 bin/debug 文件夹中输出一个序列化(编码)文件。然后,我将该序列化文件放入另一个 ruby​​ 环境的另一个文件夹中。

当我运行其他环境时,程序崩溃并产生此错误:“ArgumentError occured.Undefined class/module System::”

我做了一些更多的测试,我意识到当我将上面的代码更改为这个时(见带有三重'*'的行:

class Run_Marshal

def initialize(id, name)
@list = []
@list[0] = Employee_Info.new(0, "Beettlejuice") // ***

File.open("employee_sheet.es", "wb") {|f| Marshal::dump(@list, f)}
end


end

现在打开序列化文件没有任何问题。所以我怀疑问题是由于从 C# 代码传递给 ruby​​ 代码的参数引起的。我确实需要为更复杂的任务传递 c# 变量,但到目前为止我还不知道如何让它工作。我希望你们能解释什么是错的。那么如何将参数变量从 C# 传递到 Ruby?

谢谢!

最佳答案

我无法解释如何以及为什么,但我是这样解决问题的:

class Run_Marshal

def initialize(id, name)
@list = []
@list[0] = Employee_Info.new(id, name.to_s)

File.open("employee_sheet.es", "wb") {|f| Marshal::dump(@list, f)}
end
end

我将 to_s 添加到传递的字符串中。显然,Ruby 无法将参数识别为字符串。

关于c# - IronRuby,如何将参数变量从 C# 传递到 Ruby?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14552273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com