J'essaye d'écrire un client CLI dans Elixir pour une API afin que je puisse me connecter au système d'API, aller chercher les données dont j'ai besoin pour mon calcul, puis me déconnecter. J'ai défini une structure Packet.Login supposée être ma structure de données interne avec laquelle je me retrouve après avoir analysé le JSON reçu. J'utilise Poison pour analyser le JSON. Le problème est qu'il semble que, parce que l'API retourne des propriétés capitalisées, je ne peux pas les faire correspondre lors de l'impression ou de l'analyse, car Poison retournera une carte avec ces touches majuscules. Le problème est qu'il me semble impossible d'utiliser l'alias comme ça. Si j'essaie d'utiliser une autre syntaxe,Elixir - Clés en majuscules dans les structures
packet[:Token]
cela ne fonctionne toujours pas et à la place me donne une erreur. Mais cette fois sur Packet.Login ne pas implémenter le comportement d'accès. Je peux comprendre cette partie, mais pas le premier problème. Et j'essaie de garder le code stupide simple.
defmodule Packet.Login do
defstruct [:Data, :Token]
end
defimpl String.Chars, for: Packet.Login do
def to_string(packet) do
"Packet:\n---Token:\t\t#{packet.Token}\n---Data:\t#{packet.Data}"
end
end
loginPacket = Poison.decode!(json, as: %Packet.Login{})
IO.puts "#{loginPacket}"
Lorsque vous essayez de compiler ce qui précède, je reçois ceci:
** (CompileError) lib/packet.ex:31: invalid alias: "packet.Token". If you wanted to define an alias, an alias must expand to an atom at compile time but it did not, you may use Module.concat/2 to build it at runtime. If instead you wanted to invoke a function or access a field, wrap the function or field name in double quotes
(elixir) expanding macro: Kernel.to_string/1
est-il un moyen pour moi de résoudre ce problème en quelque sorte? J'ai pensé à analyser la carte et à dé-capitaliser tous les champs en premier, mais je préférerais ne pas le faire. Pourquoi ne puis-je pas avoir des majuscules pour un struct?
Il semble que je puisse cependant, tant que je n'essaie pas de les utiliser.
Essayez 'paquet « jeton »' et 'paquets « de données »'. . – Dogbert
Wow. Oui, ça a marché. Alors, est-ce que la clé est une chaîne? Je veux une explication pour savoir pourquoi c'est nécessaire. – Simon
@Dogbert Faire et répondre avec une explication de pourquoi donc je peux accepter la réponse (Étant donné que l'explication est assez explicite) :) – Simon