Какой объект .Net соответствует хешу IronRuby - PullRequest
1 голос
/ 04 февраля 2011

Я хочу вызвать метод C # из скрипта IronRuby, который приводит к хэшу Ruby.Я попробовал словарь, но он остался как есть.

public Dictionary<string, string> GetHash()
{
    Dictionary<string, string> hash = new Dictionary<string, string>();
    hash.Add("a", "1");
    hash.Add("b", "2");
    return hash;
}

Я бы хотел использовать его в своем скрипте IronRuby в качестве хеша

myHash = scopeObj.GetHash()
myHash.each{ |k,v|
    print("#{k}=#{v}")
}

Вот результаты:

 [a, 1]=
 [b, 2]=

1 Ответ

1 голос
/ 04 февраля 2011

Это не работает так, поскольку элементы в словаре .NET являются экземплярами KeyValuePair.

Вы можете легко обойти эту проблему с помощью одной строки кода преобразования:

d = scopeObj.get_hash
h = Hash[*d.collect { |x| [x.key,x.value] }.flatten]
h.each { |k,v| puts k,v }
...