Elixir la langue elle-même a le module suivant avec des méthodes telles que:Comment puis-je "injecter" de nouvelles fonctions dans un module existant dans le langage Elixir lui-même?
defmodule Calendar.ISO do
@spec leap_year?(year) :: boolean()
@impl true
def leap_year?(year) when is_integer(year) and year >= 0 do
rem(year, 4) === 0 and (rem(year, 100) > 0 or rem(year, 400) === 0)
end
end
Disons que je vous écris mon propre module dans mon propre jouet d'application Elixir/Phoenix et je décide que je voulais ajouter une autre méthode Calendar.ISO appelé "frog_day" qui renvoie la chaîne "frog". Évidemment, je ne veux pas faire un PR pour "frog_day" dans le référentiel du langage Elixir.
Comment est-ce que je pourrais injecter ceci dans le module Calendar.ISO pour l'utiliser dans mon app jouet? Ou est-ce même possible?
Note: Je me rends compte que cela peut sembler être un "patch de singe" mais j'ai un cas d'utilisation spécifique pour cela.
Vous aurez besoin de créer un nouveau module (ie MyCalendar) qui étend Calendar.ISO. Jetez un oeil à [cette question] (https://stackoverflow.com/questions/35302208/how-do-you-extend-inherit-an-elixir-module) qui je pense est proche de ce que vous cherchez. – matov
Le correctif de singe est explicitement interdit dans Elixir. –