gpt4 book ai didi

elixir - 如何在 Elixir 控制台中定义命名函数而不获取 ** (ArgumentError) cannot call def/2 outside module?

转载 作者:行者123 更新时间:2023-12-03 11:35:31 27 4
gpt4 key购买 nike

我可以很好地在模块中定义命名函数,但我还没有掌握在 iex> 或 ex> 控制台中使用它的窍门。

当我尝试运行 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)

我可以用 elixir 很好地运行它,如下所示:
$ elixir pprime.exs

但是,在控制台中,我似乎无法做任何这样的事情:
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

如何在 Elixir 控制台中定义命名函数?

这甚至可能吗?

我是否需要创建一个特殊模块以在 Elixir 控制台中使用?

最佳答案

您可以在 iex 中定义模块。复制和粘贴工作得很好:

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

关于elixir - 如何在 Elixir 控制台中定义命名函数而不获取 ** (ArgumentError) cannot call def/2 outside module?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28443053/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com