¿Qué objeto ?Net corresponde a un hash de Ironruby
Pregunta
Quiero llamar a un método C# de un script de Ironruby que resulta en un hash rubí. Probé el diccionario, pero eso se queda como está.
public Dictionary<string, string> GetHash()
{
Dictionary<string, string> hash = new Dictionary<string, string>();
hash.Add("a", "1");
hash.Add("b", "2");
return hash;
}
Me gustaría poder usarlo en mi guión de Ironruby como un hash
myHash = scopeObj.GetHash()
myHash.each{ |k,v|
print("#{k}=#{v}")
}
Cuyos resultados son:
[a, 1]=
[b, 2]=
Solución
No funciona así, ya que los elementos en un diccionario .NET son instancias de KeyValuePair.
Puede solucionar eso con bastante facilidad, con una sola línea de código de conversión:
d = scopeObj.get_hash
h = Hash[*d.collect { |x| [x.key,x.value] }.flatten]
h.each { |k,v| puts k,v }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow