首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能在IronRuby中将X::Y::Z转换为X::Y::Z

不能在IronRuby中将X::Y::Z转换为X::Y::Z
EN

Stack Overflow用户
提问于 2013-09-12 21:34:30
回答 1查看 119关注 0票数 1

我在和IronRuby玩。我制作了一个互动小说游戏的存根。在C#中,我有一个Command类,它表示一个命令(名称、文本类型和动作委托):

公共委托字符串CommandAction (字符串目标、字符串工具、字符串介词);私有CommandAction动作;

代码语言:javascript
复制
    public Command(string name, string[] verbs, CommandAction action)
    {
        this.Name = name;
        this.Verbs = verbs;
        this.action = action;
    }

我在C#中创建命令,没有任何问题。以下是最简单的:

代码语言:javascript
复制
this.knownCommands.Add(new Command("Quit", new string[] { "q", "quit" }, (t, i, p) =>
{
    isRunning = false;
    return "Bye!";
}));

(现在不要担心这三个参数,它们都是字符串。)

我想创建一个命令并将它添加到我的IEnumerable<Command>列表中。下面是Ruby代码:

代码语言:javascript
复制
def to_clr_string_array(list)
    System::Array[System::String].new(list.map { |s| s.to_s.to_clr_string })
end

require 'Meltdown.Core.dll'
include Meltdown::Core

Command.new("Ruby Command", to_clr_string_array(['rb']), Proc.new { |target, preposition, instrument|
    puts "Command invoked with #{target}, #{instrument}, and #{preposition}"
})

(to_clr_string_array是转换列表类型所必需的。)当我试图实例化它时,我会得到一个类型转换错误:Can't Convert Meltdown::Core::Command into Meltdown::Core::Command。我是这样做的:

代码语言:javascript
复制
var engine = Ruby.CreateEngine();
var scope = Engine.Runtime.CreateScope();
string contents = System.IO.File.ReadAllText(scriptPath);
var command = engine.Execute<Command>(contents, scope);

第三行失败。我尝试了this answer to a similar problem,并将数组更改为对象列表。而不是实例化失败,当我执行命令,我得到一个错误,类型是不同的。

在这个详细的错误中,它提到了与我链接的答案中的问题完全相同的错误:类型仅在它们的上下文中不同(DefaultLoadNeither)。

不幸的是,这对我没有帮助,我仍然不知道该怎么做。我也尝试将命令列表传递给Ruby,但是我得到了一个类型不匹配的错误,它不能进入我的列表中。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-16 13:25:26

我把这个问题发到铁心邮件列表上了。布兰登·多特回答说,并建议我补充:

load_assembly 'SharedClasses'

这解决了问题。就.NET而言,现在的类型是相同的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18774700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档