genserver for elixir named

for - ¿Cómo puedo definir funciones nombradas en la consola Elixir sin obtener**(ArgumentError) no puedo invocar def/2 módulo externo?



list max elixir (2)

Podrías definir el módulo en iex. Copiar y pegar funciona bien:

iex(1)> defmodule Expand do ...(1)> def transform(myvar) do ...(1)> 8 * myvar + 3; ...(1)> end ...(1)> end iex(2)> Expand.transform(12) 99 iex(3)> defmodule Expand do ...(3)> def transform(myvar) do ...(3)> 3 * myvar + 5 ...(3)> end ...(3)> end iex:3: warning: redefining module Expand iex(4)> Expand.transform(12) 41

Puedo definir funciones nombradas en módulos muy bien, pero todavía no tengo el truco para usar en las consolas iex> o ex>.

Sigo recibiendo el siguiente error cuando intento ejecutar el comando def:

(ArgumentError) cannot invoke def/2 outside module

pprime.exs

IO.puts "initial division test" defmodule Expand do def transform(myvar) do 8 * myvar + 3; end end div2 = fn inputnum -> [:a, inputnum/2.0, inputnum/3, inputnum/5.0, inputnum/7] end output = div2.(20.1)

Puedo ejecutar esto con elixir muy bien, de la siguiente manera:

$ elixir pprime.exs

Sin embargo, en la consola, parece que no puedo hacer nada de eso:

Erlang/OTP 17 [erts-6.3] [source] [64-bit] [async-threads:10] [kernel-poll:false] Interactive Elixir (1.0.2) - press Ctrl+C to exit (type h() ENTER for help) iex(1)> def transform(myvar) do 8 * myvar + 3; end ** (ArgumentError) cannot invoke def/2 outside module (elixir) lib/kernel.ex:3556: Kernel.assert_module_scope/3 (elixir) lib/kernel.ex:2816: Kernel.define/4 (elixir) expanding macro: Kernel.def/2 (elixir) iex:1: :elixir_compiler.__FILE__/2

¿Cómo puedo definir una función nombrada en la consola Elixir?

¿Es esto posible?

¿Necesito crear un módulo especial para usar en la consola Elixir?


Respuesta corta: No puedes.

Respuesta larga: todo el código en Elixir existe dentro de los módulos, ya que muchas características de Elixir, como el intercambio de código en caliente, se basan en tener módulos como contenedor de código. Es por eso que no puede definir funciones fuera de los módulos (no se puede agregar un espacio de nombres global y mutable).