Por ejemplo, asignar no está definido en ningún lugar de este módulo. También puede ver que es use
s Phoenix.Channel
, pero eso no tiene assign
definido en cualquier lugar tampoco. Resulta assign
se define en Phoenix.Socket, y la única razón por la que sé que es porque hay una macro definida en Phoenix.Socket
llamado canal, que es lo que usa Phoenix.LiveReload.Channel
. Y al parecer, de alguna manera, eso da Phoenix.LiveReload.Channel
el assign
función.
¿Cómo se supone que debes rastrear esa lógica distinta de grep
. Como si solo estuviera mirando Phoenix.LiveReload.Channel
como sabría donde assign
¿vino de?
Respuestas
2 para la respuesta № 1Esta fue la respuesta del creador, José Valim:
Las importaciones y alias de Elixir son léxicos, lo quesignifica que cualquier cosa que aparezca en un módulo que no haya definido debe haberse importado explícitamente en el código. Por lo tanto, buscar el uso de Mod o importar Mod es el camino a seguir para encontrar de dónde proviene una función. La única excepción a esta regla es el módulo de Kernel que se importa de forma predeterminada.